Kotlin 1.0 リリース: JVMとAndroid向けの実用的(Pragmatic)言語

Kotlinバージョン1.0をついにリリースいたしました!

長く、エキサイティングな道のりでしたが、ついに1.0のリリースとなりました。ロゴも新しくなりました:

Kotlin
See discussions on Reddit and Hacker News

 

Kotlin #とは?

KotlinはJVMとAndroid向けのオブジェクト指向かつ関数型な実用的(Pragmatic)言語です。相互運用性、安全性、明瞭性、そしてツールサポートにフォーカスしています。

汎用言語であるKotlinはJavaが動作する場所であればサーバサイドアプリケーション、モバイルアプリケーション(Android)、デスクトップアプリケーションを含むどこでも動作します。以下のメジャーなツールやサービスに対応しています:

  • IntelliJ IDEA、Android Studio、Eclipse
  • Maven、Gradle、Ant
  • Spring Boot (KotlinサポートがKotlin 1.0と同時にリリースされました!)
  • GitHub、Slack、Minecraft :)

Kotlinの焦点として大事なのが相互運用性、JavaとKotlinをミックスしたプロジェクトのシームレスなサポートです。これにより、既存プロジェクトを段階的に簡潔かつよりタイプセーフなコードに移行していくことが可能です。さらに、Kotlinは拡張可能な標準ライブラリを備えており、バイトコードのフットプリントを小さく抑えます。もちろん、どんなJavaライブラリもKotlinから呼び出せますし、逆も然りです。

実用的(Pragmatic) #とは?

長きに渡るプロジェクトでは人のコアバリューを理解することが非常に大切です。Kotlinのデザインを一言で表すならば実用主義(pragmatism)です。Kotlinの主眼は早い段階から新発明や、研究ではありませんでした。結果的に沢山の発明がありましたが、あくまでプロジェクトのポイントではありません。我々が開発してきた物はだれもが利用可能なバグを防ぐための型システムであったり、コードの再利用を促す抽象化メカニズムです。我々はこの言語を素晴らしい物とすべく常にユースケースにフォーカスしてきました。

特に、既存コードとの相互運用性は重要です。全てをスクラッチから書き直すことをだれが望むでしょう?私にもそんなことをしたいと思ったことがありました・・・極めて稀ですが。Kotlinの開発はJavaとの相互運用性やMavenインテグレーション、Android互換性を無視すれば極めて簡単なものだったでしょう。アプローチもよりエレガントになったかもしれません。しかし、エレガントであることはゴールではありません。ゴールは便利(useful)であることです。新しく覚えること、新しく発明すること、スクラッチから繰り返すことが少ないほど、再利用はしやすく、より便利ツールとなり得ます。

Q. なぜKotlinは独自のパッケージマネージャーやビルドシステムを持たないのですか?
A. すでにMavenやGradleがあり、多大な既存資産を再利用できることは多くのプロジェクトで重要だからです。
Q. 新しくデザインし直すことをせず、なぜJDK互換のコレクションインターフェースを開発することに注力したのですか?
A. 既存のJavaコードはJDKのコレクションフレームワークに多大に依存しており、言語の境界をまたがる際に変換をするのは面倒だからです。
Q. なぜKotlinはJava6のバイトコードをサポートするのですか?
A. 多くの人はいまだにJava6を使っているからです(Androidデベロッパが多いですが、Androidだけではありません).

我々にとって実用性とは言語やライブラリ単独をではなく、ユーザーエクスペリエンスを作ることにあります。この言語設計には「これをやったらインクリメンタルコンパイルの妨げにならないか」、「これがAPKのメソッド数を増やしたらどうなるか?」「これをIDEはどのようにしてリアルタイムに補完するか?」といった制約をもとに決断を下してきました。結果として、言語だけでなく周辺ツール群にも多大な自信があります。

プロダクション利用可能なほど十分成熟しているか?

はい。現場で利用するには十分な段階にあります。JetBrainsでは過去2年にコンパイラやツールだけでなく、実際のプロジェクトでKotlinを多方面で使ってきた実績があります。JetBrainsだけでなく、Kotlinをプロダクション利用している会社はすでに沢山あります。

バージョンを1.0とするまで時間がかかったのは、設計が実態に即した物であるかどうか慎重を期してきたからです。これにより、Kotlinは後方互換性を保つことができます。今後のKotlinのリリースにより既存コードが壊れることはなく、このデザインを保って行きます。

このマイルストーンにはアーリーアダプタの皆様の助け無しには到達し得ませんでした。皆様の勇敢さ、エネルギー、そして情熱に感謝いたします。

Kotlinを開発する人々は?

