【振り返り】2023年スタートアップでの開発振り返り
はじめに
こんにちは。kouです。
2023年も残り僅かとなりました(現在 2023/12/31 21:19 🙂)。
現在自分が所属している会社(株式会社NoSchool)には昨年の8月に転職したので、2023年は丸1年間がっつり「オンライン家庭教師マナリンク(弊社が開発・運営しているサービス)」の開発に携わるという1年でした。
そんな2023年にマナリンク開発を通して学んだことや所感を、年の瀬の振り返りとして残しておこうと思います。
2023年の技術的な学び一覧
2023年のマナリンク開発を通じた学びを簡単にですが一覧にまとめました。
この1年を改めて振り返ってみると、Webフロントエンド・バックエンド・アプリなど、実に様々な技術的な学びのあった1年だったなと感じます。
以下では、改めて2023年のマナリンク開発業務を通じての学びを振り返ろうと思います。
2023年の振り返りと2024年に向けての課題
Webフロントエンド
Reactに対する理解が深まった
これまでReactを感覚で使用していたところが多かったのですが、改めて「そもそもUIとはなにか」「ステートとはなにか」といったことについてを学ぶことで、感覚ではなく意図を持ってReactを使用することができるようになってきたように思います。
また、React関連では、Next.jsにおいてのURLとuseRouterフックの見方が変わったことも大きな発見でした。Next.jsにおいてはURLがステートであって、そのURLを更新するという行為によって再レンダリングをトリガーさせることができることに気付いたとき、よりNext.jsを扱う上での選択肢が広がったような気がして嬉しかったです。
2024年は、こういった知識をより社内に共有・還元できたらなと思っています。
フロントエンドにロジックが寄るケースとフロントエンドテスト
Webフロントとアプリというクライアント側の開発が2種類あるため、フロントエンドにロジックを寄せるとWebフロントとアプリで2重にロジックを管理する必要が出てくることや、アプリのアップデートタイミングなどの観点から、基本的に開発全体としてはバックエンドにロジックを寄せることが多いのですが、2023年はフロントエンド側にロジックが寄るというケースを経験する機会がありました。
その際、ロジック自体は純粋関数として切り出すことでテストコードを書きやすい状態にすることができるなど、バックエンド側で培った知識がそのまま役立つことを実感しました。
一方で、コンポーネントのテストなどについては未だ知見が浅く、どういう基準でコンポーネントテストを書くかという基準が自分の中で固まり切っていないので、2024年はフロントエンドのコンポーネントテスト周りについてより学びを深めたいなと思っています。
アプリ
React Nativeでのアプリ開発をたくさんした
2023年はアプリ開発に携わる機会が多くありました。アプリ特有の機能を開発するというよりは、Webと同時にアプリでも同様の機能を実装するということがメインであったため、Webフロントで使用されているNext.js同様、同じReactを用いてアプリの開発をすることができ、とても良い開発体験だなと感じました。
ただ、スタイリングやディレクトリ構成等のアーキテクチャ周りについては書き方や置き場所が異なることがまだまだ多くあり、そのあたりをWebフロントと統一することができれば、より開発体験を向上させることが出来そうであるため、2024年はそのあたりの改善作業も積極的に行なっていきたいです。
また、React Nativeを用いたアプリ開発のデバッグ作業について、ネットワークが確認できなかったり、要素の階層構造がパッと分かりにくかったりなど、少しデバッグしにくいという課題があるので、なにか改善策がないか引き続き検討したいですね。
ストアを介したアップデートとOTAアップデートの違いを学んだ
Expoを使用したアプリ開発では、ストアを介したアップデートとOTAアップデートという2種類のアプリのアップデート方法があり、その違いについて学ぶ機会がありました。
これらのアップデートが、根本的にどういった違いでそれぞれ実現されているのかという部分についてはまだまだ曖昧な部分が多いので、今後より深掘りできたらなと思います。
バックエンド
テストコードは当たり前に書けるようなった
入社当時の2022年8月ごろはテストコードというものにあまり馴染みがなく、機能開発時は似たようなテストコードを参考にしながら都度そのテストコードの意味を調べるなどしてなんとか実装していた感じでしたが、2023年末の現在ではバックエンドのテストコードについては当たり前の行動として書けるようになりました。
またテストコードを書く中でも、「このクラスについては別で対応するテストコードを書いているからここではモックしよう」といった見極めもできるようになってきました。
2024年は、何でもかんでもテストコードを書くのではなく、結合テスト寄りの通しのテストに任せてしまっていい部分とそうでない部分の見極めをできるようにして、最小限のテストコードで最大限の効果を発揮するための方法を模索したり、保守・改修のしやすいテストコード(各テストケースが確り独立しており他のテストケースにできるだけ影響しないなど)を模索することなどをテーマとして考えていきたいです。
プログラミングの設計や原理原則に関することを多く学んだ
2023年はプログラミングの設計や原理原則に関する書籍を比較的多く読み、プログラミングの普遍的な原則などを多く学んだ年でした。SOLID原則を確りと学んだことや、オブジェクト志向というものの解像度が高まったりと、プログラミングに対する見え方が大きく変わったように思います。
また、この学んだことを踏まえて社内のメンバーと設計などについて議論をすることなどを通して、よりその知識を深めることができました(感謝)。
モデリングの重要性を学んだ
モデリングを確りしていると、テーブル設計などはそのモデルに応じて後から柔軟に設計することができる(モデルがテーブル設計に依存しない)ことや、モデルとして抽象化された部分のみで最小限のコードを構成することができることなど、様々なメリットがあることを学びました。
モデリングについては、技術的にドメイン駆動を実践する方法を解説している書籍はたくさんあれど、モデリングという行為そのものを題材としている書籍はあまりなく、このあたりは実際に手を動かしてあーでもないこーでもないと考え続けることがモデリングという行為への理解を深める一番の近道だなと感じました。
そして、この自分で考えたものを用いて、他のメンバーと議論し合うことができるともっと最高ですね。🐨
手探りでモデリングというものを実践していたときのノート
その他(開発プロセスなど)
はじめの要件定義の重要性を理解した
開発チームに機能追加のタスクが来る際、要件がふんわりした状態で来ることも多くあります。その際に、元々の達成したい目的に対していかにシンプルでわかりやすい要件定義をすることができるかが、実際に開発を担当するエンジニアにとっても、実装された機能を説明する必要のあるビジネスサイドにとっても、メリットのあることだということを学びました。なお他にも、要件がシンプルになるとその分工数もかからなくなって早くその機能をリリースできるなどのメリットもありますね。
この、いかに要求を正しく理解してシンプルでわかりやすい要件定義をすることができるかというのは、まだまだ全然スキルの足りていない部分なので、2024年に伸ばしていきたい部分ですね。
はじめの設計(DB設計、ドメインモデル設計など)の重要性を理解した
特にバックエンドのDBテーブル設計やドメインモデルの設計などは、ある程度実装し終えてしまってプルリクを出した後に手戻りが入ると痛すぎる部分であるので、このあたりは意識的にテーブル設計を終えた段階などでレビュー依頼することを意識していました。
テーブル設計やドメインモデル設計段階でのレビューが通ると、ある程度の方向性が固まるので心理的にだいぶ開発を進めやすくなるというメリットもあります。
最近は、テーブル設計をする際の自分自身の言語化用と、今後チームが大きくなったときのテーブル設計の際に一定のフォーマットに則ってレビューができることを見越して、テーブル設計に関するSlackのワークフローを作成するなどしていました。
テーブル設計以外にも、実装に入る前に事前にレビューを通しておくことが推奨されるようなものについては、2024年以降も引き続きこういったテンプレや仕組みを整備していきたいですね。
インフラ周りに関するサービス
Nuxt→Nextの移行作業周りに関してCloudFrontやその設定が記載されているCDKについて触る機会や、Next.jsのホスティング周りでAWS App Runnerを触る機会、調査系等でCloud Watchを触る機会があるなど、インフラに関わるサービスを触る機会もちょこちょこありました。
しかしながら、依然としてインフラの全体感に関する理解は乏しいままなので、そのあたりは2024年個人開発をするなどを通してサービス構成の全体感についての理解が深められればなと思っています。
おわりに
冒頭でも書いた通り2023年は色々やってますね。笑
スタートアップということもあり本当に様々なことを経験できる環境です。
興味がある方、ぜひ気軽にお話しましょう〜
2023年も1年ありがとうございました。2024年もよろしくお願いします。🐰
オンライン家庭教師マナリンクを運営するスタートアップNoSchoolのテックブログです。 manalink.jp/ 創業以来年次200%前後で売上成長しつつ、技術面・組織面での課題に日々向き合っています。 カジュアル面談はこちら! forms.gle/fGAk3vDqKv4Dg2MN7
Discussion