Skip to main content

Jujutsu (jj) 実践ガイド

Jujutsu (jj) は次世代のバージョン管理システムで、git の複雑さを解消し、より直感的な操作を提供する。

なぜ Jujutsu を使うのか

主な利点

  1. 自動追跡: git add が不要。変更は自動的に追跡される
  2. 柔軟な履歴編集: いつでもコミットを編集可能
  3. 直感的な操作: ブランチではなく「変更」という概念
  4. 安全な操作: jj undo でほぼすべての操作を取り消し可能
  5. 視覚的な履歴: jj log で分かりやすい履歴表示

Git との違い

操作GitJujutsu
ステージング必要 (git add)不要 (自動追跡)
コミット編集制限あり (--amend)いつでも可能
操作の取り消し複雑 (reset, revert)簡単 (jj undo)
履歴表示テキスト視覚的なグラフ

インストール

mise を使用する場合 (推奨)

mise install jujutsu@latest

mise を使用すると、バージョン管理が容易になる。詳細は mise ガイド を参照。

その他の方法

公式サイト: https://docs.jj-vcs.dev/latest/install-and-setup/

基本的な使い方

初期設定

既存の git リポジトリで jj を使い始める:

jj git init --colocate

日常的なワークフロー

1. 変更の確認

jj status
# または短縮形
jj st

2. 変更の記述

# 現在の変更にメッセージを追加
jj describe -m "機能Aを追加"

# または新しいコミットを作成
jj commit -m "機能Aを追加"

3. 履歴の確認

jj log

出力例:

@  qpvuntsm ohbayashi@example.com 2026-02-07 15:30:45 feature-a
│ 機能Aを追加
◉ tpstlust ohbayashi@example.com 2026-02-07 14:20:12 main
│ 初期コミット
◉ zzzzzzzz root()

4. リモートとの同期

# リモートから取得
jj git fetch

# リモートにプッシュ
jj git push

実践的なシナリオ

シナリオ 1: 新機能の開発

# 1. 新しい変更を作成
jj new

# 2. コードを編集
# (ファイルを編集)

# 3. 変更を記述
jj describe -m "ユーザー認証機能を追加"

# 4. 履歴を確認
jj log

# 5. リモートにプッシュ
jj git push

シナリオ 2: コミットメッセージの修正

# 1. 履歴を確認
jj log

# 2. 修正したいコミットを編集
jj edit <change-id>

# 3. メッセージを修正
jj describe -m "新しいメッセージ"

# 4. 最新の変更に戻る
jj edit @

シナリオ 3: 誤った操作の取り消し

# 1. 操作履歴を確認
jj op log

# 2. 直前の操作を取り消し
jj undo

# 3. 特定の操作まで戻る
jj op restore <operation-id>

シナリオ 4: 複数の変更を統合

# 1. 現在の変更を確認
jj log

# 2. 別の変更をリベース
jj rebase -r <change-id> -d <destination-id>

# 3. または変更をマージ
jj merge <change-id>

Kiro での使用

コミットメッセージのルール

Kiro を使用する際は、以下のルールに従う:

  1. 日本語で記述: すべてのコミットメッセージは日本語
  2. 動詞で始める: 「追加」「修正」「更新」「削除」「変更」
  3. 50文字以内: タイトルは簡潔に
  4. 英語プレフィックス禁止: feat:, fix: などは使用しない

正しい例:

jj describe -m "ユーザー認証機能を追加"
jj describe -m "パスワード検証ロジックを修正"
jj describe -m "依存関係を最新版に更新"

間違った例:

jj describe -m "feat: Add user authentication"
jj describe -m "fix: Fix password validation"

Kiro が提案するコマンド

Kiro は以下のような jj コマンドを提案する:

# 変更の記述
jj describe -m "機能を追加"

# 新しいコミットの作成
jj commit -m "機能を追加"

# 履歴の確認
jj log

# リモートへのプッシュ
jj git push

よくある質問

Q: git add が不要なのはなぜ?

A: jj は作業ディレクトリの変更を自動的に追跡する。ステージングエリアという概念がないため、git add に相当する操作は不要。

Q: ブランチはどうなる?

A: jj では「変更 (change)」という概念を使用する。各変更は一意の ID を持ち、ブランチは変更へのポインタとして機能する。

Q: git に戻すことはできる?

A: 可能。.jj ディレクトリを削除すれば、通常の git リポジトリとして使用できる。jj は git と共存可能。

Q: GitHub/GitLab との連携は?

A: jj git pushjj git fetch で通常通り連携可能。リモートリポジトリは git として扱われる。

トラブルシューティング

競合が発生した場合

# 1. 競合を確認
jj status

# 2. ファイルを編集して競合を解決
# (エディタで競合マーカーを削除)

# 3. 解決済みとマーク
jj resolve --mark <file>

# 4. 変更を記述
jj describe -m "競合を解決"

操作を間違えた場合

# 直前の操作を取り消し
jj undo

# 複数回取り消し
jj undo
jj undo

# 操作履歴を確認して特定の時点に戻る
jj op log
jj op restore <operation-id>

変更が見つからない場合

# すべての変更を表示
jj log -r 'all()'

# 特定の変更を検索
jj log -r 'description("キーワード")'

コマンドリファレンス

基本操作

コマンド説明
jj status現在の状態を表示
jj diff変更の差分を表示
jj log履歴を表示
jj describe -m "msg"変更にメッセージを追加
jj commit -m "msg"新しいコミットを作成

履歴操作

コマンド説明
jj new新しい変更を作成
jj edit <id>変更を編集
jj rebase変更をリベース
jj merge変更をマージ
jj squash変更を統合

操作の取り消し

コマンド説明
jj undo直前の操作を取り消し
jj op log操作履歴を表示
jj op restore <id>特定の操作まで戻る

リモート操作

コマンド説明
jj git fetchリモートから取得
jj git pushリモートにプッシュ
jj git cloneリポジトリをクローン

ブランチ操作

コマンド説明
jj branch listブランチ一覧
jj branch create <name>ブランチ作成
jj branch set <name>ブランチを設定
jj branch delete <name>ブランチ削除

参考リンク

  1. 公式ドキュメント
  2. GitHub リポジトリ

まとめ

Jujutsu は git の複雑さを解消し、より直感的なバージョン管理を実現する。自動追跡、柔軟な履歴編集、安全な操作により、開発者はコードに集中できる。

このプロジェクトでは jj を標準として使用するが、必要に応じて git に戻すことも可能。