devsumi2008
DESCRIPTION
TRANSCRIPT
縣 俊貴縣 俊貴株式会社ヌーラボ 取締役株式会社ヌーラボ 取締役The Seasar FoundationThe Seasar Foundation
14-E-3
SubversionSubversion とと Maven 2Maven 2による構成管理による構成管理
〜〜バージョン管理・ビルド・リリース・自動化バージョン管理・ビルド・リリース・自動化〜〜
Copyright 2008 Nulab inc. All Rights Reserved.
最初に自己紹介• 縣俊貴(あがたとしたか)
• OSS 活動
• 執筆
• Blog• アガテナ http://d.hatena.ne.jp/agt/
Copyright 2008 Nulab inc. All Rights Reserved. 2
http://www.backlog.jp/本社:福岡市
アジャイル開発の
アジャイル開発の
アジェンダ• 構成管理とは?
– なぜ今構成管理なのか?• Subversion
– 構成管理の実践的な運用パターン• Maven2
– Maven2 で構成管理
Copyright 2008 Nulab inc. All Rights Reserved. 3
Copyright 2008 Nulab inc. All Rights Reserved. 4
構成管理とは?
構成管理とは?SubversionMaven2
Copyright 2008 Nulab inc. All Rights Reserved. 5
身の回りにこんな問題ありませんか?
構成管理に対しての意識を高めていかないと、問題は永遠に解決しません。Copyright 2008 Nulab inc. All Rights Reserved. 6
田中リーダー
佐藤鈴木
構成管理って簡単にいうと何?• ソフトウェア構成管理
(SCM:Software Configuration Management)– 「開発中のソースコードなどへの変更や修正を記録
し、成果物を過去のものも含めていつでも作成できるようにすること」
1.01.0 1.11.1 1.21.2変更履歴の記録
変更履歴の記録
変更履歴の記録
変更履歴の記録
1.01.0 1.11.1 1.21.2
ソフトウェア構成管理とは、「変更管理」と「確実な成果物の作成」を実現するもの。
Copyright 2008 Nulab inc. All Rights Reserved. 7
・リリースの構成を把握・任意のバージョンの を再作成
ソース
成果物
で、なぜ今構成管理なの?
自動化自動化
昔と比べて効率化や品質保証に関して手法が普及してきた。
昔と比べて効率化や品質保証に関して手法が普及してきた。
次に開発全体の中で大きく改善できるポイント。次に開発全体の中で大きく改善できるポイント。
構成管理を「なんとなく」から「意識的」にして、ソフトウェアの安全で迅速な提供を Copyright 2008 Nulab inc. All Rights Reserved. 8
Subversion
構成管理とは?SubversionMaven2
Copyright 2008 Nulab inc. All Rights Reserved. 9
Subversion の特徴
Subversion は構成管理に最適なバージョン管理ツール!
項目 CVS Subversion
ディレクトリの移動・削除
未サポート サポート
ブランチ化 全コピー・コスト大 参照コピー・コスト小
通信方式 独自プロトコル、 SSH 独自プロトコル、 SSH 、 HTTP
リビジョン番号の単位 ファイル毎 ツリー全体Copyright 2008 Nulab inc. All Rights Reserved. 10
SVN問題点の改善問題点の改善 ・ブランチのコストがほぼ0。・ツリー全体でリビジョンを管理。 ある瞬間の状態のソースツリー 取得が簡単
• 構成管理をサポートしやすいバージョン管理システム
Subversion を使った構成管理の実践パターン
• 構成管理にもパターン• パターンを知ることで、
– 意識的に構成管理ができる– 開発者間の共通認識ができる
• 基本パターンを紹介– メインライン– リリースブランチ– タスクブランチ
構成管理のパターンを知ると構成管理を自信を持って行えるようになります。 Copyright 2008 Nulab inc. All Rights Reserved. 11
メインライン
/trunk/trunk
/Release1/Release1
リリース 1リリース 1
/Release2/Release2
リリース 2 に向けての作業リリース 2 に向けての作業
リリース 2リリース 2
• 開発の本流をひとつに保つ。– 最新の開発はメインラインに対して行う。– 開発プロセスの簡略化・効率化。– ブランチ・マージのコストを最小限に。
• ルール– メインラインはビルドできる状態を保つ。– ブランチはメインラインからおこなう。– ブランチのブランチはおこなわない。– ブランチしたらなるべく早くメインラインに戻す。
メインラインを使うと、開発がシンプルになります。ブランチは必要なときだけ意識的に。 Copyright 2008 Nulab inc. All Rights Reserved. 12
リリースブランチ• 特定のリリース作業向けのブラ
ンチ。– ブランチ=並行作業のためのコードライ
ンの分岐。– リリース期間中もメインラインの開発を止めない。
– リリース専用ラインで安全にリリース作業を進めることができる。
– リリースブランチでの修正は、メインラインにマージする。
/trunk/trunk
/Release1/Release1
リリース 1リリース 1
/Release2/Release2
リリース 2 に向けての作業リリース 2 に向けての作業
リリース 2リリース 2
リリース時はブランチを切ろう。Copyright 2008 Nulab inc. All Rights Reserved. 13
リリースブランチ(メンテナンス時)• リリースブランチをメンテナンス用のブ
ランチとしてそのまま利用する• バグの修正などを行い、 trunk にマージす
る(その逆もあり)
/trunk/trunk
/Release1.0/Release1.0
リリース 1リリース 1
リリース 2 に向けての作業リリース 2 に向けての作業
リリース 1.0.1リリース 1.0.1
メンテナンスは前回リリースブランチの最終状態から始める。Copyright 2008 Nulab inc. All Rights Reserved. 14
タスクブランチ• 大きな新機能追加や実験的なコード
を試すためのブランチ。– メインラインの開発に大きな影響を及
ぼす場合。– プロトタイプなど捨てられる可能性が
あるもの。
• 最終的にコードが採用となれば、マージしてメインラインに取り込まれる。
/trunk/trunk
/TaskBranche
/TaskBranche
実験的な作業実験的な作業
大きな変更はタスクブランチで安全に実験する。Copyright 2008 Nulab inc. All Rights Reserved. 15
タグ付け• リリース時にリリース用ブランチの HEAD (最
新)をタグ付けして、復元可能にしておく– 正式リリース– バグフィックスリリース
/trunk/trunk
/Release1/Release1
リリース 1リリース 1
/Release2/Release2
リリース 2 に向けての作業リリース 2 に向けての作業
リリース 2リリース 2
タグを付けて「リリース構成」を記録しましょう。忘れやすいのですぐにやること。 Copyright 2008 Nulab inc. All Rights Reserved. 16
タグ&ブランチの例
/project1 /branches /1.0.x ・・・リリースブランチ /1.1.x /postgresql-support ・・・タスクブランチ /tags /1.0.0 ・・・リリースタグ /1.0.1 /1.1.0 /trunk ・・・メインライン
/project1 /branches /1.0.x ・・・リリースブランチ /1.1.x /postgresql-support ・・・タスクブランチ /tags /1.0.0 ・・・リリースタグ /1.0.1 /1.1.0 /trunk ・・・メインライン
Copyright 2008 Nulab inc. All Rights Reserved. 17
マージ• ブランチからメインラインへ、
メインラインからブランチへ、変更を反映させる。
• トランクやブランチ間で変更した差分を、「作業コピー」に適用するだけ。
• ブランチをリポジトリ上で直接マージするわけではない。
/trunk/trunk 11
/Release1.0/Release1.0 33
44 66
55
22
マージ!
Copyright 2008 Nulab inc. All Rights Reserved. 18
マージの具体例
/trunk/trunk 11
/Release1.0/Release1.0 33
44 66
55
22
ABC
ABC
ABcD
ABcD
AcD
AcD
aBC
aBC
AcD
AcD
作業コピー作業コピー
①マージ先をチェックアウト
②マージ元の差分を適用
③競合が起きた場合は、手作業で修正④テストの実行
⑤マージ結果をコミット
マージは変更の差分を作業コピー適用するだけ!Copyright 2008 Nulab inc. All Rights Reserved. 19
Eclipse によるマージのデモ• trunk からブランチ (1.0.x)
svn cp svn://localhost/cubby-examples/trunk svn://localhost/cubby-examples/branches/1.0.x
• ブランチでの作業– 変更– コミット
• trunk での作業– ブランチ (1.0.x) の内容を作業コピーにマージ
svn marge -r FROM:TO svn://localhost/cubby-examples/branches/1.0.x
– 競合を解決svn resolved PATH
– コミット
Copyright 2008 Nulab inc. All Rights Reserved. 20
Subversion まとめ• 構成管理パターンで効果的な運用を行い
ましょう。• ブランチはポイントを絞って意識的に使
いましょう。• マージは概念を理解すると意外と簡単で
す。
Copyright 2008 Nulab inc. All Rights Reserved. 21
Maven2
構成管理とは?SubversionMaven2
Copyright 2008 Nulab inc. All Rights Reserved. 22
成果物成果物
Maven2 で何ができるの?
Maven2リポジトリ
依存ライブラリ管
理
依存ライブラリ管
理
Maven2
POM(プロジェクト定義ファイ
ル)
POM(プロジェクト定義ファイ
ル)
JARJAR
WARWAR
テストレポート
テストレポート
JavaDocJavaDoc
プロジェクトサイト
プロジェクトサイト
テストテスト
本番サーバ本番サーバ
コンパイル
コンパイル
パッケージング
パッケージング
サイト生成
サイト生成
リリースリリース
CI サーバ( Continuu
m )
CI サーバ( Continuu
m )
継続的ビルド継続的ビルド
JARJAR
Maven2 が構成管理をサポートするプロジェクト管理・ビルドツール。Copyright 2008 Nulab inc. All Rights Reserved. 23
Subversionリポジトリ
SCM連携SCM連携
構成管理で役立つポイントその①「ビルド手順が統一される」
• ビルドの手順(コマンド)が統一されているため、「誰でも」「いつでも」「どこでも」ビルドが可能に。
<<Seaser2 のビルド >>
svn co https://www.seasar.org/svn/s2container/tags/2008-01-25/seasar2-2.4.22/seasar2cd seasar2mvn clean package
svn co https://www.seasar.org/svn/s2container/tags/2008-01-25/seasar2-2.4.22/seasar2cd seasar2mvn clean package
<< 社内プロダクト Backlog のビルド >>
svn co ・・・・・ /backlog/tags/R20071225cd R2007-12-25 mvn clean package
svn co ・・・・・ /backlog/tags/R20071225cd R2007-12-25 mvn clean package
Maven2 を使うと誰でもどのプロジェクトでもビルドができるようになります。 Copyright 2008 Nulab inc. All Rights Reserved. 24
構成管理で役立つポイントその②「環境毎のビルドの自動化」
• プロファイル– 環境毎の設定やビルドプロセスを切り替える(フックする)仕組み
– -Pオプション。例: mvn clean package -P release-staging– DB の接続情報の書き換え、 DB データの初期化、モックによるハードウェアエミュレート
コンパイル テストパッケージン
グ
ステージング(テスト)リリース用
プロファイル
ステージング(テスト)リリース用
プロファイル
本番リリース用プロファイル本番リリース用プロファイル
CI ビルド用プロファイルCI ビルド用プロファイル
手作業で設定ファイルの書き換えはダメ、絶対ダメ。プロファイルを活用しましょう。 Copyright 2008 Nulab inc. All Rights Reserved. 25
ソース 成果物成果物
構成管理で役立つポイントその③「依存ライブラリの把握と管理」
• 依存ライブラリが依存するライブラリも芋づる式に管理。
依存ライブラリとそのバージョンを明示的に管理できるようになります。
<dependency> <groupId>struts </groupId> <artifactId>struts</artifactId> <version>1.2.9</version></dependency>
<dependency> <groupId>struts </groupId> <artifactId>struts</artifactId> <version>1.2.9</version></dependency>
<<pom.xml への記述例( Struts を使う場合) >>
Copyright 2008 Nulab inc. All Rights Reserved. 26
struts1.2.9struts1.2.9
commons-beanutils3.8.2
commons-beanutils3.8.2
commons-logging1.0
commons-logging1.0
commons-collection2.0
commons-collection2.0
servlet-api2.2
servlet-api2.2
commons-lang2.0
commons-lang2.0
Maven2 まとめ• Maven2 の枠組みに乗っかれば構成管理の
手法が統一され、楽になります。• 反面、導入、教育、基盤構築にきちんと時間をかけていく必要があります。
• 全社的に導入することで標準化のメリットが大きくなります。
Copyright 2008 Nulab inc. All Rights Reserved. 27
社内テスト用仮想サーバ社内テスト用仮想サーバ
CI& テストサーバCI& テストサーバ
開発用マシン開発用マシン
具体的な構成管理基盤構築例
Subversion サーバSubversion サーバ
社内リポジトリサーバ社内リポジトリサーバ
CI& テストサーバCI& テストサーバ
本番サーバ本番サーバ
コミット
成果物のデプロイ
ライブラリのダウンロード
社内ネットワーク
インターネット
SubversionSubversion
Apache HTTPApache HTTP
Apache HTTPApache HTTP
TomcatTomcat
ContinuumContinuum
Maven2Maven2
EclipseEclipse
SubversiveSubversive
Maven2Maven2
ソースのチェックアウトソースのチェックアウト
ライブラリのダウンロードライブラリのダウンロード
VMWare Server
VMWare Server
XENXEN
Maven2 セントラルリポジトリ
サードパーティリポジトリ
Maven2 セントラルリポジトリ
サードパーティリポジトリ
Apache HTTPApache HTTPライブラリのダウンロードライブラリのダウンロード
チェックアウト
SubversionSubversion
TomcatTomcat
Copyright 2008 Nulab inc. All Rights Reserved. 28
Apache ArchivaApache Archiva
or
社内リポジトリサーバ社内リポジトリサーバ
社内リポジトリ• 社内で作成したライブラリ
を登録するためのリポジトリ。
社内リポジトリで、社内のライブラリを簡単に利用可能に。Copyright 2008 Nulab inc. All Rights Reserved. 29
開発用マシン開発用マシン
Maven2 セントラルリポジトリサードパーティリポジトリ
Maven2 セントラルリポジトリサードパーティリポジトリ
デプロイ
社内ライブラリの JAR社内ライブラリの JAR
公開されていない JAR公開されていない JAR
公開されたライブラリのJAR
公開されたライブラリのJAR
開発用マシン開発用マシン
ローカルリポジトリローカル
リポジトリ ダウンロード
ローカルリポジトリローカル
リポジトリ
社内ネットワーク
インターネット
CI で開発ラインの故障をガード• CI(Continuous Integration) とは?
– 継続的・定期的に自動化されたテスト・ビルドを行うこと。
– 開発ラインの故障の即時発見→修理– 構成管理的には、安定が求められるコードラインの維持(メインライン)
– CI ツール: Apache Continuum など
開発者 Subversionリポジトリ
Continuumサーバ
②コミット②コミット
③コミットに連動して最新ソース
取得
③コミットに連動して最新ソース
取得
④ビルド・テスト
パッケージングデプロイ
④ビルド・テスト
パッケージングデプロイ
pom.xmlpom.xml
①登
録
⑤結果の通知⑤結果の通知
CI でコードラインの最新状態を見える化しましょう。Copyright 2008 Nulab inc. All Rights Reserved. 30
おわりに
Copyright 2008 Nulab inc. All Rights Reserved. 31
構成管理導入のポイント• まずはやってみる。
– 実践なくして実績無し。– サーバ構築や認証など細かい部分も多いので、すこしづつ試していくしかない。
• 修繕ではなく、修理をする。– その場しのぎではダメ。– 配管工事なので先送りされがち、今日やれることは今日やっておく。
• 余裕があるときに素振りすること。– 余裕がないときは、対処療法に終始しがち。– ノウハウや経験値を増やしておく。
• ノウハウややり方を共有したり、教える。– 達人だけが知っていることが多い。– 「構成管理は特別な人だけが知っていればよい」というものではない。– 例えば、新人研修に入れるなど。
• 経営者 / 管理者が必要性を認識する。– システム開発のアウトプットは「実行可能なソフトウェア」。– そのソフトウェアの基盤プロセスの整備により、効率化やリスクヘッジができ
ることを認識する。
Copyright 2008 Nulab inc. All Rights Reserved. 32
ご静聴ありがとうございました。• コンサルティング、トレーニングのご相談は下記連絡先まで。– 株式会社ヌーラボ– URL:http://www.nulab.co.jp/– Email:[email protected]
• Subversion が統合されたプロジェクト管理ツール「 Backlog 」については下記まで。– URL:http://www.backlog.jp/
Copyright 2008 Nulab inc. All Rights Reserved. 33
資料• Subversion
– Subversionhttp://subversion.tigris.org/
– Eclipsehttp://www.eclipse.org/
– Subversive(Eclipse Subversion プラグイン )http://www.eclipse.org/subversive/
• Maven2– Maven2
http://maven.apache.org/– Continuum ( CI サーバ)
http://maven.apache.org/continuum/– Archiva( 社内リポジトリ&プロキシーサーバ )
http://maven.apache.org/archiva/– Wagon( デプロイツール )
http://maven.apache.org/wagon/
Copyright 2008 Nulab inc. All Rights Reserved. 34
• Web 記事– 構成管理 実践入門( WEB+DB PRESS Vol.3
9 )http://www.nulab.co.jp/kousei/chapter1/01.html
• 書籍– パターンによるソフトウェア構成管理
http://www.amazon.co.jp/dp/4798112593– Subversion 実践入門
http://www.amazon.co.jp/dp/4274066800– Apache Maven 2.0入門
http://www.amazon.co.jp/dp/477412964X
Copyright
原著作者: Masahiro Hayatahttp://www.flickr.com/photos/mrhayata/392881756/
原著作者: Brian Solishttp://www.flickr.com/photos/briansolis/2246628132/
原著作者: piyush sarodehttp://www.flickr.com/photos/mrhayata/392881756/
原著作者: IzaD KasmijaNhttp://www.flickr.com/photos/hatemaster/933035138/
原著作者: sarflondondunchttp://www.flickr.com/photos/sarflondondunc/2180759074/
原著作者: Francescohttp://www.flickr.com/photos/panico_francesco/2235020848/
原著作者: 三角形 井上恵介http://www.freemap.jp/
Copyright 2008 Nulab inc. All Rights Reserved. 35