コンテンツにスキップ

Git ソースコントロール

Calyx のサイドバーには、ウィンドウで開いているリポジトリの状態を確認できる Git ビューが組み込まれています。 ターミナルから離れずに、差分の確認とコードレビューが完結します。

サイドバーの Changes タブには、そのウィンドウから辿れるリポジトリが、開閉できるセクションとして一つずつ並びます。 Calyx はウィンドウ内の全ターミナルタブの作業ディレクトリを読み、そこで見つけたリポジトリごとに、リンクされた別の worktree、上位の superproject、チェックアウト済みのサブモジュールもあわせて並べます。

セクションのヘッダーには、ディレクトリ名、現在のブランチ名(ブランチが分からないときは短縮したコミットハッシュ)、変更ファイル数のバッジ、コミットグラフの対象を選ぶフィルタボタンが表示されます。 セクションの種別はアイコンで区別できます。 フォルダがリポジトリ、ブランチがリンクされた worktree、箱がサブモジュールです。 Calyx が Worktree タスクとして作成した worktree には、さらにチェックリストのアイコンが付き、そのメニューからタスクをマージまたは破棄できます。 Changes の見出しの横にある + ボタンからは、タスクを作成するシートを開けます。 セクションは入れ子にはならず、所属するリポジトリごとにグループとしてまとまります。 グループの中は、リポジトリ、リンクされた worktree、サブモジュールの順に並びます。 サブモジュールも独立したセクションを持つため、ペインを移動しなくてもその未コミットの変更をレビューできます。

セクションは折りたたまれた状態で並びます。 作業中のペインが属するセクションだけは、最初に現れたときに自動で開きます。 一度閉じれば、そのまま閉じたままになります。

セクションを開くと、そのリポジトリに限った次の二つを確認できます。

  • 作業ツリー: ステージ済み、未ステージ、未追跡のファイル
  • コミットグラフ: ブランチを可視化したコミット履歴

作業ツリーとコミットグラフのどちらでも、ファイルをクリックするとその Diff がタブで開きます。 Diff タブの表示は Diff ビュー で説明します。 ファイルの差分は、そのセクションのリポジトリを基準に開きます。 サブモジュール内のファイルや、二つめのリポジトリのファイルも正しい基準で開けます。

ファイル(ステージ済み、未ステージ、未追跡、展開したコミットの中のファイル)をシングルクリックすると、その Diff はグループのプレビュータブで開きます。 VS Code のプレビューエディターと同じ仕組みです。 プレビュータブのタイトルは斜体で表示されます。 プレビュータブはグループに一つまでです。 次にシングルクリックしたファイルは同じタブで開き、その Diff がアクティブなグループのタブにすでに開いていれば、そのタブに切り替わります。

Diff のタブを残すには、次のいずれかを行います。

  • Changes サイドバーでファイルをダブルクリックする。
  • タブバーまたはサイドバーでプレビュータブをダブルクリックする。
  • タブのコンテキストメニューで Keep Open を選ぶ(プレビュータブにだけ表示されます)か、コマンドパレットで Keep Tab Open を実行する。
  • その Diff にレビューコメントを付ける。

残したタブは通常の Diff タブになり、次のシングルクリックは新しいプレビュータブを開きます。

Settings の Appearance ペインにある Changes の Open diffs in a preview tab は、標準でオンです。 オフにすると、クリックのたびに専用の Diff タブが開きます。

コミットグラフに表示する範囲を選ぶ

Section titled “コミットグラフに表示する範囲を選ぶ”

コミットグラフは、標準では Auto の範囲を表示します。 これは VSCode の Auto にならった規則で、チェックアウト中のブランチ、その upstream、upstream のリモートのデフォルトブランチ(upstream がないときは origin のデフォルトブランチ)が対象です。 ほかのブランチにしかないコミットはグラフに現れないため、いま作業している履歴だけを追えます。 detached HEAD のときは、チェックアウト中のコミットの履歴を表示します。 まだコミットのないリポジトリでは、グラフは空になります。

セクションヘッダーのフィルタボタンをクリックすると、そのリポジトリの範囲を切り替えられます。

  • Auto: 上で説明した標準の範囲
  • All references: git log --all と同じく、すべてのブランチ、リモートブランチ、タグ
  • Branches、Remotes、Tags: 選んだ参照の履歴だけ

参照は複数選べます。 Auto か All references の状態で参照を選ぶとその一つに絞られ、さらに選ぶと対象に追加され、選択済みの参照をもう一度選ぶと外れます。 最後の一つを外すと Auto に戻ります。

