ブログ投稿用にObsidianプラグインを作った

Ghostブログへの投稿作業を効率化するため、Obsidianプラグインを自作しました。記事の新規/更新、タイトルやタグ設定、AIによるメタディスクリプション生成、画像最適化までをObsidian内で完結。執筆から公開までの手間を削減し、ワークフローを改善する開発経緯と具体的な機能について解説します。

※本記事は広告を含みます

どうも、職業エンジニアです。このブログはGhostっていうブログCMSで動いており、記事を投稿するに当たっては「Obsidianで作成した.mdファイルをそのままGhostへ投稿する」自作ツールにて運用してきました。
ObsidianからGhostへ直接投稿するツールを自作した話

ツール化したけど、まだ面倒な点あり

しかし、最近はこれすら面倒臭くなってきていました。。記事を書き終わった後ツールを起動しにいかなきゃいけなかったんですよね。このひと手間が地味に面倒に感じ、なにかいい方法はないかなあ、なんならマークダウンエディターを自作して統合してしまおうかとも考えていましたが、どうやらやりたいことはObsidianプラグインで出来そうということが分かりました。

なので今回はObsidianにGhost投稿機能を組み込むプラグインを作ってみたよ、というお話になります。

作りたいもの

もともとのツール仕様について

もともとのツールでやっていたことは基本的にはできるようにしたい!ということで、まずはここを箇条書きにしてみます。

  • 記事の新規、更新投稿
  • タイトル、スラッグ、公開ステータスの設定
  • タグをGhostから取得し、既存タグから選択できるように。もちろん新規タグの追加も可能
  • メタディスクリプションをGeminiAPIで生成できる
  • アイキャッチ画像の設定、投稿前のwebp化
  • 記事のメタ情報をGhostから取得し同期

だいたいこんなことができるようになってました。細かいところでいうとmdをいい感じに投稿できるように記事データの整形したりもしてますね。とまあ、やりたいことは結構多い感じではあります。

しかし、元プログラムがあればそれを移植したりするのはAIにお願いすればだいたいいい感じにしてくれるので、一旦全部移植してしまおう、という感じでやっていくことにしました。AIマジありがてえ。自前で移植しなきゃいけないなら、多分このまま旧ツール使いつづける選択をしていたでしょうね。。

実装イメージ

ちょっと調べた感じ、エディタの右側にパネルを組み込むことができるっぽいので、そこにGUIを実装していくイメージにしました。要素も元ツールまま用意することにします。んで、全体的な構成は以下の感じにします。

Obsidianプラグインはdata.jsonに設定情報を持つ思想みたい
Obsidianプラグインはdata.jsonに設定情報を持つ思想みたい

構成もほぼ元ツールのまんまですが、Obsidianにツールが統合されたことにより、手間が一つ減った感じになりました。やったぜ。

完成品

完成したUIが以下になります。右側が今回追加したGhost投稿用のパネルです!

作成中のもの。右側のパネルであれこれ設定できるようにしました。
作成中のもの。右側のパネルであれこれ設定できるようにしました。

このUIなら、Obsidianから移動せず投稿できて便利ですね!

感想タイム

とりあえずうまいことできたので、ここからは感想タイムです。

Obsidianプラグインに可能性を感じた

今回Obsidianプラグインを初めて作ってみましたが、かなり汎用性が高く自分好みのものが作成できそうだなという印象を受けました。

今回はブログ執筆用のツールでしたが、Hugoとかでも似たようなことができそうですし、複数のmdファイルを統合してまとめる、なんかもAIがいればやりやすそうです。あとはSNS投稿とかかなあ、ちょっと長めの文章書いて、それを分割して投稿したりもできそうです。

いいおもちゃを手に入れたぜ!

手間を一つ省くだけで快適さはグンと上がる

正直もともとのツールでも、だいたいの人であれば我慢できる範疇だったと思います。筆者的にも別に困ってはいなかったので、夏休みでヒマだったという悲しい事実がなければ、きっとこのまま使い続けていたでしょう。

しかし、一度やってみるとめっちゃ快適でビビります。一つの画面でやりたいことが全てできるのはとても素晴らしいことだと思いました。特に筆者は画面に何を表示させるのかにこだわりがちなので、余計なものが別ウィンドウで上がってくると地味に不快な気持ちになるんですよねwwこの点を解決できたのも大きいです。Alt + Tabで移動できるウィンドウはなるべく少なくしたいからね。

最後に

だいぶ満足行く触りごこちのものができました、満足です!