【jj】Jujutsu入門 - Git互換の次世代バージョン管理システム

PUBLISHED 2026-02-04

jj(Jujutsu)は、Git互換の次世代バージョン管理システムです。Gitの複雑さを解消しつつ、強力な履歴編集機能を提供します。この記事では、jjの基本概念からGitとの違い、実践的なワークフローまで解説します。

jjとは

jj(Jujutsu)は、Googleのエンジニアが開発したバージョン管理システムです。Gitリポジトリをそのまま使用でき、既存のGitワークフローと共存できます。

主な特徴

jjの特徴
  • ステージング(git add)が不要
  • 作業コピーが自動的にコミット扱い
  • 操作ログで取り消し可能(undo機能)
  • 競合したままコミットできる(遅延解決)
  • 子孫コミットの自動リベース
  • Gitリポジトリと完全互換

インストール

macOS

brew install jj

Windows

winget install jj
# または
scoop install jj

Linux

# Debian/Ubuntu
sudo apt install jj
# Arch
sudo pacman -S jujutsu

基本的な使い方

既存のGitリポジトリでjjを使う

cd your-git-repo
jj git init --git-repo .

これだけで、既存のGitリポジトリをjjで操作できるようになります。

状態確認

jj status   # 現在の状態を表示
jj log      # コミット履歴を表示

GitとjjのコマンドA対応

Gitユーザーが最も気になるのは、普段使っているコマンドがjjでどうなるかでしょう。

git add → 不要

⚠️

jjでは git add に相当するコマンドは不要です。作業コピーの変更は、jjコマンド実行時に自動的にスナップショットとして記録されます。

# Git
git add .
git commit -m "feat: add new feature"

# jj
jj commit -m "feat: add new feature"

コマンド対応表

Gitjj備考
git add .不要自動追跡
git commit -m "msg"jj commit -m "msg"
git pushjj git push
git pulljj git fetch
git statusjj status
git logjj log
git diffjj diff
git stash不要常にコミット状態
git checkout -bjj new + jj bookmark create

作業コピーの仕組み

スナップショットのタイミング

jjでは、ファイルを保存しただけでは何も起きません。jjコマンドを実行したタイミングでスナップショットが取られます。

ファイル編集 → 保存 → (まだ何も起きない)→ jjコマンド実行 → スナップショット取得
💡 大規模リポジトリ向け

watchmanを設定すると、ファイル変更時に自動でスナップショットを取ることも可能です。

「とりあえずコミット、整理は後で」

jjの最大のメリットは、コミットメッセージを後から付けられることです。

# 作業開始(空のコミットを作成)
jj new

# 作業中...
# ファイルを編集

# 後からメッセージを付ける
jj describe -m "feat: add new feature"

ブランチ(Bookmark)の操作

jjでは、ブランチを「Bookmark」と呼びます。

ブランチの作成

# mainから新しいブランチを切る
jj new main
jj bookmark create feature-a -r @

ブランチからブランチを切る

# feature-aから新しいブランチを切る
jj new feature-a
jj bookmark create feature-b -r @
⚠️ 重要な違い

Gitと異なり、jjのブックマークは自動で移動しません。コミット後に明示的に移動する必要があります。

jj commit -m "feat: add something"
jj bookmark set feature-a -r @-  # 明示的にブックマークを移動

リモートへのプッシュ

基本的なプッシュ

jj git push

新規ブランチのプッシュ

jj new main
jj commit -m "feat: new feature"
jj git push -c @-  # 新しいブックマークを作成してプッシュ

競合の解決

jjの競合マーカー

jjの競合マーカーは、Gitとは異なる形式です。

<<<<<<<
%%%%%%%
-grape
+grapefruit
+++++++
APPLE
GRAPE
ORANGE
>>>>>>>
  • %%%%%%%: 差分(何が変更されたか)
  • +++++++: 元の状態(スナップショット)

競合したままコミットできる

📌

jjの最大の特徴の一つは、競合したままコミットできることです。解決は後から行えます。

競合解決の方法

# 1. 直接ファイルを編集して解決

# 2. マージツールを使用
jj resolve

# 3. どちらかを採用
jj resolve --tool :ours    # 自分の変更を採用
jj resolve --tool :theirs  # 相手の変更を採用

履歴編集

jjでは、履歴編集が非常に簡単です。

過去のコミットを編集

jj edit <commit-id>
# ファイルを編集
jj squash  # または jj new で新しいコミットへ

子孫のコミットは自動的にリベースされます。

コミットの分割

jj split

インタラクティブに、1つのコミットを複数に分割できます。

差分エディタで編集

jj diffedit

差分をエディタで直接編集できます。

VSCode拡張機能

jjをVSCodeで使うための拡張機能があります。

VisualJJ(おすすめ)

  • コミットツリーの可視化
  • ドラッグ&ドロップでリベース
  • クローズドソース(無料)
ID: visualjj.visualjj

Jujutsu Kaizen (jjk)

  • オープンソース
  • Source Controlビューでjj操作
ID: jjk.jjk

OPEN JJ

  • 軽量なjj統合
ID: olup.open-jj
💡 おすすめ

まずはVisualJJを試してみてください。オープンソースが好みならjjkがおすすめです。

GitからjjへのA移行

既存のGitリポジトリで使い始める

cd your-git-repo
jj git init --git-repo .

これだけで、既存のGitリポジトリをjjで操作できます。チームメンバーは引き続きGitを使い続けることも可能です。

Gitとの共存

jjはGitリポジトリを直接操作するため、以下のワークフローが可能です。

  • 自分はjjを使う
  • チームメンバーはGitを使う
  • リモートは通常のGitリポジトリ

参考文献

まとめ

jj(Jujutsu)は、Gitの複雑さを解消しつつ、強力な機能を提供するバージョン管理システムです。

jjのメリット
  • git addが不要で、作業が楽になる
  • コミットメッセージを後から付けられる
  • stashが不要(常にコミット状態)
  • 履歴編集が簡単(自動リベース)
  • 競合を後から解決できる
  • Gitリポジトリと完全互換

Gitに慣れている方でも、jjの「とりあえずコミット、整理は後で」というワークフローを体験すると、その便利さに気づくはずです。既存のGitリポジトリでそのまま試せるので、ぜひ使ってみてください。

CATEGORY
円