More than 1 year has passed since last update.

先日(2016/2/15)にバージョン1.0がリリースされた Kotlin で ブラウザからHello worldしてみます。

開発環境とプロジェクト作成

IntelliJのインストール

ここからCommunityエディションをダウンロードします。
https://www.jetbrains.com/idea/

最新版はIntelliJ IDEA 15 CEです。
macだとファイル名が、ideaIC-15.0.4-custom-jdk-bundled.dmg でした。

プロジェクトの作成

IntelliJを起動して、Create New Projectを選びGradleとKotlinを選択します。

スクリーンショット 2016-02-27 10.05.30.png

2つめの画面で、GroupIdとArtifactIdを指定します。

3つめの画面でUse auto-importとCreate directories for empty content roots automaticallyにチェックを入れます。
スクリーンショット 2016-01-09 0.23.45.png

4つめの画面でプロジェクト名と保存場所を入力したら、プロジェクトが作成されます。

エラーの解消

IntelliJをアップデートインストールした影響かもしれませんが、手元の環境ではプロジェクトのスケルトン状態でビルドができない状態になっていました。

Error:Could not find org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.0-release-IJ143-75.
Searched in the following locations:
    https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.0.0-release-IJ143-75/kotlin-gradle-plugin-1.0.0-release-IJ143-75.pom
    https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.0.0-release-IJ143-75/kotlin-gradle-plugin-1.0.0-release-IJ143-75.jar
Required by:
    :sample:unspecified

build.gradleのdependenciesに指定されている、kotlin-gradle-pluginを修正します。
スクリーンショット 2016-02-27 10.49.48.png

元のbuild.gradle
group 'sample'
version '1.0-SNAPSHOT'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.0-release-IJ143-75"
    }
}

apply plugin: 'kotlin'

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:1.0.0-release-IJ143-75"
}
修正後のbuild.gradle
group 'sample'
version '1.0-SNAPSHOT'

buildscript {
    ext.kotlin_version = '1.0.0'
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'kotlin'

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
repositories {
    mavenCentral()
}
sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}

いい感じでビルドプラグインが通ると、src/main/kotlinディクトリが作成されます。src/mainの下のjavaとkotlinディレクトリが青くなっていない場合は、プロジェクトを一度閉じて再度開くと直るかもしれません。
スクリーンショット 2016-02-27 11.42.29.png

Hello world その1.Spark Framework編

試しに、Spark FrameworkでHello worldしてみます。

dependenciesにsparkを追加します。

build.gradle
dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'com.sparkjava:spark-core:2.3'
}

この後で、WebFrameWorkがimportできなかった場合は、メニュー > View > ToolWindows > Gradle でGradleウインドウを開いて、リビルドして下さい。

プロジェクトツリー > src/main/kotlin > 右クリック > New > Kotlin File/Class でHello.ktファイルを追加します。

スクリーンショット 2016-02-27 11.51.23.png

Hello.kt
import spark.Request
import spark.Response
import spark.Spark.*

fun main(args:Array<String>) {
    get("/hello", {
        request:Request, respons: Response ->
        "Hello, world! <br>and Kotlin 1.0 Released!"
    })
}

プロジェクトツリー > src/main/kotin/Hello.kt > 右クリック > run > "HelloKt"

[Thread-0] INFO org.eclipse.jetty.util.log - Logging initialized @880ms
[Thread-0] INFO spark.webserver.JettySparkServer - == Spark has ignited ...
[Thread-0] INFO spark.webserver.JettySparkServer - >> Listening on 0.0.0.0:4567
[Thread-0] INFO org.eclipse.jetty.server.Server - jetty-9.3.2.v20150730
[Thread-0] INFO org.eclipse.jetty.server.ServerConnector - Started ServerConnector@556d147d{HTTP/1.1,[http/1.1]}{0.0.0.0:4567}
[Thread-0] INFO org.eclipse.jetty.server.Server - Started @1313ms

ブラウザから http://localhost:4567/hello
スクリーンショット 2016-02-27 12.22.03.png

Hello world その2.wasabi編

SparkはJavaのフレームワークでしたが、せっかくなのでKotlin用に作られたフレームワークも探してみました。

Githubで探すwasabikara が良さそうです。

karaは公式サイトを見ると開発環境まで込みのフレームワークで、手軽に試すのが難しそうだったので、wasabiを試してみました。

先ほどと同じ要領でgradleを設定して、mainクラスを作成します。

build.gradle
group 'sample'
version '1.0-SNAPSHOT'

buildscript {
    ext.kotlin_version = '1.0.0'
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'kotlin'

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'org.wasabi:wasabi:0.1-SNAPSHOT'
}
repositories {
    mavenCentral()
    maven { url 'http://repository.jetbrains.com/all' }
}
sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}
Hello.kt
import org.wasabi.app.AppServer

fun main(args:Array<String>) {
    var server = AppServer()
    server.get("/", {
        response.send("Hello, world!\nand Kotlin 1.0 Released!")
    })
    server.start()
}

起動メッセージ

[main] INFO org.wasabi.app.AppServer - Server starting on port 3000
[nioEventLoopGroup-3-1] INFO org.wasabi.interceptors.LoggingInterceptor - [GET] - /

http://localhost:3000/
スクリーンショット 2016-02-27 13.32.41.png

無事、"Hello, world!" できました。