🤖

Obsidian × Gemini で自分だけの「万能AIアシスタント」を作る

に公開
2025/12/26

ログ解析からSNS投稿まで。Obsidianを「AIの思考ハブ」にするCLIツールの設計と実装

はじめに

「エラーログの解析」「Web記事の要約」「SNSへの発信」...
エンジニアの日常は、AIに手伝ってほしいタスクで溢れています。

しかし、毎回ChatGPTの画面を開いてコピペするのは面倒ですし、チャット履歴は流れていってしまいます。
エンジニアなら、ターミナルから一歩も出ずに、CLIでサクサク処理したい。

そして、その結果をObsidianに知識資産として蓄積したい。

そんな願望を叶えるために、「Obsidianをハブにした、拡張可能なAI処理ツール」 をTypeScriptで作ってみました。

単なる自動投稿ツールではありません。
Strategyパターンを採用することで、アイデア次第でどんなタスクにも対応できる「俺だけの最強AIアシスタント」の作り方を紹介します。


作ったもの

Obsidan-ai-cli (仮) というCLIツールです。

ObsidianのVault(保管庫)と連携し、AIによる解析とSNS投稿を自動化します。

アーキテクチャと技術スタック

  • 言語: TypeScript (Node.js)
  • AI: Google Gemini API (google-genai)
  • SNS: X-API (twitter-api-v2)
  • CLI UI: @inquirer/prompts
  • 設計: Strategyパターンを採用

主な機能

  1. Obsidian連携: 指定したノートの内容を読み込み、AIのコンテキストとして使用。
  2. AI提案: Google Gemini API (gemini-2.5-flash) が、記事内容を元にX向けの投稿案を3つ生成。
  3. 対話型UI: ターミナル上で矢印キーを使って投稿案を選択。
  4. 自動投稿: 選択した内容をX-API経由で即時投稿。
  5. ログ保存: 生成された案や投稿結果は、全てObsidianのログファイルに追記保存。

このツールでできること(ユースケース)

このツール Obsidian-ai-cli (仮) は、実行時に --mode オプションを切り替えるだけで、全く異なる振る舞いをします。

ケース1: 普通にGeminiに聞きたい (--mode=general)

general-mode

通常モードコマンド例: ai "今日は何の日?"  cat my-notes.md | ai

ちょっとした質問ならターミナルから直接Geminiにアクセス、もちろんパイプ "|" を使って出力結果をそのままGeminiに投げることもできます。

ケース2: エラーログの爆速解析 (--mode=debug)

開発中、謎のエラーが出た時。ログをコピペしてAIに投げる手間すら惜しいですよね。
debug-mode

デバッグモードコマンド例: debug error.log

これだけで、AIがエラーログを読み込み、根本原因と解決策を提示してくれます。
さらに、その解析結果は自動的にObsidianの Inbox/YYYY-MM-DD/ にMarkdownとして保存されます。
「あの時のエラー、どうやって直したっけ?」が、勝手に知識ベース化されていくのです。

ケース3: 技術メモからのSNS投稿 (--mode=xpost)

Obsidianに書いた技術メモやブログを、X(Twitter)にアウトプットしたい時。

  1. Obsidianのノートを読み込む。
  2. AIが「技術者ウケする#ハッシュタグを含めた投稿案」を3つ生成。
  3. ターミナル上で好きな案を選択(対話モード)。
  4. XのAPI経由で即時投稿。
  5. AI作成の投稿案をObsidianに追記する。

X-post-mode

X-Postモードコマンド例: xpost myarticle.md "テンション高め元気な感じの投稿で"

AIに丸投げするのではなく、「AIが提案し、人間が選ぶ」 というフローにすることで、誤爆を防ぎつつ質の高い発信が可能になります。

こだわりの実装ポイント

1. Strategyパターンによる拡張性

このツールの真価は、「やりたいことが増えたら、Strategyクラスを足すだけ」 という拡張性にあります。

もし if (mode === 'debug') { ... } else if ... のように書いていたら、機能が増えるたびにコードがスパゲッティ化していたでしょう。 そこで、Strategy(戦略)パターンを採用しました。

2. 共通の仕組み (BaseStrategy)

全てのモードは、以下の共通フローを持っています。

  1. 入力: パイプまたはファイルからデータを取得。
  2. 保存: 原文をObsidianに保存。
  3. 解析: Gemini API にプロンプトと共に投げる。
  4. 追記: 結果をObsidianに追記する。

2. モードごとの特化 (ConcreteStrategy)

各モードは、この共通フローの一部を「上書き(オーバーライド)」するだけで実装できます。

• DebugStrategy: エラー解析用にプロンプトをカスタマイズするだけ。

• XPostStrategy: 解析後に「対話モード」を起動し、X-APIを叩く処理を追加。

3. ObsidianServiceによる責務の分離

ファイル操作(読み込み、保存、追記)を ObsidianService クラスに集約しました。

これにより、ビジネスロジック側は obsidian.readContextNote() や obsidian.appendAnalysisResult() といった抽象度の高いメソッドを呼ぶだけで済み、コードの見通しが良くなりました。


開発中にハマったポイント(TIPS)

🛑 Geminiのレートリミット (429 Error)

gemini-2.5-flash で制作していたところ、無料枠の制限(1日あたりのリクエスト数上限)にすぐに引っかかってしまいました。

開発中にテストで大量のログを読み込ませたのが原因だと思います。 皆さまも、ご使用にはご注意ください。

まとめ

このツールは「完成品」ではなく、「あなたのためのフレームワーク」 です。

AIに使われるのではなく、「AIをパートナーとして使いこなす」 感覚が得られるのが、このツールを使用する最大の魅力です。

• 毎朝のニュースを要約させるもよし。

• コードのレビューをさせるもよし。

• 英語のドキュメントを翻訳させるもよし。

Obsidianという「第二の脳」と、Geminiという「優秀な頭脳」を直結させることで、エンジニアの生産性はもっと上がります。

ソースコードはGitHubで公開しています。 ぜひフォークして、あなただけの最強Strategyを追加してみてください!

https://github.com/hustea-dev/obsidian-ai-cli.git

GitHubで編集を提案

Discussion