← ブログに戻る

VS Code時代にデスクトップGitクライアントがまだ重要な理由

opinion productivity

VS CodeにはGitが組み込まれている。では、なぜ他のものを使うのか?

それは当然の疑問です。Visual Studio Codeには標準でGit統合が搭載されています。ファイルのstaging、commitメッセージの入力、ブランチの切り替え、diffの表示、さらにはmergeコンフリクトの解決まで、エディタを離れることなく行えます。GitHub Desktopは洗練されたシンプルなGit体験を提供します。GitHub CodespacesやGitpodなどのWebベースIDEも年々改善されています。これだけの選択肢がある中で、専用のGitクライアントにはまだ存在意義があるのでしょうか?

短い答えは「はい」ですが、すべての人にとってではありません。より長い答えには、これらの組み込みツールや軽量ツールが実際に何を提供し、どこで限界があるかを見る必要があります。

VS Codeが得意なこと

専用クライアントの主張をする前に、VS Codeが正しくやっていることを認めるべきです。Git統合は基本をスムーズにカバーしています。どのファイルが変更されたかを確認し、個別またはまとめてstagingし、commitメッセージを書いてpushする――すべてSource Controlパネルから可能です。インラインdiffビューアはクリーンで機能的です。GitLensなどの拡張機能がblameアノテーション、commit履歴などを追加します。

シンプルなワークフロー――単一ブランチ、定期的なcommit、たまのpull――であれば、VS Codeの組み込みGitサポートは本当に十分です。日常のGit使用がaddcommitpushpullに限られているなら、他に何も必要ないかもしれません。

しかしGitはそれ以上のことが可能であり、ここで専用クライアントがその価値を発揮します。

commitグラフ:全体像を見る

VS CodeのGit統合の最大の制限は、ビジュアルなcommitグラフの欠如です。VS Codeはcommitのフラットなリストを表示します。履歴は見えますが、そのは見えません。

commitグラフはブランチがどう分岐し、どこでmergeされ、どのcommitがどのブランチにあり、全体の履歴がどう流れるかを示します。この可視化は装飾ではなく、アクティブなブランチが複数あるリポジトリで何が起きているかを理解するために不可欠です。

3つの機能ブランチが進行中で、1つはmergeされたがまだ削除されておらず、ホットフィックスがmainからリリースブランチにcherry-pickされたシナリオを考えてみてください。VS Codeでは、commitの時系列リストが表示され、関係性を頭の中で再構築する必要があります。専用のGitクライアントでは、構造全体が一目でわかります:どのブランチが先行し、どれが分岐し、各mergeが正確にどこで起きたかが。

一部のVS Code拡張機能はグラフ可視化を追加しようとしていますが、エディタのUI制約に制限されています。サイドバーに押し込まれたパネルやwebviewタブは、専用Gitクライアントが提供する全画面の専用グラフには敵いません。

コマンドラインなしの複雑な操作

VS Codeは基本をカバーしますが、より複雑なことが必要な場合、通常はターミナルに頼る必要があります。専用Gitクライアントはこれらの操作を視覚的に処理します:

  • インタラクティブrebase。commitの並べ替え、squash、commitメッセージの編集、commitの削除――すべてドラッグアンドドロップまたは簡単なコントロールで、実行前に結果の明確なプレビューが表示されます。
  • cherry-pick。あるブランチから特定のcommitを選んで別のブランチに適用し、何が選ばれるかの視覚的な確認が得られます。
  • stash管理。各stashに何が含まれるかの完全な可視性を持って、stashの作成、表示、適用、削除ができます。VS Codeはstashを基本的なリストで表示しますが、専用クライアントではファーストクラスのオブジェクトとして検査・管理できます。
  • Bisect。一部の専用クライアントは、どのcommitがバグを導入したかを追跡しやすくするビジュアルなbisectインターフェースを提供します。
  • サブモジュール管理。正しいコマンド構文を覚える代わりに、明確なステータスインジケータでサブモジュールの表示と更新ができます。

これらの操作はコマンドラインからでも不可能ではありません。しかし、視覚的に行うことでミスのリスクが減り、特に毎日は行わず正確な構文を覚えていないかもしれない操作では、プロセスが速くなります。

