ページの先頭です
IIJ.news Vol.186 February 2025
IIJ 広報部 技術担当部長
堂前 清隆
IIJの技術広報担当として、技術Blogの執筆・YouTube動画の作成・講演活動などを行っています。これまでWebサイト・ケータイサイトの開発、コンテナ型データセンターの研究、スマホ・モバイル技術の調査などをやってきました。ネットワークやセキュリティを含め、インターネット全般の話題を取り扱っています。
「提案書-20250210.pptx」「提案書-ver2-20250209.pptx」「提案書-ver2-20250209-最新版.pptx」……読者の皆さんは苦笑されるかもしれませんが、パソコンで文書を扱っている時にありがちな光景です。自分のパソコンのなかだけならまだしも、複数人が1つのファイルを修正するような現場でこれは大問題です。「どのファイルが最新かわからない」「どの部分を修正したのか探しづらい」「気がついたら複数の人がバラバラに新しい版を作成していた」といった経験をされた方は少なくないでしょう。
ソフトウェア開発者にとって、こうした問題はより深刻です。ソフトウェア開発ではプログラムが記述された多数のソースコードを扱います。プログラムを書いたら1回で思い通りに動作することなどまずありませんから、開発過程では動作テストとプログラムの修正が繰り返されます。こうした作業は、いったんソフトウェアが「完成」したあとも、新たに発見される「バグ」対応のために長期間継続します。このような営みのなかで「最新のソースコード」を間違いなく管理すること、さらに、それまでに「どのような理由で」「どのソースコードを」「どのように修正したのか」という履歴を残すことは、非常に重要です。管理が不十分だと、正しい修正が行なえなくなったり、過去に修正したはずのバグが再発してしまうなどの問題が起こります。
そこでソフトウェア開発の現場では、ソースコードの管理のために「バージョン管理システム(Version Control System)」が使用されます。基本的なバーション管理システムは1970年代にはすでに使われていたと言われており、長い歴史を持っています。
ソフトウェア用のバージョン管理システムの基本的な機能は、最新のソースコードと、それに対する修正履歴を保持することです。現在のソースコードと過去のソースコードを比較して、どこが修正されたのかを表示したり、必要に応じて過去のソースコードに復元することもできます。また「どのような理由で修正したのか」の記録(log)を残すこともできます。
大規模なソフトウェア開発の現場では、多数の開発者が平行して別々の問題を修正することも日常的です。そうした場合、ソースコードの「最新版」を複数に分岐させ、開発者が互いに干渉されることなく作業するための機能もあります。こうした分岐をブランチ(枝)と呼びます。ブランチはいずれ元のソースコードに反映させる必要が生じるでしょうが、もしかするとその時点では、元のソースコードに別の修正が加えられているかもしれません。そこで、分岐時点のソースコードからの修正箇所を全て洗い出して、修正済みのソースコードに矛盾なく反映させていく作業が必要になります。これをマージと言います。この作業はかなり面倒ですが、バージョン管理システムによっては、マージ作業を半自動化してくれるものもあり、大変助かります。
インターネット上で使われるソフトウェアでは、開発者が大人数になることもしばしばです。そうしたプロジェクトでは「分散型」のバージョン管理システムが使われます。例えば、サーバなどに使われるLinuxでは開発者が数千人にも及んでいます。ここで使われているGitと呼ばれるシステムは、分散型バージョン管理システムのなかでも特に有名なシステムです。
ちなみに、一般のニュースでもたまに見かけるGitHubとは、このGitを中心にしたネットサービスです。Gitによるソースコードのバージョン管理を中心に、バグの報告・管理機能や、プロジェクトの進捗を管理する機能などがあり、ソフトウェア開発プロジェクトの情報を1箇所に集約できます。インターネットで使われるさまざまなソフトウェアの開発プロジェクトがGitHubで進められており、インターネットを支えるインフラの1つとなっています。
ページの終わりです