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

  • TOP
  •   
  • コラム
  •   
  • Gitとは何か 用語や仕組みについて

はじめに

銀行のシステムやWebサイト、スマートフォンのアプリなど、日々アップデートが継続されています。アップデートを行うための保守業務において、「Git」を活用した業務効率化は様々な現場で見られており一般的な手段となっています。そんな様々な場所で使われている「Git」について、本記事では基本的な用語やその仕組みについて解説しています。

Gitとはそもそも何か

「Git」は簡単に言うと、分散型のバージョン管理システムです。ざっくりいうとファイルのバージョンを簡単に管理するためのシステムです。バージョン管理とは、コンピュータ上で編集される、ソースコードや文書が書かれたファイルの更新履歴や編集個所の差分を管理して、デグレードやコンフリクト(変更の競合)の発生を未然に防いだりトレース(過去のある時点の状態を参照する)が可能な状態にすることです。
スマートフォンやゲームソフト、アプリケーションでアップデートを行うと、基本的には前のバージョンに戻すことができません。するとしても大きな手間がかかってしまいます。
しかし、Gitで管理しているファイルであれば、作業者のコンピュータ上で編集履歴や編集個所を管理することができるため、編集前のファイル情報を残したまま、編集したファイルを保存することが可能となっています。このことから、古いバージョンのファイルと新しいバージョンのファイルの一元管理が容易に実施できます。
開発に携わるプログラマーにとって多くの編集を行ったソースコードやドキュメントに不具合が発生し、古いバージョンへ戻す作業は日常的に多く発生します。かといって、改修するたびに編集日などのコメントを残すのは時間がかかり、手間が増え、人為的ミスが増え、ソースコードも冗長になってしまうことからデメリットしかありません。そういった作業を無駄なく一度に行うことができるのが「Git」です。

Gitでできること

「Gitとはそもそも何か」で説明した内容を以下に簡単にまとめます。

・新しいバージョンから古いバージョンへ簡単に戻すことができる。
・新旧ファールを一元管理することができる。
・編集履歴がログに残るため、複数人で共有することができる。
・複数人で修正した部分を簡単にコミットすることができる。

以上のことから、分散型バージョン管理システムと呼ばれており、多くの開発現場で使用されていることがお分かりいただけたでしょうか。

Gitの仕様

まず前提として、「Git」は「CUI(キャラクタベースユーザインターフェース)」となっています。前項「Gitとはそもそも何か」でも述べた通り、複数のファイルを複数人で共有するためのツールである「Git」は、いつ、誰が、どのファイルのどの部分に対して、どのような修正を加えたのかを的確に共有する必要があります。GUIのように画面上にコメントで表示される媒体の場合、人によって受け取り方が変わってしまい、同じ画面を見ていてもどこをどのように修正したのか共通認識することができません。
CUIでは、与えられたコマンドを入力するだけで誰が行っても、まったく同じ処理が実施されるため複数人で編集しても処理内容に相違は見られません。

Gitの用語

ここでは、「Git」を使用するにあたって必要となる最低限の用語を説明します。

リポジトリ(Repository)

リポジトリとは、ソースコードやドキュメントの一元的な貯蔵庫のことです。「Git」におけるリポジトリは以下の2つから構成されています。

・リモートリポジトリ:ある特定のサーバ上に設置して共有するためのリポジトリです。
・ローカルリポジトリ:ユーザごとに設置してある手元のマシンで編集できるリポジトリです。

通常はこの2つのリポジトリ分けて以下の流れで使用することが普通です。

・編集対象のファイルをリモートリポジトリからローカルリポジトリへ格納する。
・ローカルリポジトリに格納された編集対象のファイルを修正する。
・編集が完了したものをリモートリポジトリに反映しほかの作業者と共有する。

これがリポジトリの基本的な使い方になりまが、この基本的な使い方に現場特有のルールを組み合わせて使われている例がよく見られます。

クローン(Clone)

リモートリポジトリのディレクトリ構成や格納されたファイルなどをまるごとローカルリポジトリに保存する機能です。基本的には作業開始前に一番初めに行う処理となっています。

プル(Pull)

リモートリポジトリからローカルリポジトリにはないディレクトリやファイルをダウンロードする機能です。

フェッチ(Fetch)

リモートリポジトリからファイルの最新状況を取得する作業です。リモートリポジトリの最新状況の確認や作業すり合わせのタイミングで実施します。何も確認せずにプルしてしまうと、デグレが発生する可能性がありエラーが発生します。それを未然に防ぎ、複数人で同じファイルを編集する必要があるときのたがいの干渉を防ぐための機能といえます。

コミット(Commit)

コミットは、ディレクトリやファイルの編集作業を開始する前に必ず行う作業です。コミットを実行すると、ファイルの編集を行った日時を記録したファイルが生成されます。コミットを実行するごとにファイルが生成され、また時系列順に格納されているため、編集履歴や編集内容の確認が可能となります。

ワークツリー(Worktree)

ユーザが編集している作業中のディレクトリのことです。

インデックス(Index)

ローカルリポジトリとリモートリポジトリの間にある中間領域のことです。 「Git」の仕様上、編集したものをリモートリポジトリへコミットする場合、このインデックスにコミット対象のファイルを格納しなければなりません。編集したものを直接リモートリポジトリへ格納する場合、ミスがあった場合見落とす原因にもなりかねません。また、コミット対象が複数ある場合にインデックスをまとめてコミットすることができるので効率化にもつながります。

プッシュ(Push)

ローカルリポジトリにあるファイルをリモートリポジトリに送信して保存する機能です。


ここまで説明してきた内容を作業の流れに当てはめると以下のようになります。

・リモートリポジトリに公開されているファイルをローカルリポジトリへクローンまたはプルする。
・ワークツリーで編集する。
・編集が完了したファイルをインデックスに格納する。
・インデックスに格納された複数のファイルをまとめてローカルリポジトリにコミットする。
・ローカルリポジトリからリモートリポジトリへプッシュする。

以上が作業の基本的な流れになります。

ブランチ(Branch)

開発において、複数の修正を同時並行で行うことは珍しくありません。変更して同時に行われる作業を正確に実施するため、ファイルの編集履歴を分岐させて記録するブランチという機能があります。

マージ(Merge)

複数のブランチを1つにまとめて1つの完成形に近づけていくことです。

さいごに

本記事では、「Git」を活用するために最低限必要な用語や仕組みを紹介しました。複数のファイルを共有することでシステム開発等がいかに効率化されるかお分かりいただけたでしょうか。「Git」以外にもバージョン管理ツールはたくさんありますがどれも便利なものになっています。本記事が「Git」の便利さを理解する一助になれば幸いです