Git
Chapters ▾ 2nd Edition

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

これまでの内容を通して、コマンドラインからGitを使用する方法について多くのことを学んできました。 ローカルファイルに対して作業したり、ネットワークを介して他のリポジトリへ接続したり、他の人と効率的に作業したりできるようになったと思います。 しかし、話はそこで終わりません。Gitは通常、より大きなエコシステムの一部として使用されます。端末からの利用が常に最適解というわけではありません。 ここでは、端末以外でGitを活用できる環境の例や、そこで他の(あるいは、あなたの)アプリケーションがどのようにGitと協調動作するかを見ていきます。

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

Gitは端末をネイティブ環境としています。 Gitの新機能は、まずコマンドラインから利用可能になります。また、Gitのパワーの全てを完全に思い通りに使えるのもコマンドラインからだけです。 しかし、すべてのタスクにおいてプレーンテキストが最良の選択というわけではありません。時には視覚的な表現も必要でしょうし、ポイント&クリック方式のインタフェースの方が好みというユーザもいるでしょう。

なお、それぞれのインタフェースはそれぞれ別のワークフローに合わせて調整されているということには注意が必要です。 クライアントによっては、クライアントの作者が効率的だと考えている特定の作業手順をサポートするため、Gitの機能の中から選び抜かれた一部の機能だけを利用可能としている場合もあります。 この観点から見た場合、あるツールが他のツールと比べて “よい” よいうことはありません。各ツールは自身が想定している目的により適合している、というだけです。 また、これらグラフィカルクライアントでは可能で、コマンドラインクライアントでは不可能な処理、というものはありませんので注意してください。リポジトリに対して作業をする場合、コマンドラインが最もパワフルであることに変わりはありません。

gitkgit-gui

Gitをインストールすると、ビジュアルツール gitk および git-gui が使えるようになります。

gitk はグラフィカルな歴史ビューアです。 git loggit grep をパワフルなGUIシェルから使えるようにしたようなものだと思ってください。 これは、過去に何が起こったかを検索したり、プロジェクトの歴史を視覚化しようとしているときに使うツールです。

Gitkはコマンドラインから呼び出すのが一番簡単です。 Gitのリポジトリに cd して、以下のようにタイプしてください。

$ gitk [git logのオプション]

Gitkには多くのコマンドラインオプションがありますが、その多くはGitkの背後にいる git log アクションに渡されます。 おそらく、最も便利なオプションの一つは --all フラグでしょう。これはgitkに対し、HEADだけではなく 任意の 参照から到達可能なコミットを表示させるものです。 Gitkのインターフェイスは次のようになっています。

`gitk`の歴史ビューアー
Figure 152. `gitk`の歴史ビューアー

上部には git log --graph の出力に似た内容が表示されます。各ドットはコミットを、線は親子関係を表しており、参照は色付きの箱として表示されます。 黄色の点はHEADを、赤い点はまだコミットになっていない変更を表しています。 下部には、選択されているコミットの内容が表示されます。コメントやパッチが左側に、概要が右側に表示されます。 真ん中にあるのは歴史の検索に使用するコントロール類です。

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

$ git gui

表示内容は次のようになっています。

`git-gui` のコミットツール
Figure 153. git-gui のコミットツール

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

右上に表示されているのは diff で、現在選択されているファイルの変化を示しています。 この領域を右クリックすることで、個々のhunk(または個々の行)をステージングできます。

右下はメッセージとアクションの領域です。テキストボックスにメッセージを入力し、 “Commit” をクリックすれば、 git commit と同じようなことができます。 また、 “Amend” ラジオボタンを選択すると、 “Staged Changes” 領域に最後のコミットの内容が表示されるので、そのコミットを修正することもできます。 変更をステージしたり、ステージを取り消したり、コミットメッセージを変更したりしたら、 “Commit” を再度クリックすれば古いコミットが新しい内容で更新されます。

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

MacとWindows用のGitHubクライアント

GitHubは、ワークフロー指向のGitクライアントを公開しています。Windows用クライアントと、Mac用クライアントがあります。 これらのクライアントは、ワークフロー指向のツールの良い例です。Gitの機能の すべて を公開するのではなく、よく使われる機能の中から一緒に使うと便利な機能を選択し、それにフォーカスしています。 表示内容は次のようになっています。

GitHubのMac用クライアント
Figure 154. GitHubのMac用クライアント
GitHubのWindows用クライアント
Figure 155. GitHubのWindows用クライアント

