おはようございます!マネジメントオフィスいまむらの今村敦剛です。
CodexのVS Code拡張機能が公開されましたので、これを使ってEvernoteのENEXをGASでスプレッドシートにインデックス化する小さな仕組みを作って見ました。
システムの機能概要
EvernoteからエクスポートしたENEXファイルをGoogleドライブに置き、Google Apps Script(GAS)で読み込んで、ノートの一覧をスプレッドシートに自動生成する小さな仕組みです。
使い方はシンプルで、
- EvernoteでENEXを書き出し、
- ドライブにアップロードし
- スクリプトプロパティにファイルID(ENEX_FILE_ID)を設定
- 関数parseEnexToSheetを実行する
4ステップです。こうするとGASが新しいスプレッドシートをつくり、そのなかの「Evernote Index」というシートに、Title / Created / Updated / Tags / Source URL / GUIDの6列を整形して出力します。
コードの簡単な説明
ユーザーが実行するのは、GASのparseEnexToSheetという関数です。これによりDrive上のENEXを読み込み、XmlServiceでXMLをパースして各ノートの属性を取り出します。
通常は一気に解析しますが、サイズ上限に当たった場合はDrive APIのRangeリクエストで2MBずつ取得し、<note>…</note>を逐次抽出して個別にパースするストリーミング方式に自動フォールバックする機能があります。
またXMLの名前空間差異や不正な制御文字・裸の&によるエラーに備え、getChildAnyNs / getChildrenAnyNs / childTextAnyNsで堅牢に要素を取得し、safeCleanXmlでサニタイズ、正規表現抽出で部分パースも行います。
日付はparseEvernoteDateでEvernote形式(YYYYMMDDThhmmssZ)からDateに変換し、シートはヘッダーの太字・1行固定・日付の整形を行って読みやすさを確保。onOpenでメニューを追加し、手動実行も簡単にしています。
このコードにどういうメリットがあるか
しいていうと、タイトル/作成日/更新日/タグ/本文冒頭を1画面でフィルタできるという視認性のよさくらいですかね。Evernote内検索よりも視認性は良いと思います。
まあ正直なところ、それ以外のメリットはないのですが、Evernoteに蓄積されたデータを生成AIに読み込むという作業を何でもいいので自動化したかったというのが本音ですね。
EvernoteのAPIを直読みすることも可能なんですが、トークン発行や認証挙動に注意するのが面倒だったし、小さな用途ならENEX→GASの方が速いかな?と思ったので、まずはこれで実装してみました。次はAPIを使ってみようかな。
おわりに(まとめ)
本スクリプトは、「ENEXを置いてボタンを押すだけ」で、Evernoteの資産に横断検索・並べ替え・ラベル付けの力を与えるための最小構成です。
「Evernoteに眠っている知見を、日々の業務で使える形にする」ためのMVPを試してみた、という感じですかね。あとはVS CodeのCodex拡張機能の使い勝手をテストしたかったという狙いもありました。そちらのほうについては、また別の記事で書きたいと思いますけど、Claude Codeはもういらないかも?と思うほど、しっかり動いてくれましたね。
なお、このGASコードはGithubのPublicで公開していますので、興味があればご覧ください!
