Twin - Git Worktree Wrapper with Side Effects
Twin は Git worktree の薄いラッパーで、シンボリックリンクやフックなどの副作用を追加した CLI ツールです。
概要
Git worktree コマンドをベースに、以下の副作用を追加しました:
- シンボリックリンクの自動作成・削除
- worktree 作成・削除時のフック実行
- 設定ファイルによるカスタマイズ
主な機能
- Worktree管理: Git worktreeのラッパーとして動作
- シンボリックリンク: 設定ファイルの共有と環境間での一貫性維持
- クロスプラットフォーム: Windows/macOS/Linuxに対応
- フック機能: worktree作成・削除時のカスタムスクリプト実行
- 柔軟な設定: TOML形式の設定ファイルによるカスタマイズ
インストール
Cargo (推奨)
# crates.ioから直接インストール
# または、最新の開発版をGitHubからインストール
ソースからビルド
# リポジトリをクローン
# ビルド&インストール
バイナリダウンロード
Releasesページから、お使いのプラットフォーム用のバイナリをダウンロードできます。
使用方法
基本コマンド
Worktreeの作成(簡易版)
# 基本的な使用方法(ブランチ名のみ指定)
# デフォルトで ./worktrees/feature-new に作成される
# パスを明示的に指定
# 新しいブランチを作成
# 設定ファイルを指定(副作用を適用)
# Git worktree のみ実行(副作用をスキップ)
# その他の git worktree オプションもサポート
デフォルトでは、設定ファイルの worktree_base に指定されたディレクトリ(デフォルト: ./worktrees)に、ブランチ名と同じ名前のディレクトリが作成されます。
Worktreeの一覧表示(git worktree list のラッパー)
# デフォルト(テーブル形式)
# JSON形式で出力
# シンプルな形式
Worktreeの削除(git worktree remove のラッパー)
# 通常の削除(ブランチ名またはパスを指定)
# 強制削除(エラーを無視)
# Git worktree のみ実行(副作用をスキップ)
設定管理
# デフォルト設定をTOML形式で出力
# 現在の設定を表示
# 設定値をセット(未実装)
# 設定値を取得(未実装)
未実装機能
以下の機能は現在未実装です:
twin config --set/--get- 設定値の取得・設定- テンプレート処理
設定ファイル
Twin は .twin.toml という設定ファイルを使用して副作用を定義します。
設定ファイルの例
# .twin.toml - Twin設定ファイルの例
# Worktreeのベースディレクトリ(省略時: ./worktrees)
= "./worktrees"
# ファイルマッピング設定
# Worktree作成時に自動的にシンボリックリンクやコピーを作成します
[[]]
= ".env.template" # ソースファイルのパス
= "copy" # "symlink" または "copy"
= "環境変数設定" # 説明(省略可)
= true # 既存ファイルをスキップ(省略可)
[[]]
= ".claude/config.json"
= "symlink"
= "Claude設定ファイル"
# フック設定(worktree作成・削除時に実行するコマンド)
[]
= [
{ = "echo", = ["Creating: {{branch}}"] }
]
= [
{ = "npm", = ["install"], = true }
]
= []
= []
設定項目の詳細
ファイルマッピング ([[files]])
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
path |
string | ✓ | ファイルパス(メインリポジトリとworktreeで同じパス) |
mapping_type |
string | - | "symlink" または "copy"(デフォルト: "symlink") |
skip_if_exists |
bool | - | 既存ファイルをスキップ(デフォルト: false) |
description |
string | - | マッピングの説明 |
フックコマンド
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
command |
string | ✓ | 実行するコマンド |
args |
array | - | コマンド引数({{branch}}、{{worktree_path}}などの変数を使用可) |
continue_on_error |
bool | - | エラー時も続行(デフォルト: false) |
timeout |
u64 | - | タイムアウト秒数(デフォルト: 60) |
トラブルシューティング
Windows でシンボリックリンクが作成できない
問題: 「シンボリックリンクの作成に失敗しました」というエラーが表示される
解決方法:
-
開発者モードを有効にする(推奨)
- 設定 → 更新とセキュリティ → 開発者向け
- 「開発者モード」を有効にする
-
管理者権限で実行する
- コマンドプロンプトを管理者として実行
- または PowerShell を管理者として実行
-
ファイルコピーモードを使用する
- 設定ファイルで
mapping_type = "copy"を指定
- 設定ファイルで
Worktreeが作成できない
問題: 「Worktreeの作成に失敗しました」というエラー
考えられる原因と解決方法:
-
Gitリポジトリではない
-
同名のブランチが既に存在する
# ブランチを確認 # 別の名前を指定 # または強制的にブランチを再作成 -
Worktreeが既に存在する
# Worktreeを確認 # または # 既存のWorktreeを削除 # または
設定ファイルが読み込まれない
問題: カスタム設定が適用されない
確認事項:
-
設定ファイルの場所
- プロジェクトルート:
./.twin.toml
- プロジェクトルート:
-
設定ファイルの形式
# デフォルト設定を確認 -
TOML構文エラー
- 引用符の閉じ忘れ
- 配列の記法ミス
- インデントエラー
デバッグ情報の出力
環境変数を設定してデバッグ情報を表示:
# 詳細ログを表示
# Gitのみ実行(副作用をスキップ)
開発状況
実装済み機能
- ✅ Git worktree コマンドのラッパー(add, list, remove)
- ✅ シンボリックリンク作成・削除(Unix/Windows対応)
- ✅ フック実行(pre/post create/remove)
- ✅ 設定ファイル読み込み(.twin.toml)
- ✅ 複数の出力形式(table, json, simple)
- ✅ エラーハンドリング
- ✅ --git-only オプション(副作用をスキップ)
未実装機能
- ⏳ テンプレート処理
- ⏳ 設定値の取得・設定(config --set/--get)
ライセンス
MIT License
コントリビューション
プルリクエストを歓迎します。大きな変更の場合は、まずissueを開いて変更内容について議論してください。
サポート
問題が発生した場合は、GitHubのissuesページで報告してください。