第一開発事業部では配属後、新卒研修として約2か月間、写真共有WEBアプリケーションの作成を行いました!
本記事では、未経験から開発に挑んだ私が初めて開発を行った際に学んだ「技術」と「開発の進め方」について振り返ります。
アプリ開発の土台:使用技術と構成図
本研修では、フロントエンドにVue.js/TypeScript、バックエンドにPython/AWS Lambda、インフラ構築にAWS CDKを使用した写真共有WEBアプリケーションを作成しました。ユーザー認証の実現にはAmazon Cognitoを使用し、認証機能を持つWebアプリの基本を学びました。
概要図は下の図のようになっており、AWS Lambdaは3つに分け、それぞれ画像一覧取得、画像詳細取得、画像編集・削除操作といった責務を持たせています。
開発の流れとして、まずローカル環境でバックエンド→フロントエンドを構築し、動作が確認できたら本番環境用にインフラを追加しました。この後の開発をスムーズに進めるため、まずは開発の土台となる計画立てから始めました。
開発の第一歩:仕様の理解と「自律的な」タスク管理
実際に手を動かす前にまずは仕様書を確認し、行うべきことと期限を決めていきました。
私自身初めての開発作業だったこともあり、システム構成の概要を掴むことや、必要なタスクを適切な粒度で洗い出すことは大変でした。そのため、仕様書の読み込みには2日をかけじっくりと行い、そこから必要なタスクはAIも活用しながら洗い出しました。
具体的なAIの活用としては、『仕様書から読み取るべきタスクの粒度』を相談したり、『このタスクはどれくらいで完了するか』などといった期限の目安を決める際に使用しました。
スケジュール管理にはSlackのCanvas機能を用いて、主要タスクとそれを構成するサブタスクを作成し、細かい作業のイメージができるようにしました。スケジュール期間については、バッファ(余裕期間)含めてどれくらいで終わるのかまでを考えました。また、祝日なども含め初めての作業は期限を長く設けるように意識し、余裕を持って作業を進められるようにしました。
この計画を経て、実際にコードを書き始める前の設計が、その後のスムーズな開発に不可欠だと身をもって学びました。
実装前に方向性を決める:アーキテクチャ設計の取り組み
仕様の理解とスケジュールを立てたところで実装に移るのか…!と思いきや、まずはアーキテクチャを考えていきました。この設計部分は、後の作業で修正コストを抑えるために重要だと感じ、時間をかける価値があると考えました。
アーキテクチャとは、システムの流れやディレクトリ構成について決めることです。初めは何もない状態から開発が進むため、全体の流れを決めておくことで「どういった方向で開発を進めるのか」「各操作の関係はどうなっているのか」が明確になり、作業がスムーズになります。
具体的には、実装に入る前に以下の点を明確にしました。
- 責務の分け方:
各モジュールやコンポーネント(部品化された機能/要素)がどのような役割(責務)を持つかを定義する。 - ディレクトリ構成:
責務に応じてファイルを配置し、どこに何があるかを明確にする。 - 使用モジュール:
外部ライブラリ(便利な機能を集めたコードの集まり)や技術の選定と、それぞれの操作の連携方法を決める。
最初に全体の方向性が決まっていると、コードを書き始めた後の仕様変更や修正が非常にしやすくなることを実感しました。
その後、AWS CDKのコードを使って、Amazon CognitoやAWS Lambdaなどの実装の準備を完了させ、「API(バックエンド) → フロントエンド」の順で迷うことなくスムーズに実装を進めることができました。
効率を高める設計と思想:より良いコードへ
バックエンド(Python/AWS Lambda)の実装時には、実務レベルで求められるコードの品質について学びました。
- 型安全の恩恵:
TypeScriptをフロントエンドで使用したことで、型安全(データの種類[型]を厳密に扱うことで、プログラムのミスを防ぐ考え方)のメリットを実感しました。APIの仕様(リクエスト・レスポンスの型)を定義することで、フロントとバックエンド間の連携ミスを事前に防ぐことができました。
- ログの重要性:
実際の運用を見据え、ログの構造化やフォーマット化を行いました。単なる文字列ではなく、JSON形式などで必要な情報(タイムスタンプ、リクエストIDなど)を含めることで、後のデバッグや監視の負担が少なくなることを学びました。
終わりに
これまではプログラミングは「動けばOK」なものだと思っていたため、型安全やログといった運用を踏まえての考え方は衝撃でした。また、PRレビューを通じて、プログラミング原則や設計思想といったものが存在することを知りました。
今後はレビューに頼るだけでなく、自分でリファクタリングできるようにプログラミングの書き方や考え方について深く学んでいきたいです。