agileツール適合化分科会(構成管理・ビルドツール)

22
1 Copyright (C) Masanori Kataoka All Rights Reserved. ソフトウェア構成管理・ ビルドツール 2014年10月17日 片岡 雅憲 2014/10/20 1 Agileツール適合化分科会(第2回)資料

Upload: masanori-kataoka

Post on 27-Jun-2015

244 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Agileツール適合化分科会(構成管理・ビルドツール)

1Copyright (C) Masanori Kataoka All Rights Reserved.

ソフトウェア構成管理・ビルドツール

2014年10月17日

片岡 雅憲

2014/10/201

Agileツール適合化分科会(第2回)資料

Page 2: Agileツール適合化分科会(構成管理・ビルドツール)

2Copyright (C) Masanori Kataoka All Rights Reserved.

<内容>

1.ソフトウェア構成管理技術とは2.バージョン管理から構成管理へ3.構成管理・ビルドツールの歴史構成管理・ビルドツールの歴史4.AntとIvy

5.Maven

6.新しい構成管理・ビルドツール7.Gradle

8.構成管理・ビルドの自動化での留意事項化での留意事項9.構成管理・ビルドツールのこれから<参考文献>

Page 3: Agileツール適合化分科会(構成管理・ビルドツール)

3Copyright (C) Masanori Kataoka All Rights Reserved.

ソフトウェア構成管理技術は、ソフトウェアの開発に必要とされるリソースを統合的に管理する技術である。

この技術は、次の技術から構成され、発展してきた。1) ソフトウェアリソースを開発チームのメンバー間で共有し、その変更履歴を管理する技術。また、この変更履歴とバージョンとの関係を管理する技術。

2) ソフトウェアの開発プロセスおよびビルド(作成)プロセス、デプロイ(提供)プロセスを自動化する技術。また、これらプロセス間をPOM(Project Object Model)モデルに基づき相互接続し、ワークフロー化する技術。

3) 上記ワークフローを反復型プロセスに発展させ、それを自動化して、総合的に改善するCI(Continuous Integration)およびCD(Continuous Delivery)技術。

Page 4: Agileツール適合化分科会(構成管理・ビルドツール)

4Copyright (C) Masanori Kataoka All Rights Reserved.

2.バージョン管理から構成管理へ

ソフトウェア構成管理では管理対象をソースコードに限定せずに、ソフトウェアに関連するあらゆるリソースに拡大して管理する。

1) ソースコードだけに限定せずに、開発対象ソフトウェアに関連するあらゆるファイルに拡大する(バイナリコード、テストプログラム/データ、環境情報、仕様情報 他)。

2) また、これらのファイル間の相互依存関係を管理する。3) プロジェクト間で共有する共有ソフトウェアファイルについて、その共有関係を管理する。また、外部から導入するソフトウェアについても、管理の対象とする。

4) ビルドとは、ソースコードを始めとする関連情報をまとめ上げ、動作可能なソフトウェアを構築する一連のプロセスである。ビルドツールは、上記1)~3)を支援する。

Page 5: Agileツール適合化分科会(構成管理・ビルドツール)

5Copyright (C) Masanori Kataoka All Rights Reserved.

構成管理・ビルドツールの主要な流れは次のように発展してきた。1) make: UNIXのコマンドとしてビルド機能を実現。したがって、OSに依存する。複雑なソフトウェアに対しては、複数回のコマンドを実行する必要がある。

2) Ant: コマンドの代わりに、Java, XMLで構造及びプロセスを記述する。したがって、クロスプラットフォームで利用が可能である。

3) Maven1: ビルド機能に限定せずにPOM(Project Object Model)

の考え方に基づき、ビルド、テスト、ドキュメンテーション、デプロイ等を含めたプロジェクトのライフサイクル全体を管理。構成管理システムとしての機能を持つ。

4) Maven2: Maven1の機能を継承しつつ、機能拡張、操作性向上、性能向上の面から改良。複数プロジェクトを取り扱うことが出来る。2005年に初出荷。

5) Maven3: Maven2と互換性を持つ。性能面、内部構造面で改良。2010年に初出荷。

3.構成管理・ビルドツールの歴史

Page 6: Agileツール適合化分科会(構成管理・ビルドツール)

6Copyright (C) Masanori Kataoka All Rights Reserved.

4.1 Ant

Antは、XMLでビルド(ソフトウェア構築)のルールを記述するビルドツールである。このため、OS など特定の環境に依存しにくいことを特徴としている。

Antでは、タスクと呼ばれる何種類ものXML要素をビルドファイル (デフォルトではbuild.xml) 上に記述してビルドのルールを作る。主なAnt

