🔧

AIがきっかけで開発環境を見直したら発見が多かった

に公開

はじめに — AI がきっかけで環境構築を見直した

Claude Code を本格的に使い始めてから、開発環境まわりの不満や課題が一気に顕在化した。AI がシェルでコマンドを実行する。設定ファイルを読み書きする。そのたびに「ここ、ちゃんと整備されていないな」と気づく場面が増えた。

これを機に 3 つの領域を見直したところ、想像以上に発見が多かった。

  • シェル環境: fish → zsh + zimfw
  • dotfiles 管理: 管理なし → chezmoi
  • AI エージェントの設定: 散在 → グローバル管理

本記事はその記録である。

シェル環境: fish → zsh + zimfw

AI の出力が fish で動かない

fish shell を約 7 年使っていた。補完やシンタックスハイライトが最初から充実しており、何も設定せずに使える完成度の高さが魅力だった。

しかし Claude Code を使い始めて、地味なストレスが積み重なった。AI が生成するシェルスクリプトは大半が Bash 構文である。zsh なら Bash 互換でほぼそのまま動くが、fish はインタラクティブな使いやすさを優先した独自構文を採用しており、Bash 構文の AI 出力とは相性が合わなかった。毎回手で書き換えるのは非効率だった。

加えて、長く使ううちにプラグインやカスタマイズが積み重なり、fish の起動が約 3 秒かかるようになっていた。

まず oh-my-zsh を試したが合わなかった

zsh に戻すと決めて、最初に何も考えず oh-my-zsh を入れた。しかし自分のプラグイン構成では起動に約 1 秒かかった。oh-my-zsh 自体の問題ではなく構成の問題だろうが、ターミナルでタブ作成やパネル分割のたびに遅延を感じるのは期待したほどではなかった。そこでフレームワーク自体を見直すことにした。

zimfw は fish の体験を再現できた

調べた結果、zimfw を選んだ。

zimfw は fish で欲しかった機能が大体揃っていた。補完、シンタックスハイライト、ヒストリサブストリングサーチなど、fish 的な体験を zsh 上にそのまま再現できる。移行コストは想像より低かった。

驚いたのは起動速度である。zimfw 公式のベンチマークによると、最小構成での起動時間は zimfw が約 0.06 秒、oh-my-zsh が約 0.15 秒である。実際に使ってみると、ターミナルのタブ作成やパネル分割をした瞬間に遅延を感じなくなった。fish や oh-my-zsh 時代には毎回感じていた「待ち」がなくなったのは大きい。

シェル選びを「AI との互換性」という軸で考えたことは今までなかった。結果的に、AI の出力がそのまま動く安心感を得た。加えて起動速度やモジュール管理まで fish 時代より良くなった。きっかけは AI だったが、恩恵はそれだけにとどまらなかった。

dotfiles 管理: 管理なし → chezmoi

Claude Code の設定ファイルが管理できていない

Claude Code を使い込むうちに、~/.claude/ 配下にスキルやコマンド、フックといった設定ファイルが増えてきた。これらは自分の開発ワークフローそのものであり、失いたくない。Git で管理したいと思った。

そこで dotfiles 管理ツールを検討し始めたのだが、ふと気づいた。.zshrc.gitconfig すら、どのマシンでもまともに管理していなかった。

chezmoi でまとめて管理下に置いた

chezmoi を選んだ理由は 3 つある。

  1. テンプレート機能: .zshrc.tmpl のようにテンプレート化すると、macOS と Linux など、マシンごとの差異を 1 つのファイルで吸収できる
  2. スクリプト実行: run_onchange_ プレフィックスを付けたスクリプトで、Brewfile の変更時に自動で brew bundle を実行するといった運用が可能である
  3. Git ベース: 差分が明確で、ロールバックも容易である

実際の構成はこのようになっている。

~/.local/share/chezmoi/
├── dot_zshrc.tmpl
├── dot_zimrc
├── dot_gitconfig
├── dot_claude/
│   ├── CLAUDE.md
│   ├── commands/
│   ├── skills/
│   ├── hooks/
│   └── settings.json.tmpl
├── run_once_01-install-base-darwin.sh.tmpl
├── run_onchange_02-brew-bundle-darwin.sh.tmpl
└── run_onchange_03-mise-install.sh.tmpl

dot_claude/ ディレクトリが見える通り、Claude Code の設定一式もここで管理している。

設定ファイルが各マシンに散在しているのは前から分かっていたが、あまり手間に感じていなかった。しかし実際に chezmoi で管理を始めると、chezmoi apply 一発で同期できるのは想像以上に気持ちがいい。別の PC で作業するときの安心感が段違いだった。

AI エージェントの設定: 散在 → グローバル管理

プロジェクト単位の設定では足りなくなった

最初はプロジェクトごとに CLAUDE.md を置いて運用していた。しかし AI で扱うプロジェクトが増えるにつれ、共通のルールやスキルを毎回コピーする手間が目立ってきた。「Conventional Commits にしてほしい」「main に直接 push しないでほしい」といった指示はプロジェクトを問わず同じである。グローバルに統一管理したい需要が一気に高まった。

グローバル設定とスキルで解決した

Claude Code にはグローバルとプロジェクト単位で設定を管理する仕組みがある。自分の構成はこのようになっている。

~/.claude/
├── CLAUDE.md               # グローバル行動指針
├── settings.json           # モデル・権限等の設定
├── commands/               # スラッシュコマンド(14個)
│   ├── commit-push-pr.md
│   ├── review-pr.md
│   └── ...
├── skills/                 # 再利用可能なスキル(8個)
│   ├── chezmoi/
│   ├── gtr/
│   └── ...
├── hooks/                  # 自動実行フック
│   ├── protect-main-branch.sh
│   └── protect-sensitive-files.sh
└── agents/                 # カスタムエージェント

グローバル CLAUDE.md に共通ルールを書いておくと、どのプロジェクトでも AI が最初からコンテキストを理解した状態で作業を始める。繰り返し作業はスキルとして定義すると、毎回同じ品質で実行できる。フックで main ブランチへの直接 push や機密ファイルのコミットを防いでいるのも安心感が大きい。

前述の通り、これらの設定ファイルは chezmoi で管理しているため、どのマシンでも同じ Claude Code 体験を再現できる。

AI への指示を明文化する作業は、自分の開発ワークフローの棚卸しでもあった。「自分はどういうルールで開発しているのか」「繰り返している作業は何か」を言語化する過程で、今まで暗黙的にやっていたことが整理された。

まとめ — やってみて変わったこと

一番感動したのは zimfw である。起動時間が劇的に改善され、fish で欲しかった機能が大体揃っていた。もっと早く知りたかった。

3 つの見直しに共通するのは、AI がきっかけでありながら、恩恵が AI との作業に限らなかった点である。zsh の Bash 互換性、chezmoi によるマシン間の同期、設定ファイルによる暗黙知の言語化。どれも AI がなくても価値がある。

環境構築を「見直す動機」として、AI は優秀である。普段触らない部分に手を入れるきっかけをくれる。もし AI コーディングツールを使い始めたなら、ついでに自分の開発環境も棚卸ししてみることをおすすめする。

参考リンク

  • Claude Code — Anthropic の CLI コーディングツール
  • zimfw — 軽量・高速な Zsh フレームワーク
  • chezmoi — マルチマシン対応の dotfiles 管理ツール
  • zimfw Speed Benchmark — Zsh フレームワークの起動速度比較

Discussion