チャプター ▾ 第2版

A1.1 付録A: その他の環境でのGit - グラフィカルインターフェース

この本を最後まで読んだことで、コマンドラインでGitを使う方法について多くのことを学んだでしょう。ローカルファイルでの作業、ネットワーク経由でのリポジトリの接続、他者との効果的な共同作業ができるようになりました。しかし、話はそこで終わりではありません。Gitは通常、より大きなエコシステムの一部として使われており、ターミナルが常に最適な作業方法とは限りません。次に、Gitが役立つその他の環境の種類と、他のアプリケーション(あなた自身のものも含む)がGitとどのように連携するかを見ていきましょう。

グラフィカルインターフェース

Gitのネイティブ環境はターミナルです。新機能はまずそこに登場し、Gitの全機能はコマンドラインでのみ完全に利用可能です。しかし、プレーンテキストはすべてのタスクにとって最良の選択肢ではありません。時には視覚的な表現が必要な場合もあり、一部のユーザーはポイントアンドクリックインターフェースの方がはるかに快適に感じます。

異なるインターフェースは異なるワークフローに特化していることに注意することが重要です。一部のクライアントは、著者が効果的と考える特定の作業方法をサポートするために、Git機能の慎重にキュレーションされたサブセットのみを公開しています。この観点から見ると、これらのツールのいずれも他のツールよりも「優れている」とは言えず、単にそれぞれの意図された目的に合致しているだけです。また、これらのグラフィカルクライアントができることで、コマンドラインクライアントができないことは何もないことにも注意してください。リポジトリを操作する際に最も強力な機能と制御を持つのは、依然としてコマンドラインです。

gitkgit-gui

Gitをインストールすると、視覚ツールであるgitkgit-guiも入手できます。

gitkはグラフィカルな履歴ビューアです。強力なGUIシェルを介したgit loggit grepのようなものだと考えてください。これは、過去に何が起こったかを見つけたり、プロジェクトの履歴を視覚化したりする際に使用するツールです。

Gitkはコマンドラインから起動するのが最も簡単です。Gitリポジトリにcdして、次のように入力するだけです。

$ gitk [git log options]

Gitkは多くのコマンドラインオプションを受け入れますが、そのほとんどは基盤となるgit logアクションに渡されます。おそらく最も有用なのは--allフラグで、これはgitkにHEADだけでなく、任意の参照から到達可能なコミットを表示するように指示します。Gitkのインターフェースは次のようになります。

The `gitk` history viewer
図177. gitk履歴ビューア

上部には、git log --graphの出力に少し似たものがあります。各ドットはコミットを表し、線は親子の関係を表し、参照は色付きのボックスで示されます。黄色のドットはHEADを表し、赤いドットはまだコミットになっていない変更を表します。下部には選択されたコミットのビューがあり、左側にコメントとパッチ、右側に概要ビューがあります。その間には、履歴を検索するためのコントロールのコレクションがあります。

一方、git-guiは主にコミットを作成するためのツールです。これもコマンドラインから起動するのが最も簡単です。

$ git gui

そして、それは次のような見た目です。

The `git-gui` commit tool
図178. git-guiコミットツール

左側はインデックスです。ステージされていない変更が上部に、ステージされた変更が下部にあります。アイコンをクリックすると、ファイル全体を2つの状態間で移動でき、ファイル名をクリックすると、表示するファイルを選択できます。

右上は差分ビューで、現在選択されているファイルの変更が表示されます。この領域を右クリックすると、個々のハンク(または個々の行)をステージングできます。

右下はメッセージとアクション領域です。テキストボックスにメッセージを入力し、「Commit」をクリックすると、git commitに似た操作が実行されます。「Amend」ラジオボタンを選択することで、最後のコミットを修正することもできます。これにより、「Staged Changes」領域が最後のコミットの内容で更新されます。その後、いくつかの変更をステージングまたはアンステージングし、コミットメッセージを変更して、再度「Commit」をクリックすると、古いコミットが新しいコミットに置き換えられます。

gitkgit-guiはタスク指向ツールの例です。それぞれが特定の目的(履歴の表示とコミットの作成)に特化しており、そのタスクに不要な機能は省略されています。

macOSおよびWindows用GitHub

GitHubは、ワークフロー指向のGitクライアントを2つ作成しました。1つはWindows用、もう1つはmacOS用です。これらのクライアントは、ワークフロー指向のツールの良い例です。Gitのすべての機能を公開するのではなく、連携してうまく機能する、厳選された一般的に使用される機能に焦点を当てています。これらは次のような見た目です。

GitHub for macOS
図179. macOS用GitHub
GitHub for Windows
図180. Windows用GitHub

