21
Gradle 入入 2015/11/20 Java 入入入入入入 入入 入入入

Gradle入門

Embed Size (px)

Citation preview

Page 1: Gradle入門

Gradle入門

2015/11/20 Javaツール勉強会@福岡李充根

Page 2: Gradle入門

自己紹介

• 名前:李充根 (リ・チュングン )• 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

Page 3: Gradle入門

はじめに

• Ant、Maven使ったことありません– はじめて触ったビルドツールが Gradleってだけなので詳細な比較や使用感の違いとかは説明できません

– Gradle触り始めたきっかけはビルドツールが必要になった時一番新しそうなのが Gradleだったってのと、もともと Groovy使いだったから

2015/11/20 Javaツール勉強会@福岡 3

Page 4: Gradle入門

Gradleとは?

• 比較的後発な Java、 JVM言語用ビルドツール– Java以外にも Groovy、 Scalaなどの JVM言語、試験的なプラグインだが C/C++なども扱うことができる

• Gradle自体は Groovyで作られた DSL– そのため Javaと似た文法で独自タスクを定義できる

• 現在 2.9まで正式版が出ている– もうすぐ 3.0にバージョンアップ

• 少し記述が変わるかも• Android Studioで標準対応してから一般的になった?

2015/11/20 Javaツール勉強会@福岡 4

Page 5: Gradle入門

他のビルドツールとの違い

• XMLではなく独自 DSL– 設定ではなく処理– 見やすい (人による? )– 拡張性が高い

• DSLとしての書き方を覚えなければならない• 依存関係の管理は内部的に Apache Ivyを使用している• Gradle Wrapperを使用すると Gradleをインストールしていない PCでもビルドできる– CIツールに導入する時に楽

• Ant、Mavenとできる事自体大きく違わないけど楽できる

2015/11/20 Javaツール勉強会@福岡 5

Page 6: Gradle入門

導入方法

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

Page 7: Gradle入門

SDKMANを使った導入

• SDKMANインストール$ curl -s get.sdkman.io | bash

• 端末再起動• Gradleインストール

$ sdk install gradle• 確認

$ gradle --version

• その他 SDKMANの使い方などは下記参考– http://sdkman.io

2015/11/20 Javaツール勉強会@福岡 7

Page 8: Gradle入門

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

Page 9: Gradle入門

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

Page 10: Gradle入門

スクリプト説明

• 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

Page 11: Gradle入門

ソースコードの階層

• ソースディレクトリは Gradleプロジェクトディレクトリ以下に次のような階層にすると自動的に読み込まれるsrc├── main│   └── java│   └── packagename└── test └── java └── packagename

• Mainにプロダクトコード、 testにテストコードを記述する

2015/11/20 Javaツール勉強会@福岡 11

Page 12: Gradle入門

ビルドの実行

• build.gradleのあるディレクトリで下記コマンドを入力$ gradle build各プロセスが走り、正常にビルドされると「 BUILD SUCCESSFUL」と表示される

• テストを実行したい場合は$ gradle testと入力する

2015/11/20 Javaツール勉強会@福岡 12

Page 13: Gradle入門

Lazybonesを使った新規作成時の時間節約

• Gradleでプロジェクトを作る度にソースディレクトリの階層を作ったり、初期スクリプトを書くのは面倒ですよね

• IDEを使うと低減されることもありますが、社内だけで定型化されているようなものまでは自動化できませんよね

• Lazybonesというツールを使えばこれが可能になります

• 簡単に言うと予め用意された Gradle用のテンプレートを呼び出すだけで使えるようにするツールです

2015/11/20 Javaツール勉強会@福岡 13

Page 14: Gradle入門

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

Page 15: Gradle入門

Lazybonesの使い方

• build.gradleには最低限の記述が書かれている• java-basic以外のテンプレートは「 lazybones list」を実行するとみることができる

• その他標準テンプレート以外にも Lazybonesの設定に自分のリポジトリを追加することでオリジナルなテンプレートを作成することもできる– 例えば毎回使うツールが決まっていて

JUnit+SLF4J+Logbackを使うといった場合、更にパッケージ名は会社のドメインとかだと、それが設定されているテンプレートを作るととても便利になる

2015/11/20 Javaツール勉強会@福岡 15

Page 16: Gradle入門

Gradleでスクリプトを実行する

• Gradleではタスクを自由に定義できる– 例えば build.gradleに次のように記述する

task hello << { println “hello world”}

– gradle helloを実行すると「 hello world」が出力される

……• これだけだと何が嬉しいかいまいちわからない

2015/11/20 Javaツール勉強会@福岡 16

Page 17: Gradle入門

Gradleタスクのための例題

• まずは前提– Javaで実行可能な Jarを起動するときこう書きますよね

java –jar hoge.jar– 実はこの時 Jarファイルの先頭にゴミデータが有っても javaコマンドはよしなに扱ってくれます

– そのため次のようなシェルスクリプトを先頭に書いてJarを結合するとあたかも通常のコマンドのように扱えます

#!/bin/shjava –jar "$0" "$@“exit $?

2015/11/20 Javaツール勉強会@福岡 17

Page 18: Gradle入門

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

Page 19: Gradle入門

時間が余ったら説明

• スクリプト– 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

Page 20: Gradle入門

おわりに

• 色々と駆け足で説明しましたがやってみたら簡単です– ビルドツールあまり使ったことなかった自分でも自力である程度扱えるようになりました• 一度 Antやろうと思ったことありましたが、その時は理解できずに諦めた記憶が……

• Javaっぽい (比較的 )見慣れたDSLで定義できます– Groovyを覚えていたらより便利になりますが Java文法で書いても実行できるので最初は Javaで処理しても問題ありません

• 次回も SpockとかGroovy製の便利なフレームワークを紹介できたらいいな

2015/11/20 Javaツール勉強会@福岡 20

Page 21: Gradle入門

ご清聴ありがとうございました

2015/11/20 Javaツール勉強会@福岡 21