支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • バージョン管理の基本、Gitのbra

バージョン管理の基本、Git

システムの開発において開発の規模が大きければ大きくなるほど、いつ、誰が、何を変更したのかがわからなくなってしまいがちです。現在作業しているファイルを誰が編集していて、どのファイルが最新の状態であるのか把握するのに欠かすことができないのが、Gitなどのバージョン管理システムです。

テクノロジーが発達した現在ではプログラミングに対する需要は増加しており、無料の学習サイト、書籍教材、動画教材などもよく見受けられるようになりました。そういった教材などでの独学ではプログラミング言語に対しての学習などに重点を置いてしまいがちだと思いますが、Gitによるバージョン管理ができる、というのいうのは開発現場においてプログラムが組めるというスキルに加えて必要になる必須スキルです。なのでGitにはどのようなしくみでどのような機能があるのか、とGitの用語を中心に紹介していきたいと思います。

Gitのしくみ

では、Gitで行うことができるバージョン管理について仕組みを解説していきたいと思います。Gitでのバージョン管理はソースコードなどでの変更差分を「commit」と呼ばれる単位にして、リポジトリという場所に格納しています。つまり「commit」という操作を行なうことで、その時点での変更が記録され、保存されていくのです。それぞれの記録が上書きではなく別々に記録されていくため、いつ、何を行ったのか作業の履歴を確認することもできますし、過去のある時点にデータを戻すことも可能です。ゲームでいうところのセーブをそれぞれの操作ごとに行い、どのセーブデータからでもゲームを始められる状態にするということです。

さらにチーム開発ではGitを使ってcommitを共有することで、commit履歴から自分以外のメンバーが何をしているのかを把握することもできます。このcommitで重要なことはcommitはできる限り細かく分けて行うということです。先に記述したように操作後に行ったcommitからデータを復元させることで過去のある時点にデータを戻すことも可能なのですが、例えば、A:プログラムの新規追加、B:プログラム内容変更、C:プログラム内の一部分を削除という3つの作業を行ったとします。それぞれの作業後のcommitを怠りABCの作業後にcommitをしてしまうと、後々Cの作業が不要だったのでBの時点に戻したい場合にAB作業後のデータを戻すことができなくなってしまいます。

branchとは

Gitの並行して行われる複数の機能追加やバージョン管理について理解するにはbranchについても理解する必要があります。branchとは、英訳すると「枝」、つまり、木に生えた枝のように分岐していく履歴の流れを記録していくためのものです。分岐したbranchは他のbranchの影響を受けないため、同じリポジトリ中で複数の変更を同時に進めていくことができます。branchを利用することで複数人での並行作業作業が可能になり、問題が発生した場合に原因となる変更箇所の調査や対策を行うことが容易になるのです。

大元のbranch(これはほとんどの場合、本番環境といわれるものでmasterbranchとも呼ばれます。)を変更していくのではなく、予め予備の開発環境をチームごとに作成し、開発チームがそれぞれ他の開発チーム影響を受けないその環境で開発を進めることが可能になります。そしてこの枝分かれしたbranchを定期的に大元のbranchに統合(これをmergeと言います。)させシステムを開発していくのです。

commitからmergeまでの流れ

ここで改めてGitでcommitからまでmergeの流れをそれぞれの工程でどのようなことが行われているのかを交えつつ整理して説明していきたいと思います。
ローカル環境にGitのリモートリポジトリからソースを取得します。これはこの開発チームで共有しているソースを自身のPC(ローカルリポンジトリ)にコピーする作業です。

入力するコマンドは

git clone
です。

自分のローカル環境にあるbranchの確認した後、自身の作業するbranchをきります。コマンドは


git branch (branch名)
です。
branchに移動(チェックアウト)します。

【コマンド】
git checkout (branch名)

変更したファイルのソースコードを確認し、変更点に問題なければcommitします。commitで行うのは以下の2ステップです。


【commitしたいファイルを選択】
git add (ファイル名)
commit
git commit

GitHubへpushします。GitHubが他の開発者と共有するためのツール、pushがローカルリポンジトリからリモートリポジトリにエクスポートする操作です。


【コマンド】
git push origin (ファイル名)

ここまでが基本的な流れで、masterbranchにmergeする必要がある場合はmergeを行います。先にmasterbranchに移動し、masterbranchに作業していたbranchの変更をmergeします。


【masterに移動するコマンド】
git checkout master

【masterbranchにmergeするコマンド】
git merge (ファイル名)

開発のバージョン管理の工程は以上の作業の繰り返しです。

Gitへの理解

開発携わる場合、システムのバージョン管理は必ず必要になります。Gitには専用用語が多いので抵抗意識も芽生えてしまうかもしれないですが、理解することで開発における基本であるバージョン管理を理解することができるので、commit、branch、merge等の役割を理解し習得を目指してみてください。