Kotlin 1.2 リリース: プラットフォーム間のコード共有

Kotlin 1.2をリリースしました。これはKotlinをモダンなアプリケーションの全てのコンポーネントに渡って利用できるようにするための大きな一歩となるメジャーリリースです。

Kotlin 1.1でJavaScriptを正式なターゲットにし、KotlinコードをJSへコンパイルしてブラウザで動かせるようにしました。そしてKotlin 1.2ではKotlinコードをJVMとJavaScript双方で共用できるようにしました。ビジネスロジックを一度書けば、バックエンドでもフロントエンドでも、そしてAndroidのモバイルアプリケーションでも利用出来ます。そしてクロスプラットフォームのシリアライゼーションライブラリなど、コードの再利用性を高めるためのライブラリ開発も進めています。

Kotlin 1.2はすでに、本日リリースのIntelliJ IDEA 2017.3に含まれています。別のIDEバージョンをご利用であればTools | Kotlin | Configure Kotlin Plugin Updatesダイアログよりインストールできます。

このリリースは社外の沢山のコントリビューターの成果が含まれています。フィードバックを送ってくれた方々、問題を報告してくださった方々、そして特にプルリクエストを送ってくださった方々に感謝いたします。

マルチプラットフォームプロジェクト

マルチプラットフォームプロジェクトはバックエンド、フロントエンド、Androidといった複数の層を同じコードベースからビルドする仕組みです。このプロジェクトではそれぞれcommon moduleを含みます。common moduleはプラットフォームから独立したコードとプラットフォーム(JVMまたはJS)固有のコードからなります。後者からはプラットフォーム依存のライブラリを呼び出すことができます。プラットフォーム固有のコードをcommon moduleから呼び出すには”expected”宣言を記述し、”expected”宣言に対応する”actual”実装を各プラットフォーム向けに実装することになります。

MPP

この機能について寄り詳しくはドキュメント(英語)をご覧ください。

ロジックをcommonコード側により多く記載出来るよう、以下のライブラリを開発・提供しています:

  • kotlin.test: Kotlin 1.2にデフォルトで含まれています。テストを一度書けばJVMとJSで実行できます
  • kotlinx.html: マルチプラットフォームでのレンダリング(isomorphic rendering)を実現します。同じコードを利用してバックエンドでもフロントエンドでもHTMLをレンダリングできます
  • kotlinx.serialization: JSONまたはProtoBufをシリアライゼーションフォーマットに使ってプラットフォーム間のKotlinオブジェクト受け渡しを簡単に実現します

なおマルチプラットフォームプロジェクトは現在実験的な機能(experimental feature)扱いです。機能自体は安定しておりプロダクションに適用可能ですが、今後のリリースで変更が必要になる可能性があります(マイグレーションツールを提供する場合があります)。

コンパイルパフォーマンス

1.2の開発にあたりコンパイルのパフォーマンスを向上することに多大な努力を費やしました。すでにKotlin 1.1と比較しておよそ25%向上しています。そして1.2.xアップデートにおいて相当な改善を施せる見当がついています。
CompilationSpeed

その他の言語やライブラリの改善

言語や標準ライブラリにも改善を積み重ねています:

  • より簡潔なシンタックス: アノテーションに複数の引数を指定するのが配列リテラルで簡潔になりました
  • lateinit 修飾子のトップレベルプロパティとローカル変数でのサポートと lateinit 変数が初期化されていることのチェック機構
  • より賢いスマートキャスト改善された型推論
  • Java 9で導入されたsplit package制約に標準ライブラリが対応
  • kotlin.math パッケージを標準ライブラリに提供
  • シーケンスとコレクションを操作するための標準ライブラリ関数。関数セットでコレクションやシーケンスを固定長サイズに分割してラップ可能

コードサンプルも含めて詳しくはWhat’s New in Kotlin 1.2(英語)をご覧ください

世界のこっとりーん!

今年3月にKotlin 1.1をリリースして以来Kotlinは世界中で急速な普及を遂げています。最初のワールドワイドカンファレンスであるKotlinConfで盛り上がりは頂点に達しました。サンフランシスコで11月2日,3日に行われたこのカンファレンスの参加者は1200に上り、セッションは全て録画されておりカンファレンスWebサイトでご覧いただけます。

Kotlinは現在Androidの公式サポート言語であり、Android Studio 3.0でデフォルトでご利用いただけます。Googleによる公式 サンプルスタイルガイドも是非ご参照ください。KotlinはすでにAndroid Studioにおいて17%以上のプロジェクトで利用されています。中にはホットなスタートアップのアプリや、Fortune 500の企業からリリースされているアプリもあります。

Users

サーバサイドでは、Spring Framework 5.0は数多くのKotlinサポート機能を伴ってリリースされており、vert.xは3.4.0よりKotlinをサポートしています。Gradleは現在Kotlin DSLをデフォルトでサポートしており、Gradle Kotlin DSL projectは1.0リリースに向けて急速に開発が進んでいます。

GitHubのオープンソースにおけるKotlinのコード行数は2千5百万行を超えました。StackOverflowでKotlinは一番成長している言語でかつ一番嫌われていない言語です。

KotlinAdoption

Kotlinのコミュニティの成長はめざましく、現在世界で100を超えるユーザーグループが存在します。様々なイベントで数多くのセッションがあり全てを追い切れているわけではありませんが、talks mapを見るとKotlinの利用がいかに広まっているかイメージをつかむことが出来るでしょう。

KUGmap

Kotlinをこれから始める方には沢山の書籍(我々の“Kotlin in Action”は英語ロシア語日本語中国語、そしてポルトガル語版があります)、オンラインコース、チュートリアルなどがあります。

チームと握手!

新バージョンについてより詳しくご説明するため、Kotlin 1.2のマルチプラットフォームプロジェクトについて説明するウェビナーを12月7日に開催いたします。KotlinはさらにAMA (Ask Me Anything) をKotlin Redditで12月5日に開催します。UTCの正午に開始し、24時間実施します。

アップグレード方法

いつも通りKotlinはオンラインで試せます: try.kotlinlang.org.

  • Maven、Gradle、npm: コンパイラと標準ライブラリのバージョンストリングとして 1.2.0 を指定します: ドキュメント
  • IntelliJ IDEA: 2017.3 は Kotlin 1.2 を同梱しています。以前のバージョンではプラグインを1.2にアップデートしてください
  • Android Studio: プラグインマネージャでプラグインをインストールまたはアップデートします
  • Eclipse: Marketplaceよりプラグインをインストールします
  • コマンドラインコンパイラはGithub release pageよりダウンロードできます

互換性について、Kotlin 1.2と標準ライブラリはバックワードコンパチブル(modulo bugs:バグの修正にあたって非互換が導入される可能性があるが、最大限互換性を図れるよう注意を払っている)です。1.0や1.1でコンパイル、動作したものは1.2で引き続き動作します。徐々に移行したい巨大プロジェクト向けに、新機能を無効化するスイッチを用意しています。こちら(英語)によくありがちな落とし穴についてまとめています。

それでは良いこっとりーんを!

[原文]

image description