
今回は英単語リストのテキストデータを元にして、Ankiデッキを高速で作成する方法について触れます。
英語学習者において覚えたい英単語リストをGoogleスプレッドシートに書き込んで管理している人は一定数いると思います。
これ、いちいち意味を調べにオンライン辞書を見に行くのは面倒ですよね・・・。


それを今回はGAS(Google Apps Script)というGoogleスプレッドシートにあるプログラムを使用することにより1分につき100単語の「発音」「Weblioレベル」「意味」が取得できるようになります。
完成イメージは次ですね👇。
Googleスプレッドシートにある英単語から
— リン@英語学習×科学 (@eiko_eigo) March 26, 2022
☑️発音
☑️Weblioレベル
☑️意味
を取得するツールが実装できました!😆✨
これでAnki用のデッキ作成も楽になると思います😉
ツールの使い方は後日Blogで公開させていただきますね⏫ pic.twitter.com/OvN5erOQo8
それでは「Googleスプレッドシートを使ったAnkiデッキ高速作成法」と題して始めます。
なお、「極限の英単語」「終極の英単語」をCSVに変換する方法も別記事で解説していますので興味がある方はご覧ください。
この記事です!
なお今回は参考文献はありません。
ただ、この記事が役に立ったと感じて次の英単語帳が欲しいと感じた方は感謝の購入をお願いします🙇。

Amazon

Amazon

Amazon

Amazon

Amazon

Amazon

Amazon

Amazon

Amazon
Googleスプレッドシートを使ったAnkiデッキ高速作成法(免責事項)

免責事項は次になります。
このページ掲載されている方法は正確性について万全を期していますが、当ブログの管理人はこのページの情報を用いて行う一切の結果について、何らの責任を負うものではありません。当ページの情報に起因して利用者に生じた損害につき、当ブログの管理人は責任を負いかねますので了承ください。
過度にプログラム実行するとWeblioサイトの業務妨害にもなり得るので、節度をもったプログラム実行をしてください(1日100個単語以内を目安にしていただけるとありがたいです)。
Googleスプレッドシートを使ったAnkiデッキ高速作成法(必要なもの)

Ankiデッキ作成にあたり、次のものが必要になります。
PC(Win、Mac問いません)環境
Googleのメインアカウント(※メインアカウントでないとGAS(プログラム)の実行ができません)
インターネット接続環境
Googleスプレッドシートを使ったAnkiデッキ高速作成法(実行)

今回のGASのプログラム、免責事項でも触れましたが、1日100単語以内の取得を目安にしていただきたいです。
理由はWeblioというサイトを利用するためで、過度に使用するとWeblioサイトの業務妨害になり得るからです。
再度、免責事項を貼っておきますね。
過度にプログラム実行するとWeblioサイトの業務妨害にもなり得るので、節度をもったプログラム実行をしてください(1日100個単語以内を目安にしていただけるとありがたいです)。
それでは手順を説明してきます。
ステップ1・Googleスプレッドシートを用意する

メインアカウントでGoogleにログインしGoogleドライブを開きます(※メインアカウントでないとGAS(プログラム)の実行ができません)。
Googleスプレッドシートを新規作成するために、「新規」ボタンをクリックします。

「Googleスプレッドシート」をクリックします。

Googleスプレッドシートを開きました。

スプレッドシート名を分かりやすいものにしてください(下図では、「英単語リスト」)。

英単語をA列に貼り付けてください。

ステップ2・GASを貼り付ける

「スクリプトエディタ」をクリックします。

なお、メインアカウント以外でログインした状態だと下図の画面になります。
もしこうなったら、すべてのアカウントからログアウトして、再度ログインしてください。

スクリプトエディタを開きました。

プロジェクト名を分かりやすい名前にします(下図だと「Weblio英単語情報取得プログラム」)。
「Ctrl + S」(Macの場合 「Command + S」)でプロジェクトを保存してください。

