あるSEのつぶやき・改

ITやシステム開発などの技術に関する話題を、取り上げたりしています。

EvernoteからObsidianに移行しました

はじめに

今年の2月に情報を Evernote に集約し始めて早8ヶ月が経ちました。

その際に書いた記事が以下になります。

ですが、最近の Evernote の動きが少し気になります。

昨年の買収はともかく、値上げ後にアメリカとチリの従業員をほぼ全員解雇というのは、企業が存続するのか不安が大きくなりました。

Evernote は元々パフォーマンスに問題がありますが機能的には十分であるので有料プランを使っていましたが、移行の検討をはじめました。

Evernote の移行先の検討

Evernote の移行先候補として以下のものがありますが、どれも自分の用途には合いませんでした。

  • OneNote (Microsoft)
  • Notion
  • UpNote
  • Simple Note

自分がやりたいのは、単純にネット上の記事をタグを付けて Web クリップ(保存)して検索するだけなのですが、そういうサービスが全然ありません。

Web クリップがあるサービスでも、機能が貧弱すぎて使えないレベルでした。

ここまで使えるツールがないのであれば、自作するしかないかな?と思っていたところで着目したのが Obsidian でした。

Obsidian で情報蓄積して活用する

元々、Obsidian を Markdown エディタとして使っていたのですが、Obsidian にはタグ機能があり、検索機能も結構強いです。また、プラグインを開発して公開する仕組みもあります。

この仕組みはすばらしく、また普段使っているブラウザの Firefox も拡張機能を公開する仕組みがあるので、足りないところは自作することにしました。

Evernote から Obsidian 移行後の完成形

試行錯誤した結果、以下を移行後の完成形としました。

  • パソコン

    • Web ページ -> Web クリップ -> Obsidian に保存
    • Obsidian Sync 経由で他の環境の Markdown を同期
    • Obsidian の Markdown -> Media Sync で画像やPDF をダウンロード
    • Obsidian の全ファイルを定期的に OneDrive 上にバックアップ
  • タブレット/スマートフォン

    • Web ページ -> Web クリップ -> Obsidian に保存
    • Obsidian Sync 経由で他の環境の Markdown を同期
    • 画像/PDF ファイルは同期しない

情報蓄積と活用のために自作したツール

Firefox 拡張機能

Web ページを Markdown として保存するために、Firefox 拡張機能の WebClip Markdown for Obsidian を作成して公開しました。

ソースコードは以下で公開しています。

拡張機能をインストール後、ツールバーのアイコンをクリックすると以下の画面が表示されます。

Select article range を選択している状態だと、Web ページの記事と思われる部分を以下のように青い枠線で選択します。

この際、+- ボタンをクリックすると選択範囲を変更できます。

Select all を選択すると Web ページ全体を選択し、 Bookmark を選択すると Web ページの選択は解除されます。

Vault には Obsidian の Vault 名、Default folder には Obsidian のフォルダを指定できます。画像のように / を付けると、Obsidian のサブフォルダが指定可能です。

Tags には保存した記事に付けるタグを入力します。後ほど設定方法を記載しますが、登録済みのタグがオートコンプリートで表示されます。

Comment に記事に関するコメントを入力します。

最初の画像の状態で Clip をクリックすると、Obsidian が表示されて、以下のように記事の内容が Markdown 形式で保存されます。もちろん、保存後にタグやコメントの内容も修正可能です。

これだけでもある程度使えますが、設定を変えるとさらに使いやすくなります。

Default tags に設定した内容は、クリップ画面表示の際、タグに初期設定されます。

Autocomplete では、タグのオートコンプリートを有効にするか、そして使用したタグを学習するか設定できます。

Enable autocomplete にチェックを入れると、以下のようにオートコンプリートが動作するようになります。

Dictionary tags は、タグの辞書機能です。ここでオートコンプリートするタグを管理できます。

Skip stylesheet classes settings は特殊な設定なので詳細は省きますが、Web ページごとに Markdown として保存しない要素(スタイルシートのクラス名)を指定できます。

ブックマークレットと iOS ショートカット

Web ページをクリップするのはパソコンだけに限らないので、ブックマークレットと iOS のショートカットを作成して Firefox 拡張機能のページで公開しました。

ブックマークレットは bookmarklet.js、iOS のショートカットは ios-shortcut.js を使用します。

使用方法は、README を確認してください。

なお、ブックマークレットは、Mac 上の Safari, Google Chrome, Firefox で動作確認してます。Microsoft Edge については、全画面(isFullPage = true)の時のみ動作します。

Obsidian プラグイン

Obsidian プラグインとして、Media SyncMerge Notes を作成して公開しました。

Obsidian の Community plugins から検索で見つけられます。

ソースコードは以下で公開しています。

Media Sync は、Web クリップした Web ページに含まれる画像と PDF ファイルをローカルにダウンロードするプラグインです。Web ページは、結構すぐになくなるのでこのプラグインを作成しました。

Merge Notes は、選択した複数の Markdown ファイルを1つにまとめるためのプラグインです。マージ機能はありそうでなかったので作成しました。

それぞれの使用方法は、README を確認してください。

Evernote から Obsidian への移行

Evernote から Obsidian へどのように移行するかというと、この後の手順を踏めば比較的うまくいくと思います。

注意点としては、Obsidian で大量のインデックス再構築を行う状態にすると固まってしまい何もできなくなることです。

