はじめに
仕事でのメモ書きに、いまはObsidian*1を使っています。Obisidianにした理由は、概ねこんな感じです。
- Notionは表現がリッチ過ぎ、単純なmarkdownで記述したい
- VS Codeだと重たすぎ、気軽にパッと書きたい
- iPhoneでもクラウドで同期できて、出先でも確認できると嬉しい
本来のPKMツールとしてはまだまだ使いこなせてないですが、サッとメモを書く、記録した情報を参照する、みたいな部分では非常に使いやすく、動作も軽快で気に入っています。
今回は、このObisidianで、クリックしたらPDFを開くみたいなことがやりたいと思い、結果的にAutomator(中身はJXA)を作ったという話です。
外部ファイルを参照する書き方
Obsidianでは外部ファイルを画像として埋め込むこともできます。できますが、PDFはページがあるものが多いし、Acrobatなどで開いたほうが都合がいいです。Obsidianで外部ファイルを開くには、[キャプション](<file://ファイルパス>)
という表記にすればいいようでした。
Automatorで作ってみる
できあがりはこんな感じです。
設定項目は下記の通り。
- クイックアクションとして作成
- ワークフローが受け取る現在の項目:ファイルまたはフォルダ
- 画像:お好みで
- 選択されたFinder項目を取得
- JavaScriptを実行
- クリップボードにコピー
JXAの中身
JXA(JavaScript for Automation)のコードは下記のようになっています。
function run(input, parameters) { var result = []; // debugger; root: for (var i = 0; i < input.length; i++) { var fpath = input[i].toString(); var resString = "[" + fpath.match(/([^\/]+)$/)[1].replace(/\.[^.]+$/, "") + "]" + "(<file:/" + fpath + ">)"; if (result.includes(resString)) { continue; } result.push(resString); } return result.join("\n"); }
debugger
ステートメントについては、SafariでJXAをデバッグするために書いています*2。
引数のinput
がFile
型オブジェクトの配列になっており、選択したファイルを順番にtoString()
メソッドで文字列に変換しています(var fpath = input[i].toString();
の部分)。
次に、文字列として取得したファイルパスを整形して、[拡張子を除いたファイル名](<file://ファイルへの絶対パス>)
という形にします。
本来であればこれをreturn
しておしまい、のはずだったんですが、Finderの不具合? で、選択したファイルが複数取得できてしまいます。なので、既に取得済みのものを弾くために、配列result
の中身をArray.includes()
メソッドで調べて、重複があれば無視するようにしました。
使い方
クイックアクションを適当な名前で保存してください。そうすると、Finder上でファイルを選択して右クリック、コンテキストメニューのクイックアクションに登録されます。
実行すると、整形されたテキストがクリップボードに送られます。
参考文献
Obsidianの小技その6|PC上のファイル・フォルダへのリンクを貼る #Markdown - Qiita:
リンク先はシェルスクリプトで対応されていますが、僕は上記のようにテキスト整形や配列としての処理をかんたんにやりたかったのでJXAにしました。
*1:Obsidian is 何、という方はこちらをどうぞ:Obsidian.Zenn