本記事は Zenn で公開した実測記事の Qiita 版です (筆者本人による転載・一部再構成)。
新しいセッションを開くたびに、「このプロジェクトは JWT 認証を採用していて、ミドルウェアの構成が……」と最初から説明していないでしょうか。私もそのうちの一人でした。
上限に達して別の AI に移ったときも同じです。翌日 Claude Code に戻れば、前日そちらで話した内容は引き継がれていません。3 回目の説明になります。
これがあまりに面倒で、たどり着いた発想が 「プロジェクトの状況を外部のファイルに記録しておいて、それを毎回 Claude に参照させればいいのでは」 でした。ただ、最初のやり方はうまくいきませんでした。この記事は、失敗を経て今の形に落ち着くまでの記録です。
Before: 作業が終わったあとに、人間が Notion に書き残す
最初に作った仕組みは単純でした。その日の作業が終わったら、「やったこと・決めたこと・残りのタスク」を自分の手で Notion のページにまとめておく。 翌日はそのページを Claude に読ませてから作業を始める、という運用です。
これは続きませんでした。理由ははっきりしています。「記録をまとめる」が、作業が全部終わったあとの追加作業になっていたからです。 余裕のある日は書けます。しかし実装に追われた日は「疲れたから明日まとめよう」になり、その明日も書かない。記録は、忙しい日 = 一番動きがあった日から順に抜けていきます。
そして止まった記録は、ただ古いだけでは済みませんでした。1 週間前の状態で止まったページを Claude に読ませると、とっくに解決済みのバグを「未解決の課題」として引き継いでしまうのです。その食い違いを口で訂正しているうちに、結局「最初から説明する」のと同じ手間に戻っていました。
つまり弱点は Notion ではなく、「人間が・あとで・手で書く」という 3 点そのものでした。記録先を Obsidian に変えるだけでは、何も解決しません。
After: 作業が一区切りつくたびに、AI が Obsidian に書く
今の形は、この 3 点を全部裏返したものです。書くのは AI・タイミングは作業の直後・人間の手作業はゼロ。
具体的には、Obsidian の vault (ノートを保管しているフォルダ) を WSL 側に繋ぎ、Claude Code に「タスクが一区切りついたら、現況ファイル (プロジェクトの今の状態を 1 枚にまとめたメモ。詳細は後述) を自分で更新すること」というルールを与えます。作業をした本人である Claude Code がその場で書くので、記録は常に最新で、人間があとからまとめ直す工程がそもそも存在しません。
次のセッションは**「現況ファイルを読んで、続きをやって」の一言**で始まります。背景説明は、もう書きません。
設定にかかる時間は 10 分です。前提は Windows 11 + WSL2、Obsidian は Windows 側、Claude Code は WSL 側にインストール済み、という構成になります。
最初の壁: WSL と Windows でファイルシステムが別
やることは「Obsidian の vault を Claude Code から触れるようにする」だけです。ところが、ここに 1 つ壁があります。
Claude Code は WSL 上で動き、Obsidian は Windows 上で動きます。同じ PC なのに、ファイルシステムが別世界です。
最初に試したのはシンボリックリンクでした。
ln -s /mnt/c/Users/<username>/Obsidian/my-vault ~/vault
簡単ですし、これでいけるだろうと思ったのですが、Claude Code がシンボリックリンク越しにファイルを書き込めないケースがありました。読めるけれど書けない。文脈を蓄積させたいのに書けないのでは意味がありません。
たどり着いたのが bind mount です。WSL の fstab で Windows フォルダを直接マウントすると、Claude Code からは普通のローカルファイルと区別がつきません。
- Claude Code が確実にファイルを読み書きできる
- パスが安定するので
CLAUDE.mdに書いて参照できる - アクセス時に自動マウントされる (起動コストがかからない)
手順: bind mount で繋ぐ (10 分)
1. マウントポイントを作る
mkdir -p ~/projects/vault
プロジェクトディレクトリと同階層に置くと cd ../vault で行けて便利です。
2. WSL の設定を書く
/etc/wsl.conf に以下を追加します。
[boot]
systemd=true
[automount]
mountFsTab=true
options="metadata,umask=022,fmask=111"
3. fstab に 1 行足す
/etc/fstab に以下を追加します (1 行です)。
/mnt/c/Users/<WinUser>/Obsidian/<VaultName> /home/<WslUser>/projects/vault none noauto,x-systemd.automount,bind,x-systemd.requires-mounts-for=/mnt/c 0 0
パスの読み替えはこうなります。
| 書き方 | |
|---|---|
| Windows のパス | C:\Users\taro\Obsidian\my-vault |
| fstab に書く形 | /mnt/c/Users/taro/Obsidian/my-vault |
| マウント先 (WSL) | /home/taro/projects/vault |
4. WSL を再起動する
PowerShell で実行します。
wsl --shutdown
5. 動作を確認する
# systemd が有効か → "systemd" と出れば OK
ps -p 1 -o comm=
# マウントされているか
mountpoint ~/projects/vault && echo "OK: 連携完了"
# ファイルが見えるか
ls ~/projects/vault
6. 双方向で書けることを確かめる
# WSL → Windows
echo "# Test from WSL" > ~/projects/vault/_test.md
# → Obsidian 側で _test.md が見えれば OK
# Windows → WSL
# Obsidian で _test2.md を作成してから
ls ~/projects/vault/_test2.md
両方通れば連携完了です。テストファイルは消して構いません。
繋いだ後にやること: 3 つの運用パターン
ここからが本題です。bind mount が繋がったら、次は Claude Code にどう使わせるか。
① 現況ファイルを 1 枚置く (いちばん効く)
現況ファイルとは、「このプロジェクトが今どこまで進んでいるか」を 1 枚にまとめた Markdown ファイルです。 進捗・残タスク・意思決定の 3 つを書き、作業のたびに更新しながら使い回します。仕様書ではなく、自分あての引き継ぎメモだと思ってください。
プロジェクトごとに 1 つ作り、「この情報はここを見れば分かる」という置き場所を 1 か所に決めます。
これがあるかないかで、セッションの始まり方がこう変わります。
| 現況ファイルなし | 現況ファイルあり | |
|---|---|---|
| セッションの最初に打つこと | 「認証は JWT で、ミドルウェアの構成は……」と背景を 10 行 | 「現況.md を読んで、続きをやって」の 1 行 |
| 前回なぜその技術を選んだか | 人間の記憶の中だけ。1 か月後には消えている | 意思決定ログとして残り、AI も読める |
| 残タスクの把握 | チャットを遡って探す | ファイルの上から 3 行目にある |
中身はこれくらいで足ります。凝ったフォーマットは必要ありません。
# MyProject 現況ステータス
## Phase 進捗
| Phase | 状態 | 完了日 |
|-------|------|-------|
| 認証基盤 | ✅ 完了 | 03-01 |
| ダッシュボード | 🔧 作業中 | — |
## 直近の残タスク
- [x] JWT 認証の実装
- [ ] ダッシュボード UI → 今ここ
- [ ] E2E テスト追加
## 意思決定ログ
| 日付 | 決定 | 理由 |
|------|------|------|
| 03-01 | JWT 採用 | セッション管理不要の API 設計に合致 |
| 03-01 | Tailwind 採用 | コンポーネント単位のスタイリングに適合 |
セッションの開始時に、こう頼みます。
「~/projects/vault/Projects/MyProject/現況.md を読んで、続きをやって」
これだけで前回の文脈が戻ります。チャット履歴が消えても、知識の方は残るという状態です。
ポイントは 2 つあります。AI に読ませるためのファイルが、人間にとっても読める引き継ぎメモになっていること。 そして次のパターン ② と組み合わせると、更新するのが AI 側になるので、人間が転記を続ける必要がなくなることです。冒頭で書いた「Notion が続かなかった」問題が、ここで解消されます。
② CLAUDE.md にパスを書いて、自律的に更新させる
Claude Code の CLAUDE.md に、Obsidian 側のパスと更新ルールを定義しておきます。
# CLAUDE.md
## 知識ベース
- 現況ファイル: ~/projects/vault/Projects/MyProject/現況.md
- 技術メモ: ~/projects/vault/Notes/
- 意思決定ログ: 現況ファイル内の「意思決定ログ」セクション
## ルール
- タスクが一区切りついたら、現況ファイルを更新すること
- 重要な意思決定は意思決定ログに追記すること
こうしておくと、こちらが指示しなくても Claude Code の側から現況ファイルを更新するようになります。「あとでまとめよう」を人間の意志力に頼らないのがポイントです。
③ git ログを日誌に自動追記する
#!/bin/bash
# 今日の git コミット履歴を Obsidian に記録
DATE=$(date +%Y-%m-%d)
LOG="$HOME/projects/vault/Journal/${DATE}.md"
echo "## 開発ログ - $(date '+%H:%M')" >> "$LOG"
git log --since="today" --pretty=format:"- %s" >> "$LOG"
echo "" >> "$LOG"
これを Claude Code に「毎日実行して」と頼めば、開発ログが自動で溜まっていきます。
詰まったときの 4 パターン
起動時に「Processing /etc/fstab failed」と出る
fstab のパスやオプションにタイポがある可能性が高いです。手動マウントで詳細なエラーを確認します。
sudo mount -a -v
vault フォルダが空のまま
automount は最初のアクセス時にマウントされる仕組みです。ls で触れば発動します。
ls ~/projects/vault
Claude Code がファイルに書き込めない
シンボリックリンクのままになっていないか確認します。
mountpoint ~/projects/vault
# → "is a mountpoint" と表示されれば bind mount になっている
シンボリックリンクだった場合は手順 3 からやり直しです。
Windows 側の編集が WSL に反映されない
再マウントで解決します。
sudo umount ~/projects/vault
ls ~/projects/vault # 自動マウントが再発動する
まとめ
Notion で失敗したときとの違いは、記録を書く担当が人間から AI に移ったことだけです。仕組みとしては、bind mount で繋いで、CLAUDE.md に「タスクが一区切りついたら、現況ファイルを更新すること」と書いた。それだけで、続かなかったものが続くようになりました。
副次的な効果もありました。記録先が Obsidian のファイルなので、過去に何を決めたかを全文検索で辿れます。 「どのチャットで話したっけ」が無くなりました。
10 分の設定で、Claude Code との会話が「揮発する情報」から「蓄積する資産」に変わります。私自身、プロダクト開発と記事執筆の両方をこの構成で回しています。
同じ「情報を 1 か所に集めて AI に読ませる」構造を、開発ではなく業務の案件管理に広げた記録 (50 案件の進捗確認を Claude に任せた話) は、note の実践パッケージ にまとめています。
参考リンク
🔍 moname_ai — Claude を本業で使い倒した実測記録を書いています。続きは Bluesky (@moname-ai.bsky.social) で。
📢 8/29(土) にオンライン勉強会をやります
記事で書いている「AI に任せる仕組み」の実物を、40 分でお見せします。50 案件の進捗催促を Slack・スプレッドシート・cron で自動化した構成とデモ、うまくいかなかった部分も含めて話します。オンライン・無料・定員 20 名です。