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

現在カミナシ社でエンジニアとしてインターンをしている@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もカミナシで使われているという理由で当初を採用してみましたが、こちらの料金体系も大規模でない個人開発には向いていなかったと記事執筆時の今では思います😇

BEENOSでフロントエンドエンジニアとしてインターンした話

2021/8/9~8/20の2週間、BEENOS株式会社さんにてフロントエンドエンジニアとして就業型のインターンをさせていただきました。

ネットにBEENOSのエンジニアインターン体験記事が転がっていなかったので、今後参加される方に向けて、そして備忘録としても感想などをつらつら書いてみようと思います。

簡単な自己紹介

Webアプリケーションエンジニアを目指している、都内の文系学部3年生です。

プログラミング経験としては、ReactとTypeScriptを使った簡単なWebアプリを個人開発した経験があったのみです。就業型のエンジニアインターンに参加するのは今回が初めてでした。

参加に至った経緯

サポーターズの逆求人イベント「エンジニア1on1面談」にてBEENOSのエンジニアと人事の方とお話しさせていただきました。そして後日、カジュアル面談をさせていただいた際、インターンに興味あればということで直接ご案内いただきました。

BEENOSさんが開発されているプロダクトには個人的にとても共感できるものがあり、もっと知りたいと思ったため、インターンの参加希望しました。そして、書類選考と面接をさせていただき、ご縁あってオファーをいただくことができました。

選考中は、インターンで何に取り組みたいかを詳細に聞いてくれたことが、とても好印象でした。(後述するのですが、「可能であれば小さめのチームで裁量を持って働きたい」と希望したところ、その通りのプロジェクトにアサインされました。)

インターンで取り組んだこと

今回、僕はBEENOSの新規開発チームにて、ランディアBellというサービスの開発に携わらせていただきました。
ランディアBellは、ビデオ通話を使ってブランド品などをリモート査定・買取ができるというサービスです。

その中のビデオ通話部分の開発を担当しました。
WebRTCという新しい技術を使った開発だったため、参加前はかなりびびってました。。

感想

新規開発だったこともあり、数名の小さなチームでの開発でした。メンターの方と二人三脚でゴリゴリ開発していくような雰囲気で、ある程度の裁量も持たせていただきながら、自由に楽しくコードを書いていくことができました。

プロジェクトとしてはWebRTCという技術そのものの概念を理解するのが難しく、慣れるまで大変でした。(もう少し予習しとけばよかったです。。)

振っていただいたタスクの中で印象的だったのは、ReactのState管理方法を検討、導入するというものです。

特にプリミティブ型(booleanやstringなど)の単純なStateだけでなく、WebRTC特有の型を持つオブジェクト型のStateを一括で管理しなければならなかったため、予想以上に難しく感じました。

このような、プロジェクトの礎となる重要なリファクタリングのタスクを任せていただき、自分にできるかとても不安でしたが、メンターさんの力も借りながら、なんとかこなすことができました。

これまでの個人開発の経験では、動けばいいだろの精神で、将来を見据えてリファクタリングするということをしてこなかったため、自分としては初めての良い経験でした。

まとめ

実際にプロダクトにのるコードをお金をいただきながら書く、という経験が初めてだったので、緊張感を感じながらとても楽しく開発ができました!

僕のような人(gitはcommitとpushくらいしかしたことがなくて、GitHub上ではプルリク出したりIssueを切ったりなんてしたことのない人)を受け入れていただき、本当にBEENOSさんには感謝でいっぱいです。

これまで個人でコードを書いてきたけど、実務経験はないよ!というエンジニア志望学生にはとってもおすすめのインターンです。もちろんゴリゴリのつよい学生エンジニアの方も、そのレベルにあった業務が与えられると思います!

(エンジニアインターン自体はたくさん採用はしていないようで、インターン同士で一緒に和気藹々と開発という感じではなく、社員さんのチームに混ぜていただくという感じでした。なので、インターン同士で横のつながりを増やしたいみたいな人には向いていないかもしれないです。)

開発の基礎でわからないことを優しく教えていただきながら、自分のできる範囲+αの挑戦ができます。

2週間ありがとうございました!