devsumi2008

35
縣縣 縣縣 株株株株株株株株 株株株 株株株株株株株株 株株株 The Seasar Foundation The Seasar Foundation 14-E-3 Subversion Subversion Maven 2 Maven 2 縣縣縣縣縣縣縣 縣縣縣縣縣縣縣 縣縣縣縣縣縣縣 縣縣縣縣 縣縣縣縣縣 縣縣縣 ・・・ 縣縣縣縣縣縣縣 縣縣縣縣 縣縣縣縣縣 縣縣縣 ・・・ Copyright 2008 Nulab inc. All Rights Reserved.

Upload: agata-toshikata

Post on 15-Jan-2015

3.392 views

Category:

Documents


5 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Devsumi2008

縣 俊貴縣 俊貴株式会社ヌーラボ 取締役株式会社ヌーラボ 取締役The Seasar FoundationThe Seasar Foundation

14-E-3

SubversionSubversion とと Maven 2Maven 2による構成管理による構成管理

〜〜バージョン管理・ビルド・リリース・自動化バージョン管理・ビルド・リリース・自動化〜〜

Copyright 2008 Nulab inc. All Rights Reserved.

Page 2: Devsumi2008

最初に自己紹介• 縣俊貴(あがたとしたか)

• OSS 活動

• 執筆

• Blog• アガテナ http://d.hatena.ne.jp/agt/

Copyright 2008 Nulab inc. All Rights Reserved. 2

http://www.backlog.jp/本社:福岡市

アジャイル開発の

アジャイル開発の

Page 3: Devsumi2008

アジェンダ• 構成管理とは?

– なぜ今構成管理なのか?• Subversion

– 構成管理の実践的な運用パターン• Maven2

– Maven2 で構成管理

Copyright 2008 Nulab inc. All Rights Reserved. 3

Page 4: Devsumi2008

Copyright 2008 Nulab inc. All Rights Reserved. 4

Page 5: Devsumi2008

構成管理とは?

構成管理とは?SubversionMaven2

Copyright 2008 Nulab inc. All Rights Reserved. 5

Page 6: Devsumi2008

身の回りにこんな問題ありませんか?

構成管理に対しての意識を高めていかないと、問題は永遠に解決しません。Copyright 2008 Nulab inc. All Rights Reserved. 6

田中リーダー

佐藤鈴木

Page 7: Devsumi2008

構成管理って簡単にいうと何?• ソフトウェア構成管理

