Gitとはファイルなどへの変更履歴を記録しそのバージョンを管理するためのツールで、特に複数人でシステム開発を行う際に用いられます。いつ、誰がソースコードのどこを変更したのか、編集するべき最新バージョンはどれかなどを管理するためのものです。
Gitはバージョン管理ツールの中でも分散型と呼ばれるものに分類され、世界中で広く使われています。
また、Git以外にもバージョンを管理する以下のようなシステムは存在していました。
リポジトリ(ファイルや編集履歴を保存する場所)を1つ設け、そこへ複数人でアクセスして同時に開発を行うことを実現するシステムです。リポジトリを1つだけ用意するため、バージョン管理ツールの中でも中央集権型と呼ばれます。
導入コストが他のツールと比べて安い点や、使い方がシンプルで初心者でも扱える点がメリットとして挙げられる一方で、中央集権型のため同じ箇所を同時に編集してしまい競合が発生してしまう点がデメリットとしてあげられます。
CVSも中央集権型のバージョン管理ツールです。メリットとデメリットは基本的にSubversionと同様ですが、CVSはバージョンを管理したいファイルをシステムに登録し、編集する際はシステムから取り出して完了したら再度システムに登録するという非常にシンプルな構造となっており、エンジニアでない人々でも簡単に扱うことができます。
Gitを使うメリットとはどんなことなのでしょうか?バージョン管理を使うメリットと、Gitならではのメリットについてそれぞれ説明していきます。
複数人でシステム開発を行うにあたって、バージョン管理は非常に重要になっています。
例えば、開発中のシステムに重大なエラーが発生した際、開発のどの過程でエラーが発生したのかを切り分けて、エラーが起こる前の状態に戻す必要があります。その際バージョン管理ツールが有用です。Gitのようなツールがない場合日付、バージョン、開発者名などを入れたファイルを都度作成して共有フォルダなどに蓄積し、その中から変更点をファイルごとに確認する必要があります。
その手間を解消するのがバージョン管理ツールです。いつ、誰が、どこを編集したという履歴が時系列順に保存され、編集履歴を確認したり元の状態に戻したりするという作業を簡単に行うことができます。
Git以外にもCVSやSubversionと呼ばれる管理ツールはありますが、Gitは世界的にも広く受け入れられています。その理由がGitは分散型であるという点です。
分散型とは、複数の環境(パソコン)に分散して機能を持たせることです。バージョン管理ツールでいう分散型とはローカルにリポジトリを持つことができるということを指します。分散型に対するものとして中央集権型があります。中央集権型では複数人でシステム開発を行う際、サーバー上の1つのリポジトリを共同利用し開発を行っていました。
この場合、同時に同じ箇所を変更した際、他の人の変更内容を上書きしてしまうなどというデメリットがありましたが、分散型ではローカルリポジトリでそれぞれが開発を行うことができるため、その問題を解消できます。
分散開発によって機能別に同時に開発を行うことができるのに加えて、コードレビューなどもスムーズに行うことができるため、リリースまでのサイクルが短くなります。
これは開発管理者にとってはもちろんメリットとして挙げられますがその他のメンバー観点からもメリットがあるといえます。
機能別に短いサイクルでリリースを行うことができるということは、システム自体のアップデートの回数が増えるということです。これによりシステムを利用している顧客に対するアピールポイントが増え、営業活動をより効果的に行うことができます。
頻繁にリリースが行えるようになるということは、アップデートの観点で顧客とのタッチポイントが増え、より多くのフィードバックを顧客から受け取れます。
そのフィードバックをまた開発側にインプットしてシステムに反映していくというサイクルも短い期間で数多く行えます。
組織やプロジェクトへの配置、新メンバーの採用を行っている人事は必ずしも開発に精通しているわけではありません。
その際、開発が機能別などに小分けにされていればいるほど、その位置に最適なメンバーを選び配置することが容易です。採用の観点でもミスマッチを減らしコストを削減するというメリットが上げられます。
Gitではすべてのファイルについて、すべてのバージョンのソースコードをすべてリポジトリに保存してあります。そのため任意の2つのバージョンで比較をしたい際には、それぞれのバージョンのファイルを取り出して差分を取ればよいです。
しかしその他のバージョン管理アプリではリポジトリにはバージョン間の変更のみが記録されています。すなわち前のバージョンからどこが変わったかという情報しか書かれていないのです。そのため任意の2つのバージョンで比較をする際は、それまでのバージョンの間の変更をそれぞれすべて足し合わせた上で差分を取る必要があるため、時間を要します。
他のバージョン管理アプリではネットワーク通信をしないと作業ができないことが多いですが、Gitではサーバーと直接通信をする操作以外は基本的にオフラインで行うことができます。コスト観点からも優秀です。
Gitはこれまで説明してきたとおり分散型のバージョン管理ツールです。
GitHubはGitを利用したWebサービスのことで、Gitをより使いやすくするために2008年にリリースされ、複数人でシステム開発を行う人々が利用しています。ユーザー数は1000万人を超えており、ソフトウェア開発において世界的に利用されています。
サーバー上でリポジトリを管理することで、複数人でのシステム開発を可能にしています。GitHubの主な特徴について解説していきます。
GitHubにはプルリクエスト(Pull Request)というものがあります。これはソースコードについて編集した箇所を他の開発メンバーにレビュー依頼ができる機能です。
レビューの結果OKとなったものについてのみ本番に反映されるため、システムの品質という観点での向上が期待できます。
GitHubにおける一番の売りはリポジトリをサーバー上で管理できる点ですが、無料版ではこのリポジトリやその中に含まれるソースコードが全て利用者に公開されます。開発メンバー以外の助言を求めたり、世界中に自身が作ったシステムを公開し利用してもらったりすることも可能です。
有償版ではリポジトリの公開範囲を開発メンバーのみとできる機能が利用できます。非公開のプロジェクトなどを取り扱う際にはこの機能を使うと便利です。
また、パッケージ版のGitHub Enterpriseというものもあり、こちらは社内ネットワークにてGitHubを利用できるというものです。
無料版、有償版に関わらず、GitHubではクラウド上にソースコードをアップロードすることとなるため、社外秘となっているシステムの開発や管理には不向きです。それを解決するのがGitHub Enterpriseとなっています。
Gitを利用する上でおさえておきたい基本用語を紹介します。
データや編集履歴を保存する場所のことです。Gitではこの単位でデータを管理しています。
サーバー上に置かれているリポジトリのことです。自分の編集履歴を他の人に共有したり、他の人の編集内容を取得したりする際に利用されます。GitHubなどを利用する際に用いられます。
パソコン上のローカル環境に保存されているリポジトリのことです。ローカルリポジトリには2種類存在します。一方は新しく作成されたものです。他方はリモートリポジトリをコピーして作成されたものです。
リモートリポジトリを複製してローカルリポジトリとすることです。ソースコードだけでなく編集履歴もここに複製されるため、クローンを実行した時点までのリモートリポジトリ内のすべての編集履歴の参照をすることができ、コミットの実行も可能です。
ファイルの変更点を保存することです。
ローカルリポジトリにファイルを保存することです。
インデックスはファイルの変更点のみを保存するということに対して、コミットはファイルの変更点とファイルを一緒に保存することを指します。コミットを実行すると、レポジトリ内には時系列に沿ってファイルが保存されます。
そのためコミットを遡れば過去の編集履歴を知ることができます。機能追加などを実装する際はなるべく細かくコミットをすることが重要です。それによりバグが発生した際、どの編集が原因なのかをスムーズに切り分けることができます。
また、コミットを実行する際にはコミットメッセージと呼ばれる入力が必須となっています。編集した点のサマリやその理由などを記入することで、あとから他の人が編集履歴を見返す際にソースコードをすべて確認しなくてもよくなります。
編集履歴を分岐して記録していくことです。複数人でシステム開発を行う際、1つのシステムについて複数人が同時に編集をする場合があります。それぞれの編集が他の編集から影響を受けないように、編集履歴を分岐させることができます。
このように作業単位で履歴を残すことでエラーが発生した際の特定スピードを上げることが可能です。ブランチの運用は会社や組織によって異なりますが、2つのブランチを使った運用方法について紹介します。
バージョン管理の基本単位となるブランチ。トピックブランチを統合ブランチに集約し、テストやリリースを行う。
機能の追加やエラーの修正などトピックをキーとして作成するブランチ。同時にトピックが複数ある場合には複数作成される。
ブランチした他の人や自分の編集履歴を自分の編集に取り込むことです。
複数のブランチが同じ箇所を編集していることです。このままではマージする際どの変更履歴を優先すればよいのかという問題が発生します。どちらの編集を優先するのかはgitでは判断できないためユーザーが判断する必要があります。実際にgitを利用するなかで、マージする際にコンフリクトが発生すると、gitはエラーを履きます。そこでユーザーがどれを優先するのかを選択するという流れです。
リモートリポジトリにローカルリポジトリを送信して保存することです。クラウドにファイルをアップロードするのと同様の操作です。ローカルリポジトリにて編集した内容を共有するために実行します。
自身のローカルリポジトリにないものをリモートリポジトリから抽出して保存することです。クローンはリポジトリごとすべて保存するのに対してプルでは差分のみを抽出します。
リモートリポジトリに更新がないかを確認することです。複数人でシステム開発を行っていると、自分の把握していないところでブランチが作成されていたり削除されていたりすることがありますが、その履歴もフェッチによって取得できます。
それでは早速Gitを使ってみましょう。ここでは基本をご紹介します。
Gitの公式サイトからインストーラーをダウンロードできます。
インストールをしたあと、Gitを利用するための初期設定を行います。まずはGitのコマンドを入力するためのアプリケーションを開きます。開いたアプリケーション内でそれぞれのコマンドを入力します。
コマンドは、コンピューターになんらかの命令を行う際に入力し、実行します。この後出てくる「$」以降をそれぞれのアプリケーションへ入力していきます。
デスクトップの左下にあるWindowsロゴを選択し、スタートメニューからGit Bushを開きます。
Finderを開きアプリケーション、ユーティリティと進みます。そのなかにあるターミナルというアプリを開きます。
$ git config –global user.name “FirstName LastName”
$ git config –global user.email “address.address.com”
※””内は任意
$ git –version
$ mkdir “任意のディレクトリ名”
$ cd “移動したいディレクトリ名”
$ git init
$ touch “任意のファイル名”
$ git config -l
$ git config –global -l
Git使用時によく使うコマンドを紹介しておきます。
$ cd “移動したいディレクトリ”
$ git init
$ git clone “GitのURL” [ディレクトリ名]
$ git add “追加したいファイル”
$ git commit
$ git commit -a
$ git log
$ git reset –soft HEAD^
$ git branch “ブランチ名”
$ git checkout “ブランチ名”
$ git branch -d “ブランチ名”
$ git marge “取り込み元”
$ git rm “ファイル名”
$ git diff “ファイル名”
$ git status
今回はGitの概要と用語、主な使い方について解説しました。
分散型であるGitは他のバージョン管理ツールと比べて、短い開発サイクルを実現できるため世界中で広く利用されています。またGitをベースとしたサービスであるGitHubを利用することでプロジェクトや会社単位で効率的にシステム開発を行うことができます。
プロジェクトの種類や用途に合わせて無料版、有償版、Enterprise版を使い分け効率的に開発を行えるためGitはおすすめといえるでしょう。
WEBでのお問い合わせはこちら