ターミナル生活を支えるClaude Code設定

ターミナル生活を支えるClaude Code設定

ターミナルの住民がClaude Codeとどう生活を営んでいたかを書きました。ネタがあまりなく、ターミナルに限らないClaude Codeの設定の話もあります 🙇
2025.12.22

はじめに

本記事はクラスメソッド AI駆動開発 Advent Calendar 2025 23日目の記事です。

自分は開発は基本ターミナル上(WeztermとNeovim)で行っています。ゴリゴリにカスタマイズしているかと言われるとそうではないです。逆に言うと導入しやすいものが多いかなと思い今回記事にします。うまくいかなかったことも書こうと思います。

今年の7月くらいに設定してから、あまりキャッチアップできておらず、古い部分もあると思いますがご容赦ください。逆に自分はこうやって活用しているよ!というコメントはとてもありがたいので記事を引用してガンガンフィードバック頂けると嬉しいです😭

ターミナルに関わらないClaude CodeのTipsも多いのでそちらも興味があれば読んで頂けると幸いです🙇

今年の8月にdotfiles管理について、Claude Code Meetup Japan #2で話した内容と分野的には近い内容です。

https://speakerdeck.com/shuntaka/lets-manage-claude-code-with-dotfiles

活用するためにしていること

前提

  • ClaudeはMax 100プランを利用
  • サーバーサイド、インフラのコードを書くことが多い
  • ツール関係はdotfilesで管理
    • nix🔰で、OSレベルはnixで、アプリレイヤーはmiseを使っています

https://github.com/shuntaka9576/dotfiles

Claudeの設定ファイルは以下です。

https://github.com/shuntaka9576/dotfiles/blob/d398d45711032d9b28a2b20fa5dccdf3da0819ff/home-manager/programs/claude/settings.json#L1-L44

プロジェクトの操作

1リポジトリあたりtmuxのwindowを4つ立てています。これをoption + 矢印キーで移動します。

0(lazygit) 1(Neovim) 2(コマンド叩く用) 3(Claude Code)
CleanShot 2025-12-22 at 19.33.44@2x CleanShot 2025-12-22 at 19.33.57@2x CleanShot 2025-12-22 at 19.34.09@2x CleanShot 2025-12-22 at 19.33.33@2x

Claude Codeは縦に分割して3ペインくらい立てることが多いです。

CleanShot 2025-12-22 at 19.33.33@2x

常時3ペイン稼働していることは稀です。。レビュー途中のPRとかは消さずに残しています。

あとは、会話をforkしたくなるケースがあります。それは claude -r から 同じセッションに入って、時にESC ESCで遡ってforkしています。

xコマンドで、この4 windowが起動するようになっています!

CleanShot 2025-12-22 at 19.32.56

ESC ESCで遡るほどでもないClaude Codeの差分はlazygitで捨てたりしています。

Slash commands

グローバルで使うスラッシュコマンドを格納しています。プロジェクトのリポジトリの方によく使うものはあってあまり使っていないのが正直なところです。

https://github.com/shuntaka9576/dotfiles/blob/d398d45711032d9b28a2b20fa5dccdf3da0819ff/home-manager/programs/claude/commands/create-pr.md#L1-L78

Status line

現在はコンテキストの量だけ表示しています。色々表示していた時期もありましたが、活用できておらずこれだけになりました。ハードに使っている人はリセットのタイミングもあると良いと思いますね。自分の使い方的にはまだ必要ないです。

CleanShot 2025-12-11 at 16.26.17@2x

表示のスクリプトはこちらを参考にしてください。

https://github.com/shuntaka9576/dotfiles/blob/d398d45711032d9b28a2b20fa5dccdf3da0819ff/home-manager/programs/claude/statusline/statusline.ts#L1-L123

ただコンテキスト量は昔ほど気にしなくて良いと思っています。理由として圧縮する際に、planファイルが再度読み込まれるところにあります。

Hooks

通知のみに活用しています。リポジトリ名とブランチ名を出しています。複数のリポジトリで作業しているとき、多少役に立ちます。
CleanShot 2025-12-22 at 17.53.27@2x

https://github.com/shuntaka9576/dotfiles/blob/d398d45711032d9b28a2b20fa5dccdf3da0819ff/home-manager/programs/claude/settings.json#L12-L35

通知スクリプトは以下でosascriptを利用しています。

https://github.com/shuntaka9576/dotfiles/blob/d398d45711032d9b28a2b20fa5dccdf3da0819ff/home-manager/programs/claude/hooks/notify.ts#L1-L115

ただモニターが複数ある場合、見落とすことがあるので確実に気づきたいなら音の方が確実だと思います。

Hooksで静的解析にトライしたことがありましたが、意図しない発火でコンテキスト圧迫したり、AIの実装の試行錯誤の作業妨害になりやめました。exit 2 stderrでAIに返却できるのでコマンドラッパーを書いたのですが、あまり活用はできなかったです。。

https://github.com/shuntaka9576/blocc

CLAUDE.mdに書いたり、プロンプトで指示する形で落ち着いています。静的解析からの修正はHooksを使うより、huskyやlefthookの方がpushのタイミングで発火するように調整できるので 相性が良いです。(個人的にはturboのような結果をキャッシュしてくれるツールがあるとストレスが少ないと思います)

Claude Codeのバージョン運用