(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

・リリースの構成を把握・任意のバージョンの を再作成

ソース

成果物

Page 8: Devsumi2008

で、なぜ今構成管理なの?

自動化自動化

昔と比べて効率化や品質保証に関して手法が普及してきた。

昔と比べて効率化や品質保証に関して手法が普及してきた。

次に開発全体の中で大きく改善できるポイント。次に開発全体の中で大きく改善できるポイント。

構成管理を「なんとなく」から「意識的」にして、ソフトウェアの安全で迅速な提供を Copyright 2008 Nulab inc. All Rights Reserved. 8

Page 9: Devsumi2008

Subversion

構成管理とは?SubversionMaven2

Copyright 2008 Nulab inc. All Rights Reserved. 9

Page 10: Devsumi2008

Subversion の特徴

Subversion は構成管理に最適なバージョン管理ツール!

項目 CVS Subversion

ディレクトリの移動・削除

未サポート サポート

ブランチ化 全コピー・コスト大 参照コピー・コスト小

通信方式 独自プロトコル、 SSH 独自プロトコル、 SSH 、 HTTP

リビジョン番号の単位 ファイル毎 ツリー全体Copyright 2008 Nulab inc. All Rights Reserved. 10

SVN問題点の改善問題点の改善 ・ブランチのコストがほぼ0。・ツリー全体でリビジョンを管理。 ある瞬間の状態のソースツリー 取得が簡単

• 構成管理をサポートしやすいバージョン管理システム

Page 11: Devsumi2008

Subversion を使った構成管理の実践パターン

• 構成管理にもパターン• パターンを知ることで、

– 意識的に構成管理ができる– 開発者間の共通認識ができる

• 基本パターンを紹介– メインライン– リリースブランチ– タスクブランチ

構成管理のパターンを知ると構成管理を自信を持って行えるようになります。 Copyright 2008 Nulab inc. All Rights Reserved. 11

Page 12: Devsumi2008

メインライン

/trunk/trunk

/Release1/Release1

リリース 1リリース 1

/Release2/Release2

リリース 2 に向けての作業リリース 2 に向けての作業

リリース 2リリース 2

• 開発の本流をひとつに保つ。– 最新の開発はメインラインに対して行う。– 開発プロセスの簡略化・効率化。– ブランチ・マージのコストを最小限に。

• ルール– メインラインはビルドできる状態を保つ。– ブランチはメインラインからおこなう。– ブランチのブランチはおこなわない。– ブランチしたらなるべく早くメインラインに戻す。

メインラインを使うと、開発がシンプルになります。ブランチは必要なときだけ意識的に。 Copyright 2008 Nulab inc. All Rights Reserved. 12

Page 13: Devsumi2008

リリースブランチ• 特定のリリース作業向けのブラ

ンチ。– ブランチ=並行作業のためのコードライ

ンの分岐。– リリース期間中もメインラインの開発を止めない。

– リリース専用ラインで安全にリリース作業を進めることができる。

– リリースブランチでの修正は、メインラインにマージする。

/trunk/trunk

/Release1/Release1

リリース 1リリース 1

/Release2/Release2

リリース 2 に向けての作業リリース 2 に向けての作業

リリース 2リリース 2

リリース時はブランチを切ろう。Copyright 2008 Nulab inc. All Rights Reserved. 13

Page 14: Devsumi2008

リリースブランチ(メンテナンス時)• リリースブランチをメンテナンス用のブ

ランチとしてそのまま利用する• バグの修正などを行い、 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

Page 15: Devsumi2008

タスクブランチ• 大きな新機能追加や実験的なコード

を試すためのブランチ。– メインラインの開発に大きな影響を及

ぼす場合。– プロトタイプなど捨てられる可能性が

あるもの。

• 最終的にコードが採用となれば、マージしてメインラインに取り込まれる。

/trunk/trunk

/TaskBranche

/TaskBranche

実験的な作業実験的な作業

大きな変更はタスクブランチで安全に実験する。Copyright 2008 Nulab inc. All Rights Reserved. 15

Page 16: Devsumi2008

タグ付け• リリース時にリリース用ブランチの HEAD (最

新)をタグ付けして、復元可能にしておく– 正式リリース– バグフィックスリリース

/trunk/trunk

/Release1/Release1

リリース 1リリース 1

/Release2/Release2

リリース 2 に向けての作業リリース 2 に向けての作業

リリース 2リリース 2

タグを付けて「リリース構成」を記録しましょう。忘れやすいのですぐにやること。 Copyright 2008 Nulab inc. All Rights Reserved. 16

Page 17: Devsumi2008

タグ&ブランチの例

/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

Page 18: Devsumi2008

マージ• ブランチからメインラインへ、

メインラインからブランチへ、変更を反映させる。

• トランクやブランチ間で変更した差分を、「作業コピー」に適用するだけ。

• ブランチをリポジトリ上で直接マージするわけではない。

/trunk/trunk 11

/Release1.0/Release1.0 33

44 66

55

22

マージ!

Copyright 2008 Nulab inc. All Rights Reserved. 18

Page 19: Devsumi2008

マージの具体例

/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

Page 20: Devsumi2008

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

Page 21: Devsumi2008

Subversion まとめ• 構成管理パターンで効果的な運用を行い

ましょう。• ブランチはポイントを絞って意識的に使

いましょう。• マージは概念を理解すると意外と簡単で

す。

Copyright 2008 Nulab inc. All Rights Reserved. 21

Page 22: Devsumi2008

Maven2

構成管理とは?SubversionMaven2

Copyright 2008 Nulab inc. All Rights Reserved. 22

Page 23: Devsumi2008

成果物成果物

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連携

Page 24: Devsumi2008

構成管理で役立つポイントその①「ビルド手順が統一される」

• ビルドの手順(コマンド)が統一されているため、「誰でも」「いつでも」「どこでも」ビルドが可能に。

<<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

Page 25: Devsumi2008

構成管理で役立つポイントその②「環境毎のビルドの自動化」

• プロファイル– 環境毎の設定やビルドプロセスを切り替える(フックする)仕組み

– -Pオプション。例: mvn clean package -P release-staging– DB の接続情報の書き換え、 DB データの初期化、モックによるハードウェアエミュレート

コンパイル テストパッケージン

ステージング(テスト)リリース用

プロファイル

ステージング(テスト)リリース用

プロファイル

本番リリース用プロファイル本番リリース用プロファイル

CI ビルド用プロファイルCI ビルド用プロファイル

手作業で設定ファイルの書き換えはダメ、絶対ダメ。プロファイルを活用しましょう。 Copyright 2008 Nulab inc. All Rights Reserved. 25

ソース 成果物成果物

Page 26: Devsumi2008

構成管理で役立つポイントその③「依存ライブラリの把握と管理」

• 依存ライブラリが依存するライブラリも芋づる式に管理。

依存ライブラリとそのバージョンを明示的に管理できるようになります。

<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

Page 27: Devsumi2008

Maven2 まとめ• Maven2 の枠組みに乗っかれば構成管理の

手法が統一され、楽になります。• 反面、導入、教育、基盤構築にきちんと時間をかけていく必要があります。

• 全社的に導入することで標準化のメリットが大きくなります。

Copyright 2008 Nulab inc. All Rights Reserved. 27

Page 28: Devsumi2008

社内テスト用仮想サーバ社内テスト用仮想サーバ

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

Page 29: Devsumi2008

社内リポジトリサーバ社内リポジトリサーバ

社内リポジトリ• 社内で作成したライブラリ

を登録するためのリポジトリ。

社内リポジトリで、社内のライブラリを簡単に利用可能に。Copyright 2008 Nulab inc. All Rights Reserved. 29

開発用マシン開発用マシン

Maven2 セントラルリポジトリサードパーティリポジトリ

Maven2 セントラルリポジトリサードパーティリポジトリ

デプロイ

社内ライブラリの JAR社内ライブラリの JAR

公開されていない JAR公開されていない JAR

公開されたライブラリのJAR

公開されたライブラリのJAR

開発用マシン開発用マシン

ローカルリポジトリローカル

リポジトリ ダウンロード

ローカルリポジトリローカル

リポジトリ

社内ネットワーク

インターネット

Page 30: Devsumi2008

CI で開発ラインの故障をガード• CI(Continuous Integration) とは?

– 継続的・定期的に自動化されたテスト・ビルドを行うこと。

– 開発ラインの故障の即時発見→修理– 構成管理的には、安定が求められるコードラインの維持(メインライン)

– CI ツール: Apache Continuum など

開発者 Subversionリポジトリ

Continuumサーバ

②コミット②コミット

③コミットに連動して最新ソース

取得

③コミットに連動して最新ソース

取得

④ビルド・テスト

パッケージングデプロイ

④ビルド・テスト

パッケージングデプロイ

pom.xmlpom.xml

①登

⑤結果の通知⑤結果の通知

CI でコードラインの最新状態を見える化しましょう。Copyright 2008 Nulab inc. All Rights Reserved. 30

Page 31: Devsumi2008

おわりに

Copyright 2008 Nulab inc. All Rights Reserved. 31

Page 32: Devsumi2008

構成管理導入のポイント• まずはやってみる。

– 実践なくして実績無し。– サーバ構築や認証など細かい部分も多いので、すこしづつ試していくしかない。

• 修繕ではなく、修理をする。– その場しのぎではダメ。– 配管工事なので先送りされがち、今日やれることは今日やっておく。

• 余裕があるときに素振りすること。– 余裕がないときは、対処療法に終始しがち。– ノウハウや経験値を増やしておく。

• ノウハウややり方を共有したり、教える。– 達人だけが知っていることが多い。– 「構成管理は特別な人だけが知っていればよい」というものではない。– 例えば、新人研修に入れるなど。

• 経営者 / 管理者が必要性を認識する。– システム開発のアウトプットは「実行可能なソフトウェア」。– そのソフトウェアの基盤プロセスの整備により、効率化やリスクヘッジができ

ることを認識する。

Copyright 2008 Nulab inc. All Rights Reserved. 32

Page 33: Devsumi2008

ご静聴ありがとうございました。• コンサルティング、トレーニングのご相談は下記連絡先まで。– 株式会社ヌーラボ– URL:http://www.nulab.co.jp/– Email:[email protected]

• Subversion が統合されたプロジェクト管理ツール「 Backlog 」については下記まで。– URL:http://www.backlog.jp/

Copyright 2008 Nulab inc. All Rights Reserved. 33

Page 34: Devsumi2008

資料• 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

Page 35: Devsumi2008

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