タスクの例は次の通りである。―javac: Javaソースコードをコンパイルする―javadoc: JavaソースコードからJavadocドキュメントを生成する―java: Javaプログラムを実行する—junit: JUnitを使ってJavaプログラムをテストする―junitreport: junitで出力した結果を用いてレポートを生成する―copy: ファイルをコピーする―delete: ディレクトリやファイルなどを削除する―mkdir: ディレクトリを作成する

4.AntとIvy

Page 7: Agileツール適合化分科会(構成管理・ビルドツール)

7Copyright (C) Masanori Kataoka All Rights Reserved.

4.2 Ivy

Antと共によく使われるツールとしてApache Ivyがある。Ivyは、ライブラリーの依存関係の管理に特化したツールである。Ivy

では、依存関係をビルドスクリプトに直接記述する代わりに、専用のファイルである ivy.xml 記述する。具体的には、<info>タグでモジュール名を記述し、<dependency>タグでこのモジュールが依存するライブラリー名称を記述する。このように、モジュールの依存関係を宣言しておけば、後はAntビルドファイルの任意の場所で<ivy:retreave>タグを記述することで、任意のディレクトリー配下に依存する(推移的な関連も含めて)jarファイルを自動的にダウンロードすることが出来る。

Ivyは、次節に述べるMavenの多様な機能群のうちから依存性管理の部分だけを切り出して特化したツールと言える。Mavenがあまりにも複雑で荷が重いと感じる開発者に愛用されている。Springフレームワークにおいても Ant + Ivy を活用している。

4.AntとIvy

Page 8: Agileツール適合化分科会(構成管理・ビルドツール)

8Copyright (C) Masanori Kataoka All Rights Reserved.

5.Maven

5.1 Mavenの特徴1) POM(Project Object Model)の考え方に基づき、ソフトウェア・プロジェクトのライフサイクル全体を標準化し、管理する。具体的には pom.xmlによりプロジェクト情報を管理する。

2) プロジェクトに関する標準のディレクトリ構成を持ち、その作成を容易化すると共に、理解し易いものにしている。Antにおいて必要とされる長たらしいXML記述から解放される。

3) Mavenは、小さなコア部分と大量のプラグインから構成されていて、このプラグインやライブラリは必要に応じて自動的にダウンロードされる。したがって、Mavenを使うにはネット環境が必要である。(Mavenを初めて起動するときには、これらプラグインやライブラリーをネット経由でダウンロードするためにかなりの起動時間がかかる。)

Page 9: Agileツール適合化分科会(構成管理・ビルドツール)

9Copyright (C) Masanori Kataoka All Rights Reserved.

5.Maven

5.1 Mavenの特徴(続き)4) プロジェクトの作成からコンパイル、テスト、パッケージング、デプロイ(公開、配布)等のタスクについての統一したビルドプロセスを提供していて、これらに伴う繰り返し作業を容易化している。また、プロジェクトおよびその成果物に関するレポート作成機能も提供している。Mavenコマンドの例を以下に示す。―mvn archetype:create プロジェクトの作成―mvn compile コンパイル―mvn test ユニットテスト―mvn javadoc:javadoc Javadocの作成―mvn site サイトの作成-mvn package JARファイルの作成(パッケージング)―mvn install ローカルリポジトリへのインストール―mvn deploy リモートリポジトリへの配備―mvn clean プロジェクトのクリーン(削除)

Page 10: Agileツール適合化分科会(構成管理・ビルドツール)

10Copyright (C) Masanori Kataoka All Rights Reserved.

5.2 MavenのアーキテクチャMavenは、POMの考え方により、図5.1に示すようにライフサイクル全体を管理する。

プロジェクトの作成

コンパイル

テストパッケージング

インストール

デプロイ(公開、配布)

ドキュメンテーション(サイトの作成、Javadocの作成)

リモートリポジトリ

ローカルリポジトリ

ライブラリプラグイン

5.Maven

図5.1 POMの考え方によるライフサイクル管理(参考文献1))

Page 11: Agileツール適合化分科会(構成管理・ビルドツール)

11Copyright (C) Masanori Kataoka All Rights Reserved.

5.Maven

5.3 Mavenによるプロジェクトの定義:次の情報を定義する―id

―name

―organization

―package

―description

―repository

―mailingLists

―developers

―contributors

―licenses

―dependencies :依存関係のある要素を記述し、自動インストール―build

―properties

―any element

Page 12: Agileツール適合化分科会(構成管理・ビルドツール)

12Copyright (C) Masanori Kataoka All Rights Reserved.

5.Maven

5.4 Mavenの標準ディレクトリの構成―src/main/java 作成するアプリケーション、ライブラリのソース―src/main/resources 作成するアプリケーション、ライブラリの

