Gitに潜む光と闇

この記事を読むのに必要な時間:およそ 2.5 分

今年に入ってから,急速にGitが注目を浴びています。Google Trendsを見ると,Subversion,Mercurialなどに比べると圧倒的にGitの人気が高いのがわかります図1)。

図1 Google TrendsによるGit(青),Mercurial(赤),Subversion(橙)の検索数

図1 Google TrendsによるGit(青),Mercurial(赤),Subversion(橙)の検索数

しかしながら,Gitを利用する人の意見は2つに分かれています。

  • A.わかりにくい
  • B.すごく便利だ

なぜこのようなに印象が二分されてしまうのでしょうか? 本稿では,「Gitに潜む光と闇」と称してこれらの意見に対して考察していくことにします。

Gitはわかりにくい?

Gitがわかりにくいと思う人は,どうしてそう感じるのでしょうか。そのあたりのおおよその事情は下記のようなことだと考えられます。

(1)Subversionとコマンド体系が少し違う

バージョン管理ツールとして,Subversionを使っている方も多いと思います。しかし,GitはSubversionとコマンド体系が少し違っています。

正確には,commit,addなど,GitにはSubversionと同じ名前のコマンドがありますが,機能が若干異なっているのです。addは,ファイルを追加するのではなく,インデックスと呼ばれる一事領域への追加となり,commitは共有リポジトリではなくローカルリポジトリへのコミットとなります。コマンドの名前が同じなのに動きが異なることは,混乱のもとになっていると考えられます。

また,svn catに対するgit showなど,同じ操作でもコマンド名が異なっているものも多くあります。中途半端にSubversionと同じだったり異なったりするのも混乱の原因と言えます。

(2)従来のバージョン管理システムと概念が異なる

Gitでは,上に述べたインデックスやローカルリポジトリなど,新しい概念が存在します。そのため,Subversionに慣れたユーザは混乱を来たすことがあります。

また,少し古い記事では「Gitはリポジトリが複数持ちリポジトリ間で編集内容(コミット)をやりとりできる」と書かれていることが多数あります。これはGitに代表される分散バージョン管理システムの大きな特徴です。ですが,これも混乱を来たします。この内容自身は間違ってはいませんが,多くの場合,共有リポジトリを立ててGitを利用します。共有リポジトリを前提に話をしたほうがわかりやすいのに,そうはなっていない解説が意外と多く見られます。

(3)エラーメッセージが出力されるがどうすればいいのかわからない

Gitを利用していて,エラーメッセージが出てもどうすればいいのかよくわからないことがあります。メッセージが日本語化されておらず英語で表示されるというのもありますが,そもそものメッセージがわかりにくい場合もあります。極端な例ですが,プッシュをしようとして,

$ git push
(gnome-ssh-askpass:23904): Gtk-WARNING **: cannot open display:

と表示されたとき,いったい何が原因でエラーとなり,どうしたら解決できるかわかるでしょうか?

(4)履歴操作の必要性に疑問

Gitではreset,reflog,rebaseなど,履歴操作を行うコマンドが追加されています。commitでさえ,--amendオプションを付けることにより直前のコミットを編集しなおすことができます。コミットメッセージの修正ならいざ知らず,そもそも履歴の改変というは,バージョン管理の根底を覆すのではないかと思えてしまいます。それなのに,rebaseを使ってコミットをきれいにしろと煽(あお)る輩もいて混乱を来たします。

そして,「わかりにくい」という極めつけの理由は,

  • Linuxが前提となっている記述が多い

ことでしょう。ほかにもあるかもしれませんが,Gitを難しいと思っている人は,上記の一つや二つに心当たりはあるのではないでしょうか?

Gitがすごく便利な理由

一方,Gitはすごく便利だと思っている人も多数いるのも事実です。

(1)GitというよりGitHubがすごい

Gitリポジトリのホスティングサービスは便利です。趣味で作成したコードで,公開してもかまわない場合,簡単にGitリポジトリを作成,公開できるGitHubは非常に役に立ちます。

フォーク機能により,開発が停止したオープンソースソフトウェアの開発を引き継ぐことができますし,また,自分が開発したコードに興味がなくなってもほかに有用だと感じる開発者がいればフォークされて開発が継続されます。

フォークされたコードがさらにフォークされてもネットワークグラフ機能で誰のフォークが一番メンテナンスされているか,簡単に知ることができます。

IssueやWiki機能を利用すれば,簡単ではありますがタスク・バグ管理やドキュメントの管理も行うことができます。

GitではなくGitHubがすごいのです。

(2)履歴操作ができる

コミットメッセージを間違えたり,コミットにおかしなコードを含めてしまったりした場合でも,履歴操作機能で簡単に修正・削除できます。誤ってisoファイル(CD/DVDイメージ)などの大きなファイルをコミットしてしまった場合,リポジトリ操作が重くなりますが,過去すべての履歴に遡りきれいさっぱり削除できます。

また,rebaseにより,ブランチを作成したあと,メインライン(masterブランチ/Subversionではtrunkと呼ばれる)が変更された場合でも,ブランチにメインラインの変更を適用し,メインラインの最新からの差分という形にブランチの履歴を並び替えてきれいにできます。

(3)慣れてしまえば無問題

冒頭でGitのコマンドはわかりにくいと述べましたが,実際には慣れてしまえば問題ありません(逆にGitに慣れた状態でSubversionを利用するとコマンドがわからず,混乱を来たすこともあります)。

アメリカの心理学者のG.M. ストラットの,上下逆さまに見えるメガネをかけると,最初は嘔吐をするほどの違和感に襲われるが,数日すると自分が見ている方向と上下が一致するようになり普通に生活できるようになる,という実験が有名ですが,要は慣れの問題です。人間の順応性はすばらしいものです。

(4)莫大なTipsに使えば使うほど味が出る

GitはSubversionと比べるとコマンド自身の数も多いし,1つのコマンドでできることも多くあります。使い込めば使い込むほど新しい発見があり,いろいろなことができるようになります。噛めば噛むほど味が出てくるスルメのようなものなのです。

著者プロフィール

岡本隆史(おかもとたかし)

プロジェクト管理にデスノートカレンダーを導入したのをきっかけに,エルシャダジャイル,宇宙戦艦スプリント,プロジェクト日記など,名伏しがたいアジャイルのようなプラクティスの開発にいそしんでいる。最近はGitによる開発プロセスの改善に取り組む。全体の監修と第3章の執筆を主に担当。

コメント

  • Gitについて

    Windows使いにやさしいGitの解説って、たしかにありませんよね。私は、仲間内で使う為にこんなの書いてみました。

    http://www.plowman.co.jp/school/Git/Git.html

    ご覧いただければ幸いです。

    Commented : #1  kkoba (2012/09/13, 13:43)

コメントの記入