Auto 以外の範囲を選んでいる間は、フィルタボタンがアクセントカラーで表示されます。 選んだ範囲はリポジトリごとに記憶され、次にそのリポジトリがウィンドウに現れたときにも適用されます。 記憶していた参照が削除されていた場合はその参照だけが外れ、一つも残らなければ Auto に戻ります。

各コミット行には、そのコミットを指しているブランチとタグがバッジとして表示されます。

グラフはコミットをページ単位で読み込み、読み込み済みの末尾に近づいた時点で次のページを要求します。 そのため長い履歴でも、ページの境目で止まらずにスクロールできます。

各セクションは自分のリポジトリを個別に監視して、それぞれのタイミングで更新します。 ある worktree でコミットすると、それを共有する他の worktree の履歴表示も更新されます。

更新のたびに表示が消えることはありません。 ファイル一覧とコミットグラフは画面に残ったまま更新され、ヘッダーの更新ボタンがスピナーに変わるのは、利用者が自分で更新を実行したときだけです。

更新に失敗しても内容は残り、エラー内容をツールチップに持つ警告アイコンが付きます。 アイコンは、リポジトリの探索そのものに失敗したときは Changes の見出しの横に、個々のセクションの更新に失敗したときはそのセクションに表示されます。 到達できなかったリポジトリも一覧から消えることはなく、読み込みに失敗したセクションには Retry ボタンが出ます。 次に更新が成功すると、警告は消えます。

Diff タブは、変更箇所の周辺だけでなく、ファイル全体を表示します。

変更された行には、薄い赤または緑の背景が付きます。 削除された行と追加された行が対になっている場合は、実際に異なる文字にさらに濃い強調が付きます。 そのため、長い行の中で一語だけ直した箇所も見つけやすくなります。 追加だけ、または削除だけの行には、行の背景だけが付きます。

Diff のツールバーの右端には、変更箇所の間を移動する上下のシェブロンボタンと、以下で説明するオプションをまとめた … メニューがあります。

Diff のレイアウトは、次の三つから選べます。

  • Inline: 一つのペインに、変更前と変更後の二列の行番号が並びます。 各変更では、削除された行が赤で先に並び、追加された行が緑で続きます。
  • Side by Side: 変更前のファイルが左に、変更後のファイルが右に並び、それぞれに行番号が付きます。 間の区切り線をドラッグするとペインの幅を変えられ、上下のスクロールは常に左右で連動します。 片側に対応する行がない箇所は斜線の行で埋まり、左右の高さが揃います。
  • Automatic: Diff 領域の幅が 900 ポイントより広い間は Side by Side で、900 ポイント以下では Inline で表示します。 標準ではこのレイアウトが選ばれています。 ウィンドウやサイドバーの幅を変えるとレイアウトがその場で切り替わり、表示の先頭にある行はそのまま保たれます。

レイアウトは、… メニューの Diff View サブメニュー、Settings の Appearance ペインにある Changes の Diff layout、コマンドパレットの Diff View: Automatic、Diff View: Inline、Diff View: Side by Side のいずれかで選べます。 コマンドパレットの Toggle Inline View は、Inline からは Side by Side に、残りの二つからは Inline に切り替えます。 選んだレイアウトは、すべての Diff タブに適用されます。

… メニューの Collapse Unchanged Regions、または Settings の Collapse unchanged regions をオンにすると、変更のない行が長く続く範囲を隠せます。 Calyx は各変更の前後に 3 行を残し、残りを「⋯ N unchanged lines ⋯」と書かれた灰色の行に置き換えます。 ただし、隠れる行が 3 行以上になる場合に限ります。 レビューコメントを含む範囲は折りたたまれません。 この設定は、標準ではオフです。

折りたたまれた行のガターには、三つのボタンがあります。

  • ▲: 隠れた範囲の上端から 20 行を追加で表示します。
  • ▼: 隠れた範囲の下端から 20 行を追加で表示します。
  • ↕: 隠れた範囲をすべて表示します。 行のラベルをクリックしても同じです。

コマンドパレットには、Toggle Collapse Unchanged Regions、Collapse All Unchanged Regions、Show All Unchanged Regions もあります。

行頭と行末の空白の差を無視する

Section titled “行頭と行末の空白の差を無視する”

Ignore Trim Whitespace は、標準でオンです。 オンの間、Calyx は行頭または行末の空白だけが異なる行を変更なしとして扱います。 そのため、インデントを変えただけの行や、行末の空白を削っただけの行は、変更として表示されません。 変更がその種類だけのファイルでは、Diff に変更箇所が一つも表示されません。

