エンジニアとしてプログラミングをするなか必須級のツールとなる Git (ギット) ですが、何のために使われるツールなのでしょうか。
最近プログラミングを始めたという方のなかには Git (ギット) がどのようなツールなのか、どのような用途で重宝されているツールなのか、ざっくり認識でしか理解していない方が多いです。
個人的な意見にはなりますが、「周りが使っているから」「何かで勧められたから」という理由でツールを採用するのではなく、ツールの理解を深め、代替ツールなどを調べることで優位性や求められている機能などを理解してから使いこなすことでより高いパフォーマンスが発揮できると考えます。
そこで今回は Git(ギット) に関して、何のためのツールなのかやツールの利便性について深掘りして解説していきます。
Git(ギット) 理解の浅い初心者エンジニア必見の内容となっておりますので、ぜひ最後までご覧ください。
Gitとは…
そもそも Git(ギット) とはどのようなツールなのでしょうか。
まず初めにざっくりとツールを理解するために Wikipedia より概要を引用し要点を確認してみましょう。
Git(ギット)は、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。
(引用:Git-Wikipedia)
ここでの要点は2点です。
- プログラムのソースコードなどの変更履歴を記録・追跡する
- 分散型バージョン管理システム
それでは、Git の用途について要点を分かりやすく解説していきましょう。
プログラムのソースコードなどの変更履歴を記録・追跡する
Git(ギット) は主にプログラムのソースコード(コンピュータに命令を与えるためのデータ)の変更履歴を残すために使用します。
また、変更履歴を残すために変更差分の追跡を行う機能を持ちます。
なぜ? Git(ギット) を利用するメリット
技術更新速度の速い IT 業界において、ソースコードは作って終わりではなく、保守改良などバージョン更新されるのが常である。更新後は変更差分を確認できるだけでなく、旧バージョンのデータを変更履歴という形で保持することができるメリットを持つ。
(変更履歴からコードを遡及することもできるため、改修前のデータを呼び出すこともできる)
上記では初心者にも分かりやすいように、旧バージョンのデータを残せる・遡及できる機能として解説しましたが、Git(ギット) では保存したいタイミングで変更履歴を残すことができます。
これによるメリットは機能の追加・改修後にバグ発生が発生した場合、改修前のコードをすぐに復旧できることにあります。そのため、現場では単機能をコード改修して変更履歴を保存するなど、細かく保存することが推奨されています。
バージョン管理ツールといわれる理由を理解できたところでさらに突っ込んでいきましょう。
Q.更新前を確認したいのであれば、コピーして旧ファイルを残せばいいのでは?
Git(ギット) の変更前のコードを復元する機能だけを指すならその通りだと思います。
しかし、Git(ギット) は変更差分の確認という便利な機能を持ちます。
下記画像のように、保存した履歴のなかで消された部分、追加された部分を表示できる機能です。
変更差分の確認が行いやすいというメリットを持ちます。
Q.Git(ギット) は改修する予定のないコードを1度で作りきる場合は不要?
この質問においては、個人的には必要だと言い難い状態だと考えます。
改修予定がない、1度で作りきる場合については、複雑でないコードが想定されます。
差分の確認や変更履歴の保存が不要、かつ作りきってそれっきりの場合は、使わなくてもいいと言えるでしょう。
しかし、Git(ギット) 管理した情報は共有できるというメリットを持ちます。
※ソースコード管理サービス(GitHubなど)と呼ばれる、クラウドサービスと連携させることで、変更履歴を含むコードを共有することができる。
これにより複数人で共同開発を行う場合にはGit(ギット)を用いるメリットがあると言えるでしょう。
分散型バージョン管理システム
これまでの解説で、Git(ギット) がプログラミング向けのバージョン管理用のツールであることを理解いただけたかと思います。
ここからはバージョン管理の種類について深掘りしていきましょう。
想定されるバージョン管理には主に3種類あります。
- ローカルバージョン管理
- 集中バージョン管理
- 分散バージョン管理
この中で Git(ギット) は分散バージョン管理に該当します。
それぞれの管理方法とメリットデメリットを深掘りしていきます。
ローカルバージョン管理
ローカルでファイルを更新する度にコピーし更新することでファイルバージョンを管理する方法です。
Word や Excel などの文書ツールでよく使われます。
メリット | 視覚的で容易に管理できる |
デメリット | 過去のバージョンを更新/紛失する可能性がある |
集中バージョン管理
1か所に親ファイルを保存しクラウド上で共同編集という形でファイルを更新、バージョンを管理する方法です。
クラウドサービスのGoogleスプレッドシートなどがこの管理方法に当たります。
メリット | ファイルが1つのため、同じ個所を同時に編集することがない |
デメリット | ファイルの同時編集が困難な場合がある |
分散バージョン管理
親ファイルを1つとして、各ユーザーは親ファイルをローカルにダウンロードし更新、更新後は親ファイルに再度アップロードしファイルバージョンを管理する方法です。
Git(ギット) などがこの管理方法に当たります。
メリット | ファイルの同時編集が可能となる |
デメリット | 変更箇所が重複する可能性がある |
Git(ギット)は複数人で同時編集することに特化した分散型バージョン管理システムを採用している。ゆえに変更箇所が重複すること(コンフリクト)がある。
Gitの利便性について
前章にて Git(ギット) が分散型バージョン管理ツールであり、複数人で共有する場合に有効な共同開発向けのツールであることを理解できたと思います。
この章では Git(ギット) の利便性について、公式サイトを元に深掘りしていきます。
Git is easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.
(引用:Git–fast-version-control)
Git(ギット) の公式サイトには上記の紹介文が記載されています。
翻訳すると下記の通りです。
Git は習得が簡単で、フットプリントが小さく、高速のパフォーマンスを発揮します。Subversion、CVS、Perforce、ClearCase などの SCM ツールを凌駕し、ローカルブランチ、便利なステージングエリア、複数のワークフローなどの機能を備えています。
(訳:DeepL翻訳)
上記ではざっくりの内容しか記載されていませんが、ポイントは主に下記の4点です。
習得が簡単(無料で利用可能)
Git(ギット) の操作は基本的に簡単なコマンドにて行われるため、コマンドを10個ほど覚えるだけで利用することができるというメリットがあります。(GUIも搭載している)
また、無料で利用可能なため、小規模開発からでも利用できる点からも習得・練習にかけるハードルが低く、大きなメリットとなります。
Branch(ブランチ)とMerge(マージ)
Branch(ブランチ) と呼ばれる、分岐路を容易に作成することが可能です。
Branch(ブランチ) は主に開発時に用いられる機能で、親ファイルを編集し続けたさいにバグが発生し、親ファイルがいつの間にか壊れるという状態を回避するために使われます。
親ファイルの情報を分岐させて開発を行い、完成後に反映させるということができます。
分かりやすく例を挙げると下記のように用いられます。
本番ブランチ:mainやmasterという名前で作成し、本番環境にアップするファイルとして保存する
機能実装ブランチ:developブランチを切って機能を追加、その後本番ブランチに反映する
試作用ブランチ:topicブランチを切って機能を機能を試作、上手くいかなかったら削除する
このように、分岐・反映させながらプログラミングをすることで、本番用のコードを傷つけることなく開発することを可能にします。
なお、反映させることを Merge(マージ) と呼びます。
ステージングエリア
Git(ギット) には、ステージングエリアという概念が存在します。
その他類似のシステムとは異なる部分で、バージョンを保存 (コミット) する際に保存箇所を選べるという機能です。
開発環境から、保存したい部分をステージングし、その後に保存することで、一括で保存ではなく、一部のみの開発状態を保存できるという仕組みです。
また、これらは Add(アド) や Commit(コミット) と呼ばれるGitコマンドを利用して容易に実行できるのがメリットとなります。
処理速度が速い (分散型バージョン管理)
Git(ギット) は、ローカル環境で実行されるため、処理速度が速くネットワークの影響を受けないというメリットを持ちます。
集中型のバージョン管理システムでは、ネットワークに接続して回収を行う必要があり、どうしてもネットワークに依存した処理速度となってしまうため、Git(ギット) の持つメリットだと言えるでしょう。
Git(ギット)を根本理解しよう!
Git(ギット) のツールを根本的に理解したい場合は、公式で公開している下記書籍を読むのがおすすめです。
あくまで有志の神ユーザーによって更新・日本語訳されているもので、更新日は古いものになりますが、Gitの内側で動いている実挙動や、コマンド、その他システムとの連携など、幅広い情報を確認することができます。
身近なツールから理解を深めるのにぜひ役立ててください。