はじめに

2017年5月18日のGoogle I/OでKotlinがファーストクラスランゲージにすると発表されたのでKotlinについてメモしておきます。
もともとアプリを作る上でも構文的に見てSwiftより劣っていたJavaです。それらの問題をkotlinは改善してくれます。
java8でラムダ式やオプショナルが実装され大分良くなりましたが、kotlin > (java8 ≒ java9)な所感です。

情報源
https://blog.jetbrains.com/jp/2017/05/18/767
セッション内容の動画

公式ページ
https://kotlinlang.org/

AndroidでKotlinを正式サポート

以前からプラグインでkotlin開発ができていましたが、AndroidStudio3.0より正式サポートになりました。

本日より、Android Studio 3.0はKotlinを最初から同梱します。つまりAndroidデベロッパは互換性について心配する必要がなくなります。今後JetBrainsもGoogleもKotlinでのAndroidアプリケーション開発をサポートしていきますのでご安心ください。

Kotlinの他のプラットフォーム(サーバ、デスクトップにおけるKotlin/JVM、Kotlin/JS、Kotlin/Native)におけるサポートについてもJetBrainsにとって引き続きフォーカスしていきますのでご安心ください。JetBrainsのKotlinにおけるビジョンは、この言語を様々なアプリケーションをマルチプラットフォームで、エンドトゥーエンドに繋げる統一ツールにすることです。これはフルスタックWebアプリケーションも、Androidも、iOSクライアとも、組み込み/IoTも含みます。

プログラミング言語は人間の言語と同じです。つまり話す人が多ければ多いほど良くなります。Androidでの公式サポートで、より多くのデベロッパがKotlinを使うことになるでしょう。そしてJetBrainsはKotlinコミュニティが急速に広がっていくと期待しています。Kotlinによる、またはKotlin向けのライブラリやツール開発が加速し、経験が共有され、Kotlinを使う職が増え、学習教材がたくさん公開されていくことでしょう。Kotlinのエコシステムがより盛り上がっていくことを楽しみにしています!

JetBrainsはGoogleとのパートナーシップで、非営利のKotlinの財団の設立を予定しています。言語開発は引き続きJetBrainsが支援していき、40人いるJetBrainsで二番目に大きいKotlinチームはこれまで通り活動して参ります。Andrey Breslavが引き続きリード言語デザイナーを務め、Kotlinはこれまでと同じ原則をもとに開発が続けられます。JetBrainsはKotlinのデザインプロセスを今後もオープンなものにし続けます。皆様のフィードバックこそKotlinを正しい方向に導くのに必要不可欠だからです。

引用:https://blog.jetbrains.com/jp/2017/05/18/767

Kotlin言語とは

Jetbrain社のオープンソースな言語です。

言語構文の参考
https://speakerdeck.com/jakewharton/life-is-great-and-everything-will-be-ok-kotlin-is-here-google-io-2017

今すぐにjavaからkotlinへ移行するべき理由とは

既存サービスの場合、規模によっては移行するコストもありますが、費用対効果はその分にあります。
個人的には一番は開発速度が大幅に改善されバグが減ることが大きいと思ってます。

kotlin > (java8 ≒ java9)と言語で優っている

Null Safetyや関数プログラム(ラムダなど)がjavaよりも優っています。java8からoptionalがついてますが、本来のoptionalとずれていてswiftのように使うことはできません。kotlinはswiftに近いためoptionalチェイニングも可能なため、nullでも動きます。

javaもjava9がリリースなどで上がって来ているがAndroidが対応バージョンが6移行など考えるとkotlinにするのがいいと思います。

java9も今年夏にリリース予定とのこと。
http://www.journaldev.com/13121/java-9-features-with-examples#java-9-core

kotlin ≒ swift

言語の基本構文や用意されている機能(ラムダ、オプショナルなど)がswiftに近いです。swiftを触ったことがある人であればkotlinもすぐに理解できます。あとはAndroidのフレームワークの理解は必要です。

開発速度とモチベーション

新しい言語はモチベーション上がります。あとは構文も今風の軽量言語仕様に沿っているので覚えがいがあると思います。
Androidでよく見かけるnpe問題から解放され、コード量がjavaよりも断然少ないコードで実装可能なため、バグなども減ってくると思います。
削減した時間はMVP,MVVM,DDD開発などの設計面に回すことができまね。

互換性100%

javaとkotlinの互換性が100%のため、変えることによりできなくなることはありません。
kotlinで書き方などわからない場合はとりあえずそこはjavaのままというスタンスでもいいと思います。2言語の共存ができます。

JavaからKotlinの学習コストについて

java6,7のスキルでは10日、java8の関数型プログラミングを知っているひとであれば2日程構文を流し見してコードを打てばそれなりに習得できるレベルです。

既存サービスのkotlin化について

既存サービスでjavaからkotlinに変更する場合の進め方を考えました。
時間に余裕があるのであればまとめてコンバートすることが一番スムーズですが、既存サービスの場合、ほかタスクもあるため、一気には難しいのかもしれません。

手始めにテストコードから

どこからコンバートするか迷うところですが、まずは完全にコードと切り離された位置にいるテストコードからやるのがお手軽です。

まずはパッケージ単位で

MVPモデルの場合はM→P→V(Vは最悪やらなくていい)の順番で優先度をつけて対応するといいと思います。
あとはutilityやライブラリの切り離されたところから行うと影響範囲が少なくていいと思います。

単にkotlinに変換ではなく、kotlin仕様のコードに変更

単にjavaからkotlinにコンバートしてエラー対応しても、それはほとんどjavaです。
最終的にkotlinの仕様に沿ったコードに変更しましょう。(まずは順序立てて3フェーズで考えました)

第1フェーズ
java→kotlinにコードを変換
(せっかくkotlinなのにjavaと変わらない状態)

第2フェーズ
kotlinの制御に変更(おもにnullチェック、代入、return関連)

第3フェーズ 
FP言語に寄せて変更

妥協

無理にすべてをコンバートするのではなく、あまり機能追加など行わない部分はjavaのままでいくのもありだと思います。
コンバートする場合はすべてテストを再度行わなくていけないのと既存コードで問題が起きていないのであればjavaのままで害になることもないからです。

androidでjava開発のサポートは

公式でのアナウンスはしてませんが、今後もgoogleはjavaのサポートは辞めないのではないでしょうか。言語の選択肢が増えたと考えたほうがいいと思います。kotlinもjavaもファーストクラスランゲージでjavaも伸びしろがあります。

ただoracleと著作権で揉めたりしてたはずですが、どうなのでしょうか。
https://developers.srad.jp/story/16/05/27/0415243/

kotlinの将来性

Android以外にもweb開発などjavaを使って開発していたものがkotlinですべて開発可能です。
言語仕様としてkotlinが上回っているため今後はkotlin開発が増えていくのではないでしょうか。

altJSとしてのkotlinは?

kotlinはjvmのほかjavascriptへコンパイルできます。そのため、altJS(typescript,coffeescript,dartなど)としてもなり得る可能性があります。
kotlinで用意しているものからできることとして比較するとjavascript > kotlinにはなるとおもいます。typescript > kotlinでもあります。
基本的なことは全てできるので、altJSとしても十分に発揮できるのではないでしょうか。
typescriptやらのdslを覚える学習コストを考えると、javaエンジニアはkotlinのほうが慣れやすいのではないかなと思います。

その他おすすめの備忘録

Tagged with:
 

Comments are closed.