開発ブログ

WWWクリエイターズが送る、Git, CSS, HTML, コマンドライン、Macの便利機能など、開発に関する役立ち情報発信します。気まぐれに更新。

Gitとは?3分でわかる、Gitの「超」入門知識まとめ

最終更新:2017-05-25 by Joe

「Gitとは?」の問いに対して、簡単で分かりやすい導入説明がネット上にどうしても見当たらなかったので、3分くらいで読める範囲で解説してみようと思います。

「そもそもgitを知らない人」「エンジニアじゃない人」などの入門者が対象としますので、すごく端折っていますが、タイトル通り、ポイントだけさくっと知りたい方に向けています。

Gitについての基礎知識

Gitとは?

Git(ギット)とは、コンピュータ上のファイルなどの変更を記録し、その変更履歴を管理するためのバージョン管理ツールです。同時に、複数の作業者が同時に変更を行ったり、その履歴を管理するための機能を併せ持っています。

実際の利用おいて、Gitは、関連するファイル群(プログラムのソースコードなど)をまとめて一つの管理対象と見なします。具体的には、特定のフォルダーにファイルをまとめて、それのフォルダーをまるっと1つの管理対象とする事が多いです。

このような管理対象のひとまとまりは、Gitでは「レポジトリ」と呼ばれます。Gitレポジトリにはすべての変更履歴が残っていて、(使い方さえ覚えれば・・)過去のどんな状態でも、一瞬で再現できるのです。

チームでの共同作業

Git 自体はローカルで(=手元のPC上で)動作するツールです。

基本的には個人のPC上で完結するツールなのですが、チームでの同時作業を行いやすくするため、遠隔地にあるサーバー上のgitの存在を前提とする「リモートレポジトリ」という概念を取り入れています。これは、「チームみんなが共同で利用するバックアップ」みたいなイメージかも知れません。

多くの場合は、チームで共有するリモートレポジトリを1つ用意して、メンバーがファイルの変更内容をそこにアップロードし合う事で、共有された1つの変更履歴を一緒に作りあげるように作業します。これをおこなうため、通常は別のサーバーを用意すして、そこにリモートレポジトリを設置する必要があるのですが、正直めんどくさいです・・・。

でも、世の中は便利になりました!今や、めんどくさい事を避けて楽をするため、第三者の提供する「リモートレポジトリのホスティングサービス」を利用することができるのです。

代表的なレポジトリのホスティングサービスには、「GitHub(ギットハブ)」「BitBucket(ビットバケット)」「GitLab(ギットラブ)」などがあります。聞いたこと、ありますよね?

そのようなホスティングサービスを利用することで、誰もがサーバー環境を立ち上げる手間を省いて、すぐに開発を始める事ができるのです。

ちなみにですが、手元で作成した変更内容を、リモートレポジトリに反映することを「push(プッシュ)する」、また、その逆の操作を「pull(プル)する」と言います。これらの単語は、gitを使ったことがなくても、どこかで耳にした事があるかもしれませんね。

Gitはオープンソース

また、Git自体のはいわゆるオープンソースで、無料で利用できるソフトウェアライセンスが適用されていますので、誰でもすぐに利用することができます。(ライセンスはGNU General Public Licenseと呼ばれるものです。)

Gitのバージョン管理

さて、ここからは、Gitの動作仕様について解説していきます。

「バージョン管理」とは何か

まずは「バージョン管理」について、すこし知る必要があります。

簡単な例をあげてみます。例えば、あなたの会社のチームで夏にキャンプに行くことにしたとしましょう。いいだしっぺの企画係Aさんが、チームの共有フォルダに、以下のような資料をアップしました。みんなで一緒にプランを立てたいとの事です。

さて、一応みんなで計画を分担したので、みんなが共有フォルダにアクセスして、それぞれのファイル更新を行っていきます。

気づけば、共有フォルダはこんな状態になっていました。

だれが更新したのかわからないままどんどんファイルが変更・追加されたり、ファイルの種類が増えたり、誤って上書きされたり、最新がわからなくなったり・・・。

こんな共有フォルダの混沌は、多くの人が経験しているのではないでしょうか。

さて、上記のような問題を解決するため、言い出しっぺのAさんが、すこし工夫して、ファイルの更新の管理を行うことにしました。規則正しくフォルダを名前づけるルールをみんなに強制したのです。考え方としては、ファイル群を、フォルダーに一律な番号をつけて、変更があるたびに保存します。

