B-Teck!

お仕事からゲームまで幅広く

Obsidian Web ClipperでPC/Androidから記事をClipするようにした

読んだり参考にしたWebページを記録して、メモに引用したりあとから学びを抽出したいと思っていて、これまで色々試していた。
しかし、過去に利用していたPocketはサービス終了してしまい、Notionは動作の微妙な重さや検索性などの面で気になる点があり利用を中断することに。
最近Obsidianに再入門してたのもあり、Obsidian上で上手く管理できないかということで調べたメモ。

Obsidian Web Clipper

Obsidian Web Clipperは、公式が出しているブラウザ拡張機能で、Webページの内容をMarkdownに変換してVaultに保存できる。
Markdownなので、媒体やサービスに依存せず検索・参照できるのがいい感じ。

PC・モバイルでの同期は 前回の記事 の方法でやっているので、どちらの環境でも保存できるようにしたかった。

PCでの設定

Chrome Web Storeから「Obsidian Web Clipper」をインストールする。

使い方

  1. 保存したい記事を開く
  2. ブラウザツールバーのObsidian Web Clipperアイコンをクリック
  3. テンプレートを確認して「Add to Obsidian」をクリック

これでVaultの指定したディレクトリに記事が保存される。

テンプレート設定

拡張機能の設定でテンプレートをカスタマイズできる。設定はJSONでエクスポートできるので、自分の設定を載せておく。

{
  "schemaVersion": "0.1.0",
  "name": "Default",
  "behavior": "overwrite",
  "noteContentFormat": "{{content}}",
  "properties": [
    { "name": "title", "value": "{{title}}", "type": "text" },
    { "name": "source", "value": "{{url}}", "type": "text" },
    { "name": "author", "value": "{{author|split:\", \"|wikilink|join}}", "type": "multitext" },
    { "name": "published", "value": "{{published}}", "type": "date" },
    { "name": "created", "value": "{{date}}", "type": "date" },
    { "name": "description", "value": "{{description}}", "type": "text" },
    { "name": "tags", "value": "clippings", "type": "multitext" }
  ],
  "noteNameFormat": "{{title}}",
  "path": "00_Inbox/webclips"
}

Androidでの設定

AndroidのChromeは拡張機能に対応していない。
Firefoxは拡張機能が利用できて、Obsidian Web Clipperも利用できるのでこれを採用した。

  1. Firefox for Androidをインストール
  2. Obsidian Web Clipper拡張機能をインストール
  3. Vaultとテンプレートを設定(PC版と同じ設定を使用)

使い方

Chromeなど他のアプリで記事を見つけた場合に、共有メニューからFirefoxで開き直す。

  1. 記事のURLを共有
  2. 共有先で「Firefox」を選択
  3. Firefoxで開いたらメニュー → 拡張機能 → Obsidian Web Clipper
  4. クリップ実行

Android 版 Firefox で自動でタブを閉じる | Android 版 Firefox ヘルプ の設定をすると、連携したタブがたまり続けないのでおすすめ。

試したけどやめたこと:MacroDroidで自動化

最初はMacroDroidというAndroid自動化アプリを使って、共有メニューからワンタップでクリップできるようにしようとした。
設定においては Android でも Obsidian Web Clipper を簡単に使えるようにした話|Shumei Ito が参考になった。

ただ、以下の理由があって最終的には手動で共有・Clipをするように落ち着いた。

  • UI座標が端末やFirefoxのバージョンによって変わる
  • ページ描画前に拡張機能を起動しようとして失敗するなど、動作が不安定
  • 手動でも慣れてしまえばそこまで気にならない

Git経由でObsidianをPC/モバイル同期した

ObsidianをPC/モバイルで使いたいとき、同期方法は大きく3つある:

  1. Obsidian Sync(公式有料サービス)
  2. iCloud/Google Drive などのクラウドストレージ
  3. Git

以前はObsidian Syncを利用していたけど、Obsidian以外でもファイルを参照したい場合などを考えて「Obsidian Git」プラグインを利用するようになった。
ただ、PC版では安定しているものの、モバイル版では後述するような問題があって方法を模索していた。

Obsidian Gitのモバイル版は不安定

Obsidian Gitプラグインはモバイルにも対応している。
しかし、公式READMEに「モバイルサポートは実験的」と明記されている。

これはプラグインの問題というより、Obsidianモバイル版がネイティブGitを使えないことに起因する。
プラグインはJavaScriptでGitを再実装した「isomorphic-git」を使っており、これが原因で制限が多い。

具体的には以下のような問題がある。

  • isomorphic-gitの制限でSSH認証が使えない
  • 大きめのリポジトリでRAM不足によりクラッシュ
  • サブモジュールが使えない
  • リベースができない
  • バッファオーバーフローで無限ループになる場合がある