この設定は、… メニュー、Settings の Ignore trim whitespace、コマンドパレットの Toggle Ignore Trim Whitespace で切り替えられます。 切り替えると、開いているすべての Diff タブがその場で再計算されます。

Diff タブを開いたとき、またはタブが別のファイルを表示したとき、Calyx は最初の変更箇所が中央に来るまでスクロールします。 同じファイルを更新したときは、スクロール位置を保ちます。

変更箇所の間を移動するには、次の操作を使います。

  • Go to Next Change: Option+F5、Diff のツールバーの下向きシェブロン、View メニュー、コマンドパレット
  • Go to Previous Change: Option+Shift+F5、上向きシェブロン、View メニュー、コマンドパレット

移動先の変更箇所は、画面の中央に表示されます。 移動はファイルの端で折り返します。 最後の変更箇所から次へ進むと最初の変更箇所に戻り、最初の変更箇所から前へ戻ると最後の変更箇所に移ります。 最上段のキーが画面の明るさや音量の操作になっている Mac のキーボードでは、macOS のキーボード設定で F1、F2 などを標準のファンクションキーとして使う設定をオンにしていない限り、F5 は Fn と一緒に押します。

Diff の右端にある細い帯は、ファイル全体のどこに変更があるかを示します。 削除された行は帯の左半分に赤で、追加された行は右半分に緑で印が付きます。 半透明のスライダーが画面に表示中の範囲を示し、帯をクリックまたはドラッグするとその位置までスクロールします。 ルーラーは標準でオンで、Settings の Show overview ruler でオフにできます。

折り返しは、標準でオンです。 長い行は横にスクロールせず、ペインの幅で折り返されます。 折り返した続きの行は元の行のインデントに揃い、行番号は最初の行にだけ付きます。 Side by Side では各ペインがそれぞれの幅で折り返し、ブロックごとに短い側へ斜線の行が足されて、左右の高さが揃います。

折り返しは、View → Word Wrap(Option+Z)、… メニューの Word Wrap、Settings の Word wrap、コマンドパレットの Toggle Word Wrap で切り替えられます。 この設定はすべての Diff タブに適用され、アプリを再起動しても保たれます。 折り返しをオフにすると長い行は横にスクロールし、Side by Side では左右のペインが横方向にも連動してスクロールします。

Option+F5、Option+Shift+F5、Option+Z が Diff を操作するのは、Diff タブがアクティブなときだけです。 それ以外のタブでは、これらのキーはフォーカス中のペインに届きます。 そのため、ターミナルで動いているプログラムは、これまでどおりこれらのキーを受け取れます。

テキストは、ドラッグ、単語のダブルクリック、行のトリプルクリックで選択でき、Cmd+C でコピーできます。 Diff のテキストにフォーカスがある状態で Cmd+F を押すと、そのペインに検索バーが開きます。 Cmd+G で次の一致に、Cmd+Shift+G で前の一致に移動します。 Side by Side では、フォーカスのあるペインだけが検索の対象です。

  • git が出力したファイルの差分が 50 MB を超える場合、Calyx は二つの版を比較せずに表示し、「File too large to compare (> 50 MB)」というバナーを出します。
  • 比較が 5 秒続いた場合、Calyx は計算を打ち切ってそこまでの結果を表示し、「Diff computation stopped early (5000 ms)」というバナーを出します。
  • 10,000 文字を超える行は途中で切られ、末尾に「[truncated]」が付きます。

Diff の行にポインタを重ねると、ガターに + ボタンが現れます。 このボタンをクリックすると、その行にインラインコメントを追加できます。 Diff はファイル全体を表示するため、画面に表示されている行であれば、どの行にもコメントを付けられます。 折りたたまれた範囲の行も、表示すればコメントを付けられます。 Side by Side では、左右どちらのペインの行にも付けられます。 コメントは複数つけられ、最後に Submit Review を実行すると、選んだ AI エージェントのタブに直接送信されます。

送信先として選べるエージェント

Section titled “送信先として選べるエージェント”
  • Claude Code
  • Codex CLI
  • OpenCode
  • Hermes
  • Grok

送信されたレビューコメントは、エージェントの対話履歴にメッセージとして入力されるため、そのまま修正タスクとして依頼できます。

デモ動画 で動作を確認できます。

レビュー対象のブランチを取り込み、Diff を眺めながら気になった箇所に印を付け、まとめてエージェントに直してもらう、という流れを想定しています。 レビューコメントは GitHub などの外部サービスには送信されません。