リソース―src/main/filters リソースに適用するフィルタ―src/main/assembly アセンブリ記述子、配布用ファイル(zipや

tar.gz等)の作成に関する情報である―src/config 設定ファイル―src/main/webapp Webアプリケーションに必要なソース―src/test/java テスト用のソースコード―src/test/resources テスト用のリソース―src/test/filters テスト用のリソースに適用するフィルタ―src/site サイトの作成に必要なファイル―LICENSE.text プロジェクトのライセンスを記述したファイル―README.text プロジェクトの説明を記述したファイル

src/config 設定ファイル。

Page 13: Agileツール適合化分科会(構成管理・ビルドツール)

13Copyright (C) Masanori Kataoka All Rights Reserved.

5.Maven

5.5 Mavenの課題Mavenは、プロジェクト構成管理ツールとして優れた機能を提供し、技術をリードしてきたが、次のような課題を抱えている。1) Mavenが提供する標準プロジェクト構成、POM構成、プロセス構成と異なることをしようとすると改造が困難である。(逆に、Mavenはそれだけ「標準化を徹底しようとしている」とも言える)

2) カスタマイズをする場合に、記述言語がXMLであるため記述が難しい。(作業が確定してしまえば、XMLを意識する必要がない)

3) 機能の多くがプラグインで実現されていてネットからダウンローする仕掛けだが、その品質が安定しない(不良が多い、デグレードが頻発する、設定パラメータが誤りやすい)ことがあった。すなわち、Mavenは仕掛けが大がかりであるためにすべてを正しく設定するために手間がかかる。また、間違いに対して親切でない。逆に、この困難を超えた後は、多くのメリットが得られる。

Page 14: Agileツール適合化分科会(構成管理・ビルドツール)

14Copyright (C) Masanori Kataoka All Rights Reserved.

6.新しい構成管理・ビルドツール

Ant, Maven の持つ課題を解決するべく、新しい構成管理・ビルドツールが開発されてきている。

1) Rake:

Antは、MakeのコマンドをXMLで置き換えることにより、ビルドスクリプトの記述し易さと記述能力を大幅に改善した。しかし、XMLの記述自体は、決してやさしいものではない。

Rakeは、XMLをRubyで置き換え、記述能力と記述し易さを大きく改善した。Antが外部DSL(Domain Specific Language)であるのに対して、Rakeは内部DSLであ る。したがって、必要とされるカスタマイズをRubyを使って自然に、かつRakeと矛盾することなく行うことが出来る。今後、急速に普及するものと思われる。

Rakeの最初の作者は、Jim Weirichである。Rubyを用いたプロジェクトでは、Rakeが標準的なビルドツールとして使われている。Ruby

以外のプロジェクトでもRakeは活用できるが、あまり普及していない。

Page 15: Agileツール適合化分科会(構成管理・ビルドツール)

15Copyright (C) Masanori Kataoka All Rights Reserved.

6.新しい構成管理・ビルドツール

2) Buildr

Buildrの開発者Assaf Arkin氏は、Mavenの不安定さを改善する目的でBuildrを開発した。Buildrは内部でRakeを使っていて、Rake

の機能は全て使えるようにしてある。また、Buildrは、Maven2と同じ記述法(Convention)で、その機能を実現している。これにより、カスタマイズの容易性が大幅に改善されている。そして、性能的にもMavenよりも優れている。(Mavenの方でも、2010年にMaven2と互換性を持ち、性能的に改善されたMaven3が出荷された。)3) Gradle

Gradle 1.0は 2012年6月に公開された新しいOSSである。記述言語はGroovyである。Mavenの機能をすべて包含し、かつ、はるかに拡張性、柔軟性に優れていると評判である。GradleはMavenの難しさを解決すると期待されている。(詳細は,次の7.を参照)

Page 16: Agileツール適合化分科会(構成管理・ビルドツール)

16Copyright (C) Masanori Kataoka All Rights Reserved.

7.Gradle

7.1 Gradleの特徴Gradleは、スクリプト言語Groovyを用いてビルドスクリプトを記述するビルドツールである。Gradleには、次のような特徴を持っている。①JavaVM上で動作する②Mavenと同様にPOM(Project Object Model)に基づき、プロジェクトのライフサイクル全体をカバーしている③ビルドスクリプトをGroovyのDSL(Domain Specific Language)で簡潔に記述することができる。また、DSLで記述が困難な部分は、Groovyを用いて、カスタマイズが出来る。Groovy自身は、Javaの知識があれば簡単に習得できる。(Groovy≒Java + Ruby)

④多様な関連ツールと連携するためのプラグインで用意されている⑤Mavenのリポジトリを利用することができる。また、Antの資産をそのまま活用することが出来る。上述したように、GradleはMavenを超える機能を持ちながら、それをカスタマイズする場合にはMavenよりも柔軟に対応出来る。

Page 17: Agileツール適合化分科会(構成管理・ビルドツール)

17Copyright (C) Masanori Kataoka All Rights Reserved.

