🎐

サーバーサイドKotlinはじめました!

はじめに

はじめまして!シェルフィーでテックリードをしているレノンと申します。
これまでGreenfile.workはPythonでプロダクトを作ってきたのですが、今回段階的にKotlinに置き換え始めました。
✌️
使用技術についてはこちら!
この記事ではこのプロジェクトの始まりや言語選定のときに意識したことについて書こうと思います!

なぜKotlinを選んだのか?

Python時代の課題

弊社はGreenfile.workというサービスを作っていますが、構想段階だった2018年末からバックエンド開発の言語としてPythonを選んで開発を始めました。
当時は立ち上げということもあって、 お客様にヒアリングをさせていただきながらアノ機能も足りない、コレも足りないといった感じだったので、コードの品質は二の次にして、とにかく機能を足していたと聞いています。
2020年に私が入社したときは、さらなるニーズが見つかったこともあり、 後にリリースする入退場機能やその他検証のためにいくつかほぼプロダクトに近いような大きな機能を新たにつくっていました。
その頃くらいから 「簡単な変更をしたくても密結合でやりたいことがすぐできない」 「dictionaryに何が入っているかprint()しないとわからない」 など、サーバーサイドのコードは保守性が低い状態になっていました。
また、チーム全体で質とスピードについてもうまく捉えられておらず、 「ユニットテストを書く時間がない」という声が上がっており、テストコードがない状態で開発が進んでいた状態でした。
とはいえ、どの機能が本当に価値を提供できるかわからないようなプロダクトのフェーズで、 目の前のお客様の要望に応え続けて検証する必要があった状況もあり、この問題は一旦横に置いておいていました。 (ちなみに、これは今の自分が当時に戻ったとしても横に置いておくと思います。危機感や提案くらいはするかもしれませんが。)
そのフェーズを超えてからはいよいよエンジニアの負担が大きくなっていきました。 そうして2021年の9月頃にこのままではプロダクトを育て続けていくのは難しいと判断し、エンジニアマネージャーの鈴木やテックリードの柳に相談して別の方向性を模索しはじめました。
当時プロジェクトが発足したときのNotion。
当時プロジェクトが発足したときのNotion。

言語選びのときに大切にした軸

1つ目の軸は「静的型付け」であることです。
私達が対象にしている建設業界は業界そのものが複雑なので、 いかにドメインの知識をコードに落とし込むかがより大切になってきます。 その場合、クラス設計がしやすい静的型付けの方が相性がいいと思っています。
また、今後チームやサービスがスケールしていく上で、 静的型付けであれば各エンジニアのレベルに左右される度合いを小さくでき、複雑度の上昇はある程度抑えられると考えています。
2つ目の軸は「チーム開発に向いている」ことです。
チームの拡大に伴って、他人が書いたコードの割合も多くなっていきます。 簡潔に書けることやいわゆる黒魔術みたいなことが起こりにくいことが大事だと考えました。
3つ目の軸は「ライブラリが充実している」ことです。
私たちのプロダクトではPDFやExcelといった帳票の出力も行っているため、 そういった処理がしやすいライブラリが提供されているかどうかも大事なポイントでした。 また、例えばコレクションを操作するためのfilterやmapなどのメソッドが標準で提供されていると前述の読みやすさにも繋がると思いました。
4つ目の軸は「採用で不利にならない」ことです。
私たちは言語はあくまでもサービスを実現するための手段だと思っています。
とはいえ、スタートアップの転職市場において敬遠されやすい言語であったり母数が少ない言語だと、採用上で不利に働く可能性があると考えこの軸を4つ目としました。
 
最終的に上記の軸をもとに検討した結果、今回私たちはKotlinを選択しました。 Javaのエコシステムを使えるというのも大きいですね。 Spring Bootなどは経験者も多いので、学習コストが相対的に低いと思っています。
Kotlinに決まった瞬間のエンジニアマネージャー鈴木。喜んでいます。
Kotlinに決まった瞬間のエンジニアマネージャー鈴木。喜んでいます。

やってみて今のところどう?

3月末にKotlinの1つめのAPIをリリースしましたが、安定して稼働しています。 1APIずつ置き換えていくので全体でいうとまだまだ先は長いですが、やっと1歩目という感じです。
はじめてのKotlinリリース時のSlack。みんなたくさん盛り上がってくれました!
はじめてのKotlinリリース時のSlack。みんなたくさん盛り上がってくれました!
今は施工体系図という書類の機能をKotlinで開発しています!
サーバーサイドKotlinも最近は他社さんでも導入事例をよく目にするようになっているので、一緒に盛り上げていけたら嬉しいですね!

おわりに

まだまだ始まったばかりですが、より良いサービスへと進化させるべく引き続きKotlinと共に頑張っていきたいと思います!
よかったらKotlinについて情報交換できたら嬉しいです!気になる方はご連絡ください!
 
採用もめちゃくちゃ頑張っているので、Kotlinに興味がある方やプロダクトに向き合うことがお好きな方はぜひ一度お話しましょう〜!