Kotlin/Native解説 -at- C93:Androidモダンプログラミング

最近twitterなどでもKotlin/Nativeについていろいろ発言していたので何となく察していたという人もいるかもしれませんが、C93(冬のコミックマーケット)のTechBooster新刊「Androidモダンプログラミング」に、今年の春にリリースされて秋にkotlinconfで注目を浴びたKotlin/Nativeについての解説記事を35ページくらい書きました。

techbooster.github.io

たぶん世界で公式サイトに次いで2番めに詳しい解説になっていると思います。

Kotlinプログラミングに関しては素人だし、Kotlinそのものについての解説は1ミリもありません。Kotlinでネイティブアプリを作れるとはどういうことなのか、という部分にフォーカスした内容になっています。これAndroidプログラミングの本ということになっているけど、Android開発についてはKotlin/Nativeはほぼ関係ないと思っていいです。(詳しくは本編で)

詳しく書いていないのはXcodeを使ったiOSプロジェクトの開発方法などですが、年末に日本語で詳しく書かれた記事がいくつか出てきたので、うまい具合に補完し合えていそうに思います。

Kotlinのような「言語から作られた開発エコシステム」が先にあるような状況から、ネイティブアプリケーションを作れる仕組みを用意する、というストーリーラインは、たぶん割といろんな言語開発環境で共通していて、われわれも普段monoをその用途で使っているので、近いところにいるわけですね。とは言ってもKotlin/NativeはLLVMそのもののマナーに乗っかっていて、うちはmonoランタイムをLLVMの流儀に合わせたり、そもそもLLVMを使わずにランタイムとDLLを実行時に解凍してロードするだけ、みたいな仕組みもあったりと、その具体的な手法は一様ではないところです。

Kotlin/NativeはKotlin/JVMからある程度うまいこと切り離されていて、コンパイラJava VMで動作するものに、KotlinのIRからLLVM IRを生成する(そのためのKotlinコードがJVM上で動作するコンパイラプラグインできるように容易されている)のが、われわれ仕組みを眺めたい側としては面白いポイントのひとつですね。

Kotlin/Nativeでわたしにとって一番印象的だったのは、cinteropツールを使ったC APIの自動バインド機構ですね。JavaCPPやJNAeratorのようなものですが(わたしがPInvokeGeneratorでちょっとやってみようとしていることでもある)、仕様が詳しく解説されており、生成されるコードがわかりやすくなるように出来ています。

Kotlin/Native、まだIDEを使ってちゃんと開発できる状態にはなっていないですが、荒削りで勢いがある分野に飛び込んでコントリビュートしたり広めたりするというのはとてもいい経験になると思うので、興味があるという人はぜひチャレンジしてみるといいと思います。(わたしは来年はもっと別の方面に進む予定なので、興味深く眺める程度にしておくつもりです。)