:og:description: Gitと連携して使えるバージョン管理システム、Jujutsu(jj)を、作業コピーと操作履歴に絞って紹介します。 .. meta:: :description: Gitと連携して使えるバージョン管理システム、Jujutsu(jj)を、作業コピーと操作履歴に絞って紹介します。 ========================================================== Gitじゃないバージョン管理、Jujutsuを使ってみた ========================================================== .. revealjs-slide:: :conf: {"width":1920,"height":1080} :author: sion908 :date: 2026/09/08 :event: YokaTech #1 はじめに ====================================================================== .. revealjs-notes:: QRコードを表示しながら、スライドの公開先を案内する。 .. qrcode:: :class: center :width: 400 https://slide.sion908.tech/ ここでスライドは公開しています .. raw:: html
(ちなみに自分のポートフォリオもここから飛べます)
.. include:: whois.rst 今日はありがとうございます ====================================================================== 自分も長崎でエンジニアのコミュニティがないということで、LT会などをやってました アンラーニング ---------------------------------------------------------------------- - 過去に正しかったやり方を、「今も本当に正しいのか?」と問い直すこと claudeばかり、codexばかり... セレンディピティ(Serendipity) ---------------------------------------------------------------------- - 何かを探したり行動したりしている途中で、当初は狙っていなかった価値ある発見に出会うこと 単なるラッキーとは少し違います。重要なのは、偶然に出会ったものの価値に気づけることです。 Jujutsu(jj) ====================================================================== Gitと連携して使える、別のバージョン管理システム 今日は、jjを使っていて便利だと感じた「戻りやすさ」だけ紹介します。 SoftWareDesignにも取り上げられていました。 最近の開発 ---------------------------------------------------------------------- AIにコードを書いてもらうと、変更と試行錯誤が増えた .. revealjs-fragments:: * 何パターンか試す * 変更量が思ったより大きい * 「さっきの状態に戻したい」が起きる でも、コミットは後回しになりがち ---------------------------------------------------------------------- .. container:: flex .. container:: size-1 **Gitでありがちなこと** * まだ途中だからコミットしない * AIの変更を確認してからにする * やっぱり前の状態に戻したい .. container:: size-1 **そのとき思うこと** .. revealjs-fragments:: * どこまで戻せばいい? * さっきの状態は残っている? * 触るのが少し怖い Jujutsuって? ---------------------------------------------------------------------- Gitと連携して使える、別のバージョン管理システム 日本語の呪術からインスピレーションを得たそうです。 .. revealjs-fragments:: * コマンド名は ``jj`` * Gitリポジトリをバックエンドにできる * GitHubを使うチームでも、自分だけjjで作業できる 作業中の状態も履歴にある ---------------------------------------------------------------------- jjでは、作業コピーがコミットとして扱われます .. code-block:: text $ jj log @ zuknkrqq sion908@example.com 99d8bddc │ hello jj ◆ zzzzzzzz root() 00000000 .. revealjs-fragments:: * ``@`` が、いま編集している作業コピー * jjコマンド実行時に作業コピーの変更がスナップショットされる * 「コミットする前だから何も残っていない」が起きにくい 操作そのものにも履歴がある ---------------------------------------------------------------------- .. code-block:: text $ jj op log -n 3 @ 14d44624dfa0 now new empty commit ○ 4c79e66c77e9 now snapshot working copy ○ 288fea96c31b now describe commit .. revealjs-fragments:: * ファイルの履歴だけではない * jjに対して何をしたかも見える * 間違えた操作を追いやすい 間違えたら ``jj undo`` ---------------------------------------------------------------------- .. code-block:: bash $ jj new # あ、まだ新しい作業を始めるつもりではなかった $ jj undo .. revealjs-fragments:: * 直前の操作を戻せる * 操作の履歴は ``jj op log`` で確認できる * 試行錯誤するときの心理的コストが下がる Gitのチームで自分だけjjを使える? ---------------------------------------------------------------------- 使えます。 .. revealjs-fragments:: * チームはこれまでどおりGitとGitHubを使う * 自分のローカル作業だけjjにする * pushしたコミットは、他の人には通常のGitコミットとして見える * ローカルでGitとjjの変更操作を混ぜすぎないのが安全 実際には、こういう作業が多い ---------------------------------------------------------------------- **PRを出して、レビューで修正する** .. container:: flex .. container:: size-1 **PRを出す** .. code-block:: bash jj git fetch jj new main -m "feat: add login" # ファイルを編集 jj bookmark create feat/login jj git push -b feat/login .. container:: size-1 **レビューで直す** .. code-block:: bash jj edit feat/login # ファイルを修正 jj git push .. revealjs-fragments:: * ``git add`` は不要 * bookmarkは、修正したコミットに追従する * GitHub上では、いつものPRとして扱える まとめ ====================================================================== * AIで変更と試行錯誤が増えた * だから「戻りやすい」ことがうれしい * jjはGitと連携しながら、個人の作業を楽にできる 参考 ---------------------------------------------------------------------- * `Jujutsu公式ドキュメント