見出し画像

初めてのフレームワークでバックエンドづくりに挑戦

こんにちは、「Vimmerになりたいエンジニア」のせーじです。
ナビタイムジャパンでスポーツビジネス事業に所属し、Web、バックエンド開発を担当しています。

ヘルプ(短期間の異動)先でしまなみ海道サイクリングアプリ『SHIMANAMI JAPAN』のバックエンドを担当しました。開発に使用した言語(kotlin)は、普段私は使っていない言語かつフレームワークだったのでなかなか大変でした。

本記事では、不慣れな言語でゼロから開発し、直面した課題や克服した方法についてお話ししたいと思います。
※技術的な話には言及しません。

サービスのバックエンドを初めて1から作る & 実は普段使わない言語、フレームワーク ということで私としてはかなりチャレンジングなものでした

https://note.com/navitime_tech/n/n93f70aeabbfa

『SHIMANAMI JAPAN』については、下記 note をご覧ください。



Spring Boot」でバックエンド作って!

ヘルプまでは、地図の配信サーバーの開発、運用を担当しており、Go や Node.js、シェルスクリプトなどを中心に利用し開発を行っていました。

一方でヘルプ先では様々な事情から「Spring Boot」+ Kotlin でバックエンドを1から作って欲しいと言われました。

新卒研修 (2年前) から Kotlin を使って開発はしておらず、私自身のスキルは高くありません。また、「Spring Boot」は名前しか聞いたことなく、便利だが、難易度が高めのフレームワークのイメージでした。

加えて、バックエンドを1から作ったことは業務ではありません。私にとってかなりチャレンジングでしたが、お話をいただけたこと自体は嬉しく、「いい機会だしチャレンジして新しいスキルを身につけてやる!」という気持ちで挑戦しました。

開発開始!

初期:とにかくインプット

「Spring Boot」についてはソースコードを見たこともなく、全く仕組みがわかりませんでした。ただ、幸いにも社内ですでに動くプロダクトが存在したため、local の開発環境を整え、API を試しに作ってみたり、片っ端からファイルをいじってみたりと、「このコードを変えたら動作がどう変わるか?」をインプットしました。

最初の1週間ほどのコードを書いている時間は、ほぼすべてをインプットに費やしたと思います。色々と試す過程で、Google 検索や「ChatGPT」を利用し、「Spring Boot」の仕組みや設計、Kotlinの言語仕様について学びました。

「実現したいが方法がどうしてもわからない」場合などは、社内で有識者を探し、直接質問をしました。ありがたい限りです。

中期:アウトプット、そしてまたインプット

「Spring Boot」の使い方もある程度理解し、簡単な機能の開発が終わりました。次はユーザー認証やナビタイムジャパン独自の移動ログ保存機構との連携など、私が今までまったく関わってこなかった、知らない部分です。

これらの機能については私が知る限り、社内で「Spring Boot」を使った実装実績がなかったため(そもそも「Spring Boot」で実装されているサーバーが少ない)、Java や Go などの他言語のプロダクトを参考に実装を行いました。

当たり前ですが、一筋縄では行かず、ここについても社内でユーザー認証の有識者や移動ログ保存機構の有識者を探し、質問する&実際に動かして試すことを繰り返しました。

開発後期:インプットとアウトプットを繰り返す

機能が出揃ってきて、更にこんな機能がほしい、もっとこういうの実現できないか?、運用する上であると便利なツールなど、今まで後回しにされていたセキュリティ周りについて対応を行いました。

この段階では「Spring Boot」についての知識も付き、やりたいことについてある程度私で調べて試すことができるようになりました。

なので片っ端から要望に対応しました。

新しいスキルを身につける上で大切だと思っていること


私自身は新しいことにチャレンジする、学ぶことが好きです。今回の『SHIMANAMI JAPAN』のバックエンド開発もとても勉強になり、また楽しかったです。

私が「わからないこと」に挑戦する過程で大切にしていることは

  1. 読むだけではなく、動かして試す

  2. わかる人に聞く、調べる

  3. 近い概念を参考にして学ぶ

です。

1.読むだけではなく、動かして試す

結局、読んで、理解したつもりになっても、実際は誤った理解である可能性があります。
幸いプログラミングはlocalであれば、試しに動かしても、基本的にはリスクはありません。

2.わかる人に聞く、調べる

これが一番大切だと思っています。

知識がないと、難しいことは考えられないし、うまい質問もできません。
最初はとにかく知識をつけ、質問のための質問をするようにしています。

だんだんと知識がついてきたら、次は試して、質問をする。

気がつくと的確な質問ができるようになり、質問回数も段々と減っていき、自走して学べるようになります。

3.近い概念を参考にして学ぶ

今回の開発では Java や Go のプロダクトも参考にしました。
言語は違えど、実際のコードについては参考にできる部分が多いです。言ってしまえば、Kotlin へ書き換えれば動きます(実際には最適化などは必要ですが)。

最後に

新しいことに挑戦した時、必ずと言っていいほどわからないことだらけです。その時、「どうやればうまくいくか」を考え続けるかどうかで挑戦がうまくいくかどうかが決まってくると思います。

偉そうなことを言いましたが、私は新しいことにチャレンジする時は必ず躊躇します。まったくできなくて投げ出したくなることもあります。

そんな時は「誰かにできるなら自分にもできるのでは?」と思いながら、「わからないこと」を「わかること」にするために

  1. 読むだけではなく、動かして試す

  2. わかる人に聞く、調べる

  3. 近い概念を参考にして学ぶ

を繰り返し実践しています。

正直、人間の能力はそれほど違いがありません。どうやればよりよくできるか、を常に考えるメタな思考が結果に大きな違いをもたらします。

あとは、人生は半分ぐらいは運ですので、自分を高いレベルに保つ努力をすることと、運をつかめる生き方をするという二つが大事かなと思います。

何が言いたいかというと、ちゃんとやるつもりならば必要以上に心配しなくていい、ということです。うまく行くときもそうで無いときもあると思いますが、どんな結果になろうとも、その努力は今後の人生の大きな糧になると思います。

学生時代の先生の言葉

『SHIMANAMI JAPAN』アプリのバックエンド開発でも、色々な方に助けていただきながら前に進むことができました。ありがとうございました。

これからもよりよいサービスを作れるように全力を尽くして行きます。今回の note が誰かがチャレンジへの一歩目を踏み出す後押しになったら幸いです。

最後までお読みいただき、ありがとうございました。