🦁

AI時代はWIP制限を捨てて、git worktreeでマルチタスクを始めよう

に公開

リリース後のプロダクト改善など、常に小さく試すことに価値がある開発フェーズには当てはまらないかもしれません。

この記事の主張

複数ブランチで同時作業 + GitHub Copilot Agent Mode(AIエージェント)によって、生産性向上が見込めます。
この記事では、その主張に至った経緯と複数ブランチでの同時作業のやり方の紹介をします。

「WIP制限」は本当に今も有効なのか?

WIP(Work In Progress)制限という考え方があります。
これは「同時進行する作業を減らし、マルチタスクによる生産性の低下を防ぐ」ことが目的です。

https://www.atlassian.com/ja/agile/kanban/wip-limits

たとえば以下のような図を見たことがある方も多いと思います。

同時進行するプロジェクト数 プロジェクトごとにかけられる作業時間(%) コンテクストの切り替えによる損失
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については以下の記事などをご参照ください。
https://qiita.com/shibukk/items/80430b54ecda7f36ca44

これにより、ブランチを別ワークスペースで管理できるようになります。

しかし、問題もある

ただし 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エージェントを同時に稼働させることができ、体感としては大幅に生産性が向上していると感じています。

一方で、進捗の把握がやや難しくなるため、進捗率の可視化などの工夫は必要になると考えています。

おわりに

弊社ではカジュアル面談を実施しています。
少しでも興味を持っていただけた方は、ぜひ以下のリンクからご連絡ください!

https://x-point-1.net/

エックスポイントワン技術ブログ

Discussion