Googleスプレッドシートを使ったAnkiデッキ高速作成法

auto-anki-deck 単語一般
リン先生
こんにちは!英語上級者になりたい方のサポート役、リンです♪

今回は英単語リストのテキストデータを元にして、Ankiデッキを高速で作成する方法について触れます。


英語学習者において覚えたい英単語リストをGoogleスプレッドシートに書き込んで管理している人は一定数いると思います。


これ、いちいち意味を調べにオンライン辞書を見に行くのは面倒ですよね・・・。

english-list001
リン先生
上の図だと30単語ありますが、私は意味をB列に埋めるのに15分はかかりますね・・・。

それを今回はGAS(Google Apps Script)というGoogleスプレッドシートにあるプログラムを使用することにより1分につき100単語の「発音」「Weblioレベル」「意味」が取得できるようになります。


完成イメージは次ですね👇。




それでは「Googleスプレッドシートを使ったAnkiデッキ高速作成法」と題して始めます。


なお、「極限の英単語」「終極の英単語」をCSVに変換する方法も別記事で解説していますので興味がある方はご覧ください。


この記事です!

kyokugen-convert

「極限の英単語」を高速でAnki用CSV変換する方法を解説します!

shukyoku-convert

「終極の英単語」を高速でAnki用CSV変換する方法を解説します!


なお今回は参考文献はありません。


ただ、この記事が役に立ったと感じて次の英単語帳が欲しいと感じた方は感謝の購入をお願いします🙇。


書籍1
kyukyoku-vol4
究極の英単語Vol.3 / アルク英語出版編集部
Amazon Kindle Amazon 紙書籍 楽天 紙書籍
書籍2
kyukyoku-vol4
究極の英単語Vol.4 / アルク英語出版編集部
Amazon Kindle Amazon 紙書籍 楽天 紙書籍
書籍3
sla-gaikokugo-gakushu-no-kagaku
極限の英単語 Vol.1 15000語レベル Kindle版 / なりしか
Amazon Kindle
書籍4
sla-gaikokugo-gakushu-no-kagaku
極限の英単語 Vol.2 18000語レベル Kindle版 / なりしか
Amazon Kindle
書籍5
sla-gaikokugo-gakushu-no-kagaku
極限の英単語 Vol.3 21000語レベル Kindle版 / なりしか
Amazon Kindle
書籍6
sla-gaikokugo-gakushu-no-kagaku
極限の英単語 Vol.4 24000語レベル Kindle版 / なりしか
Amazon Kindle
書籍7
sla-gaikokugo-gakushu-no-kagaku
終極の英単語 Vol.1 28000語レベル Kindle版 / なりしか
Amazon Kindle
書籍8
sla-gaikokugo-gakushu-no-kagaku
終極の英単語 Vol.2 30000語レベル Kindle版 / なりしか
Amazon Kindle
書籍9
sla-gaikokugo-gakushu-no-kagaku
終極の英単語 Vol.3 32000語レベル Kindle版 / なりしか
Amazon Kindle
書籍10
sla-gaikokugo-gakushu-no-kagaku
終極の英単語 Vol.4 35000語レベル Kindle版 / なりしか
Amazon Kindle
書籍11
sla-gaikokugo-gakushu-no-kagaku
終極の英単語 Vol.0 一般常識レベル Kindle版 / なりしか
Amazon Kindle


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

リン先生
Googleスプレッドシートを使ったAnkiデッキ高速作成法(免責事項)について話します。

免責事項は次になります。

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


Googleスプレッドシートを使ったAnkiデッキ高速作成法(必要なもの)

リン先生
Googleスプレッドシートを使ったAnkiデッキ高速作成法(必要なもの)について話します。

Ankiデッキ作成にあたり、次のものが必要になります。


 PC(Win、Mac問いません)環境
 Googleのメインアカウント(※メインアカウントでないとGAS(プログラム)の実行ができません)
 インターネット接続環境


Googleスプレッドシートを使ったAnkiデッキ高速作成法(実行)

リン先生
Googleスプレッドシートを使ったAnkiデッキ高速作成法(実行)について話します。

今回のGASのプログラム、免責事項でも触れましたが、1日100単語以内の取得を目安にしていただきたいです。


理由はWeblioというサイトを利用するためで、過度に使用するとWeblioサイトの業務妨害になり得るからです。


再度、免責事項を貼っておきますね。

今回のプログラム実行はWeblioというオンラインサイトにアクセスすることになります。
過度にプログラム実行するとWeblioサイトの業務妨害にもなり得るので、節度をもったプログラム実行をしてください(1日100個単語以内を目安にしていただけるとありがたいです)。

それでは手順を説明してきます。


ステップ1・Googleスプレッドシートを用意する

リン先生
ステップ1・Googleスプレッドシートを用意する を開始します。



メインアカウントでGoogleにログインしGoogleドライブを開きます(※メインアカウントでないとGAS(プログラム)の実行ができません)。


Googleスプレッドシートを新規作成するために、「新規」ボタンをクリックします。

kyokugen020

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

kyokugen021

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

kyokugen022

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

english-list002

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

english-list003


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

リン先生
ステップ2・GASを貼り付ける を開始します。



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

kyokugen025

なお、メインアカウント以外でログインした状態だと下図の画面になります。


もしこうなったら、すべてのアカウントからログアウトして、再度ログインしてください。

kyokugen026

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

kyokugen027

プロジェクト名を分かりやすい名前にします(下図だと「Weblio英単語情報取得プログラム」)。


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

english-list004

次のコードを全てコピーしてください。

//設定行 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(){

}
english-list005

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

english-list006


ステップ3・設定を行う

リン先生
ステップ3・設定を行う を開始します。



GASプログラムの2-7行目が設定行であり、あなたが編集する行です。


プログラミングに慣れていない方は決して他の行を編集しないでください!

english-list007

必要に応じて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を指定してください。
levelColWeblioレベルがある列を指定します。3がC列、4がD列、…になります。
Weblioレベルが不要なら0を指定してください。
meaningCol意味がある列を指定します。4がD列、5がE列、…になります。
意味が不要なら0を指定してください。


ステップ4・GASを実行する

リン先生
ステップ4・GASを実行する を開始します。



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

english-list008-2

GASの実行が初回だと次のようなダイアログが表示されます。


「権限を確認」をクリックしてください。

english-list009

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

english-list010

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

shukyoku032-2

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

english-list011-2

GASのプロジェクトにアクセスリクエストを許可します。


「許可」をクリックしてください。

english-list012

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

english-list013

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

english-list014



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

ステップ5・CSVエクスポート

リン先生
ステップ5・CSVエクスポート を開始します。

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


Anki用にお役立てください。

まとめ

リン先生
以上が「Googleスプレッドシートを使ったAnkiデッキ高速作成法」のお話でした。

海外ドラマで気になった表現、海外雑誌で気になった単語。


単語リストとして管理されている方は一定数いると思います。


今回のGASプログラムを使えば発音や意味を調べる時間が節約できるので、調べるのが面倒と感じた方はぜひご活用ください。


これでAnkiのデッキ作成も随分と簡単になりますね。


それではAnkiライフを楽しみましょう。

リン先生
Let’s do it!


メール相談受付中

ブログに対するご意見、

英語の勉強法についての相談、

気軽にしていただけたらと思います。

管理人のキャパシティーが超えない範囲で対応させていただきますね♪

(↓ メール相談は↓をクリック! ↓)

mail-soudan-2