ソースコード管理の概要

Observability Stephen Watts

ソースコード管理とは、ソースコードの変更を追跡管理することです。コードベースに対する変更履歴を保持することにより、プログラマー、開発者、テスターは常に最新の適切なコードで作業していることが保証されます。また、複数のソースからのコードをマージ(結合)する際に競合を解決することもできます。

ソースコード管理(TLDR)

ソースコード管理が重要なのは、開発環境では、1つの共有コードベースで複数の開発者が同時に作業するためです。1つの機能の開発に複数の開発者が個別に取り組む状況では、ある開発者が意図せずに競合するコード変更を行ったり、ある開発者が保存した内容が別の開発者の変更内容を上書きしたりする問題が起こり得ます。

ソースコード管理が普及するまで、こうした事態を防止する策はほとんどありませんでした。開発者がファイルの作業を始めるときに、チーム全員にそれを知らせて、該当のファイルを同時に編集しないよう注意を促していましたが、確実な方法とはとても言えませんでした。仮にうまくいったとしても、この方法ではプロジェクト内で行われたすべての変更の履歴を残すことができず、コード変更によってバグが発生した場合に、その原因となった箇所を突き止めて解決策を探ることはできません。

ソースコード管理は、こうした問題を次の方法で解決します。

競合が検出されたときは開発者に通知されるため、ソースコードにマージする前に修正して、アプリケーションでバグが発生するのを防止できます。以下のセクションでは、ソースコード管理の仕組み、ソースコード管理がソフトウェア開発にもたらすメリット、ソースコード管理プロセスを最大限に活用するためのベストプラクティスについて説明します。

ソースコード管理の仕組み

ソースコード管理プロセスの中核を担うのは、コードリポジトリとソースコード管理システムです。コードリポジトリは、組織のすべてのコードが保存される中央のサーバーで、ソースコード管理システムは、さまざまな開発プロジェクトのコード変更を追跡するシステムです。

ソースコードはそれぞれ、個別のファイルとして保存されます。開発者がコードのリビジョンを作成するためにファイルを「チェックアウト」すると、開発者のローカル環境にファイルのコピーが送信されます。このとき、リポジトリ内のオリジナルファイルがロックされるため、他の人がチェックアウトして、現在編集している開発者の変更内容を意図せず上書きするのを防ぐことができます。

開発者は、コードを変更してテストした後、ファイルを「コミット」して、変更後のコードをリポジトリに保存します。これによって、変更されたファイルが新たなオリジナルファイルになり、「バージョン管理」と呼ばれるプロセスによってコードのバージョン番号が1つ上がり、ロックが解除されます。

他の開発者がどのファイルのコードを変更する場合でも、常に同じプロセスが繰り返されます。ソースコード管理システムは、すべてのリビジョンを保存および管理して、各コードの完全な履歴を保持します。

すべてのソースコード管理ツールで共通して使用される用語がいくつかあります。

ソースコード管理とバージョン管理

バージョン管理とは、コードの変更を時間に沿って追跡できるようにリビジョンを管理することです。ソースコード管理と同じ意味で使われることもよくあります。

バージョン管理に対応したソフトウェアでは、特殊なタイプのデータベースで、すべてのコード変更が追跡されます。開発者がファイルを変更して保存しても、そのファイルの以前のバージョンで行われた変更は上書きされず、履歴としてすべて保持されます。

このようにすべてのコード変更をバージョンで分けて維持することには、以下に示すようにいくつかのメリットがあります。また、ブランチの扱いの違いによって、バージョン管理システムは集中型と分散型の2種類に分けられます。

いずれのタイプのバージョン管理システムにもメリットとデメリットがあります。集中型は、分散型よりもセットアップが簡単で、構成もシンプルであり、使い方がわかりやすいというメリットがあります。また、コードが単一のサーバーに保存されるため、アクセス管理も容易です。

分散型は、ネットワークに接続する必要がなく、ネットワークの遅延の影響を受けないため、一般的に集中型よりもパフォーマンスが高速です。また、コードベース全体がローカルにあるため、コードファイルのロック解除を待つ必要がありません。さらに、メインサーバーで障害が発生しても、分散型なら完全なコード履歴がローカルに保存されているため、それをバックアップとして使用できます。

サーバー監視のデータセンター画像

DevOpsでのバージョン管理

ソースコード管理は、DevOpsライフサイクルにおいて重要な役割を果たします。最近のソースコード管理システムの多くは、CI/CD機能を備えています(GitHubアクション、GitLabパイプライン、Microsoft Azure DevOps Serverなど)。

DevOpsライフサイクルは、ソフトウェア開発プロジェクトの構造と継続性を確立する7つのフェーズで構成されます。各フェーズは次のとおりです。

