見出し画像

いい生活エンジニアインターンの振り返り

はじめに

こんにちは。バーミンガムでの留学の傍ら、株式会社いい生活様(https://www.e-seikatsu.info/)にてインターンをさせて頂きました。今回はその振り返り記事になります。
2022年12月から2023年8月中旬まで、営業支援チームと物件広告チームにてフルリモートでバックエンドのインターンをさせて頂きました。
CS(Computer Science)専攻でもなければ開発経験もなく、また時差もある中でも快く受入れ頂いた皆様には本当に感謝申し上げます。ありがとうございました!


きっかけ

学部4年生の時、卒業研究でpythonを使って研究をしていました。当時からプログラムで新しいものを作ることや、コーディングそのものが何となく楽しいなと感じていました。
修士1年の4月にGoogle STEPというCS分野におけるマイノリティ(女性や障がい者など)向けのソフトウェアの基礎講座を受講し、エンジニアという職に興味を持ち始めました。
講座の修了後、当時メンターの方からリモートインターンの探し方等を教えていただき、ご縁があって株式会社いい生活さんでお世話になりました。

会社概要

今回インターンでお世話になった株式会社いい生活さんは、不動産テック(Real Estate Tech)を事業領域とした不動産会社のDX化を推し進めるSaaS企業です。
不動産会社は単に物件を紹介するだけでなく、物件の募集や顧客管理、入居の際の契約手続き、幅広い業務が存在します。
株式会社いい生活さんではそれをサポートする様々なアプリを開発されています。
(なんと家賃等の住まいに関する決済サービスも展開されてます!)

やったこと

週2日ほどインターンとして参加いたしました。時差があったので、英国時間の7時に始業し、その後メンターさんや営業支援チームでのデイリーミーティングに参加していました。お昼を取らせていただいた後午後3時頃に終業していました。授業が被った日は休憩を長めに頂いたり、反対にストライキで授業が無くなった際は出勤したりと、フレキシブルにご対応いただきました。

業務では

  • 研修 (SQL基礎や自社開発APIの導入)にはじまり、

  • 営業支援・物件広告での機能追加

  • バグ修正

  • リファクタリング

  • ユニットテスト

  • 振る舞いテスト

等幅広く経験させていただきました。

機能追加の際、ボタン追加等のタスクでフロント側のお仕事を少し拝見したのも大変勉強になりました。

新規機能開発では、自社開発のAPIに実際に触れる部分から外部APIとの連携部分まで担当させていただきました。
既存のコードに追加修正するだけでなく自分でエンドポイントを作成したり、メソッドを作成するようなタスクにも携わらせていただきました。

OneAPI

営業支援や物件広告等、いい生活サービスの要となるのがOneAPIです。OneAPI はいい生活の主要サービスのバックエンドとなっている自社開発の API です。
OneAPIにはたくさんのエンドポイントがあり、複数人での実装が常です。そのため、プロダクトの品質を保つための業務も非常に重要です。
OneAPIのクライアント開発者のためにインターフェースや仕様をOpenAPI Specification(OAS)に記載したり、コードの編集やライブラリのアップデートの際バグ混入に気づくための振る舞いテストを記載したり、実装そのもの以外の大切な部分についても勉強させていただきました。

営業支援

今回主にお世話になった営業支援チームでは、その名の通り不動産会社における営業の業務をサポートする営業支援アプリを開発しています。アプリはお客様提案や来店予約受付の自動化の機能を持ち、顧客とのコミュニケーションツールとして活用されています。

物件広告

インターン後半には、物件広告チームでの開発にも携わらせていただきました。
こちらも名前の通り不動産の物件広告の作成や、不動産ポータルサイトへの広告の一括出稿等をサポートするアプリを開発しています。

所感

自分だけで研究や趣味のコードを書く時には意識していなかった、業務として開発することについて実感しました。プロダクトを開発する側としてプロダクトそのものをきちんと理解すること、他者の書いたコードがある中で自分の実装をすること、新規機能を複数で話合い、実装の方向性を進めていくこと、皆さんにとっては当たり前のことだとは思いますが、私にとっては全てとても新鮮な経験でした。
OneAPI自体が大きいプロダクトであったため(今でもMRを出す時点で少し緊張しています)、最初は理解に時間がかかりました。エンドポイントを繰り返し叩いてレスポンスを読んでいくにつれ、タスクを渡された際にここに実装すればいいのかな、とある程度推測できるようになったと思います。

実際に関わることはありませんでしたが、営業支援のチャンネルでクライアントへのヒアリング→課題設定の流れも見ることができ、エンジニアの業務幅の広さも垣間見ることができました。
また、細かい文法やコード記法についても意識するようになりました。reviewdog(git上でソースコードのレビューをしてくれるツール。犬のアイコンと共にインデントや余計なスペース等を指摘してくれます)に怒られまくりだったので、リーダブルコードを片手に個人開発でも意識していきたいと思います。
slackでいつもわからないと騒いでいた際も、必ず誰かが解決策やヒントを持っていて、遅い時間の中お付き合いいただき大変ありがたかったです。自身での知識不足を勉強していくのはもちろんですが、わからないときに気軽に尋ねることのできる環境は心地よいものでした。

学んだところ

チーム開発では自分の書いたコードをMRする際、必ず1人以上のレビュアーに確認してもらった後、リリース用のブランチにマージされます。そのため、自身の実装一つ一つにフィードバックを頂き、大変勉強になりました。
コードレビューを経て、特に可読性を意識するようになりました。以前からもわかりやすく書こうと意識はしていたものの、実際レビュー頂いた後に見返してみると、何やってるかわからないな...。と思うコードであることもしばしばありました。
私は「わかりやすいコード」を書くためにコメントアウトで説明することが多かったのですが、レビューを頂くにつれコメントアウトは極力減らして、コードそのものでわかるように記載することが大事だと感じました。
指導いただいたものを一例に挙げますと、

for code, item in CODEMAP.items():
    if 'type' in item and item['type'] == 'mail':
        # itemの名前を集約する
        if 'name' in item:
            names.add((code, item['name']))

のようなコードでは

names = {code: item['name'] for code, item in CODEMAP.items() if item.get('type') == 'mail'}

など、基本的な部分ではありますが余計な行を追加してコードが冗長にならないよう調整しました。
特にdict周りの処理の簡潔化は意識してできるようになったと思います...!
また、エラーコード時のログの書き方やログにどの情報をいれるか、についても非常に勉強になりました。
プログラミング(特にコーディング面接)ではついついアルゴリズムの理解や強化が重視されがちですが、コードそのものの可読性・初めて読む人でも何となく理解できるようなスクリプト構成についても洗練していくべきですね。

後はローカル環境でエラーが多発していた際、とりあえず再起動する、で解決できる事例がいくつもあることを学びました...。
その他にもたくさん丁寧にご指摘いただいたおかげで自身の未熟さに向き合う機会も多くなり、後述する業務外での勉強のモチベーションにもつながりました。

業務で詰まったところ

前述しているように、OneAPIはいい生活サービスのほぼ全てをカバーするような自社開発APIで、とても大きなプロダクトです。研修でAPIについて一通り学ばせていただいたものの、実際にタスクが与えられた際にどの部分に実装を追加すればよいのか、また各APIの連携部分はどのように対応すればいいのか、少し戸惑う部分がありました。
また、追客や反響など、不動産の業界用語に慣れるのにも少し時間がかかりました。

業務外でやったこと

就業の度にまだまだだなと思うことが常にあったので、手探りながら勉強しました。
タスクの間に余裕があるときは業務内でも勉強させていただいていました。

本を読む

研修を始めた際に、業務に入るうえでの前提知識が足りないなと感じ、焦って読み漁りました。
割と入門的なものを中心に読みました。

  • Docker & Kubernetesのきほんのきほん

  • web技術がこれ1冊でしっかりわかる教科書

  • Linuxブートキャンプ

  • リーダブルコード

  • Web API: The Good Parts


など、月に1冊読むように意識しました。

Qiita・Zenn等で気になった記事を読んだりする

活字中毒なので(調味料の成分表示とかを見るタイプ)、色々な記事を読んで新しいことを理解するのは勉強というよりも趣味として楽しかったです。
特に参考になった記事↓

Gitでよく使うコマンド一覧

常に開いていました。大変お世話になりました。
https://qiita.com/uhooi/items/c26c7c1beb5b36e7418e#git-reset

図解 DB インデックス

インデックスを作成するタスクの時に読みました。インデックスの意義から実用例まで詳しく図に落とし込まれているので理解しやすかったです。
無料でこんなに読んでいいのか...という気持ちになりました。
https://zenn.dev/suzuki_hoge/books/2022-12-database-index-9520da88d02c4f

いまさらだけどDockerに入門したので分かりやすくまとめてみた

12月くらいに読みました。Dockerなにそれ?の状態からなんとなくわかるになりました。
https://qiita.com/gold-kou/items/44860fbda1a34a001fc1

Flaskで何か作ってみる

ある程度本を読んだ後に、実践のような形でwebアプリを作ってみました。
htmlやcss、javasciptはchatGPTと一緒に勉強しました。

(動的なフロントもやってみたかったのですが、いまいち未だ良くわかっていいので今後の課題です)

  • GoogleAPIと連携して鴨肉料理のお店を探すwebアプリ

  • シミュレーションアプリ(修士研究の成果のひとつになりました!)

実際のアプリを使ってみる

ローカルの営業支援アプリや物件広告アプリで、適当に物件や顧客を登録してk9s上(Kubernetes上のリソースをコマンドライン上で操作するツール)で何が動いているのか見たりしました。実際のプロダクトでバックエンドとフロントエンドの挙動を確認できて感動していました。

その他

  • sshまわりの簡単な理解
    私のローカル環境がだめだめだったので、途中からいい生活社内にある野良マシンにつないで開発させてもらうことになりました。 ssh接続が良くわからなかったので、Microsoft Azureで仮想マシンを作成し、sshコマンドを試したりしました。

  • 色んなサイトのAPIを試す
    LINEのmessageAPIに関わるタスクの際、外部APIと連携してできることの幅が広がるの、楽しいなと思い、messageAPIを自分のLINEアカウントで試してみたり、DeepLのAPIを試してみたりしました。

難しかったこと(今後の課題)

前述したように、環境構築が難しかったです...。特に初期はローカルのエラーが頻発することが多く、slackでは大変お世話になりました...。インフラ部分の知識を今後も継続的に入れていきたいです。

また、割り振られたタスクをもう少し素早く対処することも今後の課題です。タスクが与えられた際の理解→計画→実装→テストのサイクルが遅いなと感じました。特にテストの部分ではローカルのどこでどんなテストをするか理解が危うく、1つのタスクの大半の時間を費やしていたと思います。理解→計画のフェーズをもう少し時間をかけて深めていくことが大切だと感じました。

今後について

帰国後は日本の大学院に復学する予定です。
インターンを通じてエンジニアの志望度がぐっと強くなりました。まだまだ未熟な部分が多いので、今後もCS周りの勉強は続けていきたいです。
修了後は就職の方面で動いていたのですが、現在は博士進学も考えています。
帰国後に指導教員と相談しつつ決めていきたいと思います。

最後に

改めて本当にお世話になりました、ありがとうございました!
DockerやGitすらままならない最初でしたが、なんとか業務で使えるように離れたのかなと思います。常に新しい技術を勉強して取り入れていくエンジニアの働き方に触れられて、とても良い経験になりました。
リモート業務にも関わらずコミュニケーションが円滑で、少し参加させていただいた懇親会では皆さんとてもあたたかい雰囲気で楽しかったです。春には大阪まで来ていただきありがとうございました!
本当にたくさんの方に助けていただいたので名前を挙げるときりがないのですが、特にメンターの杉原さんには最初の面談から今まで懇切丁寧に助けていただき、大変ありがとうございました。

また東京に行く際にはぜひご挨拶させていただけますと幸いです。

この記事が気に入ったらサポートをしてみませんか?