ObsidianとClaude Codeで個人ナレッジを動かす仕組みを作った
そもそもObsidianってなに?
ObsidianはMarkdownファイルベースのノートアプリで、ノートの実体は手元の .md ファイルなので、Notionのようなクラウド前提のサービスと違って、VS CodeやClaude Codeといった外部ツールから直接触れるのが大きな特徴らしいです。プラグインもたくさんあり、Periodic Notes / Templater / Calendarあたりが定番らしいので、今回導入しています(詳細は後述)。
公式の有料Syncサービスを使えば複数デバイス間の同期も可能で、MacとiPhoneの両方から同じノートを編集できます。
利用しているメモ系サービスとの比較
| 項目 | Appleメモ帳 | Notion | Obsidian |
|---|---|---|---|
| 保存形式 | 独自形式(iCloud上) | 独自DB(クラウド) | Markdownファイル(ローカル) |
| メモのしやすさ | 簡易なテキストでサクサク書ける | やや一手間(ブロック作成) | Markdownでサクサク書ける |
| 外部ツールから操作 | 不可 | API経由で限定的 | テキストエディタから直接 |
| 業務への活かしやすさ | 個人メモ止まり | API連携で業務利用しやすい | AIツールと統合しやすい |
| 複数デバイス同期 | iCloudで自動 | アプリ経由で自動 | Obsidian Sync(有料)で同期 |
| プラグイン拡張 | なし | テンプレ・ブロック(公式) | 豊富(コミュニティ含む) |
| 価格 | 無料 | 個人無料 / 有料 | アプリ無料、Sync $5-/月 |
なぜObsidianを導入しようとしたか
普段はVS Code + Claude Codeでコードを書いたり、色々なプロジェクトを進めており、ai-workspace というモノレポをGitHubに同期して運用しています。プロジェクトごとにCLAUDE.md(Claude Codeが読むルール集約ファイル)を置いて、運用ルールや設計のクセをそこに書き溜めています。
もともとEvernoteを長く使っていたんですが、使えなくなってしまったので、その後はAppleのデフォルトのメモ帳を使っていました。それはそれで動いてはいたんですが、せっかくならClaude Codeを使っている流れで、よい評判を聞いていたObsidianと組み合わせたほうがイケてそうだな、、と思って導入を決めました。
Obsidian SyncのStandardプラン(月5ドル)を契約して、MacとiPhoneで同期する基盤を構築。Web Clipperも入れて、ブラウザで気になる記事を見つけたら00-inbox/ フォルダに自動保存されるようにしています。
Vaultはai-workspaceと役割を分けていて、Obsidian側は構造化前の素材保管庫、ai-workspace側は構造化された情報と実装コードのハブにする、という構成にしました。ブログの下書きの前段になる素材もVaultに貯めて、書く時に集約する流れにしています。
OSSも検討したが自前実装
Vaultのセットアップを進めながらXを眺めていたら、claude-obsidian(AgriciDaniel/claude-obsidian)というリポを見かけました。Claude CodeからObsidian Vaultを操作するための仕掛けが詰まっていて、2026年4月作成にも関わらず4,500 stars。すごい。
AIと調査をした結果、自分の環境では「導入しない」という判断に至りました。 理由は3つほどあって、
- リポが1ヶ月前にできたばかりで、メンテが続くか読めない
- 既に運用しているai-workspaceのスキル運用と統合するほうが自分の環境的には筋がよさそう
- 主要価値要素(hot.md / index.md / log.md / /save / ingest / /autoresearch)は1.5〜2日で自前実装できそう
ということで、リポは「コードを読んで発想を学ぶリファレンス」として使うことに。
今回導入したObsidianのプラグイン
どのようにObsidianを活用していくかClaude Codeと相談しながら、以下のプラグインの導入を決めました。
| プラグイン | 用途 |
|---|---|
| Periodic Notes | デイリー / 週次ノートの自動生成 |
| Templater | テンプレート挿入、frontmatter自動入力 |
| Calendar | カレンダー表示、日付ナビゲーション |
| Linter | Markdownフォーマットの自動整形 |
| Advanced Tables | Markdownテーブル編集の補助 |
| Auto Link Title | URLを貼ると自動で記事タイトルを取得 |
VaultにCLAUDE.mdを置いた
VaultのルートにCLAUDE.mdを置きました。Claude CodeがVaultに入った瞬間に最初に読むファイルで、Vault全体のルール(フォルダ構造、命名規則、frontmatter規約、Freshman Rule、保存先判定ルール、ai-workspaceとの役割分担)を集約しています。
ai-workspace側にあるグローバルのCLAUDE.mdとは階層を分けていて、ai-workspace全体のルールはそっち、Vault固有のルールはこっち、という分担になっています。Claude Codeはcwdによって読むファイルを切り替えるので、自然に階層化できます。
特に大事なのがFreshman Ruleという節で、ClaudeがVaultを自動で読み書きする時の鉄則を6つ並べてあります。
- 参照元ファイル(パス + 該当行)を必ず明示する
- ファイル移動・改変の前に変更計画を提示して承認を取る(Plan-First)
- 内容の不明瞭なノートを勝手に解釈・要約しない
- 明示的な指示なしに削除しない
- 99-generated/ はClaudeの作業領域として保持、自分は直接編集しない
- 大きな整理を行ったら99-generated/operations-log.mdに追記
これらを書いておいて、Vault内のすべてのobsidian-* スキルからもconstitutionとして読み込ませる構造にしました。
ちなみにこの設計は、ziwenxu_さんのCodex × Obsidian自動化とcyrilXBTさんのSelf-Writing Vaultという2つの参考記事から要素を取捨選択して、自分のスタイルに合わせて取り込んだものです。ziwenxu_さん側の完全自動化(cronで走らせるやつ)は「相談しながら進める」自分のスタイルとちょっと合わなくて、cyrilXBTさん側のDaily Context / Weekly Synthesis的なワークフローは思想を取り込みつつ、Plan-Firstを緩めるとこは緩める形にしました。
obsidian-* スキル5つ
ai-workspaceのskills/shared/ 配下に5つ作りました。
- obsidian-organize: 00-inbox/ に溜まった未分類ノートを内容ごとに分類して適切なフォルダに移動
- obsidian-queue-process: _queue/ にあるタスクファイルを処理して99-generated/ に出力
- obsidian-daily-context: 朝に昨日のメモと進行中プロジェクトとOpen Loopsを統合してブリーフを生成
- obsidian-weekly-review: 直近1週間のデイリーとinboxとプロジェクト動向を集計して週次レビューを生成
- obsidian-connect: Vaultとai-workspaceを横断検索してテーマに関連するメモを集約
それぞれ役割が違うんですが、共通項として全スキルがVault CLAUDE.mdを @import でconstitutionとして読み込んでいて、Freshman Ruleに従って動くようになっています。出力フォーマット(frontmatter、セクション構造)も統一していて、99-generated/operations-log.mdへの追記フォーマットも揃えてあります。
スキル作成自体はskill-creatorスキルで雛形を作って、empirical-prompt-tuningスキル(mizchiさんのdotfilesを参考にさせていただきました、ありがとうございます!)でsubagent評価をかけて精度を見るのが定番の流れ。今回5つ連続で作ってみたのですが、すべてIter 1かIter 2で両シナリオ100% に到達しました。skill-creatorの規範(SKILL.md + references/ + @importで素材集約)とempirical-prompt-tuningの組み合わせがわりと強力です。
特にobsidian-connectはwrite-articleスキルとの連携を「素材集約版 → 自分が手動再発動」の二段階構成にしました。Skillを直接連鎖できない制約への現実解で、Vaultから集めた素材を99-generated/ に置いて、確認した上でwrite-articleを発動して書き始める流れ。媒体(saiso.jp / note / Substack / Zenn / Qiita / X)に応じて追加で参照する範囲もsearch-strategy.mdに書き分けてあります。
_queue/ と99-generated/
Vaultに2つ特殊なフォルダがあります。
_queue/ はClaudeへのタスク投げ込み場所。命名は動詞-トピック形式(例: RESEARCH-quantum-computing.md、SYNTHESIZE-saiso-blog-style.md)で、朝でも夜でも気が向いたタイミングで「これ調べておいて」と投げ込める。次のセッションでClaudeに「queue処理して」と言えば、obsidian-queue-processスキルが起動して中身を読んで処理してくれます。
結果は99-generated/ に置かれます。ここは手動編集禁止のフォルダで、Claudeの作業領域。「これはClaudeが書いたものですよ」という境界を物理的に分けるのが目的で、自分が編集したくなったノートは別フォルダに移動してから編集するルール。
operations-log.mdにはClaudeが何を処理したかが追記されていくので、後から「あれっていつ生成したっけ」が辿れます。地味だけど運用していくと効いてくるはず。
参考にした記事の中には完全自動化(N8Nとかcronでずっと走らせるやつ)やX bookmarksの自動スクレイピングや月次Knowledge Distillationみたいな機能もあったのですが、今回は採用しませんでした。必要性が出てきたらまた考えようかなあと思っています。
Obsidianの普段の使い方
メモの投げ込み
iPhoneのアクションボタンか、ブラウザの共有メニューから00-inboxに放り込みます。記事もポストも思いつきメモも区別せず、雑に投げる方針です。ここはとにかく簡単に、、
「これはタスク」「これはメモ」と判断しながら投げると重くなって続かないので、まず全部00-inboxに投げて、後で必要に応じて分類する形に。_queue/ フォルダもタスク用に作ったんですが、実際にはほぼ使わずに00-inbox完結で運用しています。
朝のブリーフ
Claude Codeを開いた時にobsidian-daily-contextスキルで前日のメモ・進行中プロジェクト・Open Loopsを統合したブリーフを生成しています。前日の作業ログとプロジェクト動向とOpen Loopsが1ファイルにまとまるので、次に何をやるかを考えるエネルギーがほぼ要らない状態でセッションが始まる感じです。
作業中の参照
ブログを書きたくなったり何か構想したくなった時に、Vaultから関連情報を引っ張ってきます。Claude Code側から横断検索したり、obsidian-connectスキルを呼んだり。実はこの記事もwrite-articleスキルに直接渡して書いていて、素材はai-workspace側のドキュメントがそのまま使える状態だったので集約は不要でした。
週末のレビュー
obsidian-weekly-reviewスキルは用意したものの、まだ実際にはやっていません。今週末あたり試してみる予定で、デイリーやinboxがどんな形でまとまるのか、ちょっと楽しみにしています。
寝る前の音声日記(これから試したい)
これまで日記が続いた試しがないのですが、寝る前に音声で適当につぶやくスタイルなら続くんじゃないかと思っており、これから試してみる予定です。アクションボタン → iPhoneの音声入力で「今日の日記」と宣言しつつ書く → 00-inboxに保存 → obsidian-organizeがその日のデイリーノートに統合提案、という流れが現行の仕組みでそのまま回せるはずなので、たぶん続けられるはずw
iPhoneアクションボタンの相性
iPhone 17のアクションボタンを活かしきれていなかったので、満を持してObsidianに活用!「new note」を割り当てて、外出先で思いついたメモをすぐにVaultに保存できるようにしてあります。ファイルとリンクのデフォルト保存先も00-inboxに向けて、開いたらすぐ本文を打てる、、ようにしようと思ったのですが、Obsidianの標準動作で「新規ファイル作成 → タイトルバーに強制フォーカス」というのがあって、Templaterのcursor() でも上書きできない仕様でした。せっかくアクションボタンで一発起動しても、開いた瞬間にタイトルバーに飛んでしまい、本文を打つには1タップ余計に必要、、という結果に。
暫定運用は「タイトルバー出たらリターン1タップで本文へ」。frontmatterはTemplaterで自動入力されているので、本文だけ書いて閉じる形でとりあえず動いてはいます。1〜2週間試して違和感が強ければ「capture to daily note」(その日のデイリーノートに追記する方式)に切り替えるか、tp.file.rename() で自動命名対応するか考えます。
ここは現時点で解決できていないので、今後なにかいい方法があれば導入しようと思っています。
さいごに
結局のところ、ブログにしてもメモにしても、書くまでの摩擦をいかになくせるかが続くか続かないかの分かれ目だなあと思っています。
書こうと思った瞬間に「ファイルどこに作るんだっけ」「フォーマットなんだったっけ」「あの素材どこに置いたっけ」と引っかかると、その時点で熱が冷めてやめてしまう。今回のObsidian × Claude Codeの仕組みも、書くこと自体を楽にするためじゃなくて、書きたいと思った瞬間に飛び込める状態を作るための整備、というのが本質なのかなと思っています。
仕組みが整って書くまでの摩擦が下がれば、書く量が増えて、書く量が増えれば素材が貯まって、次に書きたくなった時にまた書きやすくなるというポジティブなスパイラルに入れると思うので、Obsidianでのメモ取りをガンガンやっていきたいと思います!