この方法がベストだったかどうかは別にして、これがいわゆる「バージョン管理」です。変更内容を整理して、混沌を防ぐのです。

上記の例では、1回,2回,3回、・・誰かが更新するたびに、その都度、その状態のバックアップを残していきます。

これらのフォルダをの一つ一つが「バージョン(version)」と呼ばれるものです。

バージョンをうまいこと管理する

さて、上記の方法でスッキリ感は出たものの、10回、20回と更新があるたびに、どんどんフォルダが増えて、だんだんごちゃごちゃしてきました。

解決のため、本来必要なのはだいたい「最新のフォルダ」だけなので、それだけ残して、残りを別の場所に隠してしまいましょう。

「昔のデータ」というフォルダを作り、一段階層を下げてしまいます。

もっときれいにするために「昔のデータ」を完全に別の場所に移して、見えにくくします。

いやー、すごくスッキリしました。これで、どのファイルを見ればいいか、間違えようがないですよね

あれ?昔のデータはどこ?となりますが、一見、見えないですが、別の場所に保存してあるだけで、確実に残っているのです(見えないだけ)。もし見たくなったら、そのときだけにそこに行って、探して取ってくればよいのです。

バージョン管理ツールの登場

さて、上記のような感じのフォルダー操作を手作業で毎回行うのは、そもそも面倒ですし、チームで誰かが勝手にいろいろやっちゃうと「あれ、あのファイル、どこに置いたの??」「フォルダ構成、勝手に変更したの誰?!」とか、怒られちゃいそうです。

そんないざこざが起こらないように、みんなでできるだけシンプルに、そして同じルールで管理を行う必要があります。

そんなとき、「バージョン管理ツール」が役に立ちます。みんなで、おんなじツールを使えば、おんなじルールになって、混乱は防げるはずです。

Git = 今一番いけているバージョン管理ツール

そこでgitの登場です。gitは本当にイケていて大人気です。プログラミングのためにたくさんファイルを更新しなければいけない、いまどきのソフトウェアエンジニアには、gitは必要不可欠なツールとなっています。

gitは、上記での説明してきたようなバージョンの管理が、すごくシンプルな操作で可能になります。

上記のキャンプはあくまで例で、キャンプの計画でバージョン管理をする事はないと思いますが・・、もっとたくさんのファイルを扱う時、特に複数の人間が一緒にぷるグラムを開発する「ソフトウェア開発」などには必要不可欠なツールになっています。

gitについて、本当に本当に詳しく知りたい人は、あとで、Pro git: gitの内側を読んで見てください。(GITを使った事がない人だと、少し難しいかもしれません。)

Gitの使い方

あなたが行うgitでの操作の90%以上は「ファイルを更新したら、バージョンの保存する」という操作だと思います。そんなとき、gitが何をどうしてくれるのか?という点ですが、概ね上記で書いたような動作を自動的にやってくれます。

少し細かく見ていきます。

Gitでバージョンを保存する

現在のファイルの状態を、あとで探したり、見直せるように、コメント(メモ)をつけて記録します。

上記のキャンプフォルダ内を、gitで管理するように設定すると、こんなふうに、「.git」という隠しフォルダが自動で追加されます。

この.gitはフォルダになっていて、古いバージョンなど、過去の記録に関する情報がすべて保存されています。(上述のキャンプで言えば、過去の記録をまとめて突っ込むフォルダという役割に似ていますね)

MacOSでは「.(ドット)」をフォルダ名の最初につけると、隠しフォルダとして扱われて、finder上は、見えなくなりますね。(Windowsの場合はこうではないかもしれません、よく知らないです)

さて、例えば、あなたが何かファイルを更新したとして、バージョンを保存するとします。その時は、こんな操作を行います。

ソフトウェア開発者の人はターミナル(黒い文字だけの画面)で下記のようなコマンドを打つ事が多いです。

これだけです。(実際は、「git add .」なども実行が必要ですが、ここでは触れません)コマンドは本当に速いんですよね。

上記を見て分かるように、git上で、「バージョンを記録する」操作を、git用語で「変更をコミット(commit)する」と言います。どこかで聞いたことあるのではないでしょうか?(ライザップの話じゃないです)

ターミナルの利用は、必須なの?

ソフトウェア開発者じゃない人は、ターミナル(文字だけの黒い画面)なんて使わない人も多いと思います。

