カミナシでエンジニアインターンの研修として個人開発した話

現在カミナシ社でエンジニアとしてインターンをしている@azoookidです。

今年の1月にカミナシ社にジョインし4ヶ月ほど経ちましたが、今回はインターンの研修として個人開発をすることになった話となにを作ったかについて書いていこうと思います。

私は誰

大体1年くらい前から本腰を入れてwebフロントエンドの勉強をはじめた大学生です。カミナシに入るまでは個人開発といくつかの短期インターンで、Reactなどを書いていました。フロントエンドまわりの知識は多少ありましたが、バックエンドに関してはほとんどなにもわからない状態でした。*1

成果物

サービス概要

留学経験者と気軽に話ができるサービス「StuBro」を開発しました。

これから留学に行く人や留学を検討している人が、気軽にその国・地域で実際に留学を経験した人と話すことができるプラットフォームです。

実態としてはMENTAのような感じで留学経験者側がメンターとして登録し、それに対してユーザーが話したい!とリクエストを送れるような形です。

一応デプロイまで行ったのですが、サービスとして決済まで導入しているにもかかわらず、作りが本当に最低限で、公開できる代物ではないので、スクショだけ数枚おいておきます。

 

StuBro紹介ページの画像

StuBro紹介ページ

留学経験者一覧ページの画像

留学経験者一覧ページ

面談申し込みモーダルの画像

面談申し込みモーダル。入力し「決済画面へ」を押すとPayPayの決済画面に遷移する。
使用技術

なるべくカミナシで使われている技術(太字)に近いものを使うべく、以下のような構成になりました。

  • React(Next.js), TypeScript, Redux
  • Golang, gorilla/mux
  • Vercel, GCP (Cloud Run), PlanetScale
  • Docker, OpenAPI Generator, Firebase Auth, PayPay SDK

個人開発の感想

結論から言うとめちゃくちゃ良い経験でした!

React, TypeScript, Vercel以外は自分にとってはじめての技術で、openapi-generatorからAPIクライアント(typescript-axios)やAPI(go-server)を生成したり、RDBのテーブル設計をしたりなど、新しいことにたくさん挑戦できました。

また、上司の方に週1でメンターしていただいたことで、少しずつアドバイスをもらいながら開発ができたので、これほど自分にとって初めての技術だらけでもなんとか作り切ることができました。本当にありがたかったです。

特に大変だったこととしてはAWSでインフラ構築をすることでした。というのもカミナシではAWSが使われていることから、個人開発でもAWSを使って環境構築したら良い勉強になるのでは、ということでAWSVPCを作るところから最終的にECS on FargateにAPIのコンテナイメージをデプロイするというところまでを行いました*2。ただこれが自分にとっては本当に難しくて時間がかかり、今後サービスを自分で運用していくなかでメンテナンスをしていくのは厳しいと判断し、フルマネージドでコンテナデプロイできるサービスを使うべきだと考えました。そこで最終的にGCPのCloud Runを採用しました*3

とはいえ、ネットワークに関する知識が本当に一ミリもなかった自分にとって、AWSで環境を一から構築してみるという経験は、ネットワークやインフラの体系的に学ぶことができたという点でとても良かったです。

個人的推しの技術選定

インフラとして選定したVercel, GCP (Cloud Run), PlanetScaleです。どれも無料枠大きく、フルマネージドな点が個人開発ととても相性が良いと思い採用しました。

  • Vercel
    Next.jsとの相性は言わずもがな。SSRまで勝手にやってくれるなんて。。素晴らしすぎますね。

  • GCP(Cloud Run)
    ひたすらにお手軽でした。Container Registryにコンテナイメージをアップロードして、あとはCloud RunのGUI上でちゃちゃっとすぐにデプロイが完了しました。Cloud Run側でhttps化してくれるのもとてもありがたいなと思いました

  • PlanetScale (https://planetscale.com/)
    最近話題のサーバーレスDBサービス。1ヶ月あたり10GBのストレージ使用、1億回の読み込みが無料で可能。個人開発ではよっぽどスケールするまでは無料枠をこえることはないかと思います。

実際とても簡単に導入、デプロイなど行えたため、このアーキテクチャは今後別の個人開発プロダクトを作る時も使っていきたいです。

まとめ

というわけでカミナシにインターンとしてジョインしたら、(お給料をもらいながら)かなり贅沢な個人開発をさせてもらえたという珍(?)体験記でした。現在はすでに実際のプロダクト開発に関わっており、楽しく開発に勤しんでいます。

今回の個人開発プロダクトに関してはいずれちゃんとサービスとして運用していきたいと考えています。ただ、OpenAPIの定義がガバガバですでにメンテナンスがちょっと大変だったり、個人的にGoよりTSのほうが慣れているのでAPIはNestJSとかにしたかったりと色々整備していきたいことが盛りだくさんなので、また気が向いたらそこらへんから触っていこうと思います!

*1:具体的にはTS以外の言語なにもわからん、RDBなにもわからん、コンテナなにもわからん、インフラなにもわからん状態

*2:こちらの本のおかげでなんとか成し遂げることができました

AWSコンテナ設計・構築[本格]入門 | 株式会社野村総合研究所, 新井雅也, 馬勝淳史, NRIネットコム株式会社, 佐々木拓郎 |本 | 通販

*3:App Runnerも考えましたが、使用するメモリリソースに対して課金されてしまうため、もしかしたらほぼアクセスがないかもしれない個人開発には向かないだろうという判断をしました。そもそも、Fargateもカミナシで使われているという理由で当初を採用してみましたが、こちらの料金体系も大規模でない個人開発には向いていなかったと記事執筆時の今では思います😇