9割の人はデフォルトの自動アップデートで良いと思います。自分はアップデートされたことを知りたいので、別の方法をとっています。

自動アップデートをOFFにして、アップデートがあったらdotfilesにrenovateからPRが来るようにしています。

CleanShot 2025-12-22 at 18.08.18@2x

CHANGELOGと付き合わせてアップデート内容をなぞったりすると良いですね(Claude Codeはクローズドソースなので、CHANGELOGが遅いのでタイミング的にない場合があります)
CleanShot 2025-12-22 at 18.09.01@2x

この実現方法は、パッケージ名@バージョンの形式のファイルを用意します。

https://github.com/shuntaka9576/dotfiles/blob/d398d45711032d9b28a2b20fa5dccdf3da0819ff/home-manager/programs/pnpm/global-packages#L1-L17

上記のファイルをrenovateのcustomManagersの正規表現でパースしています。

https://github.com/shuntaka9576/dotfiles/blob/d398d45711032d9b28a2b20fa5dccdf3da0819ff/renovate.json#L35-L42

minimumReleaseAgeの設定と、最新を追いたい特定のツールに関してはプロバイダーを信頼して除外設定も入れておくなど柔軟に対応可能です。

https://github.com/shuntaka9576/dotfiles/blob/d398d45711032d9b28a2b20fa5dccdf3da0819ff/renovate.json#L17-L34

pnpmはグローバルに入れるツールを設定ファイルで定義できないので、Makefileで先ほどの一覧をループして導入しています。。ここら辺はもっと良いやり方がありそうです。。

https://github.com/shuntaka9576/dotfiles/blob/d398d45711032d9b28a2b20fa5dccdf3da0819ff/Makefile#L36-L40

@シンボル検索

シンボル検索はClaude Codeのバージョンによって挙動が安定しない印象があります。v2.0.75を前提に書きます。

例えば以下のケースです。

  • gitignoreしたけど、@シンボル検索したいファイル
  • コミットしたけど、@シンボル検索したくないファイル

まず検索方法を固定します。これでClaude Codeのバンドルされたrgが使われないので、挙動を安定させられると思っています。

https://github.com/shuntaka9576/dotfiles/blob/d398d45711032d9b28a2b20fa5dccdf3da0819ff/home-manager/programs/claude/file-suggestion.sh#L1-L4
https://github.com/shuntaka9576/dotfiles/blob/d398d45711032d9b28a2b20fa5dccdf3da0819ff/home-manager/programs/claude/settings.json#L40-L42

では「gitignoreしたけど、@シンボル検索したいファイル」を検索候補にする方法を試します。.gitignoreされているtargetディレクトリを@シンボル検索としたいとします。画像のように検索されません。

CleanShot 2025-12-22 at 19.23.02@2x

.ignore 設定を入れます。

.ignore
!target/

以下のように検索が有効化されます。
CleanShot 2025-12-22 at 19.25.23@2x

ニッチですが、ログ形式をパースしたときなど結構有用かなと思います。

次に「コミットしたけど、@シンボル検索したくないファイル」です。examplesは指定する機会がないとします。

CleanShot 2025-12-22 at 19.29.02@2x

.ignore 設定を入れます。除外なので!は設定しません。

.ignore
examples

するとexamplesディレクトリは表示されません。

CleanShot 2025-12-22 at 19.30.02@2x

このように検索を最適化することで、よりプロンプトを書くコストを省力化できます。

完全にコントロールする場合、全てを検索対象にして、除外を決める方法もあります。

.ignore
!*
git

その他

Claude Codeで壁打ちした内容を気軽に共有できると面白そうだなと思い、最近はClaude Codeの履歴を取り出してjinja2フォーマットに沿って変換するツールを作ってみました。ミニマル構成なので応用の余地がありますが、READMEに書いた例は、UIとしてfzfを使い、$EDITORに登録しているツールでチャット履歴を変換しながら開く例です。同期で起動するnano, vim, neovimが相性いいかなと思います。

プロンプトを共有したり、別のコンテキストにしたり、ちょっとした調査を共有する際にClaude Codeを活用すること目論んでいます(これにより調査もターミナル上で完結する世界になります🌏)。まだドッグフーディング🐕🍚中なので、便利に使えたらまた紹介しようかなと思います!

https://github.com/shuntaka9576/chathist

他にも以下のようなことに気をつけて運用しています!

  • Claude Codeのセッションの中で一度でもコミットするとタスクの最後にコミットする癖がつく(別セッションでコミットさせる)
  • PR作成はslashコマンドで可能だが、読んだものを見落とすリスクが高く扱いが難しい。小さいものは良い。
  • MCPは現状特に入れずに運用
    • 常時起動するツールが少なく、コンテキスト圧迫を懸念してという理由
    • dotfilesにはVisual Studio Codeのfork系も一括でMCP設定するものがありますが、現状使っていません...

さいごに

今年の後半発表された機能は今触っている段階でまだこなれていないのでまた機会があれば紹介したいと思います!そういえばnixに移行したのがちょうど去年末ということで、年始は環境構築が捗りますね。

先ほどのdotfilesはターミナルだけでなく、Visual Studio Codeのfork系も共通化、設定管理をしているので、そちらも別の機会で紹介出来たらと思います!

この記事をシェアする

FacebookHatena blogX

関連記事