マルチリポジトリワークフロー

多くの開発者は毎日複数のリポジトリにまたがって作業しています。マイクロサービスアーキテクチャ、フロントエンドとバックエンドの分離、またはサポートライブラリを伴うモノレポ――これらは一般的なセットアップです。VS CodeのGit統合は開いているワークスペースに限定されます。リポジトリの切り替えはワークスペースの切り替えか新しいウィンドウの開閉を意味します。

専用Gitクライアントは通常、複数のリポジトリ用のタブやパネルをサポートしており、コンテキストを失うことなく監視と切り替えが可能です。フロントエンドリポジトリのcommit作業中にAPIリポジトリのステータスを確認できます。ウィンドウの開閉は不要です。

mergeコンフリクトの解決

VS Codeはmergeコンフリクトの解決を大幅に改善しました。「Accept Current」「Accept Incoming」「Accept Both」ボタン付きのインラインコンフリクトエディタは、シンプルなコンフリクトに対応します。しかし、多数のコンフリクトファイルを含む複雑なmergeや、両方のバージョンの一部を組み合わせる必要がある微妙なコンフリクトでは、専用クライアントの3ウェイmergeエディタがはるかに明確な全体像を提供します。

適切な3ウェイmergeは、ベースバージョン(共通の祖先)、あなたのバージョン、そして受信バージョンを並べて表示します。このコンテキストにより、コンフリクトがなぜ発生したか、正しい解決が何であるべきかの理解がはるかに容易になります。VS Codeのmergeエディタはこの方向に進んでいますが、専用Gitクライアントは何年もかけてこのワークフローを洗練しており、一般的により成熟した体験を提供しています。

大規模リポジトリでのパフォーマンス

小〜中規模のリポジトリでは、VS Codeと専用クライアントのパフォーマンス差はわずかです。しかしリポジトリが成長すると――数千のcommit、数百のブランチ、大きなバイナリファイル――差は顕著になります。パフォーマンスを優先して構築されたネイティブGitクライアントは、VS CodeのGit統合がラグしたり応答しなくなったりするリポジトリ操作を処理できます。

これは特に、深い履歴を持つリポジトリでのログナビゲーションとblame操作に関連します。ビジュアルグラフで数千のcommitをスクロールするのはスムーズでなければならず、このタスクのために特別に構築されたツールは、Gitが後付けされた汎用エディタよりも最適化されています。

反論:シンプルさには価値がある

VS Codeの組み込みGitに対する最も強力な議論を認めないのは不誠実でしょう:すでにそこにあるということです。追加のツールをインストールする必要も、追加のライセンスを管理する必要も、アプリケーション間のコンテキスト切り替えもありません。Gitワークフローがシンプルな開発者にとって、専用クライアントを追加することは不必要な複雑さです。

ほとんどの時間を単一ブランチで作業し、定期的にcommitし、rebaseや複雑なmergeシナリオの管理がめったに必要ない場合、VS Codeは必要なものすべてを提供します。すべての開発者がビジュアルcommitグラフや3ウェイmergeエディタを必要とするわけではなく、シンプルなワークフローにシンプルなツールを使うのは完全に妥当な選択です。

全体像

専用Gitクライアントは全体像を求める開発者のために存在します。何が変わったかだけでなく、リポジトリの履歴がどのように構造化されているかを示します。コマンド構文を覚える必要なく、複雑な操作を視覚的に処理します。ウィンドウの切り替えなしに複数のリポジトリを管理します。完全なコンテキストでmergeコンフリクトを解決します。

VS CodeはたまたまGitサポートを含む素晴らしいエディタです。専用Gitクライアントはgit自体を中心にゼロから構築されたツールです。違いはどちらが優れているかではなく、あなたのワークフローが専用ツールが提供する深さを必要とするかどうかです。

もしcommitリストを見つめながらブランチがどこで分岐したか解読しようとしたことがあったり、今日10回目のgit log --oneline --graph --allを入力したことがあったり、何がコンフリクトするかわからないためにmergeを恐れたことがあるなら――専用Gitクライアントは試す価値があります。全体像を見ることで、Gitとの作業方法が根本的に変わるかもしれません。