【職務内容】
<経験業務1>
大手保険会社SOMPOのBtoC/SNSサービス インフラ移行(Hexabase→MySQL)に伴うAPIのリプレースおよびリプレースに伴うスクリプト作成など
技術環境: Typescript(Node.js /Express)/Jest/GitHub/Docker/AmazonAurora(MySQL)
<役割>チームメンバー10名(インフラ1、バックエンド6、フロントエンド2、PM1)のうちバックエンドエンジニアとしてAPI別に個別に割り振られたタスクを実装する
【実績】
未経験であったが、疑問点の切り分け、QCDへの意識、メンバーとのコミュニケーションを徹底して以下の結果をえた。
・改修担当機能:170個あるうちの40個のAPIをhexabaseからexpressにリプレースするための改修を一人で実施した。もっとも複雑なGETであったが進捗が一番出ていたため他メンバーのヘルプを行うほどスピーディーだった。
・最終的な成果について同等タスクのメンバーと比較して進捗や精度面で最もバランスが取れていて純粋な職務遂行能力では90%以上の評価を直属上長(PM)やリーダーからいただいた。
・対象地域を3つ選択するAPIのデバッグでは、1つの地域につき、都道府県、市町村、地域の3つを選択できるが一部の都道府県、およびそれに対応する市町村を除いて選択候補から除外して、なおかつ選択した結果に基づいて次の候補が選べるようにする必要があった。モノリシックでファットコントローラーの200行に及ぶコントローラを精査してデバッグを行った。
・TSでSQLクエリを用いてデータをインポートするバッチ処理を60ファイルのうち半分作成した。HexabaseのDB名とMySQLのDB名との間に互換性がなかったためリネーム用のシェルスクリプトも実装した。
<経験業務2>
大手薬局tomo’sのBtoC/処方箋電子化申請サービスに伴うバックエンド、インフラ機能拡張
技術環境: Typescript(AWS CDK)、DynamoDB、ApiGateway、Lambda
<役割>チーム3名(バックエンド1、フロントエンド1、PM1)のうちバックエンドエンジニアとしてほぼ全てのAPI、インフラの作成を行う
【実績】
以下のような新規知見を吸収し、知見を用いて検討するなどエンジニアとしての基本的な思考訓練を数多く行いながらバックエンドの唯一の担当者として経験年数が浅い中、進捗をだして、1ヶ月前倒しで完了させた。
・クリーンアーキテクチャに慣れた結果、単体テストを効率的に実施できて、本番リリース後にバグが見つかるといったインシデントが起きなかった。
・DynamoDBのqueryにおけるexclusive start keyについてドキュメントに未記載の仕様を突き止めて基本・詳細設計に反映させた。(例:exclusive start keyはlimitでちょうど取り切った時にlastevaluatedkeyが発行される。)
・サーバーレスアーキテクチャにおいてLambdaのCPU性能が貧弱なことによりDynamoDBへの数百件の単一GETリクエスト処理がタイムアウトすることをX-ray,CloudWatchのログ確認やコードコメントアウトによる動作確認により突き止めた。チームとのディスカッションによりデータ構造の集約化により負荷の重い呼び出しメソッドを減らすことを決めるとともに、個人的な提案としてBatchGetItemの使用およびPromise.all非同期処理の分割を提案してそちらも実装した。その結果、20秒タイムアウトしていた処理が10秒前後になった。
・GSIキーの設定をしていない状態でのフィルタリングはデータ取得件数のlimit指定よりも後で評価されるためフィルタリングされたメッセージ・データを1回で所定の件数まで取得できないという問題があった。ベースラインを所定の件数に達するか、lastEvaluationKeyがない状態として再帰処理で実装した。
<経験予定業務>
Woven by Toyotaのナレッジシステム
技術環境:Python(Django),Vue3
<役割>チーム4名(PM1,バックエンド3)のうちバックエンド・リーダー。後にメンバーとしてフロントエンドも担当予定