Everything in Kotlinとは?
バックエンド、Webフロントエンド、デスクトップアプリ、Android、iOS、全てをKotlinを使って実装しょうという私の考えに名前を付けただけです。
全てを同じ言語で書く理由
私は業務の変更に強いサービスを作るため、業務内容(ビジネスロジック)を素直に表す層(ドメイン層)を作り、他の層(プレゼンテーション層やインフラ層)に依存しない実装にするというDDDの考え方が好きです。
ですが、せっかくドメイン層を作っても、バックエンド、Webフロントエンド、Android、iOSそれぞれで使用する言語が変わればドメイン層のドメインモデルを使い回すことが出来ないので全て同じ言語で実装したいと思いました。
Kotlinを選んだ理由
Kotlinで書いたコードは様々なプラットフォームで動かすことが出来る形(Javaバイトコード、JavaScript、ネイティブバイナリ)に変換することが出来ます。JavaScriptでもNode.jsやCordova、React Native、Electronを使って同じようなことが出来ますが、ドメインモデルを動的型付け言語で表現するのは難しいと感じたため、静的型付け言語であるKotlinを選びました。
現状、どこまでKotlinで書けるのか?
現状共通化出来るのはバックエンド、Webフロントエンド、デスクトップアプリ、Androidぐらいです。
共通化する上で大事なのは、kotlinx(Kotlin Common Moduleのライブラリ)のcoroutines(非同期処理)、serialization(シリアライズ、デシリアライズ)が対応しているかどうかです。
現在(2018/04)、Kotlin/Nativeは対応していないのでiOSアプリは共通化が難しくなっています。
ですが、Kotlin/NativeをサポートするIssueは立っているのでiOSアプリも共通化出来る未来は来ると思います。
kotlinx.coroutines Add support for Kotlin/Native
kotlinx.serialization Add support for Kotlin/Native
最後に
次回は、バックエンド、Webフロントエンド、デスクトップアプリ、Androidをどう共通化するのかをKotlin Academyアプリの実装例から見ていきたいと思います。
「全てをKotlinで」をグーグル翻訳で翻訳しただけなので、「Everything in Kotlin」よりいい感じの翻訳があれば教えて下さい