Appearance
職務経歴
個人情報
- 氏名:近藤祥平(コンドウショウヘイ)
- 職業:フルスタックWebエンジニア
- 生年月日:1992/10/15
- 居住地:愛知県
職務経歴
会社名 | 期間 | 概要 |
---|---|---|
NTTコムソリューションズ | (新卒)~2017/4 | ・SIerプロジェクト参画 ・開発 |
オープンロジ | 2017/4~2020/10 | ・フルスタックエンジニア ・開発、運用保守 |
タノム | 2020/10~(現在) | ・フルスタックエンジニア ・開発、運用保守 |
直近の仕事
BtoB SaaSにおける機能開発
概要
- BtoB SaaSプロダクトに対し、顧客の要望に基づいた機能開発を担当。
- バックエンド、フロントエンド、データベースまでを含めた、フルスタックな開発を遂行。
プロジェクトの実施理由
- プロダクトの成長戦略に基づき、顧客の業務フローを鑑みたDX向上や新規顧客獲得に繋がる機能を開発することで、事業貢献を目指した。
関係者
- 開発:自身
- 要件定義:PdM(プロダクトマネージャー)
- 要望起票:Biz(CEO/営業/カスタマーサポート)
- QA担当:自身 / QAエンジニア
自身の担当フェーズ
- 要件定義・設計
- 要件定義にあたって、PdMに求められたデータをSQL等で取得することで、技術的な実現可能性をPdMと協業して検討。
- Figma等で作成されたデザイン案をもとに、Vue.jsでプロトタイプを作成し、PdMにフィードバックするサイクルを回した。
- 開発中に発生した懸念点をPdM/Bizと話し合い、課題解決に貢献。
- 実装
- Laravelフレームワークを用いたバックエンドAPI開発。
- DDDを用いたビジネスロジックの実装、テーブル設計やインデックス設計、認証認可処理など、機能に必要なサーバーサイド処理全般を担当。
- ユニットテストの実装による品質確保。
- Vue.jsを用いたフロントエンド開発。
- HTML/JavaScript/TypeScript/SCSSによる記述。
- 状態管理に、データの永続性の度合いに合わせて「コンポーネント内」または「Vuex(LocalStorageの有無)」を判断して実装。
- PC/タブレット/スマホのレスポンシブ対応を、SCSSで実装。
- LINE内ブラウザを考慮したうえでの開発。
- Laravelフレームワークを用いたバックエンドAPI開発。
- テスト・QA
- 開発した機能に対する結合テストを実施。
- QAエンジニアと連携し、新機能やデグレード等の観点を持ったテスト項目を作成。
- 発見されたバグの修正、およびその対応策の実施。
- 本番データを用いたパフォーマンス観点でのテストを実施。
- リリース・運用
- 週次リリースでの、MySQLのオンラインDDLを用いた、ノーメンテナンスダウンでのリリースを実施。
- 破壊的な変更を発生させないような開発を遂行。
- Slack上でのエラーログ監視やカスタマーサポート経由でのユーザー問い合わせを受け、AWS AthenaやSentryを用いたアクセスログ等の解析、障害対応
- 週次リリースでの、MySQLのオンラインDDLを用いた、ノーメンテナンスダウンでのリリースを実施。
関連アウトプット
- TODO: BtoB Saas開発中に考えてること
- TODO: レビューのやることリスト
画像最適化CDNの構築
概要
- SaaS上からアクセスされる画像を返却するCDNを構築。
プロジェクトの実施理由
- 既存の画像最適化Webサービスの値上げを踏まえ、移行によるコスト低減(1/20)を目指した。
自身の担当フェーズ
- 技術選定
- AWSのCloudFrontとLambda@Edgeを採用し、AWS CDKによってIaCとしてインフラを構築。
- CloudFrontとLambda@Edgeの採用理由
- 他の候補として「既存の画像最適化Webサービスの継続」や「Cloudflare Images」があった。
- 金額的なコスト、システム構築にかかる実装コスト、他社での構築事例などを総合的に鑑みた結果、CloudFrontとLambda@Edgeの採用に至った。
- AWS CDKの採用理由
- 社内でのAWS CDKによる稼働実績の知見を蓄積するため。
- IaCとすることで、メンテナンス性の向上を図るため。
- システム実装
- CloudFront
- キャッシュポリシー設計
- 悪意のあるリクエストが大量に来た場合に、画像最適化処理が実行されないよう調整。
- レスポンスヘッダーポリシー設計
- 今回の利用シーンでは、CORSリクエストと非CORSリクエストが混在するため、意図しないブラウザキャッシュが発生しないよう調整。
- CloudFront Functions
- リクエスト送信時に発行した署名を検証する機能を実装。
- キャッシュポリシー設計
- Lambda@Edge
- 画像の縦横比と画像の切り抜きモードをリクエストで指定できるようにしたうえで、画像サイズと拡張子を最適化して返却する機能を実装。
- 既存の画像最適化WebサービスのAPIパラメータを維持し、破壊的変更が発生しないように考慮。
- 最適化後の画像を新規バケットに保存することで、最適化処理の実行を最小限に抑えるよう設計。
- リクエストパラメータで既存のキャッシュを破棄するかどうかを指定できるように実装。
- AWS CDK
- 本番環境だけでなく、ステージング環境、QA環境、開発者ローカル環境でも新システムをデプロイできるように調整。
- CloudFront
- 既存サービスからの段階的な移行
- 影響範囲を最小限に留めるため、以下の段階的な移行を実施。
- 新規ユーザーに適用。
- 既存ユーザーのうち、規模が小さいユーザーをSQLで調査、およびBizにヒアリングしたうえで移行。
- 既存ユーザーのうち、規模が大きいユーザーをBizと調整したうえで移行。
- 影響範囲を最小限に留めるため、以下の段階的な移行を実施。
- 運用監視
- Lambda@Edgeで主要に利用されるエッジリージョンでのエラーログを検知し、Slackへ通知する機能を実装。
- Lambdaの同時実行数を試算したうえで、上限緩和を申請。
- CloudWatch Alarmで同時実行数のしきい値を設定し、検知時にSlackへ通知するよう設定。
関連アウトプット
Vue2 -> Vue3 リプレイス
概要
- Vue2で構築されたフロントエンドを、Vue3へリプレイス。
- リプレイスに伴い、ビルド関連ツールや、Vue3で利用できないライブラリの刷新も実施。
- 対象ファイル数(*.vue):約900ファイル。
プロジェクトの実施理由
- Vue2のEOL対応のため、技術的負債解消と将来的な開発効率向上を目的として実施。
自身の担当フェーズ
- 方針策定
- 社内でのVue.jsノウハウの維持、移行コスト、および今後の開発効率を総合的に考慮し、Vue公式が提供する「移行ビルド」を用いたVue3への移行を決定。
- ビルドツール刷新
- Vue.jsの刷新に合わせて、既存のWebpack/Laravel-Mixの構成を、Viteに置き換え。
- ViteのHot Module Replacement (HMR) 機能により、フロントエンド開発時のコード変更後のビルド時間が、従来から30倍〜60倍へ大幅な高速化を実現。
- Vite刷新に合わせて、デプロイ時のビルド等のパイプラインの更新
- Vue.jsの刷新に合わせて、既存のWebpack/Laravel-Mixの構成を、Viteに置き換え。
- バリデーションライブラリ刷新
- 既存のバリデーションライブラリのバージョンアップでは、既存コードへの大規模な改修が必要となるため、新規のバリデーションライブラリを導入することで、変更範囲を最小限に抑制。
- 新しいバリデーションライブラリは、Vue2/Vue3の両方で稼働することを条件とし、Vue2の段階でライブラリの刷新を実施。
- Vue2 -> Vue3 書き換え
- Vue公式の移行ビルドを活用し、最小限の改修範囲でVue3へバージョンアップを実施。
- リプレイス後は、開発チーム全体で「新規コンポーネントはVue3の書き方で実装」「既存コンポーネントは、修正時にVue2の書き方をVue3に変換する」という方針を定め、段階的な移行を推進。
関連アウトプット
- TODO: なにか書く
E2Eテストツール導入時のプロジェクトマネジメント
概要
- E2Eテストツール導入にあたり、外部の開発会社に委託した「ミニマムで求められるテストケース実装」を、プロジェクトマネージャーとして担当。
- プロジェクト期間:6ヶ月
- プロジェクト関係者
- 自社
- PM: 自身
- 開発会社
- PM: 1名
- 実装エンジニア: 1名
- 自社
プロジェクトの実施理由
- E2Eテストによる結合テストの自動化による品質向上。
- 外部開発会社の活用による、自社リソースの効率化。
自身の担当フェーズ
- テスト対象の洗い出しと優先度付け
- 実装エンジニアにサービスを理解してもらうため、主要な機能ごとに重要度を考慮し、テスト対象となる導線を洗い出した。
- テストケースの設計
- 洗い出した導線をもとに、納期と品質を考慮しつつ、実装エンジニアと共同で必要となるテストケースを設計。
- 実装レビューと品質担保
- 実装エンジニアのアウトプットに対し、「テストの可読性」「テストケースの共通化」「メンテナンス性を考慮したDOM要素の指定」などに重点を置いたレビュー観点を策定。
- 策定したレビュー観点を開発チームに共有し、レビュー実施を依頼することで、成果物の品質を属人化させず、高い水準に保つことを目指した。
- 進捗管理と外部折衝
- プロジェクト目標、残タスク、現状の課題に関する見積もりを基に、外部開発会社のPMと定期的に協議を行い、納期短縮と成果物の品質向上を両立させた。
自身の強み
- 技術的な課題解決能力
- 要件定義から設計、実装、テスト、運用まで、フルスタックな開発経験を通じて、幅広い技術的課題を解決してきた。
- システム全体の構造を理解し、技術的な選択肢を比較検討した上で最適な解決策を導く能力に長けている。
- 品質への高い意識
- テストやレビューを重視し、成果物の品質を高く保つための仕組み作りや、チーム全体の品質意識向上に貢献。
- 開発だけでなく、リリース後の運用保守まで含めた、品質保証の観点を持っている。
- プロジェクトマネジメント能力
- 外部の開発会社との連携や、チーム内でのタスク管理、進捗管理など、プロジェクトを円滑に進めるためのマネジメント経験が豊富。
- また、PdMやBizなど、他部署との連携をスムーズに行うための、高いコミュニケーション能力を持つ。
- 学習意欲の高さ
- 新しい技術や開発手法に積極的に取り組み、現状に満足せず、常にスキルアップを追求する姿勢を持っている。
- 技術的負債の解消や、開発効率の向上に貢献できる新しい技術の導入に意欲的。
今後にやりたいこと
- より複雑なビジネスロジックを伴う機能開発への挑戦
- 難易度の高い開発に積極的に挑戦することで、更なる技術力向上を目指したい。
- 特に、事業の根幹を担うような、高度な専門知識と技術力が求められる機能開発に携わりたい。
- 新しい開発領域への挑戦を通じて、技術の幅の拡張
- これまで培ってきたWeb開発の経験を活かしつつ、モバイルアプリ開発や、AI等の新しい技術領域に挑戦し、技術者としての可能性を広げたい。
- 新しい技術スタックやフレームワークを習得し、技術的負債の解消や、開発効率の向上に貢献できる人材を目指したい。
- プロダクトのグロースに貢献
- 顧客の課題解決に直接貢献できるだけでなく、プロダクト全体の成長を促進できるような機能開発や、サービス改善に積極的に関わりたい。
- これまでの経験を活かして、事業戦略に基づいた機能開発や、データに基づいたサービス改善を推進したい。
技術スタック
領域 | 名称 | バージョン | 経験年数 |
---|---|---|---|
サーバー | PHP | 7~8 | 7年 |
Laravel | 5~10 | 7年 | |
MySQL | 5.7, 8 | 7年 | |
フロント | React | (hooks登場以前) | 3年 |
Vue.js | 2, 3 | 5年 | |
TypeScript | 2年 | ||
インフラ | AWS | 7年 | |
AWS CDK | 2年 | ||
Docker | 7年 | ||
運用監視 | Sentry | 4年 | |
CloudWatch | 4年 | ||
その他 | Git | 7年 | |
Slack | 7年 |