本文へスキップ
コース目次

アカデミーモジュール 6 · Git・コード・地図・デザインの活用

バージョン管理:組み込みの Git パネル

全4レッスン中 1番目12分

このレッスンで学ぶこと

  • 「ソース管理」パネルを開き、任意のワークスペースを Git リポジトリに変換するか、一連の操作で GitHub へ公開できる
  • ファイルをステージし、AI が作成したメッセージでコミットして、プッシュできる。また、「コミット」ボタンが無効になる理由を説明できる
  • 左右比較の差分を読み、ブロック(ハンク)単位でステージ、ステージ解除、破棄ができる
  • ブランチの切り替え、作成、削除ができ、色分けされたレーン付きのコミットグラフを読める
  • ナレッジグラフは常に再構築できるため、Markdown だけをバージョン管理すれば十分な理由を説明できる

今日は金曜日です。月曜日にプロジェクト計画のノートを書き直し、セクションを2つ丸ごと削除しました。いま、そのうちの1段落が必要になりましたが、4日前の操作なので「元に戻す」はもう使えません。ワークスペースが Git リポジトリなら、30秒で済みます。履歴を開き、月曜日のコミットを見つけ、差分から以前の文章を読むだけです。

Consilience には、VS Code の Git ビューに似た完全なソース管理パネルが組み込まれています。アプリを離れずに、変更の確認、ステージ、コミット、プッシュ、プルができます。AI にコミットメッセージを書かせることもでき、ブランチ、スタッシュ、色分けされたレーン付きのコミットグラフも同じパネルにまとまっています。

ファイルをバージョン管理し、グラフは再構築する

アプリの各レイヤーのうち、履歴が必要なのはMarkdown ワークスペースだけです。ナレッジグラフはファイルから構築され、いつでも再構築できるため、ノートのバージョン管理だけで十分です。

Markdown はプレーンテキストであり、Git が最も得意とする比較対象です。すべての変更が読みやすい行単位の差分として表示され、ひと目で確認できます。

1つのコミットは、グラフの元になるすべての情報のスナップショットです。ノートに問題が起きたとき、差分を見れば、どの文が変わったのかを正確に把握できます。

パネルを開き、リポジトリを作る

パネルを開く方法は3つあります。

  • タイトルバー:左上のセグメントコントロールで、チャットとファイルツリーの隣にあるブランチアイコンのセグメント(ツールチップは「ソース管理」)を選びます。
  • メニューバー:移動 → ソース管理を選びます。既定のキーボードショートカットはありません。
  • コマンドパレット:「ソース管理を表示」を実行します。

パネルは、開いているワークスペースのフォルダ、またはその上位にある任意のフォルダでリポジトリを探します。そのため、大きなリポジトリ内のサブフォルダをワークスペースにしても問題ありません。リポジトリがまったくない場合は、「このフォルダーは git リポジトリではありません。」という空の状態と、「リポジトリを初期化」git init を実行)、「GitHub に公開」(後述する一括フロー)の2つのボタンが表示されます。Git がまだインストールされていない場合もアプリが検出し、「Git を入手」ボタンからダウンロードページを開けます。

ステージ、コミット、プッシュ

変更一覧は VS Code と同じ考え方でファイルをグループ化します。空でないグループだけが表示され、件数バッジと、ホバー時に現れる操作が付きます。各行にはファイル名、薄く表示されたフォルダ、+N/−N の行数、色付きのステータス文字が並びます。M は変更、A は追加、D は削除、R/C は名前変更またはコピー、T は種類変更、U は追跡対象外(緑)または競合(オレンジ)です。

グループここに入るもの
「マージの変更」マージ中に競合したファイル。通常のエディターで競合マーカーを修正してから、ファイルをステージします。
「ステージされた変更」インデックス内のファイル。次のコミットに含まれる内容そのものです。ヘッダーにホバーすると「すべてステージ解除」が表示されます。
「変更」作業ツリーで変更された追跡対象ファイル。ヘッダーにホバーすると「すべての変更をステージ」と「追跡対象のすべての変更を破棄」が表示されます。
「追跡対象外」Git がまだ認識していない新規ファイル。コミットに含めるにはステージします。

Git のコミットは2段階です。行にホバーして + をクリックし、まずステージします。次にメッセージを書いて「コミット」を押します。両方がそろうまではボタンが無効で、ツールチップに不足しているものが「コミットする前に変更をステージしてください。」または「先にコミットメッセージを入力してください。」と表示されます。