Obsidian での Evernote ファイルの取り込みは、面倒でも分割して行うのがよいかと思います。

Evernote での事前準備

Obsidian では以下のようなタグがサポートされないので、事前に Evernote で変換をかけておく必要があります。

  • 数値のみのタグ (ex)2023 -> 2023年
  • スペースを含むタグ (ex)Microsoft Azure -> MicrosoftAzure
  • サポートされない記号を含むタグ (ex).NET -> dotNet

これ以外にも条件はあるかもしれませんが、自分が直面したのはこのくらいです。

ものによってはそのまま Obisidan に取り込めますが、後で使えなかったり、一覧に表示されなかったり不便なので対応しておくとよいかと思います。

Evernote からノートブックをエクスポート

Evernote からノートブックを ENEX 形式(.enex) でエクスポートします。

体感的には 200 から 300 件程度で分割すると、Obisidian でインポートエラーが出にくかったように感じます。

自分は 7,000 件超えだったので、非常に時間がかかりました。。

Obsidian で必要なプラグインをインストールする

Obsidian で以下のプラグインをインストールします。

Importer は Obsidian の中の人が作ったプラグインで、Evernote のノートブックをインポートできます。

File Exporter Note Count は、以下のように Markdown ファイルの件数を表示するプラグインです。

Media SyncMerge Notes は、すでに説明したので省略します。

Tag Wrangler は、タグ名を一括変換したりできるプラグインです。

TagFolder は、以下のようなタグのエクスプローラーで、タグによる分析が可能になります。

Obsidian に Evernote のノートブックをインポート

Obsidian の画面左のメニューから、下記アイコンをクリックします。

ダイアログが表示されるので、以下のように設定して Import をクリックします。

この際、EvernoteOutput folder に設定されていますが、Evernote がインポート後のルートフォルダになります。

Output folder は省略可能で既存フォルダも指定可能です。

インポートが完了したら、Done をクリックします。

先ほどの設定だと、以下のようにインポートされます。

バックアップ

この後の作業で問題が出てもよいようにバックアップを行います。

今回は、以下のようなシェルを作成して OneDrive 上に Zip ファイルを保存しました。

#!/bin/bash

# 定義
FOLDER_PATH="/path/to/Obsidian"  # obsidianフォルダのパスを指定
ZIP_NAME="$(date +%Y-%m-%d)_obsidian.zip"  # ZIPファイル名を指定
ONEDRIVE_PATH="/path/to/OneDrive"  # OneDriveフォルダのパスを指定

echo "backup start $(date +%Y-%m-%d-%H:%M:%S)"

# obsidianフォルダをzip化
zip -r -qq "$ONEDRIVE_PATH/$ZIP_NAME" "$FOLDER_PATH"

echo "backup end $(date +%Y-%m-%d-%H:%M:%S)"

# 7日より前のZIPファイルを削除
# find "$ONEDRIVE_PATH" -name "*_obsidian.zip" -mtime +5 -exec rm {} +

このままだと不便なので、シェルを、~/backup.sh に保存してバックアップを定期的に実行するようにします。

~/Library/LaunchAgentsorg.backup.plist というファイルを以下の内容で作成します。AM 5:00 に ~/backup.sh を実行する設定になります。パスは、適宜修正してください。

Mac の launchd は、cron とは異なり、Mac がスリープしている状態でも実行されます。

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>
<dict>
  <key>Label</key>
  <string>org.backup</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/bash</string>
    <string>/Users/USERNAME/backup.sh</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>StandardErrorPath</key>
  <string>/Users/USERNAME/backup.log</string>
  <key>StandardOutPath</key>
  <string>/Users/USERNAME/backup.log</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>5</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
  </dict>
</plist>

設定を有効にします。

$ launchctl load ~/Library/LaunchAgents/org.backup.plist

設定を無効にする場合は、以下のコマンドを実行します。

$ launchctl unload ~/Library/LaunchAgents/org.backup.plist

なお、Operation not permitted のエラーが出る場合は、下記記事を参考に bash にフルディスクアクセスの権限を付与してください。

Sync 設定

Web クリップは、パソコンだけでなくタブレットやスマートフォンでも行います。

ですので、Obsidian の有料サービスである Sync を利用します。

Sync は月契約だと $10/月 で、年契約だと $8/月 になります。

ただ、残念なのが 10GB しか使えないのですよね。。

いろいろ調べても他に有効な手段がなかったので、画像の同期を行わないで Sync を利用することにしました。

ちなみに、Obsidian の Vault を iCloud に作成する方法もあるようですが、自分の使い方ではうまくいきませんでした。

あと、OneDrive 上に Obsidian の Vault を作成した状態で Sync を有効にすると、OneDrive 上で禁止されているファイル名を Sync が使用するらしくエラーが頻発するのでご注意ください。

Media Sync の実行

一通り設定が終わったら、 Media Sync を実行して画像と PDF ファイルをローカルにダウンロードします。

ただ、7,000 以上も Evernote のノートがあったためか、パソコンを起動したままで3日ほど時間がかかりました。

おわりに

Obsidian ですべてがうまく行っている訳ではありませんが、Evernote よりは情報蓄積や活用が効率よくなりました。

あと、Obsidian は単なる Markdown ファイルなので、Obsidian に最悪何かあっても対処が可能というのも大きいですね。

しばらくは Evernote と Obsidian の並行稼働を続けて行き、目処が立ったら切り替えようかと思います。