まず第一に、Kotlinはオープンソースな言語です

  • GitHub でApache 2.0オープンソースライセンスで公開されています
  • 現在100以上のコントリビュータがいます

現在JetBrainsがメインとなって開発しています。多くの投資を払ってきましたし、今後長く続けることを約束します。JetBrainsは自社製品で必要としてKotlinを開発してきました。そして現在までに10近い自社製品でKotlinを利用していることをここで明らかにします。もちろんIntelliJ IDEA、JetBrains Rider、JetBrains Account & E-Shop、YouTrack、その他のIDEやインターナルプロジェクトでKotlinを使っています。

2012年からJetBrainsはKotlinをオープンな場で開発しており、コミュニティとの対話を重ね、沢山のフィードバックを頂きました。

今後、デザインの提案や決定を行う場を用意し、プロセスをより透明かつオーガナイズされた形にしていく予定です。Kotlinの標準化の努力はまだまだこれからですが、近いうちに行います。

言語のデザインと全体の舵取りはJetBrainsが行っており、現在20名を超えるスタッフがフルタイムでKotlinに従事しています。JetBrainsのKotlinへのコミットメントを示していると言えるのではないでしょうか。

数字

Kotlinにまつわる数字を確認しましょう:

  • 1万1千人を超えるデベロッパが直近一ヶ月でKotlinを利用しており、先週単独でもその数は5千近くなります
  • StackOverflowでも沢山の回答が寄せられています
  • 既に2つの本があります: Kotlin in ActionKotlin for Android Developers
  • 日本語の本も近々出版される見込みです
  • ワールドワイドのSlackコミュニティに1400名ほど参加しています (参加)
  • 日本のSlackコミュニティも活発で150名が参加しています(参加)
  • IntelliJ IDEAやRiderなどのプロジェクトで50万行を超えるKotlinコードが動いています

コード行数について言うと、GitHub上では指数関数的に増えています(JetBrainsのプロジェクトは除いています):


Kotlin GitHub Adoption
もちろん、Kotlinを使う会社はどんどん増えており、PreziやExpediaもその仲間です。もしお使いでしたら是非プルリクエストをください!

今後のロードマップ

バージョン1.0をもって、長期間の言語と標準ライブラリ(kotlin-stdlib)の互換性を約束します:

  • 新しいコンパイラは古いバイナリと共に動きます(しかしJava6でJava8のバイトコードを読めないように古いコンパイラは新しいライブラリを理解できません)
  • 古いバイナリは新しいバイナリ上でランタイムで動きます(しかしながら新しいコードは新しい依存が必要となる場合があります)

この互換性はJVM/Androidに限ります。JavaScriptサポートは実験的段階にあり、今後別途リリースされる予定です。

バグフィックスを除いて、近々予定しているのは以下の通りです:

  • Kotlinツール群のパフォーマンス向上(Gradleによるインクリメンタルコンパイルなど)
  • JavaScript サポート (可能な限りJVMとJSへのクロスコンパイルも)
  • Lambda等を使って最適化したJava 8バイトコード生成(Java 6はAndroidユーザが必要な限りアクティブにサポートされます)

ツールのアップデートやバグフィクスは1.0.Xのようにバージョンの最後の数字をインクリメントしていく形でリリースされます。大きな変更についてはまずアーリーアクセスプログラム(EAP)を経た上で1.1といった形でリリースされます。

Kotlinの始め方

オンラインのミニIDE: try.kotl.inで始めるのが一番手軽です。Koansを使えば良くある問題をKotlinの基本的な機能を使いながら解決していく事ができます。

ご自分のマシンでKotlinを動かすには(Koansはオフラインでも使えます):

  • IntelliJ IDEA (Ultimate or Community): Kotlinプロジェクトを作るか、KotlinファイルをJavaプロジェクト内で作成します
  • Android Studio: Kotlinプラグインをプラグインマネージャーよりインストールします
  • Eclipse: マーケットプレイスよりプラグインをダウンロードします

注意: 古いバージョンを使っている場合、Kotlinプラグインを1.0へアップデートする必要があります。

Kotlinのコンセプトを一通り学にはドキュメントやチュートリアルを公式Webサイトで確認してください。コミュニティによるすばらしいプレゼンテーションは2015年のダイジェストページにまとめられています。お手元のJavaプロジェクトでKotlinを導入するにはIDEに内蔵されているJava-to-Kotlinコンバータを利用できますので、一クラスずつ順々に、手軽に移行していくことが出来ます。

また、是非掲示板Slack(英語)Slack(日本語)にも積極的に参加してください!

繰り返しになりますが、皆様のサポートに感謝を申し上げます。コミュニティの力がなければ成し遂げられないことです。

それではKotlinをお楽しみください! :)

原文

image description