GitButler CLI 入門

GGitButler
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00皆さん、こんにちは。Git BrotherのCEO、スコット・チャコンです。
00:00:02本日は新しいGit Brother CLIのデモを簡単に行います。
00:00:06コマンドラインに慣れている方で、
00:00:08Git Brotherをプログラムから利用したいのであれば、
00:00:11この新しいCLIはかなり魅力的なツールになるはずです。
00:00:14では、早速始めましょう。まずはリポジトリを用意します。
00:00:18ここにあるのは、Rustで書かれた小さなプロジェクトです。
00:00:20これを使って、Git Brother CLIのワークフローを説明していきます。
00:00:23基本的にはGitの置き換えとして機能します。インストールすると、
00:00:27「but」コマンドが使えるようになり、Gitの代わりにこれがメインのインターフェースになります。
00:00:32「but」だけ実行するか、「but status」と打ってください。前者は後者の短縮形です。
00:00:35すると、ステータスが表示されます。
00:00:38出力結果は「git status」と非常によく似ていますね。
00:00:414つのファイルに変更が加えられているのがわかります。
00:00:44追跡されていないファイルが数個、内容が変わったものが数個あります。
00:00:47新規ファイルと修正されたファイルが混在していますが、「but status」では、
00:00:50このように4つの「変更点」としてリストアップされます。これらが編集した内容です。
00:00:55これらを好きなようにコミットしていくことができます。
00:00:59まずは「but commit」を実行してみましょう。
00:01:02すると一時的なブランチが作成されます。実際にやってみましょう。
00:01:05もう一度「but status」を実行すると、すべての変更が1つにまとまっているのがわかります。
00:01:11「but status -f」または「--files」を実行すれば、
00:01:15このコミットの中でどのファイルが変更されたかを確認できます。
00:01:18しかし、これらすべてを1つのコミットにしたくない場合もありますよね?
00:01:21Cloud関連のもの、README、あとは本体への修正など、
00:01:24これらは本来、別々の変更として扱うべきものです。つまり3つのコミットに分けたいわけです。
00:01:28そこで、一旦元に戻しましょう。
00:01:31「uncommit」コマンドを実行すれば、コミットを取り消せます。
00:01:36元通りになりました。まだ一時的なブランチは残っていますが、
00:01:40これは削除してもいいですし、そのまま再利用することもできます。
00:01:44名前を変えてみましょう。ブランチ名を「Clod stuff」にします。
00:01:48これで新しいブランチができました。ここに「git add」のように変更をステージングできます。
00:01:53「but stage G0 H0」と入力します。
00:01:58「G0」や「H0」はファイルごとのショートコードです。
00:02:01もちろんフルパスを入力してもいいですが、素早く操作できるように工夫しています。
00:02:04確認してみると、これらが「Clod stuff」ブランチにステージングされました。
00:02:08ここで「-o」フラグを付けてコミットします。これは「ステージングされたものだけ」という意味です。
00:02:12ただ「commit」と打つと、
00:02:15ステージングされたものも、されていないものもすべてコミットされます。
00:02:18ブランチが増えるとこの挙動が分かりやすくなりますが、とりあえずコミットしましょう。
00:02:20これで、1つのコミットを持つブランチと、
00:02:25ステージングされていないいくつかの変更が残った状態になりました。
00:02:28ここからがGitとは違う面白いところです。
00:02:31例えば、このREADMEの変更だけを、
00:02:34コミットしてプッシュし、プルリクエスト(PR)を作りたいとします。
00:02:37「Clod」ブランチにいる通常のGit操作なら、
00:02:41今の作業をスタッシュし、READMEを追加してコミットし、
00:02:44PRのためにプッシュするという手順が必要です。
00:02:45しかしGit Brotherなら、複数のブランチを「並行して」扱うことができます。
00:02:50「but branch new readme」と打つと、新しいブランチが分岐して現れ、
00:02:55そこでREADMEファイルをステージングできます。
00:03:00そのままコミットも可能です。
00:03:01変更されたファイルを確認してみましょう。
00:03:072つのCloud関連ファイルを含むコミットがあり、
00:03:09それとは別にREADMEの変更を含むブランチがあります。同じように、
00:03:11「commit」を使ってみます。
00:03:17「-c」は作成(create)です。このように新しいブランチを同時に作ることもできます。
00:03:21さて、残りの変更は何でしたっけ。あ、
00:03:25この「read」コマンドですね。
00:03:27このコマンドは、まだコミットされていない最新の変更を拾い上げ、
00:03:32新しいブランチを作成してそこにコミットしてくれます。
00:03:35これで3つのブランチができました。
00:03:38これらはすべて独立しています。
00:03:39しかも、これらの変更はすべて現在の作業ディレクトリに維持されています。
00:03:42作業ディレクトリの中身は一切書き換わっていません。
00:03:44メモリ上でコミットを作成しているような感覚です。
00:03:46ここで「but push」を実行すると、「何をプッシュしますか?」と聞かれます。
00:03:50各ブランチには未プッシュのコミットが1つずつあります。
00:03:53全部プッシュしますか? それとも1つだけ? 今回はREADMEだけにしましょう。
00:03:57準備ができているのはこれだけだと仮定して、
00:03:59それを選択すれば、そのブランチだけがプッシュされます。
00:04:02ステータスを再度確認すると、
00:04:03このブランチの横に「pushed」と表示され、プッシュ済みであることがわかります。
00:04:06他はまだローカルにしかありません。
00:04:08Git Brotherは複数のブランチを同時に扱うのに非常に強力ですが、
00:04:11「スタック・ブランチ(積み上げブランチ)」も作成できます。
00:04:13既存のコミットをベースにして新しい作業を追加し、
00:04:17ブランチを積み上げていく例を見てみましょう。
00:04:19これによって、下層のブランチをレビューに出している間に、
00:04:20その上のブランチで作業を続けることができます。
00:04:23では、スタック・ブランチを作ってみます。
00:04:26「read」コマンドのブランチをレビューに回してマージさせたいけれど、
00:04:30その作業自体は続けたいという場合、
00:04:32変更に依存関係があるため、独立したブランチよりスタック・ブランチが適しています。
00:04:35やり方はこうです。
00:04:38「but branch new -a」でアンカーポイント(基点)を指定します。
00:04:42ここでは「read command」ブランチを指定し、名前を「read more」にします。
00:04:46これを確認すると、
00:04:48元のブランチの上に新しいブランチが積み重なっているのがわかります。
00:04:50では、このファイルを編集してみましょう。
00:04:52今は10件のメッセージを表示するようになっていますが、
00:04:57これを20件に変更します。こちらの値も変えましょう。
00:05:02変更を確認すると、ロックアイコンが表示されています。
00:05:09これは、すでに他の場所でコミットされたファイルを編集していることを示しています。
00:05:11つまり、特定のコミットにロックされている状態です。
00:05:13導入済みのコードを修正しているため、そのコミットの直上にしかコミットできません。
00:05:16「diff」コマンドを使えば、変更内容を分かりやすく確認できます。
00:05:20どの「ハンク(変更の塊)」が変わったかが一目瞭然です。では、
00:05:25これをコミットしましょう。よし。
00:05:28コミットの入れ替えがいかに簡単かもお見せしましょう。
00:05:32その方法を説明します。
00:05:33「status -f」ですべてのファイルを表示します。
00:05:37次にこれを共有します。先ほど「push」でリモートへ送るのを見ましたが、
00:05:40「pr」コマンドを使えばプルリクエストを直接作成できます。
00:05:42「どのブランチのPRを開きますか?」と聞かれるので、
00:05:46今回はすべて選択してみましょう。
00:05:48すると、それぞれのエディタが立ち上がり、
00:05:50PRの説明文を求められます。ここでは簡単に済ませますね。
00:05:54これで、すべてのPRが作成されました。
00:05:57PRを作成すると、
00:06:01画面上に「#1」「#2」といったPR番号が表示されます。
00:06:04メッセージは今のところ同じものを使っています。
00:06:06「-v」(verbose)フラグを使えば、
00:06:08各PRのURLも確認できます。
00:06:10では、そのうちの1つを見てみましょう。
00:06:12これはREADMEを変更するPRです。
00:06:14コミットは1つだけで、READMEファイルへの変更だけが含まれています。完全に独立していますね。
00:06:18一方、こちらはスタックされたPRです。
00:06:23内容を確認すると、適切にスタック構造が作られているのがわかります。
00:06:24最初のPR(下層)はmainブランチをターゲットにしていますが、
00:06:282つ目のPR(上層)は、
00:06:30最初のPRをターゲットに設定しています。
00:06:35このように、スタック・ブランチが正しく構築されるのです。
00:06:39では、変更がインテグレート(統合)された時に何が起きるか見てみましょう。
00:06:41このREADMEのPRを、
00:06:43「問題なし」としてマージしてみます。これでアップストリームに取り込まれました。
00:06:46ここで「but pull --check」を実行して確認します。
00:06:49「but fetch」を実行しても同様の確認が行われます。
00:06:55また、バックグラウンドで定期的にフェッチも行われています。
00:06:57コマンド実行中に「バックグラウンド処理を開始しました」という表示を見たかもしれません。
00:07:00さて、1つのブランチが統合されたのが確認できました。
00:07:02アップストリームで統合済みと表示されています。ここで「but pull」を実行すると、
00:07:06最新情報を取得し、
00:07:10他のブランチをリベースした上で、統合済みのブランチを取り除いてくれます。
00:07:13ローカルからそのブランチが消えましたね。
00:07:16これで完了した作業は整理され、
00:07:19残りのブランチは最新の状態にリベースされました。必要ならこれらを再度プッシュできます。
00:07:22もしGitのみの操作に戻りたくなったら、いつでも「but tear-down」を実行してください。
00:07:25すると、いずれかのブランチが選択された状態になります。
00:07:29最初は元々いたブランチに戻りますが、
00:07:33作業していた他のブランチもすべて保持されています。
00:07:36ただ、通常のGitでは一度に1つのブランチにしかいられないため、その状態に戻るだけです。
00:07:39「setup」と「tear-down」で、Git Brotherモードを自由に出入りできます。
00:07:43複数ブランチを並行して弄りたい時も、通常のGitツールを使いたい時も自由自在です。
00:07:47ちなみに、Git Brotherモードの中でも、ほとんどのGitコマンドはそのまま使えます。
00:07:50「git show」で内容を見たり、
00:07:55「git log」で履歴を確認したりするのも全く問題ありません。
00:08:00読み取り系のコマンドはすべて動作します。
00:08:04私たちが管理を代行しているのは、主に「コミット」に関わる部分だけです。
00:08:08また、直接ブランチをチェックアウトすれば、Git Brotherはそれを検知して、
00:08:13行っていた処理を自動的に解除します。
00:08:16そうすれば、すぐに元の環境に戻れます。
00:08:21最後になりますが、これらすべてのコマンドには「--json」オプションがあります。
00:08:24例えば「status --json」を実行すれば、JSON形式で結果を取得できます。
00:08:26コミットに対して「show」をJSONで実行することも可能です。
00:08:30「but help」で確認できるほぼすべてのコマンドが、
00:08:34「--json」または「-j」オプションに対応しています。
00:08:41つまり、スクリプト化が非常に簡単だということです。面白いことに、
00:08:44「diff」の結果さえもJSONで出力できます。
00:08:48これはかなりクールな機能だと思いませんか?
00:08:52以上がGit Brotherの基本的な紹介です。
00:08:56既存のGitリポジトリにそのまま導入できます。
00:09:00「but setup」を実行するだけで、これらの強力なコマンドが使い放題です。
00:09:01JSON出力、複数ブランチの同時管理、
00:09:05スタック・ブランチの運用、
00:09:08さらにはGitHub連携やPR管理まで、
00:09:12すべて「but」コマンドを使い始めるだけで完結します。
00:09:15Git Brother環境でもほとんどのGitコマンドは有効ですが、
00:09:17通常のGitに戻りたければ、いつでも環境を解除したり、ブランチを切り替えたりすれば綺麗に片付きます。
00:09:20ぜひ今日から試してみてください。
00:09:24[gitbrother.com/cli](https://www.google.com/search?q=https://gitbrother.com/cli) からダウンロードして触ってみてください。
00:09:26Discordへの参加やフィードバックもお待ちしています。ありがとうございました。
00:09:29you can just tear it down or check out a branch and it will clean up everything
00:09:33for you. So go ahead and try it out today.
00:09:35You can go to get brother.com/cli and download it and start playing with it.
00:09:39Drop into our discord and let me know what you think. Thanks.

Key Takeaway

GitButler CLIは、複数ブランチの同時並行開発やスタック構造の管理をコマンドラインから直感的に行える、モダンで強力なGit補完ツールです。

Highlights

GitButler CLI(butコマンド)は、既存のGitの代わりとして機能し、より直感的なワークフローを提供します。

複数のブランチを「並行して」扱うことができ、作業ディレクトリを切り替えることなく異なる変更を管理可能です。

「スタック・ブランチ」機能により、依存関係のある変更を階層構造で管理し、効率的なプルリクエスト作成を支援します。

「but push」や「but pr」コマンドを使用することで、インタラクティブに複数のブランチをリモートへ送信・公開できます。

ほぼすべてのコマンドが「--json」オプションに対応しており、スクリプトによる自動化や高度なデータ利用が容易です。

「setup」と「tear-down」コマンドにより、既存のGit環境とGitButlerモードを自由に行き来できる柔軟性を備えています。

Timeline

GitButler CLIの導入と基本操作

GitButlerのCEOであるスコット・チャコン氏が、新しいCLIツールのデモを開始します。このツールは「but」コマンドをメインインターフェースとして使用し、既存のGitリポジトリに対して透過的に機能します。「but status」を実行すると、git statusに似た形式で変更点が表示されますが、複数の変更を「変更点」としてリスト化し、それらを個別にコミット管理できる点が特徴です。最初の手順として、一度にすべての変更をコミットした後に「uncommit」で取り消すデモを行い、柔軟な操作性を強調しています。

複数ブランチの並行管理とステージング

ここでは、GitButlerの最大の特徴である「複数ブランチの同時管理」について詳しく説明されています。従来のGitではブランチを切り替える際にスタッシュなどの操作が必要ですが、GitButlerでは同一の作業ディレクトリ内で複数のブランチに異なるファイルを割り当てることが可能です。ショートコード(G0やH0など)を使用した素早いステージングや、特定のファイルだけを別ブランチとして切り出す「but branch」コマンドが紹介されています。また、「read」コマンドを使用することで、未コミットの変更を即座に新しいブランチとして独立させる自動化機能も披露されます。

スタック・ブランチと依存関係の構築

開発効率を大幅に向上させる「スタック・ブランチ(積み上げブランチ)」の概念が解説されます。これは、あるブランチの変更を基点にして別の作業を積み重ねる手法で、下層のブランチをレビューに出している間にその上流で作業を続けることができます。デモでは、依存関係のあるファイルに変更を加えた際、エディタ上にロックアイコンが表示され、特定のコミットに紐付いていることが示されます。「but diff」コマンドを使えば、どの変更の塊(ハンク)がどのブランチに属しているかを一目で確認でき、複雑な変更の整理が容易になります。

GitHub連携とプルリクエストの作成

作成した複数のブランチをGitHubへ反映させるワークフローが紹介されます。「but push」を実行すると、どのブランチをプッシュするかをインタラクティブに選択でき、プッシュ済みの状態もステータス画面で明確に管理されます。さらに「but pr」コマンドを使用することで、複数のブランチに対して一括でプルリクエストを作成するプロセスが実演されます。特筆すべきは、スタックされたブランチがGitHub上でも正しく依存関係(ターゲットブランチの設定)を維持したままPR化される点です。これにより、複雑な連鎖的PRの作成作業がコマンド一つで完結します。

統合後の整理とGitとの互換性

PRがマージされた後のクリーンアップ処理と、従来のGitコマンドとの併用について説明されています。アップストリームで変更が統合されると、GitButlerは「but pull」を通じて自動的に統合済みブランチを削除し、残りのローカルブランチをリベースして最新状態に保ちます。また、GitButlerモード実行中であっても「git log」や「git show」などの読み取り系コマンドは通常通り使用できることが強調されています。「but tear-down」を実行すれば、いつでも通常のGit操作モードに完全に戻ることができ、ツールを導入する際のリスクが極めて低いことが示されています。

JSON出力機能とまとめ

最後に、エンジニアにとって非常に強力な武器となる「--json」オプションの機能が紹介されます。statusやdiff、showなど、ほぼすべてのコマンド結果をJSON形式で出力できるため、カスタムスクリプトや他のツールとの連携が非常に容易になります。チャコン氏は、このCLIが既存のGitワークフローを壊すことなく、複数ブランチ管理やPR運用を劇的に効率化することを再確認しました。公式サイトからのダウンロードと、コミュニティであるDiscordへの参加を呼びかけ、デモンストレーションは締めくくられます。Gitの強力な機能を維持しつつ、ユーザー体験を一段階引き上げるツールであると結論付けられています。

Community Posts

View all posts