Project Shoone

独立系SIer勤務。WEBエンジニアの備忘録

受託開発で Java から Kotiln に移行する道のり

Merry Christmas!! この記事は Kotlin アドベントカレンダー 25 日目の記事です。 受託開発 で Java から Kotiln に移行する話を書きます。 自社サービスの企業が Kotlin を採用した!という話は良く聞きますが、なかなか受託開発で、という話は聞こえてこないなぁと感じています。 基本的に会社として Kotlin を採用した場合のメリット/デメリット・課題等について自分が検討したことをまとめています。 今回はコードは全く出てきません。

サーバーサイド Kotiln との出会い

Web アプリを開発している自分にとって、Kotlin についてはもともと Andriod の言語なんだなという認識しかありませんでした。 しかし昨年の JJUG CCC Fall2017 でエムスリーの前原さん(現在はエンジニアフェロー)の発表で Kotiln はサーバーサイドでも有効なんだ!!と知りました。

業務でも使いたい!

普段は Java + SpringBoot の組み合わせで Web アプリを開発していますが、KotlinならSpringBootの知見はそのまま活かせるのでかなり良いのでは?と思い、業務でも使いたいなと思い始めました。

Kotiln を採用するメリット

  • マスターしてしまえば、開発効率や品質は上昇する
    • これに関しては、多くの方が説いてくださっている通りだと思いますので割愛します
  • モダンな言語に触れることによるエンジニアのモチベーションアップ
    • Scala と比べて、関数型に寄り過ぎず敷居がそこまで高くない
  • 今後スマホアプリ開発案件が生まれた場合に、ノウハウが活きてくるのではないか
  • 求人への強み
    • 使用言語「Java」では正直あまり人が寄ってこない
    • 今後、Kotlin での Android しか経験のない人間が一定数増えると思うが、そういった人材を採れるかも

Kotlin を採用する上での懸念点

  • 人の学習コスト
    • 多くの概念が Java と同じ
    • とりあえず Kotlin に置き換えるのであれば学習コストは高くない
    • でも、それじゃ Kotlin の恩恵をフルに受けられない
    • 「Kotlin らしく書く」という学習は継続的に必要
  • 環境構築
    • Eclipse
      • プラグイン入れれば動く
      • でも Eclipse で Kotlin 書くくらいなら採用しなくて良いと思う
      • Kotlin インアクションに記載があるが、Kotlin はツールのことを考えられた言語であり、IDEA で書いてこそ発揮するメリットも存在する
    • Intellij IDEA Community 版
      • 無料・商用利用可(JetBrains が声明)
      • Kotiln は動く
      • Spring もサポートされてはいないが、動くことは動く
      • initializer 機能がなかったり → Spring Initializr 使えば OK
      • Boot ダッシュボードが無かったり → SpringCloud でマイクロサービスとかやるならあった方が良い?
    • Intellij IDEA Ultimate 版
      • 有料
      • 嬉しいことはいっぱいある
  • Kotlin 自体のバグ
  • Java に比べて情報が少ない
    • Effective Java 的なものが無い
    • 日本語の文献も多いとは言えない → だいぶ増えてきた!
    • 正式リリース(Kotlin 自体や、実験的リリースの機能等)前後に変更が入ったりしているので、記事の信憑性が怪しかったりもする
  • JavaOracle(または IBM とか)が商用サポートしているが、Kotlin は?
    • JetBrains は今のところ古いバージョンの Kotlin はサポートしていなそう
    • 2 系が出たらどうなるかってところ
    • 今のところ最新に追従していくしかない。LTS が無いのは受託開発には無理があるか?
      • ランタイムの JRE がサポートされていれば問題なし?ここはよく分かっていません、詳しい方教えてください!!
  • 後方互換性 - Kotlin はどの程度、後方互換をしていくつもりなのか?(Java はかなり後方互換なはず)

    • JetBrains 社の Kotlin 開発チームの@yanex_ru さん曰く「必要なら破壊的変更するけどできるだけ互換性を持たせたい」
    • ある程度のリスクは背負うことになる
  • 言語の将来性

    • JDK 問題
      • JVM 言語は全部同じ問題を抱えている
      • JVM が廃れたとしても、LLVM で Kotlin は動く
    • サーバーサイド Kotlin
      • 最近よく出てくる「GitHub 急成長言語 1 位 Kotlin!」みたいなのは実際 Android のコードが大半を占めているのだろうと思う
      • サーバーサイド Kotlin は盛り上がりつつあるという状況に過ぎないのが現実だと思う
      • とはいえ、有名企業がどんどん採用していっている事実もある(Yahoo とかサイバーエージェントとか LINE とか)
      • フレームワークデファクトスタンダードはまだ模索中だと思われるが、やはり Spring が Kotlin をサポートしたこともあり一歩リードか
        • Spring と Kotlin は相思相愛!
      • JetBrains 製のフレームワークの Ktor というのが全て Kotlin で書かれていて、2 番手といった感じ
    • Google
      • Android での公式言語として採用されたことにより、今後言語が急激に廃れる可能性は低い

受託開発業務で Kotlin を採用するまでに必要なこと

  • お客さんからの許諾

    • まずはもちろんこれ。お客さんの承諾がありきだと思います。
  • 保守担当者がある程度 Kotlin を身につける

    • 作って作りっぱなしということはあまりないと思います。自社で保守も担当している場合、保守担当者がある程度 Kotlin という言語を身につける必要があると考えます。
  • コーディング規約を考える

    • Kotlin は表現力が豊か → 統一感のないコードになりやすい
    • Ubie さんがコーディング規約を公開してくれるので、参考にする
    • Lint
      • ktlint
        • 標準ルールが 17 種類
        • それぞれに対して ON/OFF とかできない(インデントサイズとファイル末尾改行のみ EditorConfig で勝てる)
      • detekt
        • デフォルトで ON になってるのが 79 種類
      • (andriod-lint)

自分がやったこと

  • 社内勉強会で Kotlin を紹介する

    • まずは社内のエンジニアに Kotlin に興味を持ってもらうのが第一歩です
    • しれっと Intellij IDEA を見せる
    • 「開発効率化」「バグの減少」とかっていう特徴を擦り込む
  • 各種 Kotlin の本を自分の机や社内の本棚にしれっと置いておく

  • 他社 API のモックや検証に使うアプリをしれっと Kotlin で書く

まとめ

ギリギリになってだいぶメモ的な感じになってしまいましたが、以上が自分で検討したことなどです。 残念ながら今のところ採用には至っておりませんが、社内でのKotlinの認知度は着実に上がっております。 だいぶ辛くなってきたので、サーバーサイドKotlinを採用している企業様への転職も考えていますが・・・ 受託開発でJavaからKotlinへの移行を考えている皆様の参考になれば幸いです。

Have a nice Christmas & Kotlin!!