Jujutsu VCS:Gitの後継となる次世代バージョン管理システム

未分類
Picsum ID: 202

Jujutsu VCS:Gitの後継となる次世代バージョン管理システム

はじめに:バージョン管理の新時代

2025年、GoogleのエンジニアMartin von Zweigbergk氏が中心となって開発する「Jujutsu(jj)」が、開発者コミュニティで大きな注目を集めています。Gitと完全互換性を持ちながら、その使いやすさと機能性において革新的な進化を遂げたこのVCSは、まさに「バージョン管理の未来」と言える存在です。

Googleの巨大モノレポ(86テラバイト、約20億行のコード、900万以上のソースファイル!)を扱うことを念頭に設計されたJujutsuは、個人の小規模プロジェクトから企業の大規模開発まで、あらゆるシーンで威力を発揮します。


5W2H分析:Jujutsuの全体像

Who(誰が開発?)

JujutsuはGoogleのシニアソフトウェアエンジニアであるMartin von Zweigbergk氏を中心に開発されています。von Zweigbergk氏は以前Mercurialプロジェクトにも携わっており、その経験がJujutsuの設計に活かされています。現在はGitHubのjj-vcsオーガニゼーションでオープンソースとして開発が進められています。

What(何が特徴?)

Jujutsuの最大の特徴は、Gitと完全な互換性を保ちながら、ユーザー体験を根本から再設計している点です。主な特徴は:

  1. ワーキングコピーをコミットとして扱う – ステージングエリアが不要
  2. 操作ログとUndo機能 – すべての操作が記録され、いつでも取り消し可能
  3. 自動リベースとコンフリクト解決 – コミット修正時に自動で子孫コミットを更新
  4. コンフリクトをファーストクラスオブジェクトとして管理 – 高度な自動解決

When(いつから?)

  • 2023年1月:Git Merge 2022でGoogleの計画が発表
  • 2023年10月:バージョン0.10.0リリース(マージ・差分エディタ同梱)
  • 2024年2月:バージョン0.14.0リリース(コマンド体系の大幅な改善)
  • 2024年11月:バージョン0.24.0リリース(jj file annotate追加)
  • 2024年12月:GitHubオーガニゼーションがjj-vcsへ移行
  • 2025年現在:活発な開発が継続中

Where(どこで使える?)

JujutsuはGitリポジトリをバックエンドとして使用するため、GitHub、GitLab、Bitbucketなど、すべてのGitベースのプラットフォームで利用可能です。既存のGitワークフローを維持しながら、ローカルでの作業体験だけを向上させることができます。

Why(なぜ必要?)

Gitは強力なツールですが、以下の課題があります:

  • ステージングエリアの複雑さgit addgit reset.gitignoreの理解が必要
  • 履歴改変の難しさgit rebase -iは学習曲線が急
  • コンフリクト解決の手間git rerereの設定が必要
  • 「污れた」ワーキングコピーの概念 – stashの管理が煩雑
  • Undo機能の欠如 – 間違えた操作を簡単に取り消せない

Jujutsuはこれらの問題をアーキテクチャレベルで解決しています。

How(どう使う?)

Jujutsuの基本的な使い方は、Gitの概念をシンプルにしたものです:

# 既存のGitリポジトリをJujutsu対応に
jj git init --colocate

# 変更の確認(自動的にコミットとして扱われる)
jj st

# 変更内容の確認
jj diff

# 説明を追加
jj desc -m "機能Xを追加"

# 新しいブランチ(ブックマーク)を作成
jj b c -r@ feature-x

# メインにリベース
jj rebase -b@ -dmain

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

技術分析:GitとJujutsuの根本的な違い

1. アーキテクチャの違い

側面GitJujutsu
データモデルスナップショットベーススナップショット + パッチベース
ストレージ.gitディレクトリのみGit + カスタムメタデータ
ワーキングコピー「汚れた」状態として管理常にコミットとして扱われる
ステージングインデックスが必要不要(自動トラッキング)
ブランチ名前付き参照ブックマーク(匿名変更も可能)

2. ワーキングコピー革命

Gitでは、ファイルを変更すると「modified」状態になり、git addでステージング、git commitでコミットという3段階のプロセスが必要です。

Jujutsuでは、ワーキングコピー自体が常に1つのコミットとして扱われます。ファイルを保存するたびに自動的にそのコミットが更新されるため、以下が不要になります:

  • git add / git reset
  • git stash / git stash pop
  • 「コミット前に整理する」作業
# Gitでの典型的なワークフロー
git add .
git commit -m "WIP: 機能追加中"
# あ、修正忘れが...
git add forgotten-file
git commit --amend

# Jujutsuでの同じワークフロー
# (ファイルを編集・保存するだけで自動的にコミットに反映)
jj desc -m "機能追加完了"  # 準備ができたら説明を追加するだけ

3. 操作ログとUndo:1960年代へのタイムトラベル

Jujutsuはすべての操作を記録します。コミット、プル、プッシュ、リベース、すべてがオペレーションログに保存され、いつでも確認・取り消しが可能です。

# 何が起きたか確認
jj op log

# 最後の操作を取り消し
jj undo

# 特定の時点に戻る
jj op restore <operation-id>

これはGitには存在しない画期的な機能です。Gitで間違ったマージを取り消すにはgit reflogを理解し、適切なコマンドを実行する必要がありますが、Jujutsuでは単にjj undoで済みます。

4. 自動リベースとコンフリクト伝播

Jujutsuでは、コミットを修正するとすべての子孫コミットが自動的にリベースされます。さらに、あるコミットで解決したコンフリクトは、子孫コミットにも自動的に伝播されます。

