何?」という疑問に対して、簡単で分かりやすい説明がネット上にどうしても見当たらなかったので、5分くらいで読める範囲で解説してみようと思い、まとめてみました。知らない人」「エンジニアじゃない人」などの入門者をメインの対象としますので、すごく端折って記載しています。難しい話は置いておいて、ポイントだけさくっと知りたい方に向けているものとして、ご理解下さい。参考情報Gitとは?Git(ギット)とは、コンピュータ上のファイルなどに発生した変更を記録し、その記録履歴を管理するための「バージョン管理ツール」です。複数の作業者が同時に変更を行ったり、複数の履歴を共同で管理するための機能をあわせ持っています。管理したいファイルが一つでなく、たくさんあったとしても(プログラムのソースコードなど)、まとめて一つの「管理対象」と見なします。具体的な運用では、ファイルシステム上の特待のフォルダーに関連するファイルをすべてまとめて、そのフォルダーをまるごと1つの「管理対象」とみなす事が多いです。このような管理対象のひとまとまりを、Gitでは「レポジトリ」と呼びます。レポジトリには、管理対象に関するすべての変更履歴を記録でき、過去に保存した状態を指定すれば、その状態を閲覧したり、再現したりできるのです。具体的には、管理対象にしたフォルダー内で、ファイルが更新されたり、ファイルが増えてたり減ったりしても、すべて記録できる、というイメージですね。説明をするときに重要な単語なので、あえて一番最初に説明しておきます。自体はローカルで(=手元のPC上で)動作するツールです。Gitレポジトリの存在を前提とする「リモートレポジトリ」という概念を取り入れています。remote)とは「遠隔地にある」という意味の英語です。自分のPC上でなく、別の場所にあるサーバーに保存されているレポジトリだよ、という意味ですね。リモートレポジトリは、離れた場所にあって、複数の作業者が同時に閲覧したり、また記録をダウンロードしたり、アップロードしたりするために使います。「チームみんなが共同で利用するバックアップ」みたいなイメージが近そうです。チームでプログラミングしてソフトウェアを開発をする時、多くの場合は、チームで共有するリモートレポジトリを1つ用意して、メンバーがファイルの変更内容をそこにアップロードし合う事で、共有された1つの変更履歴を一緒に作りあげるように作業します。して、複数の人でも、足並みを揃えてスムーズに開発を進めることができるのです。リモートレポジトリを設定して設置・・・、などと作業する事になるのですが、正直かなりめんどくさいです・・・。世の中は便利になりました。今や(結構、昔からですが・・)、上記のようなめんどうな事を避けて楽をするため、別の人が、提供する「リモートレポジトリのホスティングサービス」を誰もが簡単に利用することが一般的となっています。レポジトリ設置に使いやすくしておいたから、誰でも使っていいよ〜。」という人がでてきた、イメージです。代表的なレポジトリホスティングサービスには、「GitHub(ギットハブ)」や、「BitBucket(ビットバケット)」「GitLab(ギットラブ)」などがあります。聞いたこと、ありますよね?そのようなホスティングサービスを利用することで、誰もが共有のサーバー環境を立ち上げる手間を省いて、すぐに共同開発を始める事ができるのです。これらのサービスはすべて無料で利用を開始できますし、また、月額でいくらかお金を払うと、より多くの機能を利用することができます。広く普及したので、このようなビジネスが成り立つのですね。上記のようなリモートレポジトリのホスティングサービスでは、通常、レポジトリのホスティングだけでなく、共同開発をもっと便利にする、付加的な機能を多く揃えています。使いやすいサービスのほうが、利用者が増えて、ビジネスがうまくいきますからね。社が提供するサービス「GitHub」です。ページが用意されており、Wiki、チャット、タスク管理など、チームでのコミュニケーションを円滑にするのを助けるような機能が満載です。GitHub(ギットハブ)は、リモートレポジトリのホスティングだけでなく、Web上利用できる、資料(Wiki)や、課題リストの管理など、様々なコラボレーションのための機能を備えている。共同開発に少し話を戻します。レポジトリに記録した変更履歴を、リモートレポジトリに送信して反映することを「push(プッシュ)する」、また、その逆の操作を「pull(プル)する」と言います。これらの単語は、Gitを使ったことがなくても、どこかで耳にした事があるかもしれませんね。自体のはいわゆるオープンソースで、無料で利用できるソフトウェアライセンスが適用されていますので、誰でもすぐに利用することができます。「ライセンス」と呼ばれる規約を守ることが条件です。License)と呼ばれるものです。話題がそれますが、「GPU」は、言うなればこのような約束です。「GPUの下に配布されたソフトウェアは、その利用方法に対して制約を課してはならない。ソースコードの改変や、利用することの自由が永遠に守られます。使った新しいツール(GitHubは最たる例です)やプロジェクトが生まれ続け、発展が続いてい行きます。このように、利用自体は無償でも、利用者が増えたり、付随するビジネスや活発になったりする事で、そのシステムが改善・開発される事が多くの新しい利益を生み出すことになり、望んで開発に参加する人々(コミュニティ)が生まれていきます。これがオープンソースプロジェクトの仕組みです。今も多くの「メンテナー」と呼ばれる有志によって、改善と開発が続けられているのです。最新のソースコードにアクセスできます。今や、通算で1000人を超えるメンテナーが開発に参加しています。望めば誰でも(あなたも・・)開発に参加することができます。何をしてくれるのか?実際どのように動作するのか?について、掘り下げていきます。知るためには、先に「バージョン管理」について、すこし知っておく必要があります。簡単な例をあげてみます。あなたの会社のチームで夏にキャンプに行くことにしたとしましょう。いいだしっぺの企画係Aさんが、チームの共有フォルダに、以下のような資料をアップしました。みんなで一緒にプランを立てたいとの事です。夏のキャンプ情報フォルダ├キャンプ参加者リスト.xls└キャンプ場の候補.docsさて、チームメンバーに、計画する作業を分担したので、みんなが共有フォルダにアクセスして、それぞれのファイル更新を行っていきます。その1週間後、気づけば共有フォルダはこんな状態になっていました。└キャンプ場の候補_20170310_藤原追記.docsだれが更新したのかわからないままどんどんファイルが変更・追加されたり、ファイルの種類が増えたり、誤って上書きされたり、最新がわからなくなったり・・・。こんな共有フォルダの混沌は、多くの人が経験しているのではないでしょうか。上記のような問題を解決するため、言い出しっぺのAさんが、すこし工夫してファイルの更新の管理を行うことにしました。規則正しくフォルダを名前づけるように「ルール」をみんなに強制したのです。考え方としては、ファイル群をフォルダーにまとめて、そのフォルダに一律な番号をつけて、変更があるたびに保存します。└夏のキャンプ情報フォルダ(23)随分見やすくなりました。この方法がベストだったかどうかは別にして、このような「更新履歴の管理」こそ、いわゆる「バージョン管理」です。更新を整理して記録していくことで、混沌を防ごうという試みです。上記の例では、1回,2回,3回、・・、誰かが更新するたびに、その都度、その状態のバックアップを残していきます。これらのフォルダの一つ一つは「バージョン(version)」と呼ぶ事ができます。バージョンをうまいこと管理するさて、上記の方法でスッキリ感は出たものの、10回、20回と更新があるたびに、どんどんフォルダが増えて、だんだんごちゃごちゃしてきました。本来必要なのはほとんどの場合「最新のフォルダ」だけなので、そのフォルダだけ見える場所に残して、残りを別の場所に隠してしまいましょう。「昔のデータ」というフォルダを新しく作り、一つ階層を下げて配置してみます。きれいにするために、開かれることが少ない「昔のデータ」を完全に別の場所に移して、見えにくくします。└昔のデータいやー、すごくスッキリしました。これで、最新を知るためにはどのファイルを見ればいいか、間違えようがないですよね。しても昔のデータが見たくなった時、あれ?昔のデータはどこ?となりますが、別の場所に保存してあるだけで、確実に「残っている」のです(近くに見えないだけ)。見たくなったときだけ、そこに行って、探して取ってくればよいのです。上記のバージョン管理により、だいぶ混沌は回避できました。一方で、上記のようなフォルダー操作を手作業で毎回行うのは、そもそも面倒ですし、チームでルールを知らない誰かが、勝手にいろいろ変更してしまって「あれ、あのファイル、どこに置いたの??」「フォルダ構成、勝手に変更したの誰?!」とか、ルールを徹底できるのかどうかも不安があります。みんなでできるだけシンプルに、そして同じルールで管理方法を統一するための「仕組み」が必要です。そんなときこそ「バージョン管理ツール」が役に立つときです。みんなで、同じツールを使えば、自動的に同じルールになって、混乱は防げるはずです。Gitはバージョン管理ツールとして本当にイケていて、いまや大人気です。プログラミングのためにたくさんファイルを更新しなければいけない、いまどきのソフトウェアエンジニアには、Gitはもはや必要不可欠なツールとなっています。使うと、上記での説明してきたような「バージョンの管理」作業が、すごくシンプルな操作で可能になります。使ってバージョン管理をする事はないと思いますが・・、もっとたくさんのファイルを扱う時、特に複数の人間が一緒にプログラムを開発する「ソフトウェア開発」などには、必要不可欠なツールになっています。gitの内側を読んで見てください。GITを使った事がない人だと、少し(かなり?)難しいかもしれませんが、本当に詳しく、正確な説明があります。使う時はどのような操作を行うのかを、少しだけかいつまんで紹介します。行う操作の80%以上は「ファイルを更新したら、バージョンを保存する」という操作だと思います。そんなとき、Gitがそれをどうやって行うか?という点に関して解説します。実際は概ね上記で書いたような動作を自動的にGitがやってくれる、という事だけなのですが、もう少しだけ細かく見ていきましょう。現在のファイルの状態を、あとで探したり見直したりできるように、コメント(メモ)をつけて記録する事になっています。「.git」という隠しフォルダを追加します。フォルダ内には、古いバージョンの情報など、過去の記録に関する情報がすべて保存されています。これは、ちょうど上述のキャンプの例で言えば、過去の記録をまとめて突っ込むフォルダという役割に似ていますね。MacOSでは「.(ドット)」をフォルダ名の最初につけると、finder上は「隠しフォルダ」として扱われて、見えなくなりますね。(Windowsの場合はこうではないかもしれませんが、Winの事はよく知らないです・・)さて、例えばあなたが何かファイルを更新したとして、バージョンを保存するとします。その時は、こんな操作を行います―ソフトウェア開発者の人の多くはターミナル(黒い文字だけの、怖がられることの多い画面・・)で下記のようなコマンドを打つ事が多いです。index.htmlこれだけです。操作は本当に一瞬です。上記を見て分かるように、Git上で「バージョンを記録する」操作を、Git用語で「コミット(commit)する」と言います。どこかで聞いたことあるのではないでしょうか?(ラ◯ザップの話じゃないです、念のため)MacOSの標準ターミナル。え?ターミナルの利用は、必須なの?ソフトウェア開発者じゃない人は、ターミナル(文字だけの黒い画面)なんていっさい使わない人も多いと思います。いった方にも、使いやすいGitツール(アプリ)があります。「SouceTree」というイケているGitアプリです。いけてますので、アプリ上でポチポチやれば、ほとんどのGit操作が可能です。アプリもいいのですが、ターミナルのコマンド操作に慣れると、アプリでぽちぽちやるより、Git操作は3〜5倍くらい速い(当社比)と思います。Gitを使って、昔のバージョンと比較して差分を調べるついでに、「あれ、このファイル誰が更新したんだろう・・、なんか違うけど、どこが変わったんだろう?」なんてときがよくありますが、Gitでは、簡単に昔のバージョンを見たり、比較したりすることができます。以下のコマンドで、すぐに差分を見ることができます。いちいち別の差分比較ツールを開く必要はないです。<比較先のバージョン名>このコマンド一撃で、簡単に変更内容を調べられます。「え、さっきどこを変更したの?」なんて会話とはもうさよならです。コマンドじゃない方々は、もちろん上記のSourceTreeを使って全て同じ事ができます。Gitを使って、昔のバージョンに戻す昔のバージョンを取り戻します。バージョンを保存していくと、このように履歴がたまっていきます。千葉県のキャンプ場を追加。キャンプ場候補をたくさん追加。