メッセージを書く手間を省きたい場合は、テキスト欄のきらめきアイコン、「コミットメッセージを生成」をクリックします。ステージ済みの差分が AI に送られ、Conventional Commits 形式のメッセージが入力されます。「コミット」の隣にある山形アイコンからは、「コミットしてプッシュ」「コミット (修正)」を選べます。フッターの「変更を同期」ボタンは、プルしてからプッシュする処理を一度に実行します。

「コミットメッセージを生成」の出力形式:type(scope): summary、命令形、72文字以内
docs(plans): fold Q3 scope cuts into the decision log

「破棄」しても作業は失われません

ここでの破棄は git stash を経由するため、破壊的なチェックアウトは行いません。各確認ダイアログにも「git stash pop で復元できます。」と明記されます。

破棄した変更は、パネルの「スタッシュ」セクションに consilience-discard という項目で入ります。項目にホバーすると、「適用して削除」(復元)または「削除」(完全削除)を選べます。

意図的に作業を一時退避することもできます。… → スタッシュ →「スタッシュ」または「スタッシュ (追跡対象外を含む)」を使います。通常の「スタッシュ」は新規ファイルを含みません。

ステージ
Git の2段階コミット。最初に変更をインデックスへ選び(+ の操作)、ステージ済みの内容だけをコミットします。Consilience がステージされていない作業をコミットすることはありません。
ハンク(ブロック)
差分内で連続している変更行のまとまり。差分タブでは、各ブロックに個別のステージ、ステージ解除、破棄ボタンが付きます。
スタッシュ
未コミットの作業を一時退避する Git の仕組み。「スタッシュ」コマンドでも、アプリの「破棄」でも変更はここに入り、「適用して削除」で戻せます。
アップストリーム
ローカルブランチの同期先となるリモートブランチ。設定されるまでは「変更を同期」ではなく公開操作が表示され、最初のプッシュで自動設定されます。
コミットグラフ
パネルの「グラフ」セクション。すべての参照(ブランチとタグ)にまたがる最近のコミットを、色付きのブランチレーンと参照ピルで描画します。

差分タブ:ブロック単位で作業する

変更された行をシングルクリックすると、読み取り専用の差分が通常のタブとして開きます。作業ツリーの編集は filename (変更)、インデックスは filename (ステージ済み) と表示され、同じファイルの両方を同時に開くこともできます。(ダブルクリックすると、ファイル自体が開きます。)

既定のレイアウトは左右比較で、変更のない領域は展開可能な区切りの中へ折りたたまれます。フローティングツールバーでは、変更間を移動(F8 / Shift+F8)し、左右比較とインライン表示を切り替えられます。右端の概要ルーラーには、すべての変更がクリック可能な色付きの点で示されます。

  • 作業ツリーの差分では、変更ブロックごとにガターへ +「このブロックをステージ」と 「このブロックを破棄」が表示されます(確認:「このブロックを破棄しますか?変更は失われます。」)。
  • ステージ済みの差分では、代わりに 「このブロックをステージから外す」が表示されます。
  • これを使えば、雑多な変更を含む1つのファイルを2つの明確なコミットへ分けられます。関連するブロックだけをステージしてコミットし、その後に残りをステージします。
  • 補足:すべての Markdown エディターとコードエディターには、Git の HEAD と異なる行を示す差分ガターバーも表示されます。追加は緑、削除は赤で、入力のたびに再計算されます。

ブランチと履歴

フッターのブランチボタンには、現在のブランチ名(ブランチではなくコミットをチェックアウトしている場合は「(ブランチなし)」)と、behind/ahead の件数 ↓N ↑N が表示されます。クリックするか、… → ブランチ →「チェックアウト先…」を選ぶと、ブランチ選択画面が開きます。そこでは検索と作成が1つの入力欄(「ブランチを検索または作成…」)を共有します。新しい名前を入力して Enter を押すと、「ブランチ "{name}" を作成」します。ローカルブランチをクリックするとチェックアウトし、「リモート」から選ぶとローカルの追跡ブランチが作られます。

ブランチにホバーすると削除ボタンが現れます。ブランチがマージされていない場合、Git は通常の削除を拒否し、ダイアログが「ブランチが未マージ」に切り替わります。赤い「強制削除」ボタンは、その作業を完全に失うことを警告します。

下部の「グラフ」セクションには、すべての参照にまたがる最近の履歴が、色付きのブランチレーンと参照ピルで描かれます。ピルの色が凡例です。チェックアウト中のブランチ(HEAD)は青、リモートブランチは紫、タグは琥珀色、その他のローカルブランチは灰色です。ヘッダーのアイコンから、「現在の履歴項目へ移動」「すべてのリモートからフェッチ」「プル」「プッシュ」「更新」を実行できます。グラフは読み取り専用なので、コミットに対してできる操作は右クリック → 「コミットハッシュをコピー」だけです。

