フリーランスエンジニアの雄貴です!
今回は新規開発案件に参画した際にどんな感じで業務をしているか、私の経験した事例ではありますがお話ししようと思います!
私自身がフロントエンドをメインに活動していますので、その観点での話が多いですが、全体の流れはバックエンドも共通していますので、ぜひご覧いただけると幸いです。
Youtubeではエンジニアの単価が上がる情報発信しています!
毎週木曜日の21時から、ライブ配信やってますので、気軽にお越しください😁
案件の内容
自社サービスの新規開発案件で、SPAのWEBサービスを開発します。
SPAについてはこちらをご覧ください。
フロントエンド には「Nuxt.js」を使用し、バックエンドには「Ruby on Rails」を選定しています。
私はフロントエンドエンジニアとして参画したので、Nuxt.jsの開発を主体的に実施していました。
プロジェクトの体制
メンバーは以下のようになっています。
- プロジェクトマネージャー(PM): 2名
- デザイナー: 1名
- フロントエンドエンジニア: 2名
- バックエンドエンジニア: 3名
また開発の流れは大枠はウォーターフォールで実施しますが、ドキュメントなどは最低限の仕様のみチーム内で共有できる程度でガッツリとしたものは残しません。
開発フェーズに入った際には部分的にアジャイル形式になるなど、臨機応変に最適な体制をとる方針でした。
一般的なtoBやtoC向けのサービス開発であれば融通が効きやすいので、割と自由に動くことができます。
開発の流れ
要件定義
こちらはPMが顧客からヒアリングして要件をまとめます。
このフェーズではエンジニアが参画することはあまりないので、要件がある程度固まってきてからチームを編成していくことになります。
設計
要件がある程度固まってくると、PMとデザイナーとで要件のすり合わせを実施し、デザイナーがサービスの画面デザインを作成します。
この時ワイヤーフレーム(WF)と呼ばれる最低限の機能やUIのみを記載した画面デザインを作成します。
具体的には以下のような項目を記載します。
- 各画面の大まかなレイアウト、機能
- 画面導線 (どの画面からどの画面に遷移するか?の導線)
WFが完成した後に、チーム全体でレビューを実施します。
その際以下のような観点でレビューし、課題を洗い出します。
- UI/UXの検討
- 開発の観点での懸念事項
- 要件漏れ、矛盾のある機能になっていないか
画面設計にてWFがおおよそ固まってきたら、テーブル設計を並行して実施していきます。
こちらはバックエンドエンジニアメインで設計し、その後、PMとバックエンドエンジニア、そしてバックエンドのリードエンジニアでレビューを実施します。
画面操作などUIに関わることがあればフロントエンドもレビューに参加します。
そのレビューが完了した後に、決定したテーブル設計をチーム内に共有する流れになります。
画面設計、テーブル設計のレビューがある程度完了したら、詳細設計を実施していきます。
と言ってもドキュメントにガッツリ細かく記載することはなく、ザックリ方針を決めたりするのみです。
私はフロントエンドなので以下の観点の方針を決めました。
- コンポーネント設計
- ストア設計
- 共通機能の設計
- テスト観点の洗い出し
- インフラ構成
コンポーネント設計やストア設計はSPA開発を実施する上で必要になってくる設計です。
コンポーネントとは画面を構成するレイアウトを細かいパーツに分割したものです。
設計方針に「atomic design」を採用しているので、こちらのサイトをご覧になるとイメージできるかと思います。
ストアについては少し説明が長くなるので、大まかに言うとJavaScriptで保持するデータ構造をどうするか?を設計することです。
共通機能ですが、これはどの画面でも共通して使用する機能をどう設計するか?を決めます。
具体的には、ユーザーのログイン認証処理や認可処理、またサーバーサイドとの非同期処理などを指します。
この辺りはサーバーサイドとも密接に関わる部分なので、すり合わせをしつつ進めます。
またどのテスト観点で実施していくかも大まかに方針を決めます。
重点的に品質を担保したい部分をテストコードで確認していく観点ですね。
この案件ではビジネスロジックやバリデーションなど、重要でかつ膨大なテストケースになりそうな部分を観点としました。
全てを単体テストで担保するのが理想ですが、今回は納期も厳しい状況でしたので、選定した箇所のみに絞りました。
またインフラ構成もこの段階で検討します。
実際にインフラチームとサーバーサイドエンジニアとすり合わせをしてどのような構成にしていくかを決定します。
インフラ構成によって、フロント側で実装する内容も大きく変わってくるので、早い段階で決めておく必要があります。
詳細設計と並行して、工数見積もりとWBS化してスケジューリングしていきます。
WFで定義された各画面の機能を細かいタスクに分割し、それらに対して工数を見積もっていきます。
この工数見積もりが一番難しい。。
私はPERT法と呼ばれる算出方法を良く使用しており、完了すると思われる時間に対してバッファを設けるようにしています。
それでも正しい算出は難しいので、見積もり算出後はチームメンバーとレビューし合って、無理のない工数を算出していきます。
そしてその工数をWBSと呼ばれるスケジュールに落としていきます。
その際にどのタスクから完了させて行った方が効率が良いか?を考慮した上で構築します。
こちらも完成したらメンバー同士でレビューを実施します。
開発
設計が完了したら、いよいよ開発です。
ただ完全に設計が全て完了してから開発すると言うわけではなく、「設計できた機能からドンドン開発していく」というスタンスでやっています。
あくまで効率重視に実施していくところですね。
機能が開発できたら開発者が単体テストを実施します。
サーバーサイドであれば単体テストをほぼ全てのコードに実施していくのですが、フロント側でそれをやると効率が落ちてしまうので、ロジックを含まない画面レイアウト作成程度であれば、画面上の動作確認ですましています。
ただ、「スナップショットテスト」と呼ばれる、各コンポーネントで変更点がないか?の確認は毎回実施するようにしています。
そしてテストが完了したらプルリクエストを出してメンバーにレビューしてもらいます。
今回はフロントエンド のテストとして「E2E」と呼ばれるテストは実施していませんが、途中の仕様変更があまりない案件であれば、開発の段階でE2Eを実施していることも多いです。
テスト
こちらのテストフェーズは、開発者が実施するテストではなく、QAと呼ばれる品質管理をメインとしたチームに確認を依頼します。
実施する内容は結合テストですね。
シナリオは開発側が作成しチームでレビューしたものを実施してもらう方針でした。
その際に不具合があった場合は、エンジニアがその都度修正していくという流れになります。
リリース
テストフェーズにて品質が確認できたらいよいよリリース作業に入ります。
基本的にはインフラチームが主として実施するのですが、不具合があった場合には開発側も即座に対応できるように待機します。
このフェーズが一番ハラハラして、心臓に悪いんですよねw
一番大事なこと
一番大事なこと、メンバーと協力して開発していくことです。
大きなシステムだと1人のエンジニアがどれだけハイパフォーマンスでもできることには限りがあります。
そして自分自身も技術的にも知らないことも多いので、メンバーの協力は必要になってきます。
技術的に分からない点や他メンバーが困っている内容などを共有して解決する場を設けて、助け合える環境づくりを一番意識しています。
一緒に作り上げる仲間ですので、相手の気持ちを考えて関わっていくように努めています。
最後に
以上、 WEBエンジニアの新規開発案件での実務内容について私の経験を元にお話ししました!
意外に思われるかもしれませんが、プログラミング開発をする時間よりも、仕様を固めて設計し、工数を算出し計画する段階に一番時間を欠けているんですよね。
そして何よりチームとして活躍できるように意識して臨むことが大事だと考えています。
技術や経験も様々なので、助け合って開発していけるチーム作りが大事ですね!
Youtubeではエンジニアの単価が上がる情報発信しています!
毎週木曜日の21時から、ライブ配信やってますので、気軽にお越しください😁
コメント