Slide 1

Slide 1 text

Gradle を使えるように Gradle を使えるように なるために なるために

Slide 2

Slide 2 text

目次 目次 Gradle とは とりあえず動かす Gradle を使えるようになるためにはどうすれば? 超シンプルな例 超シンプルな例を詳しく見てみる Android アプリプロジェクトのビルドスクリプト まとめ

Slide 3

Slide 3 text

Gradle とは Gradle とは JVM で動くビルドツール ビルドスクリプトをGroovy で書く ライブラリの依存関係管理もできる Spring など、Java のプロダクトのビルドで使われている Android アプリのビルドにも使われる(今後標準になる?)

Slide 4

Slide 4 text

Gradle を使えるようになるには Gradle を使えるようになるには どうすれば? どうすれば? ドキュメントを読もう! gradle--all.zip をDL すると手に入るサンプル でも何も分からない状態だとちょっと読みづらい・・・ 読むための知識を身につけよう! ユーザーガイド DSL リファレンス

Slide 5

Slide 5 text

とりあえず動かす とりあえず動かす Gradle をダウンロードしてパスを通して実行してみる

Slide 6

Slide 6 text

ビルドスクリプトはbuild.gradle にGroovy で書く build.gradle と同じディレクトリで実行してみる build.gradle に記述した通り"hogehoge" が出力されてる!

Slide 7

Slide 7 text

実際は、実行したい処理は タスク として記述する gradle でタスクを実行する -q オプションをつけるとタスクの出力のみを表示する

Slide 8

Slide 8 text

タスク一覧を表示。hoge 以外にも最初からいくつかある

Slide 9

Slide 9 text

タスク同士は依存関係を持つことができる fuga タスクはhoge タスクに依存している fuga タスクを実行すると、先にhoge タスクが実行される

Slide 10

Slide 10 text

tasks タスクの--all オプション タスクの依存関係も表示してくれる

Slide 11

Slide 11 text

ちょっとまとめ ちょっとまとめ build.gradle にビルドスクリプトを書く 処理はタスクという単位で書いたり実行したりする tasks タスクで(gradle tasks )実行できるタスクを確認でき る -q オプションでタスクの出力以外を表示しない タスク同士は依存関係を持てる gradle tasks --all で依存関係を確認できる

Slide 12

Slide 12 text

超シンプルな例 超シンプルな例 下記はJava をビルドするためのビルドスクリプト Groovy でスクリプトを書いていくと言うよりDSL を使って 設定を記述していくような感じ

Slide 13

Slide 13 text

プラグインの設定 プラグインによってタスクや設定項目が増える ユーザーガイド => Java プラグインでJava をビルドするタスクが増える Java プラグイン 他

Slide 14

Slide 14 text

ディレクトリ構成 Java プラグインを使うとき、以下のようなディレクトリ構 成になっていることが想定されている カスタマイズは可能 ユーザーガイド => Java クイックスタート ├── └── ├── │ ├── │ │ └── │ │ └── │ └── └── ├── └──

Slide 15

Slide 15 text

ライブラリの依存関係管理 repositories ライブラリをダウンロードしてくるMaven リポジトリを 指定する dependencies プロジェクトで使用するライブラリを指定する ユーザーガイド => 依存関係管理の基本

Slide 16

Slide 16 text

ちょっとまとめ ちょっとまとめ build.script には、Groovy でごりごり実装していくのではな くDSL を使って設定を記述していく感じ プラグインを使ってタスクを追加できる プラグインで何ができるかはユーザーガイドで調べること ができる Gradle でJava をビルドする場合は、デフォルトで想定され るディレクトリ構成がある Maven リポジトリを使ったライブラリの依存関係管理がで きる

Slide 17

Slide 17 text

超シンプルな例を詳しく見てみる 超シンプルな例を詳しく見てみる apply は何者? Project オブジェクトのapply() メソッド build.gradle ではProject オブジェクトのメソッドが呼べる DSL リファレンスで他のメソッドも分かる -> ただのメソッド呼び出しがGroovy のおかげで設定項目のよ うに見える メソッド呼び出しの() を省略できる メソッドの最後の引数がMap であるとき、名前付き引数 のように指定できる Project

Slide 18

Slide 18 text

repositories とdependencies もProject のメソッド クロージャを引数として受け取るメソッド DSL リファレンスに「スクリプトブロック」として書かれ ている クロージャとはJavaScript の無名関数のようなもの

Slide 19

Slide 19 text

じゃあmavenCentral() もProject のメソッド? 違う リファレンスを見てもProject にmavenCentral() はない じゃあ、誰のメソッドを呼び出しているのか?

Slide 20

Slide 20 text

