皆さん、こんにちは!
エンジニアアイドル「ハックガールズ」の堤沙也と濱ヶ崎美季です。
前回は私達の自己紹介をさせて頂きましたが、連載第2回の今回からいよいよ本題。「Git」について一緒に学んでいきましょう!
Gitとは?
Gitとは、分散型バージョン管理システムの1つです。
では、バージョン管理とは一体何でしょうか。
プログラムというものは、多くの場合、一度開発して終了ということはありません。まず作ってみて、改善したり、機能追加したりと、どんどん更新されていくものです。
しかし、プログラムを更新すると、人はうっかりリバグも生んでしまうことがよくあります。昨日まで正常に動いていたプログラムが、今回の更新によって動かなくなってしまった!という苦い経験は誰しもあるでしょう。
バグが発生してしまったプログラムに対し、「ひとまず正常に動いていた状態に戻そう!」と思い立ったとき、役に立つのがバージョン管理。
わかりやすく言うならば、「プログラムの修正や追加など、更新するたびに、ソースコードの状態を日時やコメントとともに記録する」仕組みです。
これにより、過去のある「リビジョン(上記で言う記録)」を指定し、その状態にプログラムを巻き戻す事が可能になります。
Gitはローカル環境(自分の手元のPC)の中のみで使うことも可能ですし、Webを介して他人とリポジトリを共有することも可能です(リポジトリ=データや情報、プログラムなどが体系だてて保管されている場所のこと。ここでは、Gitで管理されているプログラムが保管されている場所のことを指します)。
つまり、複数人でシステム開発をしている場合はとくに、過去の他人の作業履歴・更新履歴を参照する時にも大変役立ちます。
GitHubとは?
システム関係の方は、Gitという言葉と共に「GitHub」という言葉を耳にしたことが有る方も多いでしょう。
GitとGitHubは違うものなの?何が違うの?と思う方もいるかと思います。
GitHubとは、GitのリポジトリをWeb上で公開することができるようにしたサービスの名称です。GItHubを介すれば、コマンドラインで何かを操作しなければならないわけではないので、たとえば、非エンジニアの方でも比較的「必要だ!」と思ったときにすぐに使い始めることができます。
- GitHub
- https://github.com/
個人で利用するにあたって、基本的な機能は、無料で使うことができます。自分のプログラムをWeb上に載せることにより、そのプログラムを他人がダウンロードできるようになったり、Webサービス上(GitHub上)で、プログラムに対してコメントを付けられたり、コードを修正、追記等して発信者に伝えることが可能です。
チームでシステム開発する際は、GitHub上でコードレビューを行ったり、付随するissueと呼ばれるタスク管理・進捗管理のためのツールを利用することで、複数人での開発が大変行いやすくなります。
Git用語
Gitを利用する上で頻出の基礎的な用語について解説します。
commit(コミット)
Git管理しているプログラムの更新を確定、記録させること。
clone(クローン)
リポジトリを複製すること。GitHub上など、リモート(自分のPC以外のマシン上)にあるリポジトリの中身を、丸っと手元に複製し、手を加えたりするときに使います。
branch(ブランチ)
Gitでの履歴を枝分かれ(分岐)させて記録していくためのオブジェクト群。同じリポジトリ内で、複数の変更を同時に進めていくことができます。
checkout(チェックアウト)
作業するブランチを、今作業中のものから別ブランチに切り替える時に利用。移動先のブランチ内の最後のコミットの内容が作業場所に展開されます。
push(プッシュ)
ローカル(自分の手元のマシン上)にあるリポジトリの中身を、別のリポジトリに送り、そのリポジトリ上に反映させること。自分が開発したものを、push先のリポジトリを通じて共有させることができます。
pull(プル)
リモートリポジトリの更新部分を自分のリポジトリに取り込み、さらに現在checkoutしているブランチに対してマージすること。先ほどのpushと対になるもので、こちらは他のリポジトリの中身を、ローカルのリポジトリに持ってこられます。
さやみんとはまーのGitトーク
さやみん:
さて、色々とGit独自の用語が出てきたけれど、なかなかイメージ掴みづらいかな?
はまー:
そうですね、「プッシュ」「プル」なんかは今まで使ったことがない概念で戸惑いました。
さやみん:
はまーは、Subversion(※Gitとは別のバージョン管理システムのこと)は使ったことがあるんだよね?
はまー:
うん、開発でずっと使ってました。
さやみん:
Gitのコマンドには、Subversionのコマンドと同じ名称で、違う動作をするものもいくつかあるんだよね。たとえば、「git clone」は、Subversionでいう「svn checkout」と近い動きをするよ。ただ、「git checkout」は、また別のコマンドとして存在するから、Subversionに慣れている場合は、逆に最初だけ戸惑うかもしれないね。
はまー:
同じ名称で別の動きのコマンドか…確かに混乱しちゃうかも。
さやみん:
次回からは、具体的にGitを利用してどんなことができるのか、一緒に見ていこう!