コース目次
アカデミーモジュール 6 · Git・コード・地図・デザインの活用
バージョン管理:組み込みの Git パネル
このレッスンで学ぶこと
- 「ソース管理」パネルを開き、任意のワークスペースを 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 形式のメッセージが入力されます。「コミット」の隣にある山形アイコンからは、「コミットしてプッシュ」と「コミット (修正)」を選べます。フッターの「変更を同期」ボタンは、プルしてからプッシュする処理を一度に実行します。
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 へ公開する
- 空の状態から開始する
まだリポジトリではないワークスペースで「ソース管理」を開き、「GitHub に公開」をクリックします。下の説明には「公開するとリポジトリを初期化し、サインインして新しい GitHub リポジトリへプッシュできます。」と表示されます。アプリが
git initを実行します。 - デバイスコードでサインインする
ghにサインインしていない場合、「GitHub にサインイン」モーダルに短いコードが表示され、ブラウザが開きます。ブラウザでコードを入力し、「承認待ち…」の表示が消えるまで待ちます。 - 名前を付け、非公開のままにする
「GitHub に公開」ダイアログの「リポジトリ名」には、フォルダ名があらかじめ入力されています。「プライベートリポジトリ」は既定でオンです。「公開範囲を変更するまでは、自分だけが見られます。」と説明されています。
- 公開する
「GitHub に公開」をクリックします。コミットがまだない場合はアプリが最初のコミットを作成し、GitHub リポジトリを作成してプッシュします。完了すると「GitHub に公開しました。」という通知が表示されます。
リポジトリを GitHub へ公開すると、グラフの上に「プルリクエスト」領域が固定表示されます。オープン中の PR が #number とともに並び、オープンは緑、ドラフトは灰色のアイコンで示されます。領域のフッターには、サインイン中の @login が表示されます。+ ボタンを押すと、「タイトル」、「説明」、「作成」だけの最小限のダイアログが開き、現在のブランチから既定のブランチへの PR を作成できます。
PR にホバーすると、「PR をチェックアウト」(ローカルで gh pr checkout)または「ブラウザで開く」を選べます。クローンも同じパネルにあり、… →「リポジトリをクローン…」では owner/name または URL を入力します。この入口では保存先を尋ねません。クローンはホームフォルダへ置かれ、ファイルマネージャーで表示されます。現在のワークスペースはそのままです。
ワークスペースの最初のスナップショットをコミットする
- タイトルバーのセグメントコントロールにあるブランチアイコン(「ソース管理」)からパネルを開きます。ワークスペースがまだリポジトリでなければ、「リポジトリを初期化」をクリックします。
- 任意のノートを編集して保存します。ほどなく「変更」にファイルが表示されます。
.gitとワークスペースのウォッチャーがパネルを最新に保つため、外部のターミナルで実行した git コマンドも反映されます。 - ファイルをシングルクリックして左右比較の差分を確認し、F8 で次の変更へ移動します。
- 行にホバーして + をクリックし、ステージします。次に、きらめきアイコンをクリックします。「コミットメッセージを生成」がステージ済みの差分からメッセージを作成します。
- 「コミット」をクリックします。
「変更をコミットしました」という通知が表示され、一覧が「変更はありません。」に戻ります。「グラフ」セクションの先頭には、青い HEAD ピルの付いたコミットが表示されます。
Git の状態が表示される場所と、クローンの保存先
ファイルの Git 状態は、「ソース管理」パネルと差分タブに表示されます。ファイルツリーの色付きバッジはナレッジグラフのライフサイクルを示すため、2つの表示が重なることはありません。
クローンの保存先を選びたい場合は、もう1つの入口を使います。ワークスペースが開いていないときに表示される「ワークスペースを開いて始めましょう」画面で、「リポジトリをクローン」を選びます。リポジトリ、保存先フォルダの順に尋ねられ、その後クローンがワークスペースとして開きます。
最後にもう1点あります。チャット入力欄の @ メニューには「メインとの差分」という項目があり、作業ツリーと main の差分をメッセージへ添付できます。まだコミットしていない作業をエージェントにレビューしてもらうときに便利です。次のレッスンでは、エージェントと共有するターミナルドックと、コードがナレッジグラフの一部になる仕組みを扱います。