7.Gradle

7.2 GradleタスクGradleの作業単位はタスクと呼ばれており、標準的なタスクとして表7.1に示すものが用意されている。

表7.1 Gradleの標準タスク(1)

タスク名称 説明

assemble コンパイルを実行しJAR、WAR、ZIP、TARファイルなどを作る

build assemble後にテストを実行する

buildDependents そのプロジェクト“が”依存するプロジェクトを含めbuildを実行する

classes メインクラスをassembleする

clean 成果物(buildディレクトリ配下)を削除する

compileJava プロダクトのコンパイルを行う

compileTestJava テストコードをコンパイルする

jar メインクラスを含むJarファイルを作成する

processResources プロダクトのリソースをクラスディレクトリにコピーする

processTestResources テストリソースをテストクラスディレクトリにコピーする

Page 18: Agileツール適合化分科会(構成管理・ビルドツール)

18Copyright (C) Masanori Kataoka All Rights Reserved.

7.Gradle

7.2 Gradleタスク(続き)表7.1 Gradleの標準タスク(2)

タスク名称 説明

testClasses テストクラスをassembleする

uploadArchives 成果物をアップロードする

check testを含む検証タスクを実行する

test ユニットテストを実行する

javadoc Javadocを生成する

dependencies プロジェクトが利用するライブラリを表示する

help ヘルプメッセージを表示する

projects サブプロジェクトを表示する

properties プロジェクトのプロパティを表示する

tasks 実行可能なタスクを表示する

Page 19: Agileツール適合化分科会(構成管理・ビルドツール)

19Copyright (C) Masanori Kataoka All Rights Reserved.

7.Gradle

7.3 Gradleタスクの相互依存関係表7.1に示した主なGradleタスクの相互依存関係を図7.1に示す。このような依存関係に基づき、gradle build を実行すると、必要なタスクが次々に実行され、ビルドが完了する。

図7.1 Gradleタスクの相互依存関係(参考文献3))

Page 20: Agileツール適合化分科会(構成管理・ビルドツール)

20Copyright (C) Masanori Kataoka All Rights Reserved.

構成管理・ビルドを自動化するに当たり、下記に留意する必要がある。1) コマンド1つでビルドを実行する。2) 複数環境へのデプロイに対応する。3) ビルドスクリプトをIDE(開発支援環境)から分離する(IDE非依存にする)。

4) ソフトウェア資産を集中管理する(全ての資産をPOMリポジトリ配下で管理する)。

5) 一貫したディレクトリ構造を作る。6) 失敗し易いビルドプロセスから始める(例えば、変更したソースコードのコンパイルから始める)。

7) 構成管理・ビルドの自動化は手間のかかる仕事であるが、一旦プロジェクトとしてそれを確立してしまえば、極めて効果が大きい。

8) ビルド・構成管理専用マシンを用意し、使用する(ビルドマシンは他の目的で使わせない)。

8.構成管理・ビルドの自動化での留意事項

Page 21: Agileツール適合化分科会(構成管理・ビルドツール)

21Copyright (C) Masanori Kataoka All Rights Reserved.

最後に、本稿をまとめると次のようになる。1)makeに始まり、Ant, Mavenと発展してきて、構成管理・ビルドツールの基礎が固められた。Ant, Mavenは今なお主要なツールであり、デファクトスタンダードである。

2)Ant, MavenはXMLベースであることから、プラットフォーム非依存ではあるが記述が煩雑であり、カスタマイズがやりにくいとの問題があった。

3)Rake, Buildr は、この問題を解決すべくXMLをRubyで置き換えて、記述性とカスタマイズの容易性を改善した。しかしながら、これらのツールはRubyプロジェクトでは、デファクトスタンダードになったものの、その外では普及しなかった。

4)新しいGradleでは、記述言語をGroovyとすることにより、これを解決しようとしている。Groovyは、Rubyと同様の動的スクリプト言語であり、また、Javaとの親和性も高い。カスタマイズの容易性を売り物にしていて、今後の普及が期待されている。

9.構成管理・ビルドツールのこれから

Page 22: Agileツール適合化分科会(構成管理・ビルドツール)

22Copyright (C) Masanori Kataoka All Rights Reserved.

1) 「2. Maven入門 TECHSCORE」www.techscore.com/tech/Java/ApacheJakarta/Maven/2

2) “Gradle User Guide” Hans Dockter, Adam Murdoch 2007-2012

Hayashi Masatoshi,Sekiya Kazuchika, Sue Nobuhiro, Mochida Shinya(訳)http://gradle.monochromeroad.com/docs/userguide/userguide.html

3) 「ビルドツールGradleスタートアップガイドの紹介」 鈴木雅貴 2013年http://www.ntts.co.jp/publish/column/tec/java_03/index.html