DSL リファレンスで repositories スクリプトブロックを調べる "The RepositoryHandler is passed to the closure as the closure's delegate." Delegates to: RepositoryHandler from repositories [ 引用 ] Gradle ビルド言語リファレンス クロージャ内からRepositoryHandler にアクセスできる mavenCentral() メソッドは、RepositoryHandler オブジェク トのメソッド DSL リファレンス -> RepositoryHandler

Slide 21

Slide 21 text

なぜクロージャ内からRepositoryHandler の メソッドを呼べるのか? クロージャの暗黙的引数であるdelegate を利用している delegate 変数にRepositoryHandler オブジェクトが渡される "delegate" を省略してメソッド名のみで呼ぶことができる (this のように省略できる)。つまり、以下の2 つは同じ

Slide 22

Slide 22 text

ちょっとまとめ ちょっとまとめ build.gradle ではProject のメソッドが呼べる DSL リファレンスでProject を調べれば、build.gradle に何 を書けるのか分かる メソッドの中にはクロージャを渡せるものがあり、スクリ プトブロックとなる ブロック内(クロージャ)では、Project 以外のオブジェク トのメソッドも呼べる ブロック内から参照できるオブジェクトはDSL リファレ ンスの「Deletes to: 」を見ると分かる

Slide 23

Slide 23 text

Android アプリプロジェクトの Android アプリプロジェクトの ビルドスクリプト ビルドスクリプト Android Studio で作成したプロジェクトを見てみよう!

Slide 24

Slide 24 text

Gradle 関連のファイルをピックアップ

Slide 25

Slide 25 text

gradlew, gradlew.bat, gradle/ Gradle ラッパーという仕組みがある ユーザーガイド => gradlew コマンドを実行するとgradle-wrapper.properties に 書いてあるバージョンのGradle をダウンロードして使って くれる 各環境にあるgradle コマンドを使うのではなく、プロジェ クト上のgradlew を使うことで環境依存を減らせる Gradle ラッパー

Slide 26

Slide 26 text

build.gradle ビルドスクリプトを記述するファイル ビルドスクリプトが2 つあるのはなぜ?

Slide 27

Slide 27 text

マルチプロジェクト Gradle はサブプロジェクトを持つ階層型のプロジェクト構 成を定義できる Android ではマルチプロジェクト構成となっている Android 開発ではライブラリプロジェクトをサブプロジェク トとして追加していくことができる ユーザーガイド => マルチプロジェクトのJava ビルド

Slide 28

Slide 28 text

settings.gradle マルチプロジェクト構成におけるサブプロジェクトを定義 する

Slide 29

Slide 29 text

settings.gradle の中身 include は何者? Settings オブジェクトのinclude() メソッド settings.gradle ではSettings オブジェクトのメソッドが呼べ る DSL リファレンス -> Settings

Slide 30

Slide 30 text

build.gradle 中身を見てみよう!もう調べられるはず!

Slide 31

Slide 31 text

ちょっとまとめ ちょっとまとめ Gradle ラッパーで環境によらず同じバージョンのGradle を 使える Gradle ではマルチプロジェクト構成にできる サブプロジェクトはsettings.gradle で定義 settings.gradle ではSettings のメソッドが呼べる Android アプリ開発ではマルチプロジェクト構成になる

Slide 32

Slide 32 text

全体のまとめ 全体のまとめ Gradle では色々できる 何ができるかはドキュメントを読むと分かる だけど何も知らないとドキュメントは読みづらい 以下の点を知っておくと読みやすくなると思う Gradle にはおおまかにどんな機能があるか build.gradle に記述できる内容をどうやって調べるか

Slide 33

Slide 33 text

今日出てきたGradle の機能たち タスク プラグイン ライブラリの依存関係の管理 マルチプロジェクト Gradle ラッパー を見ると各機能について調べられる 標準的な各種プラグインで何ができるかもユーザーガイド を見れば分かる ユーザーガイド

Slide 34

Slide 34 text

build.script ではProject のメソッドが呼べる でProject を調べることでbuild.script に何 を書けるか分かる スクリプトブロック内では、delegate されたオブジェクト のメソッドも呼べる 何がdelegate されたのかはDSL リファレンスの各スクリ プトブロックの「Delegates to: 」を見れば分かる クロージャのdelegate 変数で実現してる マルチプロジェクト構成ではsettings.gradle も必要になる settings.gradle ではSettings のメソッドが呼べる DSL リファレンス

Slide 35

Slide 35 text

ドキュメントを読もう! gradle--all.zip をDL すると手に入るサンプル ユーザーガイド DSL リファレンス

Slide 36

Slide 36 text

おしまい おしまい