
Claude CodeのMarkdownレビュー環境を整えた 〜 Ghostty × Obsidian × Automator構成 〜
こんにちは。リテールアプリ共創部で事業企画を担当しているかめだです。
AI秘書(Claude Codeで動くカスタムエージェント)を業務に組み込んでから、Markdownファイルが毎日大量に生成されるようになりました。調査レポート、提案書ドラフト、日報、議事録、仮説書……。
これらをすばやくレビューするための環境を整えたので、構成・設定・ハマりポイントをまとめます。
1. 前提のフォルダ構成
この記事では以下のフォルダ構成を前提に説明します。ai-nina はClaude Codeを起動するホームフォルダ(AI秘書Ninaの作業場所)、folder2・folder3 は実際には案件名や用途別のフォルダ名(提案、調査、ブログ等)に読み替えてください。
~/Documents/ ← Obsidian vaultのルート
├── ai-nina/ ← Claude Codeを起動するフォルダ(エージェントのホーム)
│ └── CLAUDE.md
├── folder2/ ← 別用途のmdファイル群(Obsidianで普段使っている場所など)
├── folder3/ ← さらに別用途のmdファイル群
└── excluded/ ← Obsidianの検索対象から外したいフォルダ
ポイントは以下の2つです。
- Obsidian vaultのルートを
~/Documents/に設定して、複数フォルダを1つのvaultに統合する - Claude Codeは
ai-ninaで起動する。生成物はai-nina配下にも、別フォルダ(folder2・folder3)にも出力されうる
2. やったこと
最終的に落ち着いた構成は以下のフローです。
Ghostty(ターミナル)
↓
Claude Code CLI(ai-nina配下で動作)
↓
出力内にmdファイルパスが紫色のリンクとして表示
↓
Cmd+Click
↓
open <path> が実行される
↓
「Open in Obsidian.app」(Automator製・.mdのデフォルトハンドラ)
↓
obsidian://open?vault=Documents&file=<パス> に変換してObsidianに渡す
↓
Obsidian(vault: ~/Documents/)が該当ファイルを開いて表示・編集可能
| コンポーネント | 役割 |
|---|---|
| Ghostty | ターミナル。OSC 7でCWDをトラッキング、mouse-shift-capture = always でTUI内リンク操作を有効化 |
| Obsidian | mdビューア兼エディタ。vaultを ~/Documents/ 全体に拡張して複数フォルダを統合 |
| Open in Obsidian.app | Automatorで作った中継アプリ。obsidian:// スキームへの変換を担う |

