水平野(すいへいや)

思ったこと考えたことを書いていく

Kotllinでウェブアップ開発で思ったこと

概要

Kotlinでウェブアプリケーションを作るきっかけがあったのでそのことについて感想を書く。

背景

開発を始める私の状態は以下のようだった。
・JavaおよびJava EEについて学習中でSpringは学習したことがないし、業務としてJavaは縁がなかった。
・GlassFishは何回か勉強で触っていたがあまり印象がよくなく、あまり触らなかったがWildFlyの方が開発が進んでいるという印象を持っていた。
・Kotlinについては触ったことがなかったが、Javaより書きやすい言語であるというイメージがあった
またプロジェクトとしては小規模なものであり、納期もそれに準じたもので試すというより完成を目標にしていた。

目標と期待

目標としてはIDEはKotlinを作ったJetBrains社のIntelliJ IDEA Community Edtion 2019を使い、ウェブアプリケーションのフレームワークはJava EE7でウェブアプリコンテナはJava EE 7対応のWildFlyで稼働することにした。
期待としては書きやすいKotlinを高機能なIDEAの組み合わせで生産性の向上があった。
また、さらにJava EEのフレームワークを組み合わせさらに軽いWildFlyで運用することで高速の開発が可能であると見込んでいた。

経緯

そして開発に取り掛かった。
開発機ではまだIDEAは未インストールだったのでさっそくインストールし、WildFlyもインストールした。
インストールが終わったらすぐに開発に取り掛かったのだが、ほどなくして何度も原因不明のエラーに悩まされることになった。
結論から言えばKotlinはCDIとの相性が悪く、この記事の通り
Kotlin で始める JavaEE 7 〜 JPA + CDI + JSF 〜
https://blog1.mammb.com/entry/2015/05/17/150230
多くのクラスは
public open class Hoge {
open var bar
}
とデフォルトではなく冗長な修飾子を付け加えなければならなかった。
また何かエラーが起きたときにはKotlinの問題なのかJava EEの問題なのかWildFlyの問題なのかの切り分けきず、組み合わせによって高速性を狙ったのにそれどころかそれぞれの学習コストがかかりむしろ時間がかかる状態になった。
また学習が足りないことから進捗状況が分からないようになってしまった。
そこで途中からフレームワークは使わずServlet/JSP出の開発に切り替えたのだが、それまでのコードが無駄になってしまい、また切り替えた方がいいかどうかの判断で多くの時間を費やしてしまった。

結果

切り替え後は開発は進んだし進捗も見えるようになったが設定された納期内で完了はできなかった。
おそらく初めからServlet/JSPでの開発であれば完了できていたと思う。

感想

以下の経験で思ったことは、
・Kotlinは型推論やGetter/Setterの補完などコードが短く書きやすい
・JavaからKotlinの学習コストはそれなりにかかる
・Kotlinはテキストエディタでも書けるが当然IDEAとの相性がいいのでそれで書く方が断然よい
・ただし、事情によってEclipseなど他のIDEを使わなければならない場合はKotlinは避けた方が良いかもしれない
・Sevlet/JSPをKotlinで書くのはJavaで書くよりもやりやすい。というよりJavaはきつい
・Kotlinは少なくともJava EEとの相性がよくない

まとめ

いくつかの前提条件が付くがKotlinでウェブアプリケーションを開発するという選択肢はありだろう。
ただし前提条件は意識する必要がありそれは、
・サーバーサイドのフレームワークは使わない
・Servlet/JSPなのでプロジェクトは小規模な物に限る
・IDEAを使う
であり、これらを同時に満たす必要があるだろう。