研究コードを全部Kotlinで書いた話

これは Aizu Advent Calendar 2018 の 20 日目の記事です。
前の人は @crotchet_kuro さんで、次の人は @4rotsugd さんです。

adventar.org

はじめに

大学生最後のAizu Advent Calendarなので研究の話をします()。研究コードを全てKotlinで書きました。というのも研究がモバイル関連の研究でAndroidを書くためにKotlinを書き始めたのがきっかけです。最初は結構ひどいコードでしたが8月頃にすべて書き直しまして無事に完成しました。その時に、恐らく僕の研究は引き継がれませんが「仮に引き継いだ時に後輩が読めるように書こう」と思い結構新しめの技術を使ったりして書き直したので、その時得た知見なんかを書いていきます。ちなみに研究コードなので外部への公開はできないのでご了承ください。

Android

Android Architecture Components

Android Architecture ComponentsGoogle I/O 2017で発表されたコンポーネント群です。いまではGoogle I/O 2018で発表されたAndroid JetPackの一つとなっています。モバイルはデータ収集特化になっていてJetPackの他の機能は使いませんでした。正直JetPackに関してはTechBoosterさんのJetPack Handbookがめっちゃわかりやすいです。最初はMVVMとか雰囲気で書いていたのですがTechBoosterさんのおかげで助かりました... 🙏🙇

Fuel

FuelAndroidでHTTP/HTTPS通信する際に用います。LiveDataに対応しているためAndroid Architecture Componentsといい感じに使えます。非同期通信も書き方を少し変えるだけでできるのでお手軽です。最近はAndroidアプリで通信処理行うときだいたいこれで書いてます。これに関してはそこまで記事は書いていないのですが一応技術書典で執筆しました。

gcf.syfm.me

サーバ側

Spark

サーバ側ではSparkを使いました。今回サーバ側はちょっとした処理をしてJSONを返す役割くらいしかなかったのでSparkを用いて軽いAPIサーバを作りました。後述しますがGAEとの相性がちょっと微妙でデプロイ完成するまでが大変なのであまりお勧めしません。今ならKtorもありますしSpark使わなくてもよかったなっていうのはありました。この時はSpark Kotlinを知らなくSpark Javaで書いてしまっていて、いま大学の講義でSpark Kotlinでサーバサイドを書いていますがSpark Kotlinのほうがかなり書きやすいです。

GAE

サーバのコードのデプロイ環境としてGoogle App Engineを用いました。まだGAE触ったことなかったので「良い機会だし触ってみよう!」って思ったのとGoogle Cloud Datastoreを使ってみたくてGAEを採用しました。この実装直後、研究室でAWSやってたらしくてちょっと悲しくなりました。教授からも「AWSあるので移行したほうがよいかもしれません」と言われましたが、もう卒業間近なので多分移行はしないです。
ちなみにGAE + Sparkで問題起こったときにこちらを参考にしました🙇

www.bunkei-programmer.net

まとめ

研究コードをKotlinで書いたのも相まって今年はKotlin一色の一年でした。いまやっている大学の課題コードも趣味コードも全部同じような技術を使って実装しています。自分の中で何かしらアプリケーションを作るときは新しい技術(ライブライ、フレームワーク、Kotlin 1.3.0)などを取り入れて開発しているので毎回新しい知見を得られて楽しいです。この記事がKotlinをやっていく人の助けになれれば幸いです。