Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

bati11

May 08, 2014
Tweet

More Decks by bati11

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. ちょっとまとめ
    ちょっとまとめ
    build.gradle
    にビルドスクリプトを書く
    処理はタスクという単位で書いたり実行したりする
    tasks
    タスクで(gradle tasks
    )実行できるタスクを確認でき

    -q
    オプションでタスクの出力以外を表示しない
    タスク同士は依存関係を持てる
    gradle tasks --all
    で依存関係を確認できる

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. なぜクロージャ内からRepositoryHandler

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. gradlew, gradlew.bat, gradle/
    Gradle
    ラッパーという仕組みがある
    ユーザーガイド =>
    gradlew
    コマンドを実行するとgradle-wrapper.properties

    書いてあるバージョンのGradle
    をダウンロードして使って
    くれる
    各環境にあるgradle
    コマンドを使うのではなく、プロジェ
    クト上のgradlew
    を使うことで環境依存を減らせる
    Gradle
    ラッパー

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  29. settings.gradle
    の中身
    include
    は何者?
    Settings
    オブジェクトのinclude()
    メソッド
    settings.gradle
    ではSettings
    オブジェクトのメソッドが呼べ

    DSL
    リファレンス -> Settings

    View Slide

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

    View Slide

  31. ちょっとまとめ
    ちょっとまとめ
    Gradle
    ラッパーで環境によらず同じバージョンのGradle

    使える
    Gradle
    ではマルチプロジェクト構成にできる
    サブプロジェクトはsettings.gradle
    で定義
    settings.gradle
    ではSettings
    のメソッドが呼べる
    Android
    アプリ開発ではマルチプロジェクト構成になる

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. おしまい
    おしまい

    View Slide