(DevOpsメトリクス、DevOps監視、ソフトウェア開発ライフサイクルについてお読みください。)

ソースコード管理のメリット

ソースコード管理にはさまざまなメリットがあります。

完全なバージョン履歴の保持

ソースコード管理システムには保存されたすべてのコード変更の履歴が保持されるため、ファイル内で行われたすべての変更内容と、その変更者、変更理由を、プロジェクトの全期間にわたって確認できます。また、必要に応じてコード変更を以前のバージョンにロールバックすることもできます。

コラボレーションの効率化

複数の開発者が各自の作業環境で、他の人の変更内容を上書きすることなく、異なる範囲のコードを編集できます。複数の開発者によるコード変更で競合が発生した場合はアラートが通知されるため、内容を確認して適切に対処することにより、マージ後のコードにエラーが入り込むのを防ぐことができます。

ワークフローの自動化

ソースコード管理を効果的に行うには、定められたワークフローに従って開発作業を行う必要があります。以下のような要件を自動化できるソースコード管理ツールもあります。

コミュニケーションの促進

ソースコード管理ツールでは通常、ワークフロー内の特定のコード変更についてコメントを残すことができます。これにより、開発チーム、マネージャー、ユーザー間のコミュニケーションを促進できます。この機能は、チームメンバーが地理的に分散している場合は特に効果的です。

コード履歴のグラフィカル表示

ソースコード管理ツールによっては、コード履歴をダイアグラムで表示して、コードのブランチ、マージ、リリース状況を一目で確認できます。

リリースノートの自動生成

ソースコード管理システムでは、コードがリリースとリンクされ、リリースノートが自動的に生成されます。これにより、変更の検索や手動でのノート作成にかかる時間を節約できます。

コードのバックアップ

ソースコード管理システムでは、開発者がコードを保存するための一元的な場所が提供されます。この仕組みには、すべての開発者がコードにアクセスできるだけでなく、開発者が各自のPCにコードを保存する場合よりも簡単にコードをバックアップできるメリットがあります。

パイプラインの分析

ソースコードを適切に管理すれば、パイプライン分析の効果を向上させることができます。アプリケーションレベルとインフラレベルのメトリクスを追跡することで、アプリケーション環境を詳細に可視化し、アプリケーションやインフラでのパフォーマンスの問題をすばやく特定して解消できます。

ソースコード管理システム

ソースコード管理システムは、ソフトウェア開発チームのコーディング作業を調整するソフトウェアツールです。前述のように、これらのツールは「バージョン管理システム」や「ソース管理システム」と呼ばれることもあります。

ソースコード管理システムの主な機能は、ファイルと設定の管理、およびバージョン管理の機能を提供して以下の目的を実現することです。

市場にはさまざまなソースコード管理ツールまたはシステムが提供されています。ツールを選択するときは、組織の規模、リソース、ニーズに最適な機能の種類や範囲を検討します。BitbucketやIBM Rational ClearCaseなどが有名ですが、GitHubやApache Subversionなどのオープンソースのツールも人気があります。

ソースコード管理のベストプラクティス

以下のベストプラクティスに従えば、ソースコード管理を最大限に活用できます。

ソースコード管理は今日のソフトウェア開発の基本

ソフトウェア開発では、プロジェクトとそのコードベースの数や規模が拡大し複雑化するにつれて、ソースコード管理ツールの重要性が増します。修正するアプリケーションのバージョンを間違え、さらに悪い場合には修正すべきバグを残したままリリースしてしまうと、時間、コスト、顧客の信頼を大きく損なうことになります。

ソースコード管理は簡単に導入でき、効果的に実践すれば、開発プロセスを加速させ、チームの生産性を向上させ、製品の品質を改善することができます。

このブログはこちらの英語ブログの翻訳です。

関連記事

ユーザー受け入れテスト(UAT):定義、種類、ベストプラクティス
オブザーバビリティ
7 分程度

ユーザー受け入れテスト(UAT):定義、種類、ベストプラクティス

ユーザー受け入れテスト(UAT)は、新しい機能や製品の開発の最終段階として重要なプロセスです。この記事では、UATを実行する目的と方法についてご説明します。
Monitor-as-Codeの手引き:Splunk Observability CloudをTerraformで使用する方法
オブザーバビリティ
7 分程度

Monitor-as-Codeの手引き:Splunk Observability CloudをTerraformで使用する方法

Monitoring-as-Codeでインフラ導入を効率化できます。これをSplunk Observability CloudとTerraformで実現する方法をご確認ください。
信頼性とは?知っておくべき信頼性メトリクス
オブザーバビリティ
5 分程度

信頼性とは?知っておくべき信頼性メトリクス

これらの主要な信頼性メトリクスは、アップタイムとパフォーマンスに関する信頼性の要件に対応するために組織が注目すべき領域を示します。