GitHub:公開、サインイン、プルリクエスト

GitHub に関する操作は、公開、クローン、サインイン、プルリクエストを含め、すべて公式の GitHub CLI(gh)を経由します。gh が見つからない場合は「GitHub CLI が必要です」というダイアログと「GitHub CLI を入手」ボタンが表示されます。Dock からアプリを起動した場合でも、Homebrew でインストールしたものを検出できます。

サインインには GitHub の Device Flow を使用します。「GitHub にサインイン」モーダルに短いコード(「コードをコピー」ボタン付き)が表示され、ブラウザが開いて承認を待ちます。ターミナルでの gh auth login に切り替えることもできます。アクセストークンは直接 gh に渡され、画面には表示されません。

一連の操作でワークスペースを GitHub へ公開する

  1. 空の状態から開始する

    まだリポジトリではないワークスペースで「ソース管理」を開き、「GitHub に公開」をクリックします。下の説明には「公開するとリポジトリを初期化し、サインインして新しい GitHub リポジトリへプッシュできます。」と表示されます。アプリが git init を実行します。

  2. デバイスコードでサインインする

    gh にサインインしていない場合、「GitHub にサインイン」モーダルに短いコードが表示され、ブラウザが開きます。ブラウザでコードを入力し、「承認待ち…」の表示が消えるまで待ちます。

  3. 名前を付け、非公開のままにする

    「GitHub に公開」ダイアログの「リポジトリ名」には、フォルダ名があらかじめ入力されています。「プライベートリポジトリ」は既定でオンです。「公開範囲を変更するまでは、自分だけが見られます。」と説明されています。

  4. 公開する

    「GitHub に公開」をクリックします。コミットがまだない場合はアプリが最初のコミットを作成し、GitHub リポジトリを作成してプッシュします。完了すると「GitHub に公開しました。」という通知が表示されます。

リポジトリを GitHub へ公開すると、グラフの上に「プルリクエスト」領域が固定表示されます。オープン中の PR が #number とともに並び、オープンは緑、ドラフトは灰色のアイコンで示されます。領域のフッターには、サインイン中の @login が表示されます。+ ボタンを押すと、「タイトル」「説明」「作成」だけの最小限のダイアログが開き、現在のブランチから既定のブランチへの PR を作成できます。

PR にホバーすると、「PR をチェックアウト」(ローカルで gh pr checkout)または「ブラウザで開く」を選べます。クローンも同じパネルにあり、… →「リポジトリをクローン…」では owner/name または URL を入力します。この入口では保存先を尋ねません。クローンはホームフォルダへ置かれ、ファイルマネージャーで表示されます。現在のワークスペースはそのままです。

ワークスペースの最初のスナップショットをコミットする

  1. タイトルバーのセグメントコントロールにあるブランチアイコン(「ソース管理」)からパネルを開きます。ワークスペースがまだリポジトリでなければ、「リポジトリを初期化」をクリックします。
  2. 任意のノートを編集して保存します。ほどなく「変更」にファイルが表示されます。.git とワークスペースのウォッチャーがパネルを最新に保つため、外部のターミナルで実行した git コマンドも反映されます。
  3. ファイルをシングルクリックして左右比較の差分を確認し、F8 で次の変更へ移動します。
  4. 行にホバーして + をクリックし、ステージします。次に、きらめきアイコンをクリックします。「コミットメッセージを生成」がステージ済みの差分からメッセージを作成します。
  5. 「コミット」をクリックします。

「変更をコミットしました」という通知が表示され、一覧が「変更はありません。」に戻ります。「グラフ」セクションの先頭には、青い HEAD ピルの付いたコミットが表示されます。

Git の状態が表示される場所と、クローンの保存先

ファイルの Git 状態は、「ソース管理」パネルと差分タブに表示されます。ファイルツリーの色付きバッジはナレッジグラフのライフサイクルを示すため、2つの表示が重なることはありません。

クローンの保存先を選びたい場合は、もう1つの入口を使います。ワークスペースが開いていないときに表示される「ワークスペースを開いて始めましょう」画面で、「リポジトリをクローン」を選びます。リポジトリ、保存先フォルダの順に尋ねられ、その後クローンがワークスペースとして開きます。

最後にもう1点あります。チャット入力欄の @ メニューには「メインとの差分」という項目があり、作業ツリーと main の差分をメッセージへ添付できます。まだコミットしていない作業をエージェントにレビューしてもらうときに便利です。次のレッスンでは、エージェントと共有するターミナルドックと、コードがナレッジグラフの一部になる仕組みを扱います。

バージョン管理:組み込みの Git パネル