Help us understand the problem. What is going on with this article?

KotlinNative で HelloWorld する

More than 1 year has passed since last update.

Kotlin 1.3

Kotlin 1.3 が発表されて KotlinNative がベータ版として同梱するようになりました。
今までは JVM とか JavaScript といった環境でしか動かなかったものが、KotlinNative ではバイナリとしてOSから直接動かせるようになります。JVM に依存しなくなるので iOS アプリも Kotlin で作れるようになるのではと話題になっています。マルチプラットフォーム開発の本命となるのか気になりますね。

サーバーサイド KotlinNative

ネイティブ化する恩恵はアプリだけでなく、サーバーとして動くプログラムでもえられます。JVM は仮想マシンの一種なのでアプリケーションの立ち上げに時間がかかってしまったり、ディスク・メモリの容量を余分に食ってしまったり、という欠点があります。しかし KotlinNative でバイナリとしてアプリケーションを生成できるようになれば、このオーバーヘッドなしに動かすことができるようになります。Docker 化するときもイメージが作りやすくなりそうですね。
また、Kotlin 1.3 から Coroutines が使えるようになったのでノンブロッキングなウェブサーバーを作れるようになりました。外部の通信やファイルの入出力などを CPU で待たずに処理できるようになるので、非常に効率よくリクエストを捌けるようになります。Kotlin の非同期ウェブフレームワーク ktor も 1.0.0 としてそろそろ正式リリースされるそうなので、これは是非試してみたいと思いました。
Python より型が厳密で、Goより取っつきやすい言語(※個人差があります)なので、もしかしたら一気に流行るのではと期待しています。

HelloWorld する

今回は KotlinNative で Ktor を動かすところまで試そうと思ったのですが、まだ KotlinNative にフレームワークが対応していなかったり、そもそも自分で他の Kotlin ライブラリを導入するところで躓いたので、とりあえず HelloWorld までをまとめてみました。

GitHub: Kotlin Native Support #571 - https://github.com/ktorio/ktor/issues/571

検証環境

  • OS: Ubuntu 16.04
    • (Windows10 WSL上で実行)

Kotlin のインストール

完全に Kotlin 1.3 がリリースされた気でいましたがまだでした…。(2018/10/17現在)
なので Github から直接落としてきます。
(リリース後は SDKMan を入れて sdk install kotlin で入るそうです)

# ダウンロード
cd /tmp
wget https://github.com/JetBrains/kotlin-native/releases/download/v0.9.3/kotlin-native-linux-0.9.3.tar.gz
tar -zxvf kotlin-native-linux-0.9.3.tar.gz

# 設置してパスを通す (場所はお好みで)
sudo mv kotlin-native-linux-0.9.3 /opt/
export PATH=$PATH:/opt/kotlin-native-linux-0.9.3/bin

kotlinc-native というコマンドが使えるようになってればインストール完了です。別途 Java が使えるようになってる必要があるかもしれません。

HelloWorld する

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

https://kotlinlang.org/docs/tutorials/native/basic-kotlin-native-app.html

KotlinNative の公式ページから HelloWorld のサンプルを コピペ 心をこめて手打ちします。

# コンパイル
kotlinc-native hello.kt -o hello

# 実行!!
./hello.kexe

:clap: :clap: お疲れ様でした。:clap: :clap:

ちなみに Kotlin 1.3 から main の引数が不要になったので、

fun main() {
    println("Hello Kotlin/Native!")
}

のようにしてもちゃんと動いてくれました。Java っぽさが消えましたね。

Kotlin 1.3 や Ktor 1.0 の正式リリース楽しみですね。
Native でもウェブサーバー作れるようになったらまた試してみたいです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away