Gitとはなにか
Git(ギット[2][3][4])は、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。…
Gitでは、各ユーザのワーキングディレクトリに、全履歴を含んだリポジトリの完全な複製が作られる。したがって、ネットワークにアクセスできないなどの理由で中心リポジトリにアクセスできない環境でも、履歴の調査や変更の記録といったほとんどの作業を行うことができる。これが「分散型」と呼ばれる理由である。
https://ja.wikipedia.org/wiki/Git
Gitは上記説明にある通り「変更履歴を記録・追跡」「分散型管理」の特徴を備えたプログラム管理システムです。またwikiには載っていないですがGitの機能であるpull requestを使うことで、レビューを必須化することで「レビューの厳格化」を行うことができます。
似た特徴のシステムと比較すると以下のようなものがあります
変更履歴を記録・追跡 | 分散型管理 | レビュー厳格化 | |
Excel(ローカル管理) | 同じ 変更履歴が残り、確認や復元可能 | 違う 他人の変更は反映されない | 違う レビューはできない |
共有フォルダ上 のtxtファイル | 違う 変更履歴がない | 同じ 複数人で編集可能 | 違う レビューはできない |
Google Document | 同じ 変更履歴が残り、確認や復元可能 | 同じ 複数人で編集が可能 | 近い 変更点などにコメント可能 |
なぜGitが必要なのか

なぜGitが必要かを各特徴ごとに整理したいと思います。
「変更履歴を記録・追跡」
「変更履歴を記録・追跡」は主にシステムで障害が発生した際に重要となってきます。
「変更履歴を記録・追跡」なし | 「変更履歴を記録・追跡」あり | |
障害復旧方法 | エラーを治す必要あり | 障害発生前のプログラムに戻して復旧可能 |
障害原因調査 | プログラムの内容から推測 | 変更履歴から「いつだれのどの変更」が原因か調査可能 |
このように「システムの可用性」や「原因調査の精度」を大きく向上させることができます
「分散型管理」
システムの規模によりますがプログラムを複数人で変更するケースは少なくありません。その際に分散型システムがないと、「main_program_20220901.py」といったファイル名などでどのプログラムが最新かを把握しておく必要があります。また常に最新のコードに付け足す形で開発を行う必要があり、「同時に複数人で開発を行わない」か「同時に行った場合はどこかで組み合わせる」ことをする必要が出てきます。
Gitの分散型管理では別の箇所の変更は同時に行うことができ、反映させる際にうまく組みわせてくれる機能がついています。そのため各自が同じタイミングにローカルで変更を行っても問題なく開発をすすめることができます。
【変更1】
x = 2
y = 1
print(x + y)
print(x - y) <= 引き算を追加
【変更2】
x = 3 <= xを2から3に変更
y = 1
print(x + y)
【変更1,2を組み合わせる】
x = 3
y = 1
print(x + y)
print(x - y)
「レビュー厳格化」
分散型管理で障害時の復旧や原因調査が改善しますが、事前にレビューを行ってコードの品質を上げて障害が起きる確率を下げることも重要となっています。Gitはpull requestという機能を使うことで、レビューを効率的に行うことができます。また本番反映前のpull requestを必須にすることで、レビューを通った変更のみが反映される状態を作り出すことができます。
Gitのサイクル
大まかな流れ
Gitは分散型管理システムのため複数環境にて並行で開発が進みますが、一つの開発フローは以下のようなフローとなっています。
作業概要 | Gitコマンド | 詳細 |
最新化 | git pull | サーバー本番情報をローカルに取り込む |
(編集) | – | 最新化したコードをローカルで編集します |
変更登録 | git add git commit | 編集した内容をGitに変更として登録する (登録前はGitシステム上は変更がない状態) |
アップロード | git push | ローカルの変更をサーバー開発に反映 (サーバーの本番へいきなり反映しない) |
レビュー | pull request | サーバー開発とサーバー本番を比較し、 レビューができる状態にする |
本番反映 | merge | レビューを承認し本番環境に反映 |

インストール
Git自体は概念は難しいですが導入自体はネット上に情報が多いため、「Git インストール Mac」などで検索することで多くの情報が出てきます。その際にGUIで行う方法とCUIで行う方法の大きく2つがあるため、自分にあった利用方法で調べてみてください。一応いくつか参考リンクを記載させていただきます。(リンク切れの場合はキーワードで検索すると類似のページが見つかると思われます)
- GUIで行う方法(画面で操作を行う)
- CUIで行う方法(ターミナルなどでコマンドを使う)
実際の運用例
インストールができれば後はGitHubなどでサーバーを準備すれば実際に開発を開始することができます。ただ上で紹介した流れは開発フローの1例なので、実際の運用だと組織構成に合わせてフローや権限設計などが変わってきます。以下運用で使われている特徴的なフローや設定をいくつか紹介しようと思います。
- git-flowと呼ばれる紹介した機能ごとのブランチ名などを定義し、リリースもtagを使うことで紹介した流れより厳密にプログラムを管理するフロー
- pull request後の変更反映(merge)権限はインフラ担当者のみに与え、インフラ知見がある人のレビューを通らないと本番リリースできないようにする権限設計
- Gitの変更と合わせてシステムが動くようにし、mergeと同時に本番へのリリースができるようにする(cicdと呼ばれるもの)
まとめ
Gitの情報はネット上に多く存在しますがイメージを掴みにくく、今回は実際の使い方より概念や運用例に比重をおいて書かせていただきました。ただGitは機能や使い方が幅広く存在するためこちらの内容をとっかかりにひとまず利用を開始し、使っていく中で使い方を掴んでいっていただければと思います。
コメント