みなさんはじめまして、hagixです。
仕事でGitHubの導入や運用支援、ActionsやCopilotを用いた生産性向上の支援などを担当しております。
効果的な支援を行うためにはGitHubに関する深い知識が必要です。
また、開発業務全体を効率化させるためには、GitやGitHubの知識だけではなく、CI/CDなどのDevOpsの知識や、周辺ツールなど、幅広い知識が必要となります。
そういった、GitHubをベースとした生産性向上に関する知識の深掘り、整理を行うために、Qiitaを始めてみました。
また、Qiitaを使って多くの方に情報を発信していければと考えておりますので、よろしくお願いいたします。
Gitとは?
GitHubの話を始める前に、まずはGitに関してお話ししたいと思います。
Gitとは何か。
一言で言うと、コンテンツトラッカーという言い方ができると思います。
ソースコードやドキュメントなど、何かしらのコンテンツの変更点を断面として取得し、バージョンとして管理するためのサービスです。
とはいえ、コンテンツのバージョンを管理するためのサービスや製品は世の中にたくさん溢れかえっています。
Git最大の特徴は、分散型のバージョン管理システムであるということです。
バージョン管理とは
ここで、先にバージョン管理とは何か?と言うことについてお話しします。
バージョン管理システムとは、あるコンテンツに対し、誰が、いつ、何をしたのか?といった、変更履歴を記録・管理することを言います。
例えば以下のような内容を記録・管理しておきます。
- 作成者
- 作成日時
- 更新日時
- 更新者
- 更新内容
- 更新に対するコメント
これらの情報を記録・管理しておくことで、以下のようなことが可能となります。
- 変更の前後で差分を取り、確認することが出来る
- 変更点を戻すことで、以前の状態に戻すことが出来る
- 誤りやミスが発生した時に変更履歴を追っていくことで、いつ、誰が咥えた変更が原因なのか、容易に把握が出来る
このように、バージョン管理というものはとても大事なことですが、人手で都度、これらの情報を記録していくことはとても大変です。
そのため、通常バージョン管理システムと呼ばれるものを利用することが一般的です。
バージョン管理システムの歴史
最初のバージョン管理システムはIBMのOS/360 IEBUPDATEソフトウェア更新ツールだったと言われております。
その後、ソースコード管理用にSCCSが発表され、RCS、CVS、SVNと続き、Gitが発表されています。
SCCSとは
SCCSとは、 Source Code Control Systemの略です。
世界で初のソースコードを管理するための本格的なシステムで、1972年にベル研究所によって開発されました。
私の担当したシステムでも、2014年ごろにはまだ使われているシステムもありました。
RCSとは
RCSとは、Revision Control Systemの略です。
1980年にパデュー大学で開発されました。
主にプログラムや文書などのテキスト管理に使われるもので、バージョンの記録にはdiffユーティリティを利用していました。
バージョン管理としてはまだ原始的なもので、ファイル単位での管理しか行われず、プロジェクト全体を管理するという概念もありませんでした。
また、複数のユーザが同時に作業することも想定できていませんでした。
CVSとは
CVSとは、Concurrent Versions Systemの略です。
RCSをより一層拡張したもので、CVSサーバを用意し、複数人での作業を記録、管理することができました。
ただし、ファイル名の変更削除や、ディレクトリ名の変更削除がうまくできない、アトミック性を満たさないなど、多くの欠点も持っていておりました。
SVNとは
SVNは正式名称はApache Subversionのことです。
もともとはCollabNetが開発していたものを2009年にApache財団に寄贈され、Apache Subversionとなりました。
SVNはSubversionの抱えていた多くの問題点を改善しています。
また、CVSの後継として開発されたため、多くの点でCVSと似た機能を持っております。
例えば、CVSではできなかったディレクトリの移動や削除も可能となりました。
そのため、CVSでは最初に決めたディレクトリ構成から変更が難しいという問題がありましたが、SVNではディレクトリ構成を固める前からプロジェクトを開始することが出来るなどの利点がありました。
ただし、集中型(クライアント・サーバ型)のシステムであり、分散型ではなかったため、スケールしずらい、耐障害性がないなどの問題点がありました。
Gitとは
GitはLinuxカーネルのソースコード管理に用いるためにリーナス・トーバルズによって開発されました。
Linuxカーネルのような巨大なプロジェクトでバージョン管理ができるよう、分散型で開発されております。
まとめ
この記事では、Gitに関する説明を行うための前提知識として、
- バージョン管理とは何か
- バージョン管理システムの歴史
についてお話しました。
次回は、いよいよ、Gitに関する詳細を説明したいと思います。