そういった方にも、使いやすいツール(アプリ)があります。SouceTreeというイケているGITアプリです。結構いけてますので、アプリ上でポチポチやればオーケーです。

アプリもいいですが、ターミナルのコマンド操作に慣れると、アプリでぽちぽちやるより、git操作は3〜5倍くらい速い(当社比)と思います。

Gitで、昔のバージョンと比較して、差分を調べる

ついでに、「あれ、このファイル誰が更新したんだろう・・、なんか違うけど、どこが変わったんだろう?」なんてときがよくありますが、gitでは、簡単に昔のバージョンを見たり、比較したりすることができます。

例えば、以下のコマンドで、すぐに差分を見ることができます。いちいち別の差分比較ツールを開く必要はないです。

このコマンド一撃で、簡単に変更内容を調べられます。

「え、どこが変わったの?」なんて会話とはもうさよならです。もちろん、コマンドじゃない方々は、もちろん上記のSourceTreeを使って全て同じ事ができます。

Gitで、昔のバージョンをとりもどす

またついでに、バージョンを取り戻します。GITでバージョンを保存していくと、このように履歴がたまっていきます。履歴を表示するコマンドは、

先頭のアルファベット記号の羅列が、各バージョンをあらわすIDになっているのですね。ちなみにこれは「SHA-1(シャー、ワン)」と呼ばれる暗号化をつかっていて、自動で生成されれます。くわしくはWikiどうぞ。

最初のコミットに戻りたい時は

と、操作すれば、すぐにその時の記録に自動で戻してくれます。コマンド一撃でできるのは、本当に簡単ですね。

・・・、ここまで3分くらいでしょうか。

以下は、もう話が細かくなってきますので、急いでおられる方は、お仕事に戻っていただいて大丈夫そうです。読んで頂いてありがとうございました。お時間のあるかたは、もうすこし続きます。


以下、参考情報です。

Gitについての豆知識

Gitのこれまで

gitは、2005年末にバージョン管理ツールとしてリリースされてから、その利便性から順調に広まりを見せます。だいたい2010年前後には、Google社を始め、多くの開発者や、会社に支持されて利用されるようになっていました。ちなみに私がgitにはじめて触れたのもこの頃です。

2017年の今日となっては、ソフトウェア開発者が利用するバージョン管理ツールにおいて、gitのシェアはダントツとなりました。 要は、イケていて、本当にみんな使っているツールであるということです。ツールについて詳しくない人は、とりあえず長いものには巻かれておくのも安全でしょう。

ちなみに、ひと昔前は「subversion」という別のバージョン管理ツールが最も一般的でしたが、gitの台頭により、そのシェアはかなり廃れたようです。

参考までに、Google Trendでの検索数の相対的な推移のチャートを貼り付けます。gitとsubversionとを比較します。どのくらい人気かというと、このくらいうなぎのぼりです、ということです。

参考です:

また、GITはリーナス・トーバルズという有名な人が作ったバージョン管理ツールという背景もあります。リーナスさんは、Linux(リナックス)という有名なオープンソースのOSを最初に作りはじめた人で、結構有名なすごい人です(詳しくはwikiで)

Git用語の英語の発音

冒頭で説明の通りgitは「ギット」です。

また、レポジトリは、英語、特にアメリカ英語では、「ぽ」にアクセントがあります。地域によりますが「りぱぁじとぉり」のように聞こえると思います。ケンブリッジ辞書から、発音を掲載しておきます。

ケンブリッジ英語辞書:

他にも、多くのGit用語は、そのコマンド名から、開発者の間で一般的に使われています。一般的なコマンドは、Add, Commit, Diff, Pull, Pull, Fetch, Merge, Branch, など、様々です。

書き方は、Git?git?

また、書き方は、Gitでもgit でも構いませんが、gitのウェブサイトで、ロゴは「git」と書かれています。これは他の多くのソフトウェアの名称に共通するですが、プログラミングにおいては、大文字には特別な意味をもたせることが多いですので、ただの名称であれば、小文字のみで綴るのが普通ですね。また、コマンドでも、コマンドは「git」と打ち込みます。

小文字のみで綴るのは、いくらかソフトウェア開発に背景がある名称、という感じはしますね。

Gitに関する参考リンク

とにかく困ったら、原典(公式の仕様書や、マニュアル)を参考にするのはやはり間違いないです。情報探すの大変だけど・・。

こちらです: