Gitでのバージョン管理について
Webサイト製作やアプリケーション開発などITに関わる仕事をしているとGitという言葉を耳にしたり目にしたりすることがよくあるのではないでしょうか?今回はGitとは何者なのかとGitを利用することのメリットについて紹介したいと思います。また最後にGithubを使ったバージョン管理の始め方についても少し解説したいと思います。
Gitとは何か
Gitとはプログラムのソースコードを記録し、変更を追跡することができる分散型のバージョン管理システムのことです。元々GitはLinux開発者であるリーナス・トーバルズさんが開発で利用する為に作ったツールですが、2005年から現在まで多くのプログラマーやエンジニアに利用されてきたという歴史があります。
急にバージョン管理といった言葉が出てきて何だそれ!?と思われた方もいるかも知れませんがバージョン管理はファイルをバージョンとして記録することでファイルの状態を管理していく手法です。
もう少しわかり易く解説するとテキストファイルを複数人で共有サーバーを用いて管理する場合などがある場合、ファイル名に "kaisetsu.txt", "kaisetsu190301.txt", "kaisetsu190302.txt"といった具合に他の人と被らないようにまた、元のファイルを上書きしてしまわないように管理することがあったりするのではないしょうか?実はこのような管理も歴としたバージョン管理と言えるでしょう。
ただ、このような管理をしていた場合であってもチーム内でお互いの管理認識が統一されていなかったり、ふとした瞬間に気を抜いていてファイルを上書きしてしまったなんて経験をしたことがないでしょうか?このような誤操作防ぐ為にも管理を人間の頭で手動管理するのではなくより効率的にファイルの状態を管理しようというのがGitを使ったバージョン管理です。また、Gitでバージョン管理することで原稿を書いていてやっぱりこの時のデータに戻したいと思った時にも簡単にその時のデータ(バージョン)に戻すことができるようになります。
Gitのメリット
Gitのメリットは上述のGitとは何かで解説しているように毎回保存したデータを記録し、人間の代わりにその時のデータにバージョンを割り振ってくれることにあります。また、誰かどのような操作をしたかもGitに記録されたログを見ることでいつでも確認することができます。主なメリットは以下の通りです。
- ファイルの最新の状態がわかる
- いつ、誰が、何をどうしたか(When, Who, What, How)がわかる
- 以前の状態に戻せる
Githubを使ったバージョン管理の始め方
Gitではバージョン管理する為にリポジトリというデータを管理する場所を用意して利用します。リポジトリにはリモートリポジトリとローカルリポジトリが存在し、そこにファイルの変更履歴などを保存します。リモートリポジトリはその名の通り、リモート(遠隔)で操作する保存先で複数人で作業する場合などはこのリポジトリを基点にファイルを管理します。ローカルリポジトリは個人のPC内でバージョン管理する場所になります。簡単にGitを使った操作の流れをまとめるとざっと以下のようになります。
作業 => ローカルリポジトリに保存 => リモートリポジトリに保存
では早速Gitを使ったツールの準備をしていきましょう。まずリモートリポジトリを用意する為にGithubでアカウントを作成します。
Githubは先ほど紹介したGitの仕組みを利用して世界中の人がソースコードを公開し、保存できるようにしたサービスです。Githubを利用することでリモートリポジトリを無料で作成し、チームメンバーと共有することができます。
ただし、Github自体オープンソースを前提としたサービスの為誰でも作成したファイルの中身を見ることができてしまいます。仕事で利用する場合など、あまりソースコードやファイルの中身をオープンにしたくない場合は有料版でプライベートなリポジトリを作成することもできます。また、Github以外にもBitbucketといったようにリモートリポジトリを利用できるサービスがあるので状況に応じて使い分けてもらえればと思います。
Gitでリポジトリを用意するに当たって2種類の方法があります。まず一つ目がローカルリポジトリを先に作成して作業を行い、リモートリポジトリへ保存するパターンです。
ローカルリポジトリから用意するパターン
Githubでアカウントを作成したらまずはローカル環境でGitを使えるようにしていきましょう。
ターミナル(Macの場合)を開いて任意のファイルまで移動します。ここでは git というファイルを用意したとします。
$ cd (ファイルをドラッグアンドドロップ)
次にgit init コマンドでGitを初期化します。この操作を行うと以下のようなファイルが作成されていることが確認できるはずです。
$ git init
. .. .DS_Store .git
ls -aコマンドでファイルの中身を確認すると .git という隠しファイルが存在していることがわかります。さらに.gitファイルの中身を展開すると以下のようなファイル構成になっています。
主にこのファイルの中でファイルのバージョン管理に関する処理が行われます。以上でローカルでバージョン管理する準備が整いました。では早速、何かファイルを作成しローカルリポジトリに記録を残していきましょう。ここでは以下のようにindex.htmlをgitファイル内に作成したとします。
Gitでは作業の履歴を記録する際には以下のように段階的に操作を行います。各操作の詳しい説明はここでは割愛します。Gitコマンドの操作やコマンドラインを普段行ったことがない方はとりあえず真似て打ち込んでみてください。
ファイル変更 => ステージ => コミット => リモートリポジトリへプッシュ
index.html作成後、git addコマンドでステージへindex.htmlを上げます。
$ git add .
ステージしたファイルを以下コマンドでコミットします。-m 以降のシングルクォテーションの間には作業の履歴に残すコメントを記述します。ここではCreate index.htmlとコメントを残しておきます。
$ git commit -m 'Create index.html'
次にリモートリポジトリをGithubに用意します。Githubアカウントの管理画面を開き、Repositories を選択します。
[
Newボタンからリポジトリを新規作成します。
Repository nameは自由に決めてもらって問題ありません。ここではtestとしておきます。Descriptionは空白でもOKです。リポジトリはPublicにすれば無料で利用できます。あとはそのまま何も変更せずにCreate repositoryしましょう!
では早速ローカルリポジトリの内容をリモートリポジトリにも反映(プッシュ)したいと思うところなのですが、その前にGitでリモートリポジトリの登録を行う必要があります。それには以下のコマンドを利用します。originはリモートリポジトリ名で慣例的にoriginと名付けます。orogin以降のURLは先ほど作成したリモートリポジトリのURLになります。リモートリポジトリを選択するとこのURLをコピーできますのでそのままコピペしましょう。
$ git remote add origin http://xxxxxx.xxx/xxxx
これでリモートリポジトリに反映(プッシュ)する準備が整いました。早速以下コマンドでプッシュして行きましょう。プッシュというのはローカルリポジトリでコミットした内容をリモートリポジトリのブランチに反映することを意味します。
$ git push origin master
このコマンドはoriginというリモートリポジトリのmasterというブランチに反映してくださいという命令になります。
Githubのリモートリポジトリを確認すると先ほどローカルで作成したindex.htmlファイルがアップされていることが確認できたかと思います。
まとめ
以上でGitでバージョン管理する環境が整いました。Gitは今やエンジニアだけでなく幅広い職種の方々が利用するようになってきています。実際、バージョン管理が必要とされる機会は社会のITインフラが整うにつれ増えてくると思いますのでこれまで使ったことがなかったという方はぜひ利用してみてはいかがでしょうか?