20 分で IntelliJ IDEA と Gradle で Kotlin 開発環境を作って fatJar ビルドしてコマンドラインツールしたり Kotlin Playground したりする話

Kotlin 入門の入門

Google IO で Android の開発言語として Kotlin が正式に採用されたりなど、最近またにわかに注目を浴びている Kotlin ですが

  • 別に Android 開発がしたいわけじゃない
  • Better Java として Kotlin は触っておきたいけど、Android Studio 入れたり実機で動作させるのは面倒
  • Kotlin 自体を学ぶのに Android の周辺知識が必要なのはちょっと…

のように感じている人もわりといるのではないかと思います。

そういう人Scala をやるといいですよのための、Kotlin 入門のための入門記事です。

この記事では

  • Android に依存せず Kotlin が気軽に書ける IDE とビルドシステムの導入
  • Kotlin で非 Android アプリケーション開発・ビルド・fatJar パッキング
  • Swift PlayGround 的な Kotlin PlayGround 環境の構築

20 分でできる ことを目的とします。

扱わないこと

  • Kotlin 自体の言語仕様
  • Gradle ビルドシステムの詳細

IntelliJ IDEA のインストー

www.jetbrains.com

Kotlin は IntelliJ IDEA を開発している Jetbrains 社が開発している言語なので、IntelliJ でのサポートはばっちりというか、概ね IntelliJ をインストールしたら Kotlin の開発環境は整います。コンパイラ・Gradle こみなので他のダウンロードは不要です。

起動したら初期設定を適当に済ませてください。初期設定時におすすめプラグインとして Scala が出てくるので、インストールしておくと良いでしょう。

ここまで 5 分ぐらい

Gradle プロジェクトの作成と Gradle ビルド設定

プロジェクトの生成

IntelliJ を起動・初期設定したらさっそく Kotlin のプロジェクトを作ります。新しいプロジェクトの作成を選択して、プロジェクトのタイプで Gradle を選択します。扱うフレームワークとして Kotlin にチェックをいれる。

f:id:biacco42:20170524120920p:plain

Gradle 用に GroupId と ArtifactId を設定します。 GroupId は Java の package と同様にトップレベルドメインから。ArtifactId はアプリ名。

f:id:biacco42:20170524121526p:plain

プロジェクトの生成オプション。個人的には全部チェックつけるのがおすすめ。特に Create directries for empty content roots automatically は Gradle のビルド規約に則ったディレクトリを自動生成してくれるので、Gradle に慣れてない人はとりあえずチェックをつけておいたほうがよいです。

f:id:biacco42:20170524122911p:plain

最後に保存ディレクトリを決めて Finish。

エントリポイントの作成

Gradle の規約でソースコードsrc/main/言語/package階層 に配置します。まずは src/main/kotlin/ に適当なパッケージ(jp.co.biacco42.app 等)を追加し、そこに Kotlin ファイル Main.kt を追加します。

Main.kt に以下の通り記述します。

fun main(args: Array<String>) {
    println("Hello Kotlin")
}

Kotlin ではトップレベル関数が定義でき main(args: Array<String>) がいわゆる Java の Main クラスの public static void main(String[] args) エントリポイントに相当します。

Gradle のビルドスクリプト設定

上記プログラムの fatJar が吐けるように build.gradle の最後に以下を追記します。

task fatJar(type: Jar) {
    manifest {
        attributes 'Main-Class': 'jp.co.biacco42.app.tanoshiilife.MainKt'
    }

    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

manifest の attributes では、jar をそのまま起動できるように、エントリポイントを持つクラスを Main-Class として指定しています。

先程、Kotlin はトップレベル関数が定義できると書きましたが、Kotlin はあくまで JVM 向けのバイナリを生成するので、これらのトップレベル関数もコンパイルした時点でなんがしらのクラスに所属することになります。それが manifest に記載した MainKt です。Kotlin でトップレベル関数を定義すると ファイル名Kt というクラスが定義されて、そのクラスのスタティックメソッドとしてコンパイルされます。

ここまで 10 分ぐらい

ビルドとテスト、Kotlin Playground

早速上記のプロジェクトをビルド・実行してみます。

ビルド

IntelliJ の右上にある Gradle タブをクリックして開きます。

f:id:biacco42:20170524142816p:plain

先程追加した Gradle task fatJar は、Tasks -> other にあるので、これをダブルクリックすると Gradel task を実行できます。

f:id:biacco42:20170524162520p:plain

ビルド完了したら、パッキング済みの fatJar が <ProjectDirectry>/build/libs にできているはずです。実行してみましょう。

$ java -jar <ProjectDirectly>/build/libs/tanoshii-life-1.0.0-SNAPSHOT.jar

Hello Kotlin と表示されれば OK です。これで実行可能なバイナリを Kotlin でつくることができました。

ただ、毎回ビルドして実行はめんどくさいので、Gradle の test task を使って PlayGround 的なものを作ります。

ここまで 15 分ぐらい

Kotlin PlayGround をつくる

src/test/kotlin/PlayGround.kt というファイルを追加して、以下をコピペします。

import org.junit.Assert.assertEquals
import org.junit.*

class PlayGround {
    @Test
    fun playGround() {
        println("Hello Kotlin PlayGround")

        assertEquals(true, true)
    }
}

IntelliJ 右側の Gradle パネルから verification -> test をダブルクリックすると、テストが走って画面下部のテストの出力に Hello Kotlin PlayGround と表示されるはずです。

あとは、このファイルに好き勝手にクラスを足すなりなんなりして、playGround メソッドでいろいろつっつきまわせます。これで Kotlin の言語機能を手軽にお試しできると思います。

ここまで 20 分ぐらい

おわり

というわけで、Kotlin で簡単にコードを書く環境ができました。導入は基本 IDE をインストールするだけというお手軽さです。

Kotlin そのものについてはすでにおもしろい記事があるとおもうので、構築した環境でそれらの記事を読みながら手を動かすと理解が深まるかと思います。

qiita.com

qiita.com

おしまい