ソースコード管理とは、ソースコードの変更を追跡管理することです。コードベースに対する変更履歴を保持することにより、プログラマー、開発者、テスターは常に最新の適切なコードで作業していることが保証されます。また、複数のソースからのコードをマージ(結合)する際に競合を解決することもできます。
ソースコード管理が重要なのは、開発環境では、1つの共有コードベースで複数の開発者が同時に作業するためです。1つの機能の開発に複数の開発者が個別に取り組む状況では、ある開発者が意図せずに競合するコード変更を行ったり、ある開発者が保存した内容が別の開発者の変更内容を上書きしたりする問題が起こり得ます。
ソースコード管理が普及するまで、こうした事態を防止する策はほとんどありませんでした。開発者がファイルの作業を始めるときに、チーム全員にそれを知らせて、該当のファイルを同時に編集しないよう注意を促していましたが、確実な方法とはとても言えませんでした。仮にうまくいったとしても、この方法ではプロジェクト内で行われたすべての変更の履歴を残すことができず、コード変更によってバグが発生した場合に、その原因となった箇所を突き止めて解決策を探ることはできません。
ソースコード管理は、こうした問題を次の方法で解決します。
競合が検出されたときは開発者に通知されるため、ソースコードにマージする前に修正して、アプリケーションでバグが発生するのを防止できます。以下のセクションでは、ソースコード管理の仕組み、ソースコード管理がソフトウェア開発にもたらすメリット、ソースコード管理プロセスを最大限に活用するためのベストプラクティスについて説明します。
ソースコード管理プロセスの中核を担うのは、コードリポジトリとソースコード管理システムです。コードリポジトリは、組織のすべてのコードが保存される中央のサーバーで、ソースコード管理システムは、さまざまな開発プロジェクトのコード変更を追跡するシステムです。
ソースコードはそれぞれ、個別のファイルとして保存されます。開発者がコードのリビジョンを作成するためにファイルを「チェックアウト」すると、開発者のローカル環境にファイルのコピーが送信されます。このとき、リポジトリ内のオリジナルファイルがロックされるため、他の人がチェックアウトして、現在編集している開発者の変更内容を意図せず上書きするのを防ぐことができます。
開発者は、コードを変更してテストした後、ファイルを「コミット」して、変更後のコードをリポジトリに保存します。これによって、変更されたファイルが新たなオリジナルファイルになり、「バージョン管理」と呼ばれるプロセスによってコードのバージョン番号が1つ上がり、ロックが解除されます。
他の開発者がどのファイルのコードを変更する場合でも、常に同じプロセスが繰り返されます。ソースコード管理システムは、すべてのリビジョンを保存および管理して、各コードの完全な履歴を保持します。
すべてのソースコード管理ツールで共通して使用される用語がいくつかあります。
バージョン管理とは、コードの変更を時間に沿って追跡できるようにリビジョンを管理することです。ソースコード管理と同じ意味で使われることもよくあります。
バージョン管理に対応したソフトウェアでは、特殊なタイプのデータベースで、すべてのコード変更が追跡されます。開発者がファイルを変更して保存しても、そのファイルの以前のバージョンで行われた変更は上書きされず、履歴としてすべて保持されます。
このようにすべてのコード変更をバージョンで分けて維持することには、以下に示すようにいくつかのメリットがあります。また、ブランチの扱いの違いによって、バージョン管理システムは集中型と分散型の2種類に分けられます。
いずれのタイプのバージョン管理システムにもメリットとデメリットがあります。集中型は、分散型よりもセットアップが簡単で、構成もシンプルであり、使い方がわかりやすいというメリットがあります。また、コードが単一のサーバーに保存されるため、アクセス管理も容易です。
分散型は、ネットワークに接続する必要がなく、ネットワークの遅延の影響を受けないため、一般的に集中型よりもパフォーマンスが高速です。また、コードベース全体がローカルにあるため、コードファイルのロック解除を待つ必要がありません。さらに、メインサーバーで障害が発生しても、分散型なら完全なコード履歴がローカルに保存されているため、それをバックアップとして使用できます。
ソースコード管理は、DevOpsライフサイクルにおいて重要な役割を果たします。最近のソースコード管理システムの多くは、CI/CD機能を備えています(GitHubアクション、GitLabパイプライン、Microsoft Azure DevOps Serverなど)。
DevOpsライフサイクルは、ソフトウェア開発プロジェクトの構造と継続性を確立する7つのフェーズで構成されます。各フェーズは次のとおりです。
ソースコード管理にはさまざまなメリットがあります。
ソースコード管理システムには保存されたすべてのコード変更の履歴が保持されるため、ファイル内で行われたすべての変更内容と、その変更者、変更理由を、プロジェクトの全期間にわたって確認できます。また、必要に応じてコード変更を以前のバージョンにロールバックすることもできます。
複数の開発者が各自の作業環境で、他の人の変更内容を上書きすることなく、異なる範囲のコードを編集できます。複数の開発者によるコード変更で競合が発生した場合はアラートが通知されるため、内容を確認して適切に対処することにより、マージ後のコードにエラーが入り込むのを防ぐことができます。
ソースコード管理を効果的に行うには、定められたワークフローに従って開発作業を行う必要があります。以下のような要件を自動化できるソースコード管理ツールもあります。
ソースコード管理ツールでは通常、ワークフロー内の特定のコード変更についてコメントを残すことができます。これにより、開発チーム、マネージャー、ユーザー間のコミュニケーションを促進できます。この機能は、チームメンバーが地理的に分散している場合は特に効果的です。
ソースコード管理ツールによっては、コード履歴をダイアグラムで表示して、コードのブランチ、マージ、リリース状況を一目で確認できます。
ソースコード管理システムでは、コードがリリースとリンクされ、リリースノートが自動的に生成されます。これにより、変更の検索や手動でのノート作成にかかる時間を節約できます。
ソースコード管理システムでは、開発者がコードを保存するための一元的な場所が提供されます。この仕組みには、すべての開発者がコードにアクセスできるだけでなく、開発者が各自のPCにコードを保存する場合よりも簡単にコードをバックアップできるメリットがあります。
ソースコードを適切に管理すれば、パイプライン分析の効果を向上させることができます。アプリケーションレベルとインフラレベルのメトリクスを追跡することで、アプリケーション環境を詳細に可視化し、アプリケーションやインフラでのパフォーマンスの問題をすばやく特定して解消できます。
ソースコード管理システムは、ソフトウェア開発チームのコーディング作業を調整するソフトウェアツールです。前述のように、これらのツールは「バージョン管理システム」や「ソース管理システム」と呼ばれることもあります。
ソースコード管理システムの主な機能は、ファイルと設定の管理、およびバージョン管理の機能を提供して以下の目的を実現することです。
市場にはさまざまなソースコード管理ツールまたはシステムが提供されています。ツールを選択するときは、組織の規模、リソース、ニーズに最適な機能の種類や範囲を検討します。BitbucketやIBM Rational ClearCaseなどが有名ですが、GitHubやApache Subversionなどのオープンソースのツールも人気があります。
以下のベストプラクティスに従えば、ソースコード管理を最大限に活用できます。
ソフトウェア開発では、プロジェクトとそのコードベースの数や規模が拡大し複雑化するにつれて、ソースコード管理ツールの重要性が増します。修正するアプリケーションのバージョンを間違え、さらに悪い場合には修正すべきバグを残したままリリースしてしまうと、時間、コスト、顧客の信頼を大きく損なうことになります。
ソースコード管理は簡単に導入でき、効果的に実践すれば、開発プロセスを加速させ、チームの生産性を向上させ、製品の品質を改善することができます。
このブログはこちらの英語ブログの翻訳です。
この記事について誤りがある場合やご提案がございましたら、ssg-blogs@splunk.comまでメールでお知らせください。
この記事は必ずしもSplunkの姿勢、戦略、見解を代弁するものではなく、いただいたご連絡に必ず返信をさせていただくものではございません。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。