Claude Codeにおける並列実行について
逐次実行を並列実行に置き換えることで時間が短縮できないかと考えたことはないだろうか。
※ 逐次実行:コマンドを1つずつ順番に実行すること
※ 並列実行:複数のコマンドを同時に実行すること
Claude Codeでは、依存関係のない処理は自動的に並列実行される。特に、箇条書き(-)で列挙された項目は並列実行の対象となる。本稿では、具体的な実行例を通じて、この機能がどのように動作するかを示す。
基本的な実行ルール
Claude Codeの処理は以下のルールに従う:
- 依存関係がない処理 → 並列実行
- 依存関係がある処理 → 逐次実行
重要なのは、箇条書き(-)で列挙された項目は、特に順序の指定がない限り並列実行されるという点である。
実験:3つのファイル読み込みの比較
同じ作業を異なる指示方法で依頼した場合の実行時間を比較する。
指示内容の比較
パターンA(並列実行):
次のファイルの内容を確認:
- package.json
- tsconfig.json
- README.md
パターンB(逐次実行):
package.jsonを読んでから、次にtsconfig.jsonを読んで、最後にREADME.mdを読んで
実行プロセスの違い
パターンA(並列実行):
Read: package.json ┐
Read: tsconfig.json ├→ 同時に実行
Read: README.md ┘
パターンB(逐次実行):
Read: package.json
↓
Read: tsconfig.json
↓
Read: README.md
実行時間の想定
| パターン | 実行時間 | 比率 |
|---|---|---|
| A(並列実行) | 0.3秒 | 1.0x |
| B(逐次実行) | 0.9秒 | 3.0x |
※ 表中の実行時間は予想値
同一の作業であるにもかかわらず、指示方法の違いにより3倍の時間差が生じる。
複数コマンド実行における比較
より実践的な例として、開発環境の状態確認を行う場合を検証する。
指示内容の比較
パターンA(並列実行):
現在の状態を確認:
- Git状態
- Nodeバージョン
- ファイル一覧
パターンB(逐次実行):
git statusを実行して、その後node --versionを実行して、最後にls -laして
実行時間の想定
| パターン | 実行時間 | 内訳 |
|---|---|---|
| A(並列実行) | 1.0秒 | max(1.0, 0.5, 0.3) |
| B(逐次実行) | 1.8秒 | 1.0 + 0.5 + 0.3 |
※ 表中の実行時間は予想値
並列実行の場合、実行時間は最も遅い処理(git status)に依存する。
箇条書き(-)による並列実行の制御
前述の通り、箇条書き形式で列挙された項目は並列実行される。これは、各項目が独立した処理として認識されるためである。
以下を確認:
- ファイルA
- ファイルB
- ファイルC
この形式では、3つのファイルが同時に読み込まれる。順序を指定する必要がない場合、この記法が最も効率的である。
逐次実行が必要なケース
一方で、処理に依存関係がある場合は順序を明示する必要がある。
逐次実行が必要な例:
- ファイルを作成してから、そのファイルを読み込む
- git pullを実行してから、npm installを実行する
- ビルドを実行してから、成果物を実行する
これらの場合、「〜してから」「その後」などの接続詞を用いて順序を明示する。
git pullが成功したら、npm installを実行して
応用例:複数コンテナ環境での並列実行
複数のコンテナを使用する開発環境では、各コンテナの状態確認を並列化することで効率が向上する。例えば、Webサーバーとデータベースの両方のログを確認する場合、箇条書きで列挙すれば同時に取得される。
次のコンテナ情報を確認:
- docker logs web --tail 20
- docker logs db --tail 20
- docker stats --no-stream
これにより、複数コンテナの監視作業が高速化される。
考察
箇条書きで列挙するだけで自動的に並列化されるため、特別な記述は不要である。依存関係の有無を正確に判断し、適切な指示方法を選択することが重要である。
なお、Claude Codeは会話履歴を毎回再処理する仕組みのため、逐次実行の方がターン数が増え、結果としてオーバーヘッド分のトークン消費が多くなる場合も考えられる。
まとめ
本稿では、Claude Codeにおける並列実行の仕組みと、その効果について検証した。
主要な知見は以下の通りである:
- 箇条書き(-)で列挙した項目は並列実行される
- 依存関係がある場合は順序を明示する必要がある
- 並列実行により、逐次実行と比較して最大3倍程度の高速化が見込める
日常的な作業において、この特性を活用することで、待ち時間を大幅に削減できる可能性がある。
なお、並列実行中はEscapeキーで全体を中断できるが、個別のタスクに対する制御は今のところはできないようだ。より高度な制御が必要な場合、Task Tool(サブエージェント)という機能が存在するようだが、これについては今後調査したい。
付記: 本記事はClaude Desktopを使って作成