1. はじめに
実装タスクをAIに投げている間、別のタスクを進めたいというニーズがあります。
しかし、そのたびにブランチを切り替えるのは不便です。
そこで便利なのが git worktree です。
git worktree は、ブランチを切り替えるのではなく、別ディレクトリとして複数ブランチを同時に展開できる機能です。これにより、同時に編集や動作確認が可能になります。
ただし、実際に使ってみるといくつかハマりどころがあったため、まとめてみました。
2. git worktree add を使う
以下のコマンドで worktree を作成することができます。
① 既存ブランチから worktree を作成する
git worktree add ../<ワークツリー名> <既存ブランチ名>
② 新規ブランチを作成しながら worktree を作る
git worktree add -b <新規ブランチ名> ../<ワークツリー名>
しかし、このまま使うには、少し問題点があります。
問題点
git worktree は Git管理下のファイルしかコピーしません。
そのため、例えばNextJSアプリの開発をしているときに、worktree内に
- .env が存在しない
- node_modules が存在しない
といった状態になります。
なので、動作確認できる状態にするためには、追加で以下の作業が必要になります。
cd ../<ワークツリー名>
cp ../.env .
npm install
docker compose up
しかし、毎回これを行うのは手間がかかります。
3. gtrコマンド を使う
gtrコマンド は git-worktree-runner という git worktree をラップするCLIツールをインストールすることで使えるようになるコマンドです。
インストール後、以下のコマンドが使用できます。
gtr start <既存ブランチ名>
これにより、リポジトリ名を含む規則的なディレクトリに worktree が作成されます。
4. .gtrconfig で自動化する
gtrコマンドの大きなメリットとして、プロジェクトルートに .gtrconfig を配置することで、
- コピーするファイル
- 実行するコマンド
を指定できるということがあります。
[copy]
include = .env
[hooks]
postCreate = npm install
これにより、
- .env の自動コピー
-
npm installの自動実行
が可能になります。
5. コマンド比較
動作確認可能な状態を作成するためには、それぞれ以下のようにコマンドを打つ必要があります。
■ git worktree の場合
git worktree add ../<ワークツリー名> <既存ブランチ名>
cd ../<ワークツリー名>
cp ../.env .
npm install
docker compose up
■ gtr の場合
gtr start <ブランチ名>
cd ../<リポジトリ名>-worktrees/<ブランチ名>
docker compose up
このように、gtrコマンドを使用したほうが、シンプルになります。
6. Docker使用時の注意点
これに加えて、Docker環境で複数 worktree を同時に作成する場合、以下に注意が必要です。
① ポート番号の競合
同じポート番号を使用すると起動できません。コンテナの停止か、ポート番号の変更が必要です。
docker compose stop
② container_name を指定している場合
container_name を固定していると、既存コンテナとのコンフリクトが発生します。
その場合はコンテナの削除が必要です。
docker compose down
そのため、基本的には、動作確認後は毎回 docker compose down を実行するのが安全です。
7. 使用した環境
以下のリポジトリで検証しました。
cloneして、ぜひ以下を確認してみてください!
- git worktree add の場合、.env と node_modules は存在しない
- gtr start の場合、.gtrconfig の設定により自動生成される
※ ファイルの生成が行われるかどうか、gtrコマンドを使用した際にちゃんと動作確認ができるかのみ確認済みです
株式会社シンシア
株式会社シンシアでは、実務未経験のエンジニアの方や学生エンジニアインターンを採用し一緒に働いています。
※ シンシアにおける働き方の様子はこちら
弊社には年間100人程度の実務未経験の方に応募いただき、技術面接を実施しております。
この記事が少しでも学びになったという方は、ぜひ wantedly のストーリーもご覧いただけるととても嬉しいです!