ソース管理ツールとは、プログラムソースを複数人で同時に修正する場合に、ソースコードを共有し管理するためのツールです。
昔は、Microsoft Visual SourceSafe(VSS)というソース管理ツールを皆が利用していましたが、OSSのGit、Apache Subversionが利用されるようになり、
現在では、ほぼGit一択となりました。
Gitにはソースコードの共有に加えて、バージョン管理ツールの役割もあります。日付ごとやリリースごと等、その時点でのソースコードをツール内に保持します。
しかし、このバージョン管理ツールとしての役割は、CI/CD (継続的インテグレーション/継続的デリバリー) ツールで行うことが主流になっています。
Gitはあくまでも開発者同士でソースコードを共有しあい、開発者側のみでソースの履歴を管理するもの。一方、CI/CDツールは、DevOpsを実現するため、開発のソース、運用側のテスト用ソース、本番デプロイソースを一元的に管理します。
最近では、Azure DevOpsやAWS CloudFormationなど、ソース管理ツール(Git)とCI/CDツールがクラウド上で一体化したようなツールが一般的となってきていますが、ソース管理部分にはGitが使われていることが多いです。
ここではGitの概要をまとめています。(インストール方法、利用方法等はまとめていません。概念的な説明です。)
1.はじめに
ソース管理ツールの用語
リポジトリ
ソース管理ツールにおいて、管理するプログラムソースを登録する中核となる場所、ソースファイルのことを言います。
このリポジトリを1つだけ作成して運用する集中型と、リポジトリのコピーを複数作成し、分散して管理する分散型に分かれます。
チェックアウト
リポジトリから、編集するプログラムソースを取り出すことを言います。
チェックイン
リポジトリへ、編集したプログラムソースを書き戻すことを言います。
チェックアウト時のロック / チェックイン時のマージ・競合
チェックアウト時には、対象のプログラムソースを「ロックする」/「ロックしない」を選択します。
ロックすると、チェックインするまで、他のメンバーはプログラムソースの編集はできませんので安全ですが、チェックインが完了するまで、他のメンバーは編集を待たなければなりません。
一方、ロックしない場合は、複数メンバーが同時に同一プログラムをチェックアウトして編集できます。互いの編集者が同一ソースの編集をしたとしても、編集箇所が違う場合は、バージョン管理ツールの機能により、チェックイン時にソースコードのマージが自動で行われますが、仮に同一箇所の修正が行われた場合はチェックイン時に競合となり、どのソースを残すのか、手動で選択しなければなりません。
どちらの方法にも一長一短があるため、現場によって、どちらかに決められていると思いますが、「ロックしない」場合には、マージは行うものの、競合は発生させないよう、メンバー同士で修正箇所を事前に調整するケースが多いです。
ブランチによるプログラムソースの分岐
ソース管理ツールでは、単一プログラムソースごと編集前、編集後の履歴を管理すると同時に、プロジェクト全体の履歴を管理します。例えば、リリース時点のプログラムソースの一式を履歴として保存し、以後、各単一プログラムの編集を行ったとしても、もしリリースしたソースで障害が発生した際は、すぐにもとのリリース時点のプログラムソース一式に戻すことが出来ます。これはバージョン管理システムにおける非常に重要な機能の一つです。
このプロジェクト全体の履歴管理において、新たな機能を追加する際、元の履歴から分岐したい場合があります。この場合、ブランチという機能を利用して、プロジェクト全体の履歴を2つに分け、各々、別のプロジェクトとして管理して行くことも可能です。手間がかかりますが、再度一本化したい場合、マージも可能です。
2.Git
Gitは、軽量タイプの分散型のバージョン管理ツールです。リポジトリにはOracleやMySQLといったDBMSを利用せず、Git独自のファイル形式で保存されます。Gitのインストールに合せてDBMSのインストールの必要がない、軽量な仕様とも言えますが、ソースデータ量が増えると、DBMS利用タイプに比べ速度的には劣ります。
分散型の為、各自ローカルにリポジトリを保有しつつ、共有サーバーに共有リポジトリを配置する形式で運用します。ローカルリポジトリに対しては、Checkout、Commit、共有リポジトリに対してはPull、Pushのコマンドを用いて各リポジトリを操作します。
Windows、Linux、macOSのマルチプラットフォームで動作します。
無償、商用可、OSSのGNU Licenseで運用されます。
Git(https://git-scm.com/)
GitHubはGitとは全く違う別物です
名前が似ているGitHubですが、これは全く別物です。GitHubとは、Gitと関係のない企業、GitHub,Incが運営する、Gitのリポジトリを不特定多数のGitHubユーザーと共有する、営利目的のWebネットワークサービスです。
「GitのリポジトリはGitHubに置かなければならない。」と考えておられる方がいらっしゃったのですが、Gitのリポジトリはネットワーク上どこに配置しても構いません。
GitHubの正しい使い処は、OSSとして公開できるソフトウェアがある場合に、共同開発、セキュリティの脆弱性チェック等を目的として、外部の優秀な技術者の助力を求める場合です。
不特定多数が参加できるため、当然、悪意ある参加者がいる可能性も認識しておく必要があります。
クローズドな企業システムを開発する環境で、安易にGitHubに登録してしまうと、絶対公開してはいけないリポジトリを意図せず公開するリスクがあり、そのような場合、大問題となりますので十分注意して下さい。GitHubの有償のサービスでは非公開リポジトリの利用も可能です。