ソフトウェア構成管理

ソフトウェア構成管理（ソフトウェアこうせいかんり、、SCM）は、ソフトウェア開発プロジェクトをその成果物を通して制御・管理する方法論である。ソースコードや文書などの成果物の変更履歴を管理し、製品のバージョンやリビジョンに個々の成果物のどのバージョンが対応しているかを識別し、任意のバージョンの製品を再現可能とする。

バージョン管理システムは SCM のためのツールであるが、バージョン管理システムそのものを SCM と呼ぶこともある。しかし、一般にソフトウェア構成管理はバージョン管理とは等価ではなく、バージョン管理を制御するマネジメント的要素が含まれる。

歴史 
当初、ソフトウェア構成管理(SCM)は単に CM（構成管理）と呼ばれており、本来はハードウェア開発と製造制御のためのものだった。以下では主にSCMツールの登場を時系列に並べる。

 1950年代終盤から1960年代初期：
 1960年代終盤から1970年代初期: カリフォルニア大学サンタバーバラ校の Leon Pressor は変更および構成制御に関する論文を発表した。これは、アメリカ海軍に航空機のエンジンを提供していた軍需企業からの委託研究の一環で行われたものである。
 1970年代初期: UNIXの make
 1970年: 
 1972年ごろ: ベル研究所の論文で本来の diffアルゴリズムが紹介された。
 1972年: ベル研究所の Marc Rochkind がOS/360上のSNOBOL言語でSCCSを開発。
 197x年: Pansophic の （メインフレーム向けのソースコード管理システム）
 1975年: SCCS が C言語で書き直され UNIX に対応（ファイル比較に diff コマンドを使用）
 1975年: Pressor の研究成果から商用製品 （CCC）が登場（SoftTool社）
 198x年: RCS（Walter Tichy）現在は GNUプロジェクトの一部。
 1980年代: patch（ラリー・ウォール）
 1984年: Aide-de-Camp（ADC、後にTRUEchange と改称、Richard Harter）
 1986年: CVS
 2000年代初期: BitKeeperやarchといった分散型バージョン管理システムが実用に耐えるレベルとなってきた。

用語 
SCMを意味する用語は非常に様々でシステムによって異なる。また、論争の種にもなっている。

研究者だけでなく、ツールベンダーも顧客の囲い込みを狙って、故意に他と異なる用語を使ったり、頭字語の意味を違う言葉の略であるとしたりする。

：現在はIBMの一部となっているラショナル（さらに以前は Atria）が使っていた用語
（SCCM）：ガートナーでの用語。ただし、単に変更管理を含めた広義のソフトウェア構成管理を指しているとも考えられる。

（バージョン管理システム）

国際規格では、ISO/IEC TR 15846:1998 Information technology -- Software life cycle processes -- Configuration Managementが標準技術文書(technical report)として1998年に発行している。しかし試用のち、2007年に廃止している。軍関連のソフトウェア開発部門での利用はあったが、他の分野では詳細すぎて仕立て(tailoring)の出発点としては重すぎるとの背景があった。

目的
SCMの一般的な目的は次の通り:

 構成の範囲・要素 - 構成管理対象は何か。
 構成の識別 - 修正を施すべきコードはどれか？
 構成の制御 - 製品のリリースとその修正を制御する
 状態の記録 - コンポーネントの状態を記録し報告する
 レビュー - コンポーネント間の一貫性と完全性を保証する
 ビルド管理 - ビルドのための対象ファイル、プロセスとツールを管理する
 プロセス管理 - 組織としての開発手法を厳守する
 環境管理 - システムの基盤となっているハードウェアおよびソフトウェアを管理する
 チームワーク - 開発に関するチーム内のやりとりを促進する
 バグトラッキング - 全ての障害について対処状況を追跡可能とし、かつコード修正と対応付ける

構成管理ツール
構成管理ツールの動作には「PUSH型」と「PULL型」がある。以下その違いを説明する。
PUSH型は「構成管理ツールから機器へ設定を行う」方式。機器側に「エージェント」と呼ばれる特別なプログラムを必要とせず動作する（エージェントレス）ので、サポート対象機器が限定されにくいというメリットがある。
PULL型は「設定対象の機器が構成管理ツールから情報を取得して自身を設定する」方式。機器側に構成管理ツールと通信する「エージェント」が必要なため、エージェントが動作しない機器はサポートされないん。なお、エージェント機能を外部のサーバで実行し、外部のサーバから対象機器にPUSH型で設定を行う「外部エージェント」方式もある。

参考文献
Berczuk, Appleton; (2003).  (1st ed.). Addison-Wesley. ISBN 0-201-74117-2.
 ステファン・P・バーチャック（著）、ブレッド・アップルトン（著）、宗雅彦（訳）『パターンによるソフトウェア構成管理』、翔泳社、2006年、ISBN 9784798112596

関連項目
変更管理 (ITシステム)
バージョン管理システム
ビジネステクノロジー最適化

外部リンク
CmYellowPages 構成管理イエローページ - 構成管理に関するリンク集

バージョン管理とソフトウェア構成管理の関係 ITmedia

ソフトウェア開発工程
バージョン管理システム