3. できるようになったこと
- Claude Codeのチャット内に出力されたファイルパスを
Cmd+Clickするだけで、対象ファイルがObsidianで即時開く - 開いたファイルはそのまま編集できる(ビューアではなくエディタとして機能)
ai-nina/、folder2/、folder3/すべてが単一vaultとして統合されているため、どのフォルダのファイルも1操作で開ける- コンテキストスイッチはほぼゼロ。Claude Codeとの対話フローを切らずにレビューできる
4. セットアップ詳解
4-1. Ghostty
~/.config/ghostty/config に以下の1行を追加します。
# TUIアプリ(Claude Code等)内でも Cmd+Click でリンクを開けるように
mouse-shift-capture = always
Claude Code内でリンクを開くための必須設定です。意味は後述します。
4-2. Obsidian vault統合
Obsidianの設定でvaultのルートを ~/Documents/ に変更します。これで ai-nina/、folder2/、folder3/ がすべて1つのvaultに統合されます。
4-3. zshへのOSC 7追加
GhosttyでCmd+Clickすると、テキスト内のファイルパスをリンクとして開けます。ただし、相対パスを正しく解決するためには、Ghosttyがシェルの現在のカレントディレクトリ(CWD)を把握している必要があります。
OSC 7は「シェルの現在地をターミナルに通知する」エスケープシーケンスです。~/.zshrc に以下を追加します:
# OSC 7: シェルのCWDをターミナル(Ghostty)に通知
# これでCmd+Clickが相対パスを正しく解決できる
autoload -Uz add-zsh-hook
function _osc7_chpwd() {
local url="file://${HOST}${PWD// /%20}"
printf '\e]7;%s\e\\' "$url"
}
add-zsh-hook chpwd _osc7_chpwd
_osc7_chpwd
chpwd フックにより、cd するたびに自動でGhosttyに現在地が伝わります。
4-4. Automatorによる中継アプリ「Open in Obsidian.app」
なぜ中継が必要か: Obsidianは open -a Obsidian /path/to/file.md で直接ファイルパスを渡しても、そのファイルを開いてくれません。Obsidianはvault内のファイルしか認識せず、obsidian://open?vault=<vault名>&file=<相対パス> というURL schemeで指定する必要があります。
Automatorでこの変換を行う中継アプリを作ります。
作り方:
- Automator.app を起動 → 「新規書類」→「アプリケーション」を選択
- アクションから「シェルスクリプトを実行」をドラッグ
- 「入力の引き渡し方法」を「引数として」に変更(デフォルトは「標準入力として」。ここが最大の罠。後述)
- 以下のスクリプトを貼り付け:
for f in "$@"; do
if [[ "$f" = "$HOME/Documents/"* ]]; then
rel="${f#$HOME/Documents/}"
encoded=$(/usr/bin/python3 -c \
"import urllib.parse,sys; print(urllib.parse.quote(sys.argv[1]))" \
"$rel")
/usr/bin/open "obsidian://open?vault=Documents&file=$encoded"
else
/usr/bin/open -a Obsidian "$f"
fi
done