この2つは見た目や動作が似たような感じで設計されているので、この章ではひとつの製品として扱うことにします。 ここではツールの詳細な説明はしません(GitHubクライアントの自前のドキュメントがあります)が、 “changes” ビュー(ツールの実行時間の大半はここを使うことになると思います)の内容をざっと見ていきましょう。

  • 左側には、クライアントが追跡しているリポジトリのリストが表示されます。この領域の一番上の ‘`+ '’ アイコンをクリックすると、(ローカルでクローンするかアタッチするかして)リポジトリを追加できます。

  • 真ん中はコミット入力領域です。コミットメッセージを入力したり、コミットに含めるファイルを選択したりできます。 (Windowsでは、コミットの歴史は、この下に直接表示されます。Macの場合は、別のタブに表示されます。)

  • 右側はdiffビューです。作業ディレクトリの変更内容、または、選択しているコミットに含まれている内容が表示されます。

  • 最後に、右上の “Sync” ボタンは、ネットワーク経由で対話を行う主要な手段です。

Note

これらのツールの使用にあたり、GitHubのアカウントは必要ありません。 これらのツールはGitHubのサービスや推奨ワークフローをハイライトするために設計されたものですが、どんなリポジトリに対しても正しく動作しますし、どんなGitのホストに対してもネットワーク操作が行えます。

インストール

Windows用のGitHubクライアントは https://windows.github.com から、Mac用のGitHubクライアントは https://mac.github.com からダウンロードできます。 クライアントを初めて実行する際には、名前やメールアドレスの設定といったGitの初期設定がひと通り行われます。また、認証情報のキャッシュやCRLFの挙動といった、一般的なオプション設定に対して、デフォルト値が設定されます。

これらのツールはいずれも “新鮮” な状態に保たれます。つまり、アプリケーションのアップデートは、アプリケーションの実行中にバックグラウンドで自動的にダウンロードされ、インストールされます。 このアップデートには、ツールに同梱されているGitも含まれています。そのため、Gitを手動で更新する心配をする必要はおそらくないと思います。 Windowsの場合、PowerShellをPosh-gitと一緒に起動するショートカットがクライアントに同梱されています。これについてはこの章の後半で詳しく説明します。

次のステップでは、ツールに操作対象のリポジトリを設定します。 クライアントには、GitHubであなたがアクセスできるリポジトリの一覧が表示されます。クローンの作成は1ステップで行えます。 既にローカルリポジトリがある場合は、GitHubのクライアントウインドウにFinderまたはWindowsエクスプローラからそのディレクトリをドラッグすれば、クライアント左側のリポジトリのリストに追加されます。

推奨ワークフロー

インストールと設定が完了したら、GitHubクライアントを使って一般的なGitのタスクの多くが行えます。 このツールで想定されているワークフローは “GitHub Flow” とも呼ばれています。 この詳細は GitHub Flow で取り上げます。要点としては、(a)コミットはブランチに対して行う、(b)定期的にリモートリポジトリと同期する、といった点があります。

ブランチ管理は、2つのツールで操作が異なる点の一つです。 Mac用クライアントでは、新しいブランチを作成するためのボタンがウィンドウ上部にあります。

Mac用クライアントの ``Create Branch'' ボタン
Figure 156. Mac用クライアントの “Create Branch” ボタン

Windows用クライアントでは、ブランチ切り替えのウィジェットで新しいブランチ名を入力すると、新しいブランチが作成されます。

Windows用クライアントでブランチを作成する
Figure 157. Windows用クライアントでブランチを作成する

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

ネットワーク経由で他のリポジトリとの対話するには、主に “Sync” 機能を使用します。 Gitは内部的に、プッシュ、フェッチ、マージ、およびリベースを別々の操作としていますが、GitHubクライアントではこれら一連の処理を1つの機能で実行できるようになっています。 “Sync” ボタンをクリックすると以下の処理が実行されます。

  1. git pull --rebase を実行します。 マージが衝突してこのコマンドが失敗したら、代わりに git pull --no-rebase にフォールバックします。

  2. git push を実行します。

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

まとめ

これらのツールは、その前提となっているワークフローに合わせて最適化されています。 開発者と非開発者が一つのプロジェクト上で共同作業を行う際に、双方がすぐに同じように作業を行えるようになっていますし、この種のワークフローにおける多くのベストプラクティスがツールに埋め込まれています。 しかし、あなたのワークフローがその前提と異なっている場合や、ネットワーク操作をいつどのように行うかをより細かく制御したい場合には、別のクライアントを使うか、またはコマンドラインからGitを使用することをお勧めします。

その他のGUI

グラフィカルなGitクライアントは他にもあり、一つの目的に特化したツールから、Gitのできることは全て操作可能にしようとしているアプリケーションまで多岐に渡ります。 Gitのオフィシャルウェブサイトには、よく使われているクライアントのリストがあります。詳しくは http://git-scm.com/downloads/guis を参照してください。 また、より包括的なリストは Git wiki のサイトに掲載されています。詳しくは https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Graphical_Interfaces を参照してください。