これは以下のGit機能を統合・強化したものです:

  • git rebase --update-refs(自動リベース)
  • git rerere(コンフリクト解決の再利用)
# 過去のコミットを修正
jj edit <commit-id>
# ファイルを編集...

# 子孫コミットは自動的にリベースされ、
# コンフリクトも自動的に解決される!

5. コンフリクトのファーストクラス管理

Gitはコンフリクトを「テキストの差分」として扱いますが、Jujutsuはコンフリクト自体をファーストクラスオブジェクトとして管理します。

これにより:

  • コンフリクトを含むコミットを作成可能
  • コンフリクト解決が自動的に伝播
  • 複雑なマージシナリオでも安全に作業可能

実践:最も使われるJujutsuコマンド

実際にJujutsuを3ヶ月間日常的に使用した開発者の統計に基づく、最も頻繁に使われるコマンドを紹介します。

1. jj edit – 最も使われるコマンド

現在のコミットを編集モードに切り替えます。Gitのgit switch/git checkoutに相当しますが、過去のコミットを修正するのにも使えます。

# 現在のコミットを編集
jj edit @

# 過去のコミットに移動して修正
jj edit <commit-id>

2. jj b c -r@ – ブックマーク作成

新しいブックマーク(ブランチ)を作成します。

jj b c -r@ feature-branch

3. jj rebase -b@ -dmain – リベース

現在のブランチをmainにリベースします。

jj rebase -b@ -dmain

4. jj show / jj diff – 変更確認

現在のコミットの変更内容を確認します。

jj show       # コミットの詳細
jj diff       # 差分のみ

5. jj new -r main – 新しいコミット作成

mainから新しいコミットを開始します。

jj new -r main
jj b c -r@ new-feature

6. jj restore – ファイル復元

Gitのgit restoreに相当します。

jj restore filename
jj restore --from <revision> filename

7. jj undo – 救世主

最後の操作を取り消します。Gitでohshitgit.comを開く必要はもうありません。

jj undo

カスタムエイリアス例

# ~/.jjconfig.toml
[aliases]
tug = ["bookmark", "move", "--from", "heads(::@- & bookmarks())", "--to", "@"]
tug- = ["bookmark", "move", "--from", "heads(::@- & bookmarks())", "--to", "@-"]
mine = ["bookmark", "list", "-r", "mine()"]

Gitからの移行ガイド

移行の簡単さ

Jujutsuへの移行は驚くほど簡単です:

# 既存のGitリポジトリで
jj git init --colocate

# そのままGitコマンドも使える!
git status
jj st

--colocateオプションにより、既存の.gitディレクトリを共有し、GitとJujutsuを同時に使用できます。チームメンバーがまだJujutsuを使っていなくても問題ありません。

Gitコマンドとの対応表

GitJujutsu備考
git statusjj st
git diffjj diff
git logjj log
git add .(不要)自動トラッキング
git commit -m "msg"jj desc -m "msg"説明を設定
git switch -c branchjj b c -r@ branch
git rebase mainjj rebase -b@ -dmain
git pushjj git push --allow-new
git restore filejj restore file
git stash(不要)ワーキングコピーがコミット
git rebase -ijj edit + 編集自動リベース

いつJujutsuを使うべきか

おすすめのケース

  • 頻繁に履歴を書き換える – 機能ブランチでの整理が楽
  • 複数の並行作業 – コンテキストスイッチがスムーズ
  • コードレビュー前の整理 – コミットの分割・統合が容易
  • 学習中の開発者 – コンセプトがシンプル
  • 大規模モノレポ – Googleレベルのスケーラビリティ

注意が必要なケース

  • チーム全員がGitのみ – 一部だけ導入すると混乱の可能性
  • CI/CDがGitコマンドに依存 – スクリプトの修正が必要
  • 特殊なGitフック – 移行が必要

将来性とコミュニティ

Googleの後押し

Googleが社内の巨大モノレポ(Piper/CitC)のフロントエンドとしてJujutsuを使用することを目指していることは、長期的な開発の継続性を示唆しています。

活発なコミュニティ

  • Discord、GitHub Discussions、IRCでサポート
  • 定期的なリリースサイクル
  • 豊富なドキュメントとチュートリアル

注目のリソース


まとめ:Jujutsuがもたらす変革

Jujutsuは単なる「Gitのラッパー」ではありません。バージョン管理の概念を根本から再考し、「開発者が本当にやりたいこと」に集中できる環境を提供しています。

主なメリット

  1. ステージング不要 – ファイルを保存すれば自動的にコミット
  2. いつでもUndo – すべての操作が取り消し可能
  3. 自動リベース – 履歴改変が驚くほど簡単
  4. Git互換 – 既存のワークフローを維持
  5. 学習曲線が緩やか – コンセプトがシンプル

試してみる価値がある理由

  • 既存のGitリポジトリでjj git init --colocateするだけ
  • チームに影響を与えずに個人で導入可能
  • Gitコマンドも引き続き使用可能
  • 「もっと早く知りたかった」と思うこと間違いなし

Jujutsuは、バージョン管理が「1960年代のUndo機能」をようやく手に入れたことを象徴しています。Gitは15年以上にわたり業界標準として君臨してきましたが、Jujutsuは次の15年を見据えた進化を提示しています。

あなたも今日、jj git init --colocateを実行して、バージョン管理の未来を体験してみませんか?


参考リンク


この記事は2026年2月26日時点の情報に基づいています。Jujutsuは活発に開発中のため、最新情報は公式ドキュメントを参照してください。


📚 関連記事


📚 AI学習におすすめの資料

ChatGPTやAIを学ぶなら、以下の資料がおすすめです:

Amazonアフィリエイトリンクを使用しています

こちらの記事もおすすめ

コメント

タイトルとURLをコピーしました