20
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

git worktreeを使用した開発の個人的詰まりポイント

20
Posted at

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 のストーリーもご覧いただけるととても嬉しいです!

20
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?