開発ブログ

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

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

最終更新:2017-07-21 by Joe

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

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

Gitについての基礎知識

Gitとは?

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

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

このような管理対象のひとまとまりを、Gitでは「レポジトリ」と呼びます。Gitレポジトリにはすべての変更履歴が記録されており、過去に保存した状態を指定して閲覧したり、再現したりできるのです。

Gitとは?

チームでの共同作業

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

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

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

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

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

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

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

GitとGitHub

Gitはオープンソース

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

Gitのバージョン管理

さて、ここからは、Gitがどう動くか?何をするか?について解説していきます。

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

Git を知るためには、先に「バージョン管理」について、すこし知っておく必要があります。

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

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

共有サーバーを使ったバージョン管理の様子

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

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

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

さて、上記のような問題を解決するため、言い出しっぺのAさんが、すこし工夫して、ファイルの更新の管理を行うことにしました。規則正しくフォルダを名前づけるように「ルール」をみんなに強制したのです。

考え方としては、ファイル群をフォルダーにまとめて、そのフォルダに一律な番号をつけて、変更があるたびに保存します。

随分見やすくなりました。

この方法がベストだったかどうかは別にして、このような「管理」こそ、いわゆる「バージョン管理」です。更新を整理して記録していくことで、混沌を防ぐのです。

上記の例では、1回,2回,3回、・・誰かが更新するたびに、その都度、その状態のバックアップを残していきます。これらのフォルダの一つ一つを「バージョン(version)」と呼ぶ事ができます。

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

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

本来必要なのは殆どの場合「最新のフォルダ」だけなので、そのフォルダだけ見える場所に残して、残りを別の場所に隠してしまいましょう。

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

 

だいぶ良くなりました。

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

いやー、すごくスッキリしました。

これで、どのファイルを見ればいいか、間違えようがないですよね。

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

もし見たくなったときだけ、そこに行って、探して取ってくればよいのです。

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

さて、上記のバージョン管理により、だいぶ混沌は回避できました。

一方で、上記のようなフォルダー操作を手作業で毎回行うのは、そもそも面倒ですし、チームでルールを知らない誰かが、勝手にいろいろ変更してしまって「あれ、あのファイル、どこに置いたの??」「フォルダ構成、勝手に変更したの誰?!」とか、ルールを徹底できるのかどうかも不安があります。

みんなでできるだけシンプルに、そして同じルールで管理を行うための「仕組み」が必要です。

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

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

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

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

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

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

Gitの使い方

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

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

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

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

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

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

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

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

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

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

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

ターミナルでGit を利用する
MacOSの標準ターミナル

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

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

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

GitのGUIツール:SourceTree

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

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

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

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

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

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

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

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

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

最初のコミットの状態を再現したい時は

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

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

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

お時間のあるかたは、もうすこし続きます。


以下、参考情報です。

Gitについての豆知識

Gitのこれまで

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

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

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

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

2000代年後半のGitの台頭

参考です:

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

Git用語の英語の発音

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

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

ケンブリッジ英語辞書:

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

書き方は、Git?git?

また、書き方は、Gitでもgit でも構いませんが、gitのウェブサイトで、ロゴ画像は「git」と書かれています。

これは他の多くのソフトウェアの名称に共通するのですが、実際のプログラミングにおいて、変数に名前をつける時、大文字には特別な意味をもたせることが多いです。これを踏まえると、なんらかの名前は、小文字のみで綴るのが普通ですね。

また、ターミナルで打ち込むコマンドでも、gitコマンドを実行する時、小文字で「git」と打ち込みます。

Gitのロゴ

一般的に、名前を小文字のみで綴るのは「ソフトウェア開発に背景がある名称」という可能性が感じられます。

Gitに関する参考リンク

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

こちらです: