GoogleDrive管理下のObsidianにMisskeyのアーカイブを残しつつThinoと2hop linksを使う
横文字が多い!!
この記事で出来ること
GoogleDrive内のObsidianのVaultのデイリーノートに、自分のMisskeyの投稿をThino形式で自動転記する
MisskeyでなくてもRSS発行できるコンテンツならカバー可能
Twitterは不可能
ローカルにVaultがある場合も参考にはなるかも?
おまけ; Obsidianのコミュニティプラグイン「2hop links plus」の"Show Settings"ボタンを「Thino(旧memos)」のpaneから無理やり排除する
使うツール・サービス
Obsidian (GoogleDrive管理)
Thino
2hop links
Misskey
Microsoft Power Automate
Obsidian?
ざっくり言うとメモ帳とノート管理とタスク管理が合わさったようなアプリ。
以前のnoteでlogseqを使い始めた旨を書いていたのですが、Androidアプリの日本語入力が荒ぶるとか、ノートが増えると重くなってきたとか、諸々の気持ちでObsidianに乗り換えました。
Thino?
改名しましたが、ほぼMemosと同じです。Obsidianの拡張プラグイン。
Obsidianのデイリーノートへの書き込みをTwitterのようなUIで行なえます。
2hop links?
Obsidianは文章の中にリンクを含むことができ、要はWikipediaみたいにページとページをリンクで繋ぐことができます。ページは自身から張られているリンクだけでなく、自分に向けて張られているリンクを逆向きに辿ることもできます(バックリンク)。
2hop linksは、このリンク先の表示を拡張して、リンク先のページのリンク先のページをサジェストしてくれます。
Misskey?
分散型ソーシャルネットワーキングプラットフォーム。
変わってしまったTwitterの代替先として、Misskey.ioが人気。
Power Automate?
マイクロソフトの面倒なことを自動化するやつ。ローカルで動かすPower Automate Desktopもあるが、そちらではないです。
検索に両方かかるので正直どちらかを改名してほしい。
今回扱う程度のものなら無料で使えます。
GoogleDrive?
Obsidianはローカルにあるmarkdownファイルを良い感じにリンクを張り合って管理するためのソフトですが、データの置き場をクラウドにすることで出先でも同じ環境をモバイル端末で扱えたりします。
ちょいちょいコンフリクトが発生してファイルが重複したりするので、厳密に処理したければGithubを使うと良さそうですが、今回はデータの置き場を扱いやすいクラウド上にすることでRPAを使って比較的簡単にアーカイブの置き場に活用できているので、一長一短かもしれません。
PowerAutomateでMisskeyを転記
PowerAutomateで、RSSフィードの更新をトリガーに処理していきます。
misskeyはデフォルトでフィードを提供してくれています。
ex) misskey.io/@kumoridai.atom
引っかかりポイントが2つあります。
タイムゾーンの変換処理
フィードの更新時間を投稿時間として利用していきますが、UTC協定世界時になっているため、タイムゾーンの変換を噛ませます。
この際、後々デイリーノートに記載するためにカスタム書式で変換しました。
日付部分: yyyy_MM_dd
時刻部分: HH:mm
私はデイリーノートのファイル名にアンダーバー区切りを用いているので、このようにしています。
時刻の取得は転記するだけなら不要ですが、Thinoのタイムラインに乗っかる方が再利用性が高そうだったので、そのために取得しています。
デイリーノートファイルの存在確認処理
実は以前、logseqで同じようなものを実現していました。
ただ、この時はブロックへのバックリンク機能に全乗りして、転記用のファイルを用意してそこにひたすら追記するようにしていました。
2hop linksを使っていると、この転記用のファイルを経由してあらゆるデイリーノートが2hop linkとして提案されるようになってしまって、不便になりました。
また、Thinoのタイムライン上に乗せられるとより思考のログとして分かりやすくなりそうだったので、デイリーノートに転記をすることに決めます。
この際、既にデイリーノートのファイルが存在するかどうかで、ファイルの更新をするのかファイルの作成をするのか処理を分岐する必要が出てきました。
PowerAutomateではGoogleDriveのディレクトリ内ファイルリストを取得することができますが、「このファイルがあったら●●する」といった分岐が行なえないように見受けられます。
ディレクトリ内のファイル全てに●●の処理を行なう、というようなときに用いるアクションのように見えます。
そのため、Try-Catchを利用してファイルの有無を判定することにしました。
スコープを利用してフローを纏めると、スコープ内でエラーが発生したときに異なる処理を行なうことが出来ます。これを利用し、まずGDrive内のファイルを参照しようとして、スコープ内でエラーを吐いた場合にはファイルが無いと判断するようにしました。
なお、ここにも引っかかりポイントが1つあり、GoogleDriveのファイル更新アクションのファイルの指定はパス表記に見えますが、中身はファイルidを扱っているので、テキスト処理で決定していたファイル名を元にファイルの更新をかけようとすると404エラーが発生します。
"Failed to communicate with Google Drive: NotFound."
データの取得はパスで指定できるので、2度手間ですがファイルのメタデータを別途取得し、そのIDを使って更新をかけます。
このスコープが失敗した場合、ファイルが無いときの処理が走ります。
ファイルが無い場合の処理の実行条件を、上の処理が失敗した時に変更しておきます。
ファイルがあるのに更新処理でエラーが発生した場合、ファイルの作成アクションが起こると既にある内容が消えて上書きされてしまうので、念のため条件分岐を入れています。
変数の初期化時に「NULL」文字列を入れているので、そのままだった場合はファイルの取得に失敗したものと見なしています。
ひとまずこれで動いているようです。
おまけ: 2hop linksのcss改変
2hop links plusとThinoを併用していると、Thinoの投稿欄にカーソルしているときに、編集画面と扱われるのか2hop linksのOpen SettingsボタンだけがThinoの投稿欄に表示されます。
このボタンを表示しないようにするオプションなどは(提案されているものの)まだ存在しないようだったので、cssを雑に触って消してしまうことにしました。なお、他のプラグインと同様にコミュニティプラグインの設定画面から変更できるので、ボタンが消えても不都合はないように感じました。
Vault内の.obsidian\snippets内に、cssスニペットを用意し、display:noneを付けてしまいます。
.TwoHopLinks .settings-button {
display:none;
}
一旦これで消えたので、良しとしました。
まだPowerAutomateでのデイリーノート記録の方もこちらも全然運用できていないので、おかしなことが起きたら追記していきます。
何かあればコメントorTwitterでご連絡ください。