AI時代はWIP制限を捨てて、git worktreeでマルチタスクを始めよう
リリース後のプロダクト改善など、常に小さく試すことに価値がある開発フェーズには当てはまらないかもしれません。
この記事の主張
複数ブランチで同時作業 + GitHub Copilot Agent Mode(AIエージェント)によって、生産性向上が見込めます。
この記事では、その主張に至った経緯と複数ブランチでの同時作業のやり方の紹介をします。
「WIP制限」は本当に今も有効なのか?
WIP(Work In Progress)制限という考え方があります。
これは「同時進行する作業を減らし、マルチタスクによる生産性の低下を防ぐ」ことが目的です。
たとえば以下のような図を見たことがある方も多いと思います。
同時進行するプロジェクト数 | プロジェクトごとにかけられる作業時間(%) | コンテクストの切り替えによる損失 |
---|---|---|
1 | 100% | 0% |
2 | 40% | 20% |
3 | 20% | 40% |
4 | 10% | 60% |
5 | 5% | 75% |
感覚的にも、「シングルタスクの方が集中できて効率がいい」というのは間違いないように感じます。
実際、自分もこれまでその考えを信じてきました。
でもAIエージェントと一緒に開発していると…
GitHub CopilotやCursorのようなエディタで、AIエージェントが自律的に開発を進めてくれている中でふとこんなことを思いました。
「エージェントが動いている間、手が空いてしまう」
それならもう1つ別のタスクに着手していた方が、むしろ全体の生産性が上がるのでは?と考えるようになりました。
つまり、AIエージェントのコーディングが当たり前となった今、WIP制限の価値が変わりつつあるのではないかと考えました。
複数タスクを並行する開発環境を作るには?
ここで登場するのが git worktree
です。
git worktree
を使うと、同じリポジトリの複数ブランチを同時に異なるディレクトリで操作できます。
git worktree
については以下の記事などをご参照ください。
これにより、ブランチを別ワークスペースで管理できるようになります。
しかし、問題もある
ただし git worktree
単体では、環境構築コストがタスクごとに発生する
という課題があります。
解決策:セットアップ用のスクリプトを用意する
これらの課題は、シェルスクリプトによって自動化することで回避できます。
たとえば以下のようなスクリプトを.zshrc
に書いておけば、複数のワークスペースを簡単に準備できます。
function gwts() {
if [ -z "$1" ]; then
echo "Usage: gwts <branch-name>"
return 1
fi
# リポジトリのルートディレクトリの絶対パスを取得
REPO_ROOT=$(git rev-parse --show-toplevel)
# 新しい作業ツリーのパスを定義
WORKTREE_PATH="${REPO_ROOT}/git-worktrees/$1"
echo "新しい作業ツリーを作成: ${WORKTREE_PATH}"
# 新しい作業ツリーを作成
git worktree add "${WORKTREE_PATH}" -b $1
# 作成した作業ツリーに移動
cd "${WORKTREE_PATH}"
# プロジェクトの .zsh_aliases をコピー(リポジトリごとに.zsh_aliasesを設定している場合)
if [ -f "${REPO_ROOT}/.zsh_aliases" ]; then
echo "プロジェクト固有の .zsh_aliases を作業ツリーにコピーしています..."
cp "${REPO_ROOT}/.zsh_aliases" "${WORKTREE_PATH}/.zsh_aliases"
echo ".zsh_aliases をコピーしました"
else
echo "プロジェクト固有の .zsh_aliases が見つかりませんでした"
fi
########################
########プロジェクト固有の処理(npm installなどをやる)########
########################
########################
########プロジェクト固有の処理########
########################
# VS Code を開く
echo "VS Codeを開いています..."
code "${WORKTREE_PATH}"
# 元のディレクトリに戻る
cd -
echo "作業ツリー '$1' のセットアップが完了しました"
}
以下は上記のスクリプトを実行した時の様子です。
このスクリプトでは、git-worktree
ディレクトリ内に指定したブランチ名のディレクトリを作成し、そのディレクトリをエディタで開いています。
例えば gwts sample
と入力すると、git-worktree/sample
ディレクトリが作成され、同時に sample
ブランチも作成されます。
その後、自動的に git-worktree/sample
ディレクトリが VS Code で開かれます。
感想
この運用により、複数のブランチでAIエージェントを同時に稼働させることができ、体感としては大幅に生産性が向上していると感じています。
一方で、進捗の把握がやや難しくなるため、進捗率の可視化などの工夫は必要になると考えています。
おわりに
弊社ではカジュアル面談を実施しています。
少しでも興味を持っていただけた方は、ぜひ以下のリンクからご連絡ください!
Discussion