こんにちは、こーでィです。
以前「git worktreeで並列開発してみた話」という記事を書きました。1つのリポジトリで複数ブランチを同時に触れるようにして、案件の切り替えコストを減らす、という内容でしたね。
あれから環境はさらに進化しまして、今ではAIエージェント(Claude Code)を複数同時に走らせて、文字どおり「並列」で案件を処理するスタイルに落ち着いています。
今回は、その作業環境を支えている2つのツール Raycast / cmux を、実際の使い方とあわせて紹介します。
なぜ「並列」なのか
Web制作の現場では、1人が複数の案件を同時に抱えるのは日常茶飯事です。そして案件には必ず「待ち時間」が発生します。
- ディレクターやお客様の確認待ち
- テスト環境へのデプロイ待ち
- ビルドやテストの実行待ち
この待ち時間に別の案件へ手を伸ばす、というのは誰もがやっていることですが、人間が頭の中でコンテキストを切り替えるのは想像以上に消耗します。「あれ、さっきこの案件どこまでやってたっけ?」が積み重なると、結局ミスにつながります。
そこで発想を変えました。待ち時間に動くのを、人間ではなくAIにする。自分が案件Aの最終確認をしている間に、案件BのコーディングはAIエージェントが進めている──そういう状態を作るのが今回のゴールです。
cmux──複数エージェントの司令塔
ここが今回の肝です。Claude Codeのようなエージェントは単体だと、基本は1セッション=1作業。これを案件の数だけ手動で立ち上げて管理するのは現実的ではありません。
そこで cmux の出番です。cmuxは複数のAIエージェントセッションを並列で立ち上げ、一覧で見渡しながら管理できるツールです。それぞれのセッションを独立した作業空間(git worktree)に紐づけられるので、
- 案件A:フォームの新規実装をコーディング中
- 案件B:レビュー指摘の修正を反映中
- 案件C:要件のヒアリング内容を整理中
を、ブランチもファイルも混ざることなく同時進行できます。冒頭の「git worktreeで並列開発」を、そのまま「AIが並列開発」へ拡張した形ですね。
今の運用はこんな感じです。
新しい案件に着手するときは、まずcmuxで新規タブを開きます。そのタブで自作のシェルスクリプトを走らせると、ペインを水平に分割 → `claude` を起動 → さらにそこからClaude Codeのサブエージェントを立ち上げる、というところまで自動で流れます。タブを開いてシェルを叩くだけで、1案件ぶんの作業環境とエージェントがひととおり立ち上がる、というわけです。
ここで起動するサブエージェントには、案件フローを 詳細確認 → 設計 → コーディング… といった工程に分けて、それぞれを専任で担当させています。人間のチームに発注するのと近い感覚で、工程ごとの「係」がタブの中に並ぶイメージです。各工程の成果物を次の係へ受け渡していくので、1案件の中でも処理がきれいに流れていきます。
毎回同じ手順を手打ちしていた頃のtypoや起動漏れがなくなり、初期化コストはほぼゼロ。並列数を増やしたければタブを足すだけなので、スケールの単位が「タブ1枚」に揃っているのが運用上かなり効いています。
Raycast──全部の入口を一本化する
もう一つが Raycast です。Macのランチャーアプリで、Spotlightの強化版と思ってもらえれば近いです。
「ツールを並べただけ」では、起動やセッション作成のたびに手数がかかって結局おっくうになります。Raycastはそこを潰してくれます。
- ホットキー一発で目的のアプリ・スクリプトを起動
- スニペットでよく使うコマンドや定型文を即入力
- 自作のスクリプトコマンドで「案件番号を渡すと、ブランチ作成からcmuxのセッション立ち上げまで一気に実行」といった一連の操作をワンアクション化
要するに、思いついてから作業が始まるまでの摩擦をゼロに近づける役割です。地味ですが、並列作業では「次の一手の起動コスト」が体感速度を大きく左右します。
実際の1日の流れ
2つを組み合わせると、たとえばこんな流れになります。
- 朝、Raycastのホットキーでcmuxを起動
- 抱えている案件ごとにセッションを作成(各セッションはworktreeで独立)
- それぞれのエージェントに「この案件の要件を確認して」「設計どおり実装して」と指示を出す
- 確認が上がってきたセッションから順に、自分がレビュー・判断
- OKを出したものはテスト環境へ、修正が必要なものは差し戻し
人間がボトルネックになる「判断」と「最終確認」に自分のリソースを集中させ、その周辺の手作業はエージェントに預ける。これが今のスタイルです。
やってみて感じたこと
正直に書くと、最初から全部うまくいったわけではありません。
- 並列数を増やしすぎると、今度は人間のレビューが追いつかず詰まる
- AIに任せきりにすると、指示にない余計な変更を入れてしまうことがある
- 「楽になる」のではなく「役割が変わる」が実態に近い
特に1つめは重要で、エージェントを5つ走らせても、確認するのは結局自分1人です。並列数の上限は、AIの性能ではなく自分のレビュー速度で決まります。ここを見誤ると、ただ散らかるだけでした。タイトルのとおり、ボトルネックはAIではなく自分だった、というわけです。
それでも、待ち時間が実作業時間に変わったインパクトは大きく、コンテキストスイッチの消耗も明確に減りました。手数が減った分、一つひとつの確認をていねいにできるようになったのが一番の収穫です。
まとめ
- cmux で複数のAIエージェントをworktree単位で並列管理する
- Raycast で起動・操作の摩擦をなくす
この2つを足すことで、「待ち時間を別の案件に充てる」を人間ではなくAI側に肩代わりさせる働き方ができるようになりました。
AIに仕事を「奪われる」のではなく、AIを並べて「指揮する」側に回る。フロントエンジニアの働き方も、こういう方向に少しずつ変わっていくのかもしれません。
それでは、また次の記事で。