株式会社ホープス / バックエンドエンジニア
受発注システムのスクラッチ開発
【業務内容】 オフィス家具メーカーI社の受発注システム開発 【担当フェーズ】 - 新規開発全般(サーバサイド) (アジャイル/スクラム) - 新メンバーのフォロー 【開発内容】 開発・実装① 【概要】 テストのためのダミーデータの準備および自動テストコードの作成 【どのような機能の開発・実装か】 「H2」という内蔵DBを使う形で、正常系、異常系に分けてそれぞれのAPIの動作を確認しました。 プロダクトに想定以外の事象がないかを確認するための実装です。 【課題・問題点】 パターン漏れやテストケースが難解で見る側がわかりにくい問題がありました。 【打ち手・使用した技術】 テストシナリオを設計してチームに共有してフィードバックを頂いた後に実装して漏れがないようにしました。 特にテストパターンの作り方について周りの先輩エンジニアに質問したりして身につけるように努力しました。 また、何の目的でテストするのかどのようなポイントをテストしたいのかを見る側も分かりやすいように設計しました。 開発・実装② 【概要】 検索APIの設計、実装 【どのような機能の開発・実装か】 家具の発注状態を検索するためのAPIで各種配送状態、決済状態等、物流全般の情報が含まれます。 【課題・問題点】 仕様を完全に理解せずに開発して手戻りが頻繁に発生し、 約束した納期に間に合わない問題が発生 【打ち手・使用した技術】 仕様に対する理解不足を解消するため、物流プロセスに関する書籍を読みながら勉強する 手戻りを減らすために作業前にやることを先に洗い出して作業を進む(レビューをいただく)。 開発遅延の原因を解るように「なぜなぜ分析」を行う。 【開発環境】 Java | Groovy | SQL | Micronaut | Spock | Git & GitLab | Docker | PostgreSQL 【メンバー数】 4名(発注チーム) 【役割】プログラマー 主なタスクとしてはプロダクトオーダー(PO)からの仕様説明を徹底的に聞いて 仕様どおりにAPIの内部ロジックを実装、 またはビジネスロジックの自動テストのためのテストコードを作成する役割でした。 【仕事を通して学んだこと】 (1) 課題を見つけ、解決のためのプロセスを選択し、新しい価値を生み出すこと。 日々やることはスプリントプラニング段階で詳細化しておくため、 かなり明確ですが、私が担当した教務以外にもDBでの無駄なSQLが乱立して性能が低下されたり、ジャンクインサートの速度の問題点を見つけて、その単位を1000行ずつ読み取る形に変えたりしてアプリケーションの性能に貢献できるようにしました。 この過程で公式ドキュメンタリーを参照して解決するように努力しました。(OpenCSV、Micronautなど) それらを読み込んでからコードを書き始めましたが、 分からないところが沢山ありましたので日本語、韓国語、英語を問わずグーグルで調べながらコードを書きました。 (Qiita、stackoverflowなど) 自力で解決できそうにない問題である場合もすぐに諦めることではなく、開発リーダーやシニアエンジニアに質問し、工数を減らすことと共にアプリケーションのクォリティを上げることに貢献できるようにしました。 (2) 日々、スキルを伸ばす努力 毎日必要な部分を自習しておりますので、 個人的に技術的な疑問や提案があれば共有して皆が見られることができた方が良いと思い、プロジェクトマネージャに提案しました。 結果的にスラックのチャンネルが作られて全ての開発メンバーが必要な内容を質問したり回答したりすることができるようになりました。 【仕事で大変だったこと】 開発作業を行う際に大変だったところは、開発側と設計側の認識のずれに伴い、仕様が大きく変わったり、 影響を及ぼす範囲が広くなって工数が増えてしまったりしたことでした。 また、実際に開発を始めないとどれくらい時間がかかるのかそれを開発に着手する前に把握するのが難しかったのですごく勉強になりました。下記の解決方法をTryとして実行していきたいと思います。 過去の作業時間を振り返って逆算して所要時間を出す。 全体会議や無駄話で時間が延びる時があるので少しのバッファを追加する。 タスクを詳細化する際に全員と話しをすることで見積もりに甘いところを見つける可能性が高めること。