🐏

SheepMedical社のインターンに参加しました

2022/10/04に公開

7月から約3ヶ月間株式会社SheepMedicalでフロントエンドエンジニアとしてインターンに参加したので、学んだことや感想を書きたいと思います。
https://www.sheepmedical.com

自己紹介

大学院生です。
プログラミングは独学でHTML/CSSに始まりPythonとJavascriptなどを2,3年、ReactとTypescriptを今年から学び始めました。チーム開発の経験はアルバイトのみで、企業でのインターンはこれが1社目です。
同じような立場で初インターンに参加するときの参考になれば幸いです。

概要

SheepMedicalは未病の予防を目指した製品開発や、医療業界のDXを主な事業としています。インターンでは、歯科クリニックと患者をつなぐサービス(ハオシル)の開発にアサインされました。


https://www.sheepmedical.com
インターン中はKeigo Ebiharaさんに1対1でメンターとして面倒を見ていただきました。僕程度の質問だと、大体何聞いても答えが返ってきます。Reactの設計とかTypeScriptの仕様についても教えていただきました。

SheepMedicalではリモートワークも推進されていますが、インターンでは出社して勤務させていただきました。気軽に質問や雑談ができる環境で、慣れない身としてはありがたかったです。

やったこと

技術調査・コードリーディング

開発に参加するにあたって、まずはキャッチアップの時間をいただきました。
自分の技術スタックは前述の通りで、今回NextJSなど初めて触るものがいくつかありました。SSR?なにそれ?という状態から始まったんですが、煮詰まったときに質問できる環境と、実際のプロダクトを触りながら学べたことは理解の助けになりました。

バグ修正

ちょうどリリース前の期間だったのもあり、コーディングは簡単なバグ修正から着手しました。
基本的にはissueとして挙げられたものを潰していく感じだったのですが、自分で発見したバグや怪しいコードなども報告・対応させてもらいました。
発見した中には難解なものもあったんですが、「報告ありがとう。じゃあ俺の方でやっとくね」みたいなスタイルではなく、解決まで自分でできるようサポートしていただけました。

新UIの設計・開発

慣れてきたタイミングで、新規UIの開発を担当させてもらいました。
コーディングだけでなく、デザインのチェックや仕様まわりの相談といった段階から携わらせてもらったことで、Biz側の人が何を考えてプロダクトを作っているのかも知れて面白かったです。

開発はまずコメントプログラミングで設計を行い、レビューをもらってから作業を進めるという形で行いました。
当たり前ですが、最初に設計を詰めておくことで、行き当たりばったりな実装にならず、かなりコーディングの負担が軽減されました。また、最初に実装の方針についてレビュワーと合意してから作業に移ることで、手戻りも少なくお互いスムーズに進めることができるというのも発見でした。
これは個人的に他の開発の場面でも継続して行っていきたいなと思いました。

その他

チーム振り返り会の実施

リモートワークの方も多く、ステルス作業になってしまいがちな中、相談や知見の共有の場が設けられてよかったです。また、自分でも1週間のやったことやタスクを明確にできたので、この記事を書く時にも役に立っています。

LT会への参加

社内で月1のLT会を開催しているのですが、そこで発表させていただきました。日頃から大学の研究発表でボコボコにされているので緊張しましたが、当然詰められることもなく、気楽に参加できました。

学んだこと

フロントエンドの設計

Reactのコンポーネントや状態管理について、自分の中で噛み砕けていなかったんですが、後述の開発ドキュメントやレビューでの指摘を通して、何となくのパターンを学ぶことができました。
特にコンポーネントやhooksがそのページだけで利用するものなのか、アプリケーション全体で汎用的に利用するものなのか、などは今まで深く意識してこなかったので勉強になりました。

同様にコードの共通化についても、レビューで何度か指摘を受ける中で自分の中で少しクリアになりました。過度な共通化や抽象化がアンチパターンということは何となく理解していましたが、本質的に同じコードなのか、たまたま同じ処理をしているだけなのかを意識するだけでも適切に判断できる場面が増えるなあと思いました。

コメントを書こう

コードの中なり、PRを出す時なり、コメントを書くことの重要性を再認識しました。
当たり前ですがコメントの有無でコードリーディングの速度が激変しますし、イレギュラーな処理をしたときに後の人が頭を抱えることも回避でき、レビューでの指摘も二度手間にならずに済みます。
コメントは最低限の文量にするのが美徳だと思っていた時期もありましたが、考えを改めました。

レビュー指摘

インターン期間を通して、PRのレビューでいただいた指摘を集計してみました。
最も指摘を受けた内容は命名規則についてです。処理内容と名前が一致していない、名前から役割や内容がわかりづらい、他の変数名との整合性が取れていない、などなど。これは頑張って意識しても無限に指摘されました。難しいです。

"アーキテクチャ"は、コンポーネントの責務やディレクトリ構造、UIとモデルの分離などで指摘を受けたものです。上述の通り、Reactの設計を学ぶ上で非常に参考になるコメントを多くいただきました。

よかったこと

開発ドキュメントが充実

コンポーネント設計や型の使い方といったコーディングルールだけでなく、仕様決定の理由や用語集、歯科クリニック側のドメイン知識に関する記述も充実していました。おかげで開発の全体像が見えやすく、自分のように途中からプロジェクトに参加する立場でも"よく分からずぼんやり疑問に思いながら作業する"みたいなことが少なく、ストレスフリーでした。
あと歯について詳しくなりました。

タスクの明確化

基本的にタスクは全てGitHubのissueで管理して、PRのマージと同時にクローズという形式をとっていました。このときに取り組むタスクの範囲(事前条件やゴール)が明確化されていることが多く、着手しやすかったです。
これは自分が取り組んでいたタスクが比較的簡素なものだったことと、メンターと密にコミュニーケーションをとれる環境だったおかげもあるかもしれませんが。

まとめ

インターンでありながら、エンジニアの方と同じ立場で開発に参加させていただいたことで、非常に学びが多く、楽しい経験になりました。
改めてお世話になったSheepMedicalの皆さん、ありがとうございました!

Discussion