Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Gradle入門

2,850 views

Published on

2015/11/20 Javaツール勉強会@福岡の発表資料

Published in: Software
  • Be the first to comment

Gradle入門

  1. 1. Gradle入門 2015/11/20 Javaツール勉強会@福岡 李充根
  2. 2. 自己紹介 • 名前:李充根(リ・チュングン) • HN:りぐん(ligun) • Twitter:@choonggeun • FB:choonggeun • GitHub:ligun • 使用言語:Java、C#、Groovy • PO(Precure Ojisan)、PDDエンジニア – groovycure • https://github.com/ligun/groovycure/ – http://momozono.love • 最近OSSにプルリク送ったりQiitaに投稿したりしています 2015/11/20 Javaツール勉強会@福岡 2
  3. 3. はじめに • Ant、Maven使ったことありません – はじめて触ったビルドツールがGradleってだけなので 詳細な比較や使用感の違いとかは説明できません – Gradle触り始めたきっかけはビルドツールが必要に なった時一番新しそうなのがGradleだったってのと、も ともとGroovy使いだったから 2015/11/20 Javaツール勉強会@福岡 3
  4. 4. Gradleとは? • 比較的後発なJava、JVM言語用ビルドツール – Java以外にもGroovy、ScalaなどのJVM言語、試験的 なプラグインだがC/C++なども扱うことができる • Gradle自体はGroovyで作られたDSL – そのためJavaと似た文法で独自タスクを定義できる • 現在2.9まで正式版が出ている – もうすぐ3.0にバージョンアップ • 少し記述が変わるかも • Android Studioで標準対応してから一般的になった? 2015/11/20 Javaツール勉強会@福岡 4
  5. 5. 他のビルドツールとの違い • XMLではなく独自DSL – 設定ではなく処理 – 見やすい(人による?) – 拡張性が高い • DSLとしての書き方を覚えなければならない • 依存関係の管理は内部的にApache Ivyを使用している • Gradle Wrapperを使用するとGradleをインストールして いないPCでもビルドできる – CIツールに導入する時に楽 • Ant、Mavenとできる事自体大きく違わないけど楽できる 2015/11/20 Javaツール勉強会@福岡 5
  6. 6. 導入方法 • 各OS – GradleのページからZIPで落とす • Unix、Linux、Cygwin – SDKMANを導入する(こっちがおすすめ) • SDKMANとは? – 元々GVMと名乗っててGroovy系ツールをバージョン管理で きる、Rubyで言うRVMやrbenvのようなもの – 最近名前が変わって(Go用のアレと名前かぶってたせい)、 Groovy以外にもJVMの各ツールが導入できるようになった • Scala、Ceylon、Maven、Spring Boot、etc… 2015/11/20 Javaツール勉強会@福岡 6
  7. 7. SDKMANを使った導入 • SDKMANインストール $ curl -s get.sdkman.io | bash • 端末再起動 • Gradleインストール $ sdk install gradle • 確認 $ gradle --version • その他SDKMANの使い方などは下記参考 – http://sdkman.io 2015/11/20 Javaツール勉強会@福岡 7
  8. 8. Gradle事始め • Gradleプロジェクトを作ってみる – プロジェクト名:gradlesample1 • ディレクトリ作成 $ mkdir gradlesample1 • Gradleプロジェクト作成 $ cd gradlesample1 $ gradle init • 下記のようなディレクトリ構成になる gradlesample1 ├── build.gradle ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle Gradle Wrapper本体 Gradleスクリプト マルチプロジェクト用 設定ファイル Gradle Wrapper用シェルファイル 2015/11/20 Javaツール勉強会@福岡 8
  9. 9. Gradleでビルド • 最低限必要なのは – build.gradle • ここにタスクなどを書く – Javaプロジェクトの場合下記のように書けば良い apply plugin: ‘java‘ repositories { jcenter() } dependencies { compile 'org.slf4j:slf4j-api:1.7.7' testCompile ‘junit:junit:4.11’ } 2015/11/20 Javaツール勉強会@福岡 9
  10. 10. スクリプト説明 • apply plugin – 必要なGradleプラグインを適用する • 今回はJavaプロジェクトなのでJava • その他例えばIntelliJで使いたいときはideaプラグインも適用すると便利 • repositories – 使用するMavenリポジトリ • jcenterを選択して問題ない(mavenCentralも書くことできるけど基本的に jcenterにあるので意味ないかも) • サードパーティなリポジトリもURL定義すれば使えます • dependencies – ビルド時やテスト時に必要なライブラリを定義します • ロガーとしてSLF4J、テスト時にJUnit4を使えるようにしています – compile → プロダクトコードビルド時に必要なライブラリ(slf4jやlogback等) – testCompile → テストで必要なライブラリ(テスティングフレームワーク等) – その他プラグインによって他の定義もある 2015/11/20 Javaツール勉強会@福岡 10
  11. 11. ソースコードの階層 • ソースディレクトリはGradleプロジェクトディレクトリ以下 に次のような階層にすると自動的に読み込まれる src ├── main │ └── java │ └── packagename └── test └── java └── packagename • Mainにプロダクトコード、testにテストコードを記述する 2015/11/20 Javaツール勉強会@福岡 11
  12. 12. ビルドの実行 • build.gradleのあるディレクトリで下記コマンドを入力 $ gradle build 各プロセスが走り、正常にビルドされると「BUILD SUCCESSFUL」と表示される • テストを実行したい場合は $ gradle test と入力する 2015/11/20 Javaツール勉強会@福岡 12
  13. 13. Lazybonesを使った新規作成時の 時間節約 • Gradleでプロジェクトを作る度にソースディレクトリの階層 を作ったり、初期スクリプトを書くのは面倒ですよね • IDEを使うと低減されることもありますが、社内だけで定 型化されているようなものまでは自動化できませんよね • Lazybonesというツールを使えばこれが可能になります • 簡単に言うと予め用意されたGradle用のテンプレートを呼 び出すだけで使えるようにするツールです 2015/11/20 Javaツール勉強会@福岡 13
  14. 14. Lazybonesの導入 • SDKMANを使ってインストールできる $ sdk install lazybones • Lazybonesを使ってGradleプロジェクトを作成 $ lazybones create java-basic projectname • projectnameディレクトリができていて下記のような階層になっている projectname ├── build.gradle ├── gradle.properties ├── README.md └── src ├── main │ └── java └── test └── java 2015/11/20 Javaツール勉強会@福岡 14
  15. 15. Lazybonesの使い方 • build.gradleには最低限の記述が書かれている • java-basic以外のテンプレートは「lazybones list」を実行 するとみることができる • その他標準テンプレート以外にもLazybonesの設定に自分 のリポジトリを追加することでオリジナルなテンプレートを 作成することもできる – 例えば毎回使うツールが決まっていて JUnit+SLF4J+Logbackを使うといった場合、更にパッ ケージ名は会社のドメインとかだと、それが設定され ているテンプレートを作るととても便利になる 2015/11/20 Javaツール勉強会@福岡 15
  16. 16. Gradleでスクリプトを実行する • Gradleではタスクを自由に定義できる – 例えばbuild.gradleに次のように記述する task hello << { println “hello world” } – gradle helloを実行すると「hello world」が出力される …… • これだけだと何が嬉しいかいまいちわからない 2015/11/20 Javaツール勉強会@福岡 16
  17. 17. Gradleタスクのための例題 • まずは前提 – Javaで実行可能なJarを起動するときこう書きますよね java –jar hoge.jar – 実はこの時Jarファイルの先頭にゴミデータが有っても javaコマンドはよしなに扱ってくれます – そのため次のようなシェルスクリプトを先頭に書いて Jarを結合するとあたかも通常のコマンドのように扱え ます #!/bin/sh java –jar "$0" "$@“ exit $? 2015/11/20 Javaツール勉強会@福岡 17
  18. 18. Gradleタスクのための例題 • このようなファイルを作るにはシェルスクリプトを書けば簡単で す(先ほどのシェルスクリプトをbootstrap.shとして) $ cat bootstrap.sh hoge.jar > hoge • このようにしてhogeファイルを/usr/local/binあたりにでも突っ 込めばコマンド実行できます • これをGradleタスクとして定義し、Gradleコマンドから作成で きるようにするとビルド時に一緒に吐き出せて便利ですよね – Gradleだと環境に依存しない – ちなみに一つにまとめるのではなくJarとキッカースクリプト の形でなら標準のapplicationプラグインを使えば「gradle installDist」コマンドで作成できます 2015/11/20 Javaツール勉強会@福岡 18
  19. 19. 時間が余ったら説明 • スクリプト – https://gist.github.com/ligun/1294b32ddf6fbdabfce3 • task jarsh – 今回定義するタスク • 通常のJarではなく依存ライブラリも含めたものを作成 • Jarの名前は「projectname-fullpack.jar」 – 処理内容は以下のとおり • フルパックJarを作成 • jarshディレクトリを作成 • jarshディレクトリにbootstrapとJarを固めたものをUnix用と Linux用両方を作成 2015/11/20 Javaツール勉強会@福岡 19
  20. 20. おわりに • 色々と駆け足で説明しましたがやってみたら簡単です – ビルドツールあまり使ったことなかった自分でも自力で ある程度扱えるようになりました • 一度Antやろうと思ったことありましたが、その時は理解でき ずに諦めた記憶が…… • Javaっぽい(比較的)見慣れたDSLで定義できます – Groovyを覚えていたらより便利になりますがJava文法 で書いても実行できるので最初はJavaで処理しても問 題ありません • 次回もSpockとかGroovy製の便利なフレームワークを紹介 できたらいいな 2015/11/20 Javaツール勉強会@福岡 20
  21. 21. ご清聴ありがとうございました 2015/11/20 Javaツール勉強会@福岡 21

×