Jujutsu(jj)とは?Git互換の新しいバージョン管理システム|作業コピー=コミットという発想

コミットしていない変更を抱えたままブランチを切り替えられず git stash を打つ。git add -p でインデックスに何を載せたか分からなくなる。rebase の途中でコンフリクトに詰まり、結局 git rebase --abort に逃げる。Gitを何年使っていても、この手の操作は毎回どこか緊張します。
そうした「Gitの使いにくさ」を、リポジトリ形式ごと捨てずに作り直したのがJujutsu(ジュジュツ、コマンド名は jj )です。保存先には普段のGitリポジトリをそのまま使うため、GitHubやGitLabに対しては通常のGitクライアントとして振る舞います。つまりチーム全員を巻き込まずに、自分の手元だけ差し替えて試せます。
本記事では、Jujutsuが何を変えたのか、既存のGitリポジトリでどう導入するのか、そして本番の開発フローに入れる前に確認しておくべき制約を、公式ドキュメントとリポジトリの記述をもとに整理します(公式サイト: https://jj-vcs.dev )。
- この記事でわかること:Jujutsuの位置づけと、Gitとどう共存するのか。
- 「作業コピーがコミット」という中心的な設計と、そこから消える概念(インデックス・stash)。
- 操作ログによるundo、コンフリクトを抱えたままコミットできる仕組み。
- 既存Gitリポジトリへの導入手順と、対応していないGit機能・導入判断の材料。
Jujutsuとは?Gitリポジトリをそのまま使う別のバージョン管理システム
Jujutsuは、Rustで書かれたオープンソースのバージョン管理システムです。ライセンスはApache License 2.0で、開発はGitHubの jj-vcs/jj で公開されています(リポジトリ: https://github.com/jj-vcs/jj )。2020年から公開されており、2026年8月時点で3万を超えるスターが付いています。
設計上の特徴は、ユーザーインターフェースとアルゴリズムを、実際にデータを保存する層から切り離している点です。公式リポジトリの説明では、この抽象化によって将来的にMercurialやBreezy、Googleのクラウド型設計であるPiper/CitCのような複数のバックエンドを扱えるとされています。ただし現時点で本番利用に耐えるバックエンドはGitのみで、実装にはRust製のgitoxideライブラリが使われています。
重要なのは、この「Gitバックエンド」が翻訳レイヤーではなく、実際のGitリポジトリそのものだという点です。jj で作ったコミットは通常のGitコミットとして保存され、Gitリモートからのfetchもpushもできます。いつでもGitのCLIに戻れるため、チームの他メンバーは誰かがJujutsuを使っていることに気づく必要すらありません。
一方で、Gitに保存されるのはコミットとファイルだけです。ブックマーク(Jujutsuにおけるブランチ相当)や操作ログといった上位のメタデータは、Gitの外にある独自のストレージに保存されます。この分離が、後述するundoや自動リベースを可能にしています。
Gitとの違い①:作業コピーがコミットで、ステージングエリアがない
Jujutsuで最初に戸惑うのは、作業中のファイルそのものが常に1つのコミットとして扱われる点です。ほぼすべての jj コマンドは実行時に作業コピーをスナップショットし、現在の作業コピーコミットを自動的に修正(amend)します。編集して保存した瞬間に、それはもう「未コミットの変更」ではなく、コミットの中身になります。
この設計から、Gitでおなじみのいくつかの概念が丸ごと消えます。インデックス(ステージングエリア)は不要になり、公式のGit比較ドキュメントでも「作業コピーが自動的にコミットされるため、インデックスに相当する概念は意味をなさない」と説明されています。同様に git stash も要りません。作業コピーが常にコミットである以上、退避すべき「汚れた状態」が存在しないからです。
その代わりに使うのが、コミットを直接操作するコマンド群です。変更の一部を切り出したいときは jj split、隣のコミットに変更を移したいときは jj squash を使います。Gitでは「コミットする前にインデックスで選別する」順序だったものが、「まずコミットしてから、後で切り分ける」順序に入れ替わると考えると分かりやすいはずです。
ブランチの扱いも変わります。Jujutsuではブランチ名を付けなくてもコミットグラフのすべての先端(leaf)が保持されるため、Mercurialと同様の「匿名ブランチ」で作業できます。小さな試行のたびに名前を考える必要はなく、共有する段になって初めてブックマーク(jj bookmark)という名前を付ければ済みます。
| やりたいこと | Gitでの操作 | Jujutsuでの操作 |
|---|---|---|
| 作業を一時退避する | git stash / git stash pop | 不要(作業コピーが常にコミット) |
| 変更の一部だけをコミットする | git add -p → git commit | そのまま作業し、後から jj split |
| 直前のコミットに修正を足す | git commit --amend | jj squash(自動amendも働く) |
| ブランチを切って試す | git switch -c 名前 | jj new(名前は不要、必要になったら jj bookmark) |
| 直前の操作を取り消す | git reflog を読んで git reset | jj undo / jj op log |
Gitとの違い②:操作ログによるundoと、コンフリクトを抱えたままのコミット
Jujutsuは、コミットだけでなくリポジトリに対して行われたすべての操作を記録します。コミット、fetch、pushはもちろん、リベースやブックマークの移動も対象です。jj op log で履歴を確認でき、jj undo で直前の操作を取り消せます。Gitのreflogに似ていますが、公式ドキュメントは「操作ログはreflogに似ているが、はるかに強力である」と述べています。すべての参照の更新をひとまとまりの操作としてアトミックに記録するため、複数のブランチをまたぐ操作でも一発で元に戻せるからです。
もうひとつの大きな違いがコンフリクトの扱いです。Jujutsuはコンフリクトをコミットと同じ「第一級のオブジェクト」としてモデル化しています。Git比較ドキュメントの表現では「マージコンフリクトが原因で失敗するコマンドは存在しない。コンフリクトは代わりにコミットに記録され、後から解決できる」となります。リベースの途中で手が止まり、中断するか強行するかを迫られる、という状況が起きません。
この2つは組み合わさると効いてきます。Jujutsuでは、あるコミットを修正すると、その子孫コミットが自動的に新しい親の上へリベースされます。さらにコンフリクトを解決すると、その解決内容も子孫へ伝播します。公式リポジトリはこれを「git rebase --update-refs と git rerere を組み合わせたものを、設計として完全に透過的に実現したもの」と説明しています。積み上げたコミット列の途中を直す作業が、Gitより大幅に軽くなります。
コミットの選択には、MercurialやSaplingから取り入れられたrevset言語が使えます。「このブックマークから見て未マージのコミット」といった条件を式で書けるため、log表示や一括リベースの対象指定が宣言的になります(revsetの仕様: https://docs.jj-vcs.dev/latest/revsets/ )。
導入方法:既存のGitリポジトリにそのまま重ねる
インストールはパッケージマネージャー経由が中心です。macOSとLinuxのHomebrew、Windowsのwingetとscoop、Arch Linuxのpacman、Fedoraのdnf(COPR)、openSUSEのzypper、Nix flakes、FreeBSDのpkgなどが用意されています。cargoでソースからビルドする場合はRust 1.88以上が必要です。また実行時にGit 2.41.0以上を要求するため、Debian 11やUbuntu 22.04ではGit側の更新が必要になることがあります(手順: https://docs.jj-vcs.dev/latest/install-and-setup/ )。
インストール後は、コミットに刻まれる名前とメールアドレスを jj config set --user user.name および user.email で設定します。ここはGitの設定を自動で引き継がないため、最初に忘れず行ってください。
実際の導入で押さえるべきは「コロケート(colocated)ワークスペース」という考え方です。jj git init や jj git clone で作られるワークスペースは既定でコロケート構成になり、.jj ディレクトリと .git ディレクトリが同じ作業コピーを共有します。jj コマンドを実行するたびにGitリポジトリとの読み書きが自動で行われるため、jj と git のコマンドを好きな順序で混ぜて使えます。
この性質のおかげで、移行は段階的に進められます。まずは普段のリポジトリでコロケート構成にして jj log や jj status を眺め、慣れてきたら jj new と jj squash に手を伸ばし、どうしても分からないときは git のコマンドに戻る、という進め方ができます。既存のリポジトリを別形式へ変換する必要も、チーム全体で足並みを揃える必要もありません。
- 空のリポジトリを作る:jj git init <名前>(.jj と .git の両方が作られる)
- リモートから取得する:jj git clone <URL>(リモート名は既定で origin、--remote で変更可能)
- 手元のGitリポジトリを使う:jj git init --git-repo=<Gitリポジトリのパス> <名前>
- コロケートを使わない構成にする:jj git init / jj git clone に --no-colocate、または設定で git.colocate = false
- 既存ワークスペースの構成を切り替える:jj git colocation enable / disable
導入前に確認すべき制約と判断材料
Jujutsuは日常の開発に十分使える完成度に達している一方で、公式リポジトリは今も明確に「実験的なバージョン管理システム」と位置づけています。README冒頭の注意書きは、Git互換性は安定しており大半の開発者が日々の作業すべてに使えている一方で、作りかけの機能や洗練されていないUX、ワークフロー上の欠落が残っており、用途によっては使えない可能性があると述べています。
バージョンも0.x系のままで、最新版は2026年8月6日公開の v0.44.0 です。おおむね月に1回のペースでリリースされ、v0.44.0ではタグのfetch/pushが安定化された一方、jj git fetch のタグ取得の挙動が変わるなどの破壊的変更も同時に入りました。1.0に向けたロードマップにはコピー・リネームの追跡、GitHub/GitLabなどのフォージ連携、サブモジュール対応、大容量ファイル対応などが並んでいますが、公式ロードマップは貢献者の多くが余暇で開発しているため各目標に期日を設定できないと明記しています(ロードマップ: https://docs.jj-vcs.dev/latest/roadmap/ )。
運用面で特に効いてくるのは、対応していないGit機能です。CIやチーム規約が下記のいずれかに依存している場合、Jujutsuだけで完結させることはできません。コロケート構成であればGitのコマンドを併用して回避できるケースもありますが、事前に洗い出しておくべきです(対応状況の一覧: https://docs.jj-vcs.dev/latest/git-compatibility/ )。
- Gitフック:未対応。pre-commitなどのフックに依存した検査は、jj のコマンドだけでは実行されない。
- Git LFS:未対応。大容量ファイルをLFSで管理しているリポジトリは対象外。
- サブモジュール:未対応。作業コピーに現れないが、失われることもない。
- .gitattributes:未対応。改行コードの正規化などをこれで制御している場合は注意が必要。
- 部分クローン:未対応。シャロークローンは一部動作するが、深さを広げる操作は未対応で問題を起こす。
- タグ:一部対応。軽量タグの作成とタグ付きコミットのチェックアウトはできるが、注釈付きタグは作成できない。
- git-worktree・sparse checkout:非対応だが、jj workspace と jj sparse という独自の代替がある。
- Gitの設定:一部のみ反映。リモート定義と core.excludesFile 以外の .gitconfig は読まれない。
まとめ:手元だけで試せるので、判断は実際に触ってからでよい
Jujutsuは、Gitのリポジトリ形式と互換性を保ったまま、その上のユーザー体験を設計し直したバージョン管理システムです。作業コピーをコミットとして扱うことでインデックスとstashを消し、操作ログですべての操作を取り消し可能にし、コンフリクトをコミットの中に持てるようにしました。積み上げたコミット列を頻繁に組み替えるような開発では、Gitより明確に手数が減ります。
同時に、0.x系で破壊的変更が入りうること、フックやLFS、サブモジュールに未対応であることは、チーム導入を判断するうえで無視できません。まずは既存リポジトリをコロケート構成にして個人の作業で試し、CIやレビュー運用が依存している機能に触れないかを確認するのが現実的な進め方です。合わなければ .jj ディレクトリを消すだけで元のGitリポジトリに戻せます。
なお、Jujutsuの開発は作者のMartin von Zweigbergk氏がGoogleで専任として取り組んでおり、他のGoogle社員も開発に加わっています。ただしリポジトリには「これはGoogleがサポートする製品ではない」と明記されており、サポートはコミュニティによって提供されます。この点も含めて、下記の一次情報で最新の状況を確認してください。
参考リンク
- Jujutsu 公式サイト
- https://jj-vcs.dev
- 公式ドキュメント(最新リリース)
- https://docs.jj-vcs.dev/latest/
- GitHub リポジトリ(README・ライセンス)
- https://github.com/jj-vcs/jj
- Git との比較(コマンド対応表を含む)
- https://docs.jj-vcs.dev/latest/git-comparison/
- Git 互換性・対応していない機能の一覧
- https://docs.jj-vcs.dev/latest/git-compatibility/
- インストールと初期設定
- https://docs.jj-vcs.dev/latest/install-and-setup/
- 開発ロードマップ
- https://docs.jj-vcs.dev/latest/roadmap/
- リリース一覧(v0.44.0 のリリースノート含む)
- https://github.com/jj-vcs/jj/releases
最後までお読みいただきありがとうございます
この記事が参考になりましたら、ぜひシェアや他の記事もご覧ください。
AI・開発作業を快適にするデスク環境
比較ガイドを見る →購入前に比較しやすいよう、用途別の選び方をまとめています。
ブラウザで完結する無料ツール
ツール一覧を見る →LEXIA が制作現場向けに開発した無料ツールです。登録不要・ブラウザ上で処理が完結します。
フルスタックの関連記事
もっと見る →
Mac miniを複数台使ってClaude CodeやローカルLLMを並列運用する際の判断基準を解説。1台目の選び方、メモリ・ネットワーク構成、総保有コスト、常時稼働のセキュリティを整理します。
6分
GensparkのAI Developerとは何かを解説し、実際にAI Developerを使って開発した便利ツール「LEXIA Tools」の機能や開発体験、今後の展開について紹介します。
8分
OnlookはReactとTailwindを使った既存プロジェクトを“そのまま編集”できる唯一のVisual IDE。SubframeやTempo、v0など主要AIデザインツールと比較し、開発者が語る「one-to-one in code」の思想からOnlookだけの魅力を解説します。
6分
Googleの次世代クラウドIDE「Firebase Studio」。Gemini連携によるAI開発体験を詳しく解説。
3分新着記事
一覧を見る →




Open NotebookへPDFや資料を追加できない場合に、対応形式、ファイル容量、処理状態、API接続、Dockerリソースを確認する方法を解説します。
4分
Mac miniでOllamaなどのローカルLLMを運用する際に役立つSSDドック、外付けSSD、UPSの選び方を解説します。
4分LEXIA BLOG のすべての記事
ブログトップ →- 紙資料をAIノート化する手順|スキャン・OCR・保存の実践構成
- 非破壊ブックスキャナー3選|本を裁断せずOpen Notebookへ
- OCR精度を上げる8つの方法|傾き・解像度・文字化けを減らすコツ
- Open Notebook向けドキュメントスキャナー3選|紙資料をAIノートへ
- Open NotebookでPDFを読み込めないときの確認項目|形式・容量・処理状態
- Mac miniでローカルLLMを使う周辺機器3選|SSD・ドック・UPS
- Open Notebookの使い方|Dockerで起動して最初の資料を追加するまで
- Ollama用外付けSSD 3選|モデル保存と速度の考え方
- Ollamaに接続できないときの直し方|localhost:11434の確認手順
- Ollama用ミニPCの選び方|メモリ・SSD・冷却から考える3候補
- Ollamaの容量不足を解消する方法|モデル削除・保存先変更の確認手順
- Macの音声入力用マイク4選|USB-C接続と設定の確認点
- Ollamaが遅い原因は?モデル・メモリ・GPUを順番に確認する方法
- 音声入力ヘッドセット3選|長時間でも距離が変わりにくい選び方
- 音声入力で句読点・改行を入れる方法|Mac・Windowsの話し方一覧
- 生活音に強い音声入力マイク3選|空調・タイピング対策
- Windows 11で音声入力が使えないときの直し方|Win+Hが反応しない原因
- 音声入力用USBマイク4選|精度を上げる選び方と置き方
- Macで音声入力が使えない・反応しないときの確認手順
- 音声入力の誤変換を減らす7つの対策|原因を30秒で切り分ける方法
- Amicalの音声入力用マイク4選|環境別の選び方と設定のコツ
- NotebookLMの代替5選|無料・セルフホストのオープンソース版まとめ【2026年最新】
- Ollamaの使い方|ローカルLLMをMac・Windowsで無料で動かす手順【2026年最新・初心者向け】
- Valkeyとは?Redisから分かれたOSSの正体|ライセンス・互換性・移行の判断材料
- Claude Codeの料金は結局いくら?Pro・Max・API課金とコスト最適化【2026年版】
- Mac mini複数台でClaude Codeを並列運用する方法|構成・費用・セキュリティ
- Tursoとは?SQLiteをRustで書き直す“次世代の組み込みDB”の全貌
- OpenMontageとは?AIエージェントが“制作チーム”になる次世代の動画生成システム
- Penpotとは?Web標準で“デザイン=コード”を実現するオープンソースのFigma代替
- Firecrawlとは?Webを“LLMが使えるデータ”に変えるAI時代のスクレイピングAPI
- Web制作の現場で話題の「shadcn/ui」シャドシーエヌユーアイとは?メリット・デメリットをわかりやすく解説
- 最近よく聞く「Godot Engine」って何?初心者が調べてわかったこと
- 完全無料で独自ドメインが取れる「DigitalPlat FreeDomain」って怪しい?メリットと注意点を解説
- パソコンの操作、AIが代わりにやってくれる時代が来た…?話題の「UI-TARS」について調べてみた
- Claude-MemでAIに「記憶」を持たせる:使い方と他AIとの比較
- Sipeed PicoClaw 完全ガイド:10ドルのハードウェアで動く、超軽量AIエージェントの世界へようこそ
- superpowers フレームワークによる「ジュニアエンジニア」からの脱却
- Rorkとは?文章だけでアプリが作れるって本当?
- Supermemoryとは?AIが忘れる理由や記憶を補う仕組み
- Amical(アミカル)とは?無料AI音声入力の使い方・日本語精度を徹底解説【2026年最新】
- Moltbot(モルトボット)とは?できることと安全に使うための注意点
- LobeHubとは?LobeChatから進化したAIエージェントワークスペースを紹介
- YOLOとは何か?物体検出をリアルタイムかつ高速に行う近未来AIについて
- MiroThinkerとは?検索しながら考えるAIを実際に触ってみた感想
- Dyadとは?ローカルでWebアプリを作れる次世代ビルダー徹底解説
- Bun v1.3なにが変わった?公式動画から読み解く最新アップデート
- OpenAIの新モデル「GPT-5.2」とは?
- exoとは?余ってる端末が“ひとつのAIクラスター”になるOSSを解説
- SAM Audio(サム・オーディオ)とは?|音を自由に切り取る次世代AIをわかりやすく解説
- A2UIは実際にどう使われる?想定ユースケースを具体例で解説
- A2UIとは?AIエージェント向けUI標準化プロジェクトを徹底解説
- Sim.aiって何?視覚的にAIエージェントを設計できるOSSワークフロー基盤
- adk-go とは?Goで始める実務向けAIエージェント開発
- GensparkのAI Developerとは?GensparkのAI Developerを使って安全な便利ツールを作ってみた
- v0ってどこまで実用的なアプリ作れる?
- ローカルファーストは良いぞって話
- コマンドラインでMarkdownを美しく読む:glowの使い方と魅力
- Onlookとは?:Subframe・Tempo・v0・Boltなど、デザイナーと開発者のための次世代UIツール徹底比較
- Open Notebookとは?セルフホストでNotebookLMを自前運用する方法【2026年最新】
- もう.envを手動で共有しない!Infisicalが変えるシークレット管理の新常識
- LanceDBとは?クラウドに頼らない次世代ベクトルデータベースを調べてみた
- Lobe Chatとは?OpenAI・Claude・Geminiを一括管理できる最強AIフレームワーク
- Bunとは?:もうnpmには戻れないかも。かわいい顔した爆速JS
- Firebase Studioとは?Googleが描くAI時代の新しい開発環境
- Stremioの運営元・収益構造を含む「危険性」のリアルな見方:使う前に知っておきたいポイント
- AIでWebアプリを自動生成!Lovableとは?
- Generative AI for Beginners 最新版(21 レッスン版)を徹底解説
- OpenHands(旧OpenDevin)とは?AIが自動で開発を進める時代の幕開け
- Bolt.newとは?ブラウザで動くAI開発エージェントの使い方と特徴を解説
- Stremio / stremio-web とは?危険性と合法性を調査 — 将来性も含めて
- Firebase Studioの始め方|登録からAIプロトタイプ作成・デプロイまで完全ガイド
- Claude Code入門:ターミナルで動く“エージェント型”コーディングアシスタント
- Stagehandとは?E2Eテストが超楽になる!?“AIブラウザ自動化”の衝撃
- STUDIOアップデート総点検:あと「STUDIO AI」どこ行った?