本文は、obsidian-sync-to-xlog
プラグインの開発プロセスでの問題と考察を記録しています。
背景#
前述のように、Obsidian のコンテンツを Xlog に同期するために、Obsidian のノートの内容を Xlog に読み込むことができます。ただし、画像リソースは Xlog 上の IPFS リンクではなく、元のリンクのままです。
したがって、この問題を解決する必要があり、それには一定の技術的な難しさがあります。
技術的な設計#
Obsidian の画像コンテンツを IPFS にアップロードするには、次の手順が必要です:
- md コンテンツを読み込み、画像リソースを見つける(ローカルの Obsidian 画像やリモートの CDN 画像があるかもしれないので注意)
- 画像を IPFS にアップロードし、テキストを置換して Xlog にアップロードする
これらの 2 つの手順を侮るなかれ、私は多くの労力を費やしました。特に、私は初めて Obsidian プラグインを開発したので、非常に苦労しました。
画像の処理#
通常の Markdown とは異なり、Obsidian では画像リソースの表示方法が 2 つあります:
- 通常の
![]()
画像の方法 - 組み込みの
![[]]
表示方法
最初の方法は比較的簡単で、正規表現を使用して https?
を抽出すれば良いです。
注意点として、従来の fetch/axios を使用すると CORS セキュリティ検証がトリガーされますが、obsidian.requestUrl
を使用するとセキュリティポリシーを無視できます。これは落とし穴です。
難しいのは 2 番目の方法です。まず、正規表現を使用してパスをマッチさせ、適切な Obsidian API を使用して記事の実際のパスまたはバイナリデータを取得する必要があります。
この手順は最も面倒であり、ここでは詳しく説明しません。
この手順では、画像の関連パスを見つけたら、次のステップで Xlog にアップロードするための IPFS アドレスを取得できます。
IPFS へのアップロード#
この手順は、シリーズの最初の記事で知ったところです。画像を IPFS にアップロードするための API を呼び出すだけです。
IPFS アドレスを取得したら、元のテキストを上書きすれば完了です。
設定の読み込み:IPFS の処理を行うかどうか#
万が一、ユーザーが特定の状況で画像を IPFS にアップロードしたくない場合はどうすればよいでしょうか?新しい設定を導入して、画像を IPFS にアップロードするかどうかを選択できるようにします。
コードを少し変更して設定オプションに対応し、ボタンがオフの場合は元のコンテンツを直接アップロードし、オンの場合は画像を先にアップロードしてからテキストをアップロードします。
Obsidian の画像データの取得#
この部分は非常に難しいです。私の現在の方法には問題があり、特定の 1 階層のディレクトリにある画像が読み込めない場合があり、画像が無視されてしまいます。
この小さな落とし穴は後で対処する機会があるかもしれません。
展望#
ごきげんよう