次のコードを全てコピーしてください。
//設定行 2行目から7行目は必要に応じて設定値を変えてください
const startRow = 1;//読み込み開始行
const endRow = 50;//読み込み終了行、書き込みがある最終行にするなら0にすること
const wordCol = 1;//単語がある列
const phoneticCol = 2;//発音記号がある列、不要なら0にすること
const levelCol = 3;//Weblio学習レベルがある列、不要なら0にすること
const meaningCol = 4;//意味がある列、不要なら0にすること
//設定行終わり
//Constant
const basicUrl = "https://ejje.weblio.jp/content/";
const limitRow = 500;
//End of Constant
function myFunction() {
if(!isConstProper()) return;
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = (endRow == 0)?sheet.getLastRow():endRow;
if(!isWordListLengthProper(startRow,lastRow)) return;
let wordList = sheet.getRange(startRow,wordCol,lastRow - startRow + 1).getValues();
let wordLen = wordList.length;
writeGss(sheet,wordList,wordLen);
console.log("全処理が終了しました。")
}
function isConstProper(){
let consts = [startRow,endRow,wordCol,phoneticCol,levelCol,meaningCol];
for(let i in consts){
if(!isFinite(consts[i])){
console.log("2-7行目の定数で数字でない値が指定されています。");
return false;
}
if(!Number.isInteger(consts[i]) || consts[i]<0 || consts[i]>65535){
console.log("2-7行目の定数で不適切な数字が指定されています。");
return false;
}
if(endRow != 0 && startRow > endRow){
console.log("「読み込み開始行」が「読み込み終了行」よりも大きくなっています。");
return false;
}
}
return true;
}
function isWordListLengthProper(start,end){
if(end - start > limitRow){
console.log("「読み込み開始行」と「読み込み終了行」間の行数が" + limitRow + "行を超えています。");
return false;
}
return true;
}
function writeGss(sheet,list,len){
for(let i=1;i<=len;i++){
let word = list[i-1].toString().replace(/\s/g,"+");
let html = getHtml(word);
let phonetic = getPhonetic(html);
let level = getLevel(html);
let meaning = getMeaning(html);
setPhonetic(sheet,startRow + i - 1,phoneticCol,phonetic);
setLevel(sheet,startRow + i - 1,levelCol,level);
setMeaning(sheet,startRow + i - 1,meaningCol,meaning)
}
}
function getHtml(word){
if(word=="" || word==null) return "";
let targetUrl = basicUrl + word;
return UrlFetchApp.fetch(targetUrl).getContentText().replace(/\n/g,"");
}
function getPhonetic(html){
if(html=="" || html==null) return "";
if(html.match(/<span class=phoneticEjjeDesc>(.*?)<\/span>/g) == null) return "";
if(html.match(/<span class=phoneticEjjeDesc>(.*?)<\/span>/g)[0] == null) return "";
return html.match(/<span class=phoneticEjjeDesc>(.*?)<\/span>/g)[0]//
.replace(/<span class=phoneticEjjeDesc>(.*?)<\/span>/g,'$1');
}
function getLevel(html){
if(html=="" || html==null) return "";
if(html.match(/<span class="learning-level-content">(.*?)<\/span>/g) == null) return "";
if(html.match(/<span class="learning-level-content">(.*?)<\/span>/g)[0] == null) return "";
return html.match(/<span class="learning-level-content">(.*?)<\/span>/g)[0]//
.replace(/<span class="learning-level-content">(.*?)<\/span>/g,'$1');
}
function getMeaning(html){
if(html=="" || html==null) return "";
if(html.match(/<span class="content-explanation ej">(.*?)<\/span>/g) == null) return "";
if(html.match(/<span class="content-explanation ej">(.*?)<\/span>/g)[0] == null) return "";
return html.match(/<span class="content-explanation ej">(.*?)<\/span>/g)[0]//
.replace(/<span class="content-explanation ej">(.*?)<\/span>/g,'$1')//
.replace(/\s{2}?/g,"");
}
function setPhonetic(sheet, row, col, phonetic){
if(col == 0) return;
sheet.getRange(row,col).setValue(phonetic);
}
function setLevel(sheet, row, col, level){
if(col == 0) return;
sheet.getRange(row,col).setValue(level);
}
function setMeaning(sheet, row, col, meaning){
if(col == 0) return;
sheet.getRange(row,col).setValue(meaning);
}
上書きして貼り付けます。
次の部分も上書きして貼り付けてください。
function myFunction(){
}

「Ctrl + S」(Macの場合 「Command + S」)でプロジェクトを保存してください。

ステップ3・設定を行う

GASプログラムの2-7行目が設定行であり、あなたが編集する行です。
プログラミングに慣れていない方は決して他の行を編集しないでください!

必要に応じて2-7行目を編集してください。
編集が終わったら「Ctrl + S」(Macの場合 「Command + S」)でプロジェクトを保存してください。
変数名 | 説明(必ず半角数字にしてください) |
---|---|
startRow | 読み込み開始行です。1にするとGSSの1行目から英単語を読み込みます。 |
endRow | 読み込み終了行です。50にするとGSSの50行目まで英単語を読み込みます。 0にすると、GSSで英単語の書き込みがある最終行まで読み込みます。 |
wordCol | 単語がある列を指定します。1がA列、2がB列、…になります。 |
phoneticCol | 発音記号がある列を指定します。2がB列、3がC列、…になります。 発音記号が不要なら0を指定してください。 |
levelCol | Weblioレベルがある列を指定します。3がC列、4がD列、…になります。 Weblioレベルが不要なら0を指定してください。 |
meaningCol | 意味がある列を指定します。4がD列、5がE列、…になります。 意味が不要なら0を指定してください。 |
ステップ4・GASを実行する

下図のように実行関数が「myFunction」になっていることを確認した上で「実行」をクリックします。

GASの実行が初回だと次のようなダイアログが表示されます。
「権限を確認」をクリックしてください。

Googleのメインアカウントをクリックします。

警告ダイアログが出るので「詳細」をクリックします。

「(作成したGASのプロジェクト名)(安全ではないページ)に移動」(下図では「Weblio英単語情報取得プログラム(安全ではないページ)に移動」)をクリックします。

GASのプロジェクトにアクセスリクエストを許可します。
「許可」をクリックしてください。

GASを実行すると実行ログが画面下部に出力されます。

Googleスプレッドシートに「発音記号」「Weblioレベル」「意味」が書き込みされていることが確認できます。

あとは、ステップ1、ステップ3、ステップ4を繰り返せば「単語」「発音」「Weblioレベル」「意味」のリストが作れます。
ステップ5・CSVエクスポート

スプレッドシート画面上部のメニューから、「ファイル」→「ダウンロード」→「カンマ区切りの値」でCSVファイルとしてエクスポートできます。
Anki用にお役立てください。
まとめ

海外ドラマで気になった表現、海外雑誌で気になった単語。
単語リストとして管理されている方は一定数いると思います。
今回のGASプログラムを使えば発音や意味を調べる時間が節約できるので、調べるのが面倒と感じた方はぜひご活用ください。
これでAnkiのデッキ作成も随分と簡単になりますね。
それではAnkiライフを楽しみましょう。

メール相談受付中
ブログに対するご意見、
英語の勉強法についての相談、
気軽にしていただけたらと思います。
管理人のキャパシティーが超えない範囲で対応させていただきますね♪
(↓ メール相談は↓をクリック! ↓)