これらは非常によく似た外観と動作をするように設計されているため、この章では単一の製品として扱います。これらのツールの詳細な説明は行いませんが(独自のドキュメントがあります)、主に時間を費やすことになる「変更」ビューの簡単なツアーは適切でしょう。

  • 左側にはクライアントが追跡しているリポジトリのリストがあります。このエリアの上部にある「+」アイコンをクリックすると、リポジトリを追加できます(クローンまたはローカルへのアタッチのいずれかで)。

  • 中央にはコミット入力領域があり、コミットメッセージを入力し、どのファイルを含めるかを選択できます。Windowsでは、コミット履歴がこのすぐ下に表示されます。macOSでは、別のタブに表示されます。

  • 右側には差分ビューがあり、作業ディレクトリで変更された内容、または選択されたコミットに含まれた変更が表示されます。

  • 最後に注目すべきは右上にある「Sync」ボタンで、これはネットワーク経由で操作するための主要な方法です。

これらのツールを使用するためにGitHubアカウントは必要ありません。GitHubのサービスと推奨ワークフローを強調するように設計されていますが、どんなリポジトリでも喜んで機能し、どんなGitホストともネットワーク操作を行います。

インストール

WindowsおよびmacOS用GitHubはhttps://desktop.github.com/からダウンロードできます。アプリケーションが最初に実行されると、名前やメールアドレスの設定など、Gitの初回セットアップのすべてを案内し、クレデンシャルキャッシュやCRLF動作など、多くの一般的な設定オプションに適切なデフォルトを設定します。

どちらも「エバーグリーン」であり、アプリケーションが開いている間にバックグラウンドでアップデートがダウンロードおよびインストールされます。これにはバンドルされたGitバージョンが含まれているため、手動で更新する心配はほとんどありません。Windowsでは、クライアントにはPosh-gitでPowerShellを起動するショートカットが含まれており、これについてはこの章の後半で詳しく説明します。

次のステップは、ツールに操作するリポジトリを提供することです。クライアントは、GitHubでアクセスできるリポジトリのリストを表示し、それらを1ステップでクローンできます。すでにローカルリポジトリがある場合は、そのディレクトリをFinderまたはWindowsエクスプローラーからGitHubクライアントウィンドウにドラッグするだけで、左側のリポジトリリストに含まれます。

一度インストールして設定すれば、GitHubクライアントを使って多くの一般的なGitタスクを実行できます。このツールの意図するワークフローは、「GitHubフロー」と呼ばれることもあります。GitHubフローでさらに詳しく説明していますが、一般的な趣旨は、(a)ブランチにコミットすること、そして(b)リモートリポジトリとかなり定期的に同期することです。

ブランチ管理は、この2つのツールが異なる領域の1つです。macOSでは、新しいブランチを作成するためのボタンがウィンドウの上部にあります。

“Create Branch” button on macOS
図181. macOSの「Create Branch」ボタン

Windowsでは、ブランチ切り替えウィジェットに新しいブランチの名前を入力することで行われます。

Creating a branch on Windows
図182. Windowsでのブランチ作成

ブランチが作成されると、新しいコミットの作成は非常に簡単です。作業ディレクトリで変更を行い、GitHubクライアントウィンドウに切り替えると、どのファイルが変更されたかが表示されます。コミットメッセージを入力し、含めたいファイルを選択して、「Commit」ボタンをクリックします(Ctrl+Enterまたは⌘+Enter)。

ネットワークを介して他のリポジトリと対話する主な方法は、「Sync」機能を使用することです。Gitは内部的にプッシュ、フェッチ、マージ、リベースの個別の操作を持っていますが、GitHubクライアントはこれらすべてを1つの多段階機能にまとめています。Syncボタンをクリックしたときに何が起こるかは次のとおりです。

  1. git pull --rebase。マージ競合のためにこれが失敗した場合、git pull --no-rebaseにフォールバックします。

  2. git push.

これはこのスタイルの作業で最も一般的なネットワークコマンドのシーケンスであるため、それらを1つのコマンドにまとめることで多くの時間を節約できます。

まとめ

これらのツールは、設計されたワークフローに非常に適しています。開発者も非開発者も数分以内にプロジェクトで共同作業を開始でき、この種のワークフローのベストプラクティスの多くがツールに組み込まれています。ただし、ワークフローが異なる場合、またはネットワーク操作の方法とタイミングをより細かく制御したい場合は、別のクライアントまたはコマンドラインを使用することをお勧めします。

その他のGUI

他にも多くのグラフィカルなGitクライアントがあり、それらは特殊な単一目的のツールから、Gitができるすべてのことを公開しようとするアプリまで多岐にわたります。公式のGitウェブサイトには、最も人気のあるクライアントの厳選されたリストがhttps://git.dokyumento.jp/downloads/guisにあります。より包括的なリストは、Git wikiサイトのhttps://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools.html#Graphical_Interfacesで入手できます。

scroll-to-top