5. /Applications/Open in Obsidian.app として保存
6. Finderで任意の .md ファイルを右クリック → 「情報を見る」→「このアプリケーションで開く」で Open in Obsidian を選択 → 「すべてを変更」
7. 確認:
brew install duti
duti -x md
# open-in-obsidian.app が出ればOK
4-5. Claude Code内でのCmd+Click
Claude CodeはTUI(テキストユーザーインターフェース)として動作するため、マウスイベントをキャプチャしています。Ghostty側でマウスイベントを処理してほしいときは mouse-shift-capture = always を設定しておきます。
この状態でClaude Codeの出力内のファイルパスを Cmd+Click すると、open <path> が実行され、Open in Obsidian経由でObsidianが開きます。
4-6. CLAUDE.mdにリンク出力ルールを追加
Claude Codeは ~/Documents/ai-nina で起動していますが、出力されるファイルパスはai-nina配下だけでなく別フォルダ(folder2・folder3 等)の参照も混ざります。相対パス運用だとCWD基準の解決に依存してしまい、別フォルダ参照がすぐ壊れるので、全パスを絶対パスで統一する方が安定します。
加えて、Ghosttyの Cmd+ホバー 時のリンク検出は「パス直後の文字」に敏感で、行末単独のパスやパス直後に日本語が隣接したパスは拡張子以降まで巻き込んで無効なパスになります。これを避けるには「パス+半角スペース+後続文字」の形か、Markdownリンク形式で出力する必要があります。
~/Documents/ai-nina/CLAUDE.md に以下を追記します:
## リンク出力ルール
- ファイルパスは常に絶対パスで出力する(ai-nina配下でも例外なし)
- フォーマットは次のどちらかを使う:
- Markdownリンク形式 `[ラベル](/Users/<username>/Documents/.../file.md)`
- パス+半角スペース+後続テキスト `/Users/<username>/Documents/.../file.md — 説明`
- NGパターン: 裸の絶対パスを行末単独で置く / 相対パス / パス直後に日本語がスペースなしで隣接
- これはGhosttyのCmd+ClickでObsidianから確実に開けるようにするため
ルール1行で直るのがCLAUDE.mdの強いところです。
5. ハマったこと
| # | 症状 | 原因 | 解決策 |
|---|---|---|---|
| 1 | open -a Obsidian file.md でObsidianが開くが、中身が表示されない |
ObsidianはvaultルートからのURL schemeでしかファイルを開けない仕様 | obsidian://open?vault=<name>&file=<エンコードされた相対パス> を使う |
| 2 | Automatorスクリプトに引数が渡らない($@ が空) |
デフォルトの「入力の引き渡し方法」が「標準入力として」になっている | 「引数として」に変更する |
| 3 | Cmd+Click で相対パスが解決できない(ファイルが見つからないエラー) |
GhosttyがシェルのCWDを知らないため、パスの補完ができない | .zshrc にOSC 7 emitを追加する |
| 4 | Claude Code内で Cmd+Click がまったく反応しない |
TUIとして動くClaude Codeがマウスイベントをキャプチャしている | mouse-shift-capture = always を設定する |
| 5 | .md のデフォルトアプリ変更ダイアログで Open in Obsidian が出てこない |
Obsidianは .md の公式ハンドラとして登録されていない。独自アプリも初期状態では見えない |
「その他...」→「有効なアプリケーション」を「すべてのアプリケーション」に切り替えて選択 |
| 6 | Ghostty設定に link = file-path を追加したらエラー |
Ghostty 1.3.1では link 設定が未実装(公式ドキュメントにも「TODO: This can't currently be set!」と記載) |
設定しない。デフォルトのファイルパス認識に任せる |
| 7 | Claude Code内でクリックしても無反応、あとから大量発火 | TUIマウスキャプチャとGhosttyのイベント処理の競合。既知バグとして複数報告あり(後述) | mouse-shift-capture = always のまま維持してアップデート待ち |
| 8 | CLAUDE_CODE_DISABLE_MOUSE=1 を設定したら完全に開かなくなる |
マウスイベント処理自体が無効化されるため、Cmd+Click のイベントも行き場を失う |
この環境変数は設定しない |
| 9 | Claude Code起動フォルダ外のファイルがリンクとして解決されない | OSC 7のCWD基準で相対パスを解決するため、別フォルダの相対パスは解決できない | CLAUDE.mdに「全パス絶対パスで出力」ルールを追加(ai-nina配下も例外なし) |
| 10 | 同一パスなのに開けたり開けなかったりする | Cmd+ホバー時のリンク検出が拡張子の後の改行や隣接文字を巻き込んで無効なパスになる。Cmd+ホバー時の下線が .md で止まれば成功、拡張子以降まで引かれると失敗する |
パス出力時は同じ行に後続テキストを置く(path ← 説明)か、Markdownリンク形式 [ラベル](path) を使う。行末単独はNG |
6. 既知バグ (遅延発火・一括発火)
ハマりポイント7は少し補足が必要です。
mouse-shift-capture = always を設定していても、Claude Codeのバージョンやタイミングによっては Cmd+Click が取りこぼされることがあります。無反応だったクリックが溜まって、何かのコマンド実行をトリガーに一気に発火して大量のファイルがまとめて開く、という現象です。
以下のGitHub issueで同じ症状が複数報告されています。
- ghostty-org/ghostty #11907 — OSC 8 hyperlinks not clickable via Cmd+click
- ghostty-org/ghostty Discussion #11908 — Cmd click on local references working for anyone?
- ghostty-org/ghostty Discussion #10974 — Mouse text selection becomes erratic when Claude Code is running
現時点では根本的な回避策はなく、Ghostty/Claude Codeのアップデートで修正されるのを待っている状態です。
7. まとめ
最終的な構成は3点セットです。
- Ghostty:
mouse-shift-capture = always+ OSC 7 - Obsidian: vault を
~/Documents/に統合、不要フォルダをExcluded Files + File Hiderで除外 - Open in Obsidian.app: Automatorで作った .md のデフォルトハンドラ
AIが大量のドキュメントを生成する環境では、レビュー環境の整備が直接的な生産性に影響します。Claude Codeとターミナル中心で作業していて、mdレビューに手間を感じている方の参考になれば幸いです。
では、おつかめ!








