先日(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を選択します。
2つめの画面で、GroupIdとArtifactIdを指定します。
3つめの画面でUse auto-importとCreate directories for empty content roots automaticallyにチェックを入れます。
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を修正します。
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"
}
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ディレクトリが青くなっていない場合は、プロジェクトを一度閉じて再度開くと直るかもしれません。
Hello world その1.Spark Framework編
試しに、Spark FrameworkでHello worldしてみます。
dependenciesにsparkを追加します。
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ファイルを追加します。
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
Hello world その2.wasabi編
SparkはJavaのフレームワークでしたが、せっかくなのでKotlin用に作られたフレームワークも探してみました。
Githubで探すと wasabi と kara が良さそうです。
karaは公式サイトを見ると開発環境まで込みのフレームワークで、手軽に試すのが難しそうだったので、wasabiを試してみました。
先ほどと同じ要領でgradleを設定して、mainクラスを作成します。
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'
}
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] - /
無事、"Hello, world!" できました。