最初は我慢して使っていたけど、Vaultが大きくなるにつれて不安定になってしまったので代替案を考える必要が出てきた。

GitSyncアプリを使う

そこで見つけたのがGitSyncというスタンドアロンのGit同期アプリ。
ネイティブ実装のJGitを使っているため、前述したようなisomorphic-gitの制限を受けずに安定して動作する。

特徴:

  • 任意のアプリの起動/終了に連動して自動同期
  • クイックタイルから手動同期も可能
  • スケジュール同期(例:15分ごと)もできる
  • オープンソース

注意点

PC/モバイルで同時編集すると競合してめんどくさいので避けたほうがいい。
競合した場合もGitSync上で手動解決自体は可能。

セットアップ手順

詳しくはGitSync Tutorialを参照。
以下は自分がセットアップしたときの流れ。

インストールとクローン

アプリをインストールして、GitHub OAuth認証でログイン。
新しい空のフォルダを作成してリポジトリをクローンし、ObsidianでそのフォルダをVaultとして開いた。

同期方式の選択

GitSyncには2つの同期方式がある:

A. アプリ連動方式

  • Obsidianの起動時にpull、終了時にpush
  • (Androidの場合)アクセシビリティサービスの有効化が必要

B. スケジュール方式

  • 例:15分ごとに自動同期
  • アプリの状態に関係なく定期的に同期

最初はアプリ連動方式を使っていたけど、以下の問題があった

  • 頻度が高すぎる(開く/閉じるたびに同期)
  • 意図しない差分解決が発生
    (起動時のSyncでモバイル側に存在しないファイルが削除判定されて削除されることがあった)

現在は15分に1度のスケジュール同期に落ち着いている。
頻度を下げることで誤検知が減ったことと、起動してないときにも裏でSyncされていることにより、意図しない差分の競合も避けられて安定した。

Obsidian Gitとの競合回避

GitSyncとObsidian Gitが両方動くと競合するので、モバイルではObsidian Gitを動かさないようにする必要があった。

自分の場合、PC・モバイルでObsidianの設定ファイル(.obsidian/)も同期している。
そのため、.gitignoreにObsidian Gitプラグインのディレクトリを追加することで対処した。

.obsidian/plugins/obsidian-git/

こうするとモバイル側では「プラグイン一覧には表示されるけど、ファイルが存在しないので動作しない」状態になる。PC側では普通に動く。

設定ファイルを同期していない場合は、単純にモバイル版Obsidianでプラグインを無効化すればOK。

JCOM回線でObsidianプラグインがダウンロードできなくなったので対処した

ObsidianのVaultを整備していたところ、なぜかCommunity Pluginのインストールや更新などが全て失敗してしまう状態になった。
UI上はタイムアウト表示になるだけで特に原因も思い当たらない。
最初は「配信サーバーの一時的な問題かな?」と思っていたけど、数時間経っても改善する見込みがないので調査した。

原因調査

Webへのアクセスなど、その他インターネットを経由する機能は動作していた。
回線を疑って別回線で試したところ正常に通信できたので、JCOMから貸与されているルーターが原因だと判断した。

Obsidian、JCOMというワードで検索すると以下の記事が引っかかった。
note.com

また、類似事例として以下のような投稿も確認できた。

ざっくり要約すると以下の感じ:

  • JCOMにはGuard機能が存在する
  • GitHub関連のドメインをブロックすることがある
  • 「メッシュWi-Fi」アプリで設定を解除することができる

ちなみに、我が家ではメッシュWi-Fiは契約した覚えがないので、なぜGuard機能が適用されてるのかはよくわからない。

解決方法

1. メッシュWi-Fiアプリのインストール

以下のページからアプリをインストールする。
https://cs.myjcom.jp/knowledgeDetail?an=002000390

2. ブロックされているURLの確認と許可

アプリにパーソナルIDでログイン後、以下の手順でブロックを解除する。
(Androidでしか確認していないので、iPhoneだと細部で違いがあるかも)

  1. ホーム画面から「Guard」のメニューを探す
  2. 「オンラインプロテクション」をタップ
  3. 画面の下部のイベントから解除したいURLを選択する
  4. 「︙」メニューから許可リストに追加する
  5. 「Guardイベント」画面の「︙」から「許可リスト」を表示し、許可したURLが追加されていることを確認

解除したいURLが 手順3 の履歴 にない場合は、手順5 の画面から直接許可リストに追加することも可能。

3. 今回許可したURL

今回は githubusercontent.com がブロックされていた。
これは、GitHubにアップロードされたファイルを匿名化したリンクに用いられるURLで、Obsidianのプラグインもここから配信されている。 docs.github.com

このURLを許可リストに追加後、再度Community Pluginのダウンロードを試したところ、問題なく動作した。