松熊利樹
Software Engineer
プロフィール
設計で手戻りを防ぎ、コードで即実行する。Web開発7年超のフルスタックエンジニア。10名チームのFEテックリードを経験。東京育ち、バンコク在住。ベジタリアン。昼休みは公園を散歩して日光浴するのが日課。旅行とビーチが好き。数学・会計・法律・哲学など、新しいことを学ぶのが何より好き。
スキル
フロントエンド
バックエンド
データベース
DevOps
テスト
職務経歴 全11プロジェクト
バックエンドエンジニア(マイクロサービス設計・実装)
5名生成AI翻訳SaaS•2025/04 — 2025/09BackendInfraTestingFastAPI + Celery + PostgreSQL + Redis構成の翻訳後処理マイクロサービス群。post-validationサービスの設計・実装に加え、フロントエンド開発環境のモダン化、Docker/GHCRデプロイ基盤構築、OpenAPIモック自動生成、E2Eテスト環境など開発基盤全般を整備
13タスク
バックエンドエンジニア(マイクロサービス設計・実装)
5名FastAPI + Celery + PostgreSQL + Redis構成の翻訳後処理マイクロサービス群。post-validationサービスの設計・実装に加え、フロントエンド開発環境のモダン化、Docker/GHCRデプロイ基盤構築、OpenAPIモック自動生成、E2Eテスト環境など開発基盤全般を整備
翻訳後処理の状態マシン設計と耐障害性のあるタスク基盤の構築難易度: 極高
翻訳後の品質チェック・再翻訳プロセスを9状態の状態マシンで管理し、各ステップの結果をすべてDBに不変データとして記録する設計にした。これにより翻訳精度に問題があった場合にSQLだけで原因分析ができるようになり、処理の進行状況もAPIで即時に確認できるようになった。各ステップをべき等なCeleryタスクとして実装し、コンテナ障害時もDBからキュー情報を復元して再開できる耐障害設計とした
担当・貢献
- •状態遷移ロジックとビジネスロジックを完全に分離し、疎結合で保守しやすいアーキテクチャを設計・実装した
技術的意思決定 (3)
状態マシンによる翻訳検証プロセスの制御
翻訳チェック→再翻訳のループを9状態の状態マシンで制御する設計にした。状態遷移ロジックとビジネスロジックを分離することで、条件分岐の変更が他のステップに影響しない疎結合な構造を実現した
可観測性を重視したイミュータブルスキーマ設計
全ステップの結果をDBに不変データとして記録する方式を採用。翻訳精度の問題発生時にSQLで原因を分析でき、将来のAIモデル改善にもデータをそのまま活用できる。また処理の進行状況をDB SELECTだけで把握でき、開発者の動作確認とビジネスサイドの翻訳品質チェックの両方の負担を軽減した
べき等なCeleryタスクによる耐障害設計
各状態遷移のステップをべき等なCeleryタスクとして実装。指数バックオフ+ジッターのリトライ設定により、APIのポーリング部分も安全に再試行できる。コンテナ自体が落ちてRedisキューが消失しても、DBに記録された状態からキュー情報を復元して処理を再開できる
成果・アウトカム (1)
Before: 翻訳後処理の進行状況がブラックボックスで、動作確認はログを目視するしかなかった
After: 処理状況をAPI一つで確認可能に。翻訳精度の問題もSQLで原因分析できるようになり、開発者・ビジネスサイド双方の確認工数を削減した
可観測性の向上と障害復旧能力
課題・解決 (2)
コンテナ障害時の処理復旧設計
Redisキューは揮発性のため、コンテナ再起動時にDBの状態から正しいキュー情報を復元する仕組みを構築。各タスクをべき等に設計することで、途中から安全に再開できるようにした
状態遷移ロジックとビジネスロジックの分離
状態遷移の条件分岐と各ステップ内のビジネスロジックを完全に別モジュールとして管理。どちらかを変更しても相互に影響しない疎結合な設計を実現し、保守性を確保した
デグレ防止打鍵仕様書の作成とAI活用テスト方針の策定難易度: 中
初回リリース後のリファクタリングに備えたデグレ防止用打鍵仕様書を作成。生成AI(agent-browser)の非決定論的動作の信頼性限界を正直に評価し、打鍵→E2E→コンポーネントテストへの段階的移行方針を策定。OnlyOfficeエディタ(Canvas実装)密結合部分はE2Eを諦め打鍵に限定する現実的判断
担当・貢献
- •生成AIの非決定論的動作の信頼性限界を評価し、段階的テスト自動化方針(打鍵→E2E→コンポーネント)を策定
技術的意思決定 (2)
生成AI(agent-browser)の非決定論的動作を踏まえたテスト方針策定
AIに無秩序に打鍵させるのではなく、段階的にテスト自動化を進める方針を策定。(1)まず打鍵仕様書で手動テストを体系化、(2)決定論的なE2Eテスト・コンポーネントテストへ移行、(3)agent-browserは打鍵ではなく決定論的なE2Eテストコードの生成にのみ活用
OnlyOfficeエディタ(Canvas実装)密結合UIのテスト方針
OnlyOfficeエディタのFake化はテスト有効性が低下すると判断。CanvasのDOM相対位置でのE2Eテストは不安定になりやすいため、正直にOnlyOffice密結合部分はE2Eを諦め打鍵に限定する方針に決定
成果・アウトカム (1)
Before: リファクタリング時のデグレ防止手段がなく、テスト方針も未策定だった
After: デグレ防止打鍵仕様書を作成し手動テストを体系化。生成AIの信頼性限界を正直に評価した上で、打鍵→E2E→コンポーネントテストへの段階的移行方針を策定。OnlyOffice密結合部分は手動テストに限定する現実的判断を文書化
テスト戦略の体系化と品質保証体制
課題・解決 (1)
Canvas実装のOnlyOfficeエディタに密結合したUIのテスト自動化の限界判断
テスト対象を「自動化可能な領域」と「手動テストが必要な領域」に明確に分離。OnlyOffice密結合部分は打鍵仕様書でカバーし、それ以外のUI・APIロジックはE2E・コンポーネントテストで自動化する方針を策定
翻訳検証機能の用語集設計とクリーンアーキテクチャ設計難易度: 高
翻訳検証機能全体のドメインモデル・用語集データ構造・クリーンアーキテクチャ(UseCase/Repository/Domain分離)を設計。生成AIの意思決定をDBに永続化するスキーマ設計により、検証プロセスの可観測性を確保した
担当・貢献
- •UseCase/Repository/Domain分離のクリーンアーキテクチャで翻訳検証ロジック全体を設計し、チームメンバーへのタスク分担を容易にした
技術的意思決定 (2)
UseCase/Repository/Domainの3層分離アーキテクチャの採用
翻訳検証ロジックをUseCase(ビジネスフロー制御)/Repository(データアクセス抽象化)/Domain(ドメインモデル・バリデーション)の3層に分離。生成AIの呼び出しをUseCase層に閉じ込めることで、AIモデル変更時の影響範囲を限定した
生成AIの意思決定をDBに永続化するスキーマ設計
生成AIが各検証ステップで下した判定(翻訳品質スコア・再翻訳要否・用語修正提案)をすべてDBレコードとして永続化する設計を採用。将来のAIモデル精度比較やプロンプト改善に必要なデータを蓄積する基盤とした
成果・アウトカム (1)
Before: 翻訳検証ロジックが設計なしの状態で、チーム内でのタスク分担の基準がなかった
After: 3層アーキテクチャにより各層の責務を明確化。チームメンバーがRepository層とUseCase層を並行開発できる体制を構築し、設計ドキュメントがタスク分担の基準として機能した
チーム4名での並行開発が可能な設計基盤の確立
課題・解決 (1)
生成AIの非決定論的出力をドメインモデルに組み込む設計
AIの出力を「判定結果」として型定義し、Domain層でバリデーション後にDBに永続化するフローを設計。AIの出力形式が変わってもDomain層のバリデーションで吸収できる構造にした
用語集の使用例検索における準完全一致アルゴリズムの実装難易度: 高
翻訳用語集の使用例検索で、表記ゆれ・助詞の違い・句読点差異を許容しつつ意味的に正確な一致を返すアルゴリズムを実装。全文検索では精度不足、完全一致では検索漏れが多発する問題を解決した
担当・貢献
- •全文検索と完全一致の中間に位置する「準完全一致」検索ロジックを設計し、表記ゆれを許容しながら高精度な用語検索を実現
技術的意思決定 (1)
全文検索でも完全一致でもない「準完全一致」方式の設計
PostgreSQLの全文検索(tsvector)は日本語の助詞・句読点差異で過剰にヒットし、完全一致では表記ゆれで検索漏れが多発。正規化処理(句読点除去・空白統一・助詞パターン許容)を適用した上で文字列比較する中間方式を設計し、精度とリコールを両立させた
成果・アウトカム (1)
Before: 全文検索では翻訳用語と無関係な文がヒットし、完全一致では表記ゆれにより目的の使用例を検索できなかった
After: 準完全一致アルゴリズムにより、表記ゆれ・助詞差異・句読点差異を許容しつつ意味的に正確な使用例のみを返すことで、用語集の実用性を大幅に向上させた
用語集検索の精度向上(誤ヒット削減とリコール改善の両立)
課題・解決 (1)
日本語テキストの表記ゆれパターンの体系化
翻訳対象ドキュメントから頻出する表記ゆれパターン(句読点「、」「,」の混在、助詞「は」「が」の入れ替え、全角半角の混在)を収集・分類。正規化ルールとして実装し、テストケースで網羅的に検証した
Celeryタスクの直列ネットワークIOをasyncioで並行化難易度: 高
翻訳API・用語集APIなど複数の外部サービスへの直列ネットワークIOを、asyncioイベントループによる並行実行に変更。Celeryの同期ワーカーモデルとasyncioを安全に統合するパターンを確立し、レイテンシとスループットを改善した
担当・貢献
- •Celery同期ワーカー内でasyncioイベントループを安全に起動するパターンを確立し、直列だった外部API呼び出しを並行化
技術的意思決定 (1)
Celery同期ワーカー内でのasyncioイベントループ統合パターンの採用
Celeryの同期ワーカー(prefork)モデルを維持したまま、タスク内でasyncio.run()によりイベントループを起動するパターンを採用。Celery自体をasyncワーカーに変更する案はエコシステムの互換性リスクが高く、スレッドプール(ThreadPoolExecutor)はIO待ちでスレッドが無駄に占有される問題があったため不採用
成果・アウトカム (1)
Before: 翻訳API・用語集APIへの呼び出しが直列実行で、3つの外部APIを順番に待つため1リクエストあたりの処理時間が長かった
After: asyncio.gatherで外部API呼び出しを並行実行に変更。直列実行時に各APIの応答時間の合計だった処理時間を、最も遅いAPIの応答時間まで短縮
外部API呼び出し部分のレイテンシ削減とスループット向上
課題・解決 (1)
Celeryの同期実行モデルとasyncioの共存
Celeryのpreforkワーカーはプロセスベースのため、各タスク内でasyncioイベントループを新規作成して使い捨てる方式を採用。イベントループのライフサイクルをタスクスコープに限定することで、ワーカー間の干渉を排除した
コンテンツコントロール付与の文章マッチングアルゴリズム最適化難易度: 極高
ドキュメント内の翻訳対象箇所にマーカーを正確に付与するため、原文テキストとドキュメント構造間のマッチングアルゴリズムを最適化。大規模文書でのマッチング精度とパフォーマンスを両立させた
担当・貢献
- •探索アルゴリズムを最適化し、大規模文書でも精度を維持しながら実用的な処理速度を達成
技術的意思決定 (1)
段階的マッチング戦略による探索空間の削減
原文テキストとドキュメント構造(パラグラフ・セル・リスト項目)間のマッチングを、完全一致→正規化一致→部分一致の3段階で順次実行する戦略を採用。上位段階で確定した箇所を探索空間から除外することで、計算量を削減しながら精度を維持した
成果・アウトカム (1)
Before: 大規模文書(100ページ超)でマッチング処理に時間がかかり、コンテンツコントロールの付与精度にも問題があった
After: 段階的マッチング戦略により大規模文書でも実用的な処理速度を実現。マッチング精度も向上し、翻訳対象箇所へのマーカー付与の信頼性が改善した
大規模文書でのマッチング速度改善と精度向上
課題・解決 (1)
ドキュメント構造の分割粒度とマッチング精度のトレードオフ
Word文書の内部構造(段落・表セル・リスト項目・ヘッダー/フッター)ごとにテキスト分割粒度を調整。分割が細かすぎるとマッチング候補が増えて遅くなり、粗すぎると部分一致の精度が下がる問題を、要素タイプ別の分割ルールで解決した
フロントエンド開発環境のモダン化難易度: 高
既存フロントエンドにVite・Vitest・Storybook・Biome・Playwrightを一括導入し、開発体験とコード品質の基盤を一新した。ビルド速度の改善、ユニットテスト・UIカタログ・リンター/フォーマッター・E2Eテストのツールチェーンを整備
担当・貢献
- •Vite/Vitest/Storybook/Biome/Playwrightの5ツールを導入し、テスト・品質管理・UIカタログの基盤を一から構築
技術的意思決定 (2)
Vite + Biomeの選定(webpack + ESLint/Prettierからの脱却)
既存のwebpackベースのビルド環境をViteに移行し、ESLint+PrettierをBiomeに統合。Viteのホットリロード速度とBiomeの高速lint/formatにより、開発イテレーション速度を大幅に改善した
Volta導入によるNode.jsバージョン管理の統一
チーム内でNode.jsバージョンの不一致によるビルドエラーが散発していた問題をVoltaで解決。プロジェクトルートにバージョンを固定し、メンバーの環境差異を排除した
成果・アウトカム (1)
Before: ユニットテスト・UIカタログ・リンター・E2Eテストのいずれもなく、コード品質の客観的な検証手段がなかった
After: Vite(ビルド)・Vitest(ユニットテスト)・Storybook(UIカタログ)・Biome(lint/format)・Playwright(E2E)の5ツールを統合的に導入し、開発基盤を一新した
テスト・品質管理基盤の確立(ゼロベースからの構築)
課題・解決 (1)
既存PHPベースプロジェクトとViteの共存
既存のPHP+jQuery環境を壊さず、React部分のみViteで管理するハイブリッド構成を設計。Viteのビルド出力をPHPのテンプレートから読み込む形でインクリメンタルに移行できる構成にした
PythonバックエンドのOpenAPI仕様からフロントエンド向けモック自動生成難易度: 高
FastAPIが自動生成するOpenAPI仕様書をソースとして、MSW(Mock Service Worker)とOrvalでTypeScript型定義・APIクライアント・モックハンドラーを自動生成する仕組みを構築。フロントエンド開発でバックエンドの実装待ちが不要になった
担当・貢献
- •OpenAPI仕様から型定義・APIクライアント・モックを自動生成するパイプラインを構築し、フロントエンドのバックエンド依存を排除
技術的意思決定 (1)
OpenAPI仕様をSingle Source of Truthとしたモック自動生成パイプライン
FastAPIが自動生成するOpenAPI仕様書を唯一の信頼源として、OrvalでTypeScript型定義・APIクライアントを、MSWでモックハンドラーを自動生成するパイプラインを設計。手動でモックを書く方式ではAPIの変更追従が困難なため、仕様書からの自動生成で型安全性とモック鮮度を同時に担保した
成果・アウトカム (1)
Before: フロントエンド開発がバックエンドAPIの実装完了を待つ必要があり、並行開発ができなかった
After: OpenAPI仕様からモック自動生成することで、バックエンドのAPI定義が確定した時点でフロントエンド開発を開始可能に。Storybook上でもモックAPIが動作し、UIの動作確認がバックエンド不要で完結
フロントエンド・バックエンド間の開発並行性の確立
課題・解決 (1)
OpenAPIスキーマとOrval/MSWの型整合性の維持
CI上でOpenAPIスキーマからの再生成を自動化し、バックエンドのAPI変更時にフロントエンドの型定義・モックが自動追従する仕組みを構築。型の不整合はTypeScriptのコンパイルエラーとして即座に検出できるようにした
Docker Compose + GHCRによるプル型デプロイ基盤の構築難易度: 高
Docker Composeでのビルド→GHCRへのプッシュ→本番サーバーでのプル型デプロイの一連の自動化スクリプトを作成。GHCRのイメージ管理・可視性設定・権限設定と、本番サーバーでのcronベースのプルデプロイを整備した
担当・貢献
- •手動SSH+SCPデプロイからDocker Compose+GHCRプル型デプロイへ移行し、再現性のあるデプロイフローを確立
技術的意思決定 (2)
GHCRプル型デプロイの採用(手動SSH+SCP方式からの移行)
開発者がSSHでサーバーにログインしてSCPでファイルをアップロードするデプロイ方式から、GHCRにイメージをプッシュし本番サーバーがcronでプルするプル型デプロイに移行。デプロイの再現性を確保し、ロールバックもイメージタグの切り替えで即座に可能にした
GHCRの可視性・権限設定とイメージ管理の設計
GitHub Container Registryのイメージ可視性をOrganizationレベルで管理し、本番サーバーからのプルに必要な権限設定(Personal Access Token + read:packages scope)を整備。イメージのタグ命名規則も設計した
成果・アウトカム (1)
Before: デプロイが手動SSH+SCPで属人化しており、手順ミスによる障害リスクがあった。ロールバック手段もなかった
After: Docker Compose+GHCRによるプル型デプロイで再現性を確保。cronベースの自動プルとイメージタグ管理によりロールバックも容易に
デプロイの自動化と再現性の確立
課題・解決 (1)
cronベースのプルデプロイの信頼性確保
プルスクリプトにヘルスチェック・イメージ差分検出・ロールバック機能を組み込み、新イメージのプル失敗時は既存コンテナを維持する設計にした
OnlyOfficeサーバーのTLS/CORS設定をDocker環境変数で制御可能に難易度: 中
OnlyOfficeドキュメントサーバーのTLS証明書設定とCORSオリジン設定を、Docker起動時のスクリプト注入で環境変数から設定できるように構成。環境ごとの設定切り替えを容易にした
担当・貢献
- •OnlyOfficeの設定ファイルを直接編集せず、起動スクリプト注入で環境変数から制御するアプローチを採用
技術的意思決定 (1)
スクリプト注入方式によるOnlyOffice設定の外部化
OnlyOfficeの設定ファイルを直接マウントする方式ではバージョンアップ時に互換性問題が発生するため、Docker起動時にentrypointスクリプトで環境変数から設定ファイルを動的生成する方式を採用。TLS証明書パスとCORSオリジンを環境変数で切り替え可能にした
成果・アウトカム (1)
Before: OnlyOfficeのTLS/CORS設定が設定ファイルにハードコードされており、環境切り替え時に手動編集が必要だった
After: Docker環境変数でTLS証明書パスとCORSオリジンを制御可能にし、開発・ステージング・本番環境の設定切り替えを自動化した
環境切り替えの自動化と設定の外部化
ローカル/リモート混在のE2E開発環境の構築手順ドキュメント化難易度: 中
ローカルのReact+Pythonとリモートサーバー上のPHPを連携させたE2E開発環境の構築手順を、再現性のあるドキュメントとして整備。Docker Compose・ネットワーク設定・環境変数管理を含む手順書を作成し、新規メンバーのオンボーディングを効率化した
担当・貢献
- •ローカル/リモート混在環境の再現手順をドキュメント化し、新規メンバーの環境構築工数を削減
技術的意思決定 (1)
Docker Compose統合による環境構築手順の標準化
ローカルのReact+Pythonコンテナとリモートサーバー上のPHP+OnlyOfficeを連携させるためのDocker Composeネットワーク設定・環境変数テンプレート・接続確認手順を一つのドキュメントに集約。新規メンバーがドキュメント通りに実行すればE2E環境が再現できる状態を目指した
成果・アウトカム (1)
Before: 環境構築手順が口頭伝達で属人化しており、新規メンバーの環境構築に1-2日かかっていた
After: 再現性のある手順書により、環境構築手順の属人化を解消。Docker Compose・ネットワーク設定・環境変数を含むステップバイステップのドキュメントを整備した
新規メンバーのオンボーディング効率化
Playwright E2Eテスト環境構築とテストシナリオ実装難易度: 高
React/Python/OnlyOffice連携の翻訳ワークフロー全体をカバーするE2Eテスト環境をPlaywrightで構築。OnlyOfficeのCanvas要素はE2Eテストの限界があるため、テスト可能な範囲と手動テスト範囲を明確に切り分けた
担当・貢献
- •翻訳ワークフロー全体の回帰テストシナリオを実装し、自動化可能な範囲と手動テスト範囲を明確に切り分けた
技術的意思決定 (1)
テスト対象の自動化可能領域と手動テスト領域の明確な線引き
OnlyOfficeエディタのCanvas要素に依存する操作はPlaywrightでの安定的なE2Eテストが困難なため、テスト対象を「翻訳ワークフローの操作フロー・API連携」と「OnlyOffice内のドキュメント操作」に二分し、前者のみE2Eテストでカバーする方針を策定した
成果・アウトカム (1)
Before: E2Eテスト環境がなく、機能追加・リファクタリング時の回帰テストが手動のみだった
After: Playwrightで翻訳ワークフロー全体(ファイルアップロード→翻訳実行→結果確認)の回帰テストシナリオを実装。Docker環境内でReact+Python+PostgreSQLの統合テストが自動実行可能になった
E2Eテストによる回帰テストの自動化(テスト可能領域のカバー)
課題・解決 (1)
React+Python+OnlyOfficeの3サービス連携テスト環境の構築
Docker Composeで3サービスを統合起動し、Playwrightのテストランナーからアクセスできるネットワーク構成を設計。テスト用の初期データ投入とクリーンアップをフィクスチャとして管理し、テストの独立性を確保した
開発効率化ダッシュボードとログ集約MCP・Story生成エージェントの構築難易度: 中
Celeryタスクの実行状況や翻訳検証の成功/失敗率を可視化するダッシュボードを作成。また、分散環境のログをClaude Codeから検索できるMCPサーバーや、コンポーネントからStorybook Storyを自動生成するサブエージェントを構築し、開発効率を向上させた
担当・貢献
- •MCPサーバーによるログ検索・Story自動生成エージェントなど、AIツールを活用した開発支援基盤を構築
技術的意思決定 (2)
MCPサーバーによる分散ログのClaude Code統合
React・Python・Celeryの各コンテナに分散するログをClaude Codeから横断検索できるMCPサーバーを構築。従来はdocker logs + grepで個別にログを確認していたが、MCPツール化によりClaude Codeの会話内からログ検索・フィルタリングが可能になった
agent-browserによるStorybook Story自動生成
既存のReactコンポーネントからStorybook Storyを自動生成するサブエージェントを構築。agent-browserでコンポーネントの実装を解析し、props・状態パターンを網羅したStoryファイルを自動生成することでUIカタログの整備を加速した
成果・アウトカム (1)
Before: 分散コンテナのログ確認にdocker logs + grepを手動実行し、障害調査に時間がかかっていた。Storybook StoryもUIコンポーネントごとに手動作成していた
After: MCPサーバーでClaude Codeからログ横断検索が可能に。Celeryタスクの実行状況と翻訳検証の成功/失敗率を可視化するダッシュボードも作成し、障害調査と品質モニタリングの効率を向上させた
障害調査・開発効率の向上とUIカタログ整備の加速
技術調査・資料作成
2名中堅オンライン学習プラットフォーム企業•2025-05 — 2025-07ConsultingVBScript/OracleベースのレガシーシステムをSonarQubeで品質定量化し、改修/ERP導入/ブラウザ拡張の3択比較マトリクスで戦略選定を支援。NotebookLM+markitdownによるRAG型社内資料検索基盤も構築。生成AIツールを活用し約2ヶ月の短期コンサルティングで成果を創出
3タスク
技術調査・資料作成
2名VBScript/OracleベースのレガシーシステムをSonarQubeで品質定量化し、改修/ERP導入/ブラウザ拡張の3択比較マトリクスで戦略選定を支援。NotebookLM+markitdownによるRAG型社内資料検索基盤も構築。生成AIツールを活用し約2ヶ月の短期コンサルティングで成果を創出
社内資料RAG型検索基盤の構築難易度: 中
社内資料をmarkitdownでマークダウン化・分割処理し、NotebookLMによりRAG型検索環境を整備。Claude Desktop+SonarQubeをMCP経由で連携し、品質課題の要点抽出と整形フローを効率化。
担当・貢献
- •NotebookLM+markitdownによるRAG型検索基盤のアーキテクチャを設計し、資料変換パイプラインを構築
- •カスタムRAG開発ではなく既存SaaS(NotebookLM)活用による低コスト・短納期アプローチを提案
技術的意思決定 (1)
NotebookLM + markitdownによる低工数RAG構築
GoogleのNotebookLMを活用し、markitdownで社内資料(PDF/Word/Excel)をテキスト変換して投入する方式を採用。カスタムRAGの構築ではなく、既存SaaSの活用でコスト最小化を図った
成果・アウトカム (1)
Before: 社内資料が各部署のファイルサーバーやクラウドストレージに散在し、横断検索ができなかった。必要な情報を見つけるのに時間がかかっていた
After: NotebookLM + markitdownによるRAG型検索基盤を構築。社内資料をMarkdown変換して投入し、自然言語で横断検索可能にした。約2週間のコンサルティング期間内で実用的な検索環境を実現
社内資料検索の効率化
課題・解決 (1)
多様なファイル形式の社内資料をRAG検索可能な形式に変換
markitdownを使用してPDF/Word/ExcelをMarkdown形式に変換。構造情報(見出し・表・リスト)を可能な限り保持する変換パイプラインを構築。変換後のMarkdownを手動で品質確認し、必要に応じて修正してからNotebookLMに投入
レガシーシステムのコード構造調査と拡張性分析難易度: 中
VBScript/OracleベースのレガシーシステムをCursor/SonarQube/Claude Desktopで静的解析。拡張性・改修難度・依存関係を分析し、ERP・既存改修・拡張案の選択肢整理・比較を実施。
担当・貢献
- •SonarQubeによる静的解析を実施し、モジュール別の改修リスク評価レポートを作成
- •定量データに基づく改修リスクの可視化により、ブラウザ拡張アプローチの採用根拠を提供
技術的意思決定 (2)
SonarQubeによるレガシーコード品質の定量化
SonarQubeを使用して全コードを静的解析し、バグ・コードスメル・重複率・テストカバレッジの各指標を定量的に計測。改修リスクを客観的に評価できるデータを整備した
定量データに基づく改修優先度の提案
静的解析の結果をモジュール単位で整理し、改修リスクの高い箇所と影響範囲をマッピング。定量的な根拠に基づいて改修優先度を提案した
成果・アウトカム (1)
Before: コード品質の客観的評価が存在せず、改修リスクが不明確だった
After: SonarQube解析によりコード品質を定量評価。改修リスクの高い箇所を特定し、技術的負債の全体像を可視化した
定量評価に基づく改修リスクの客観化。ブラウザ拡張アプローチの採用根拠として活用
課題・解決 (1)
バージョン管理なし・テストなしのレガシー環境での調査
SonarQubeによる静的解析で品質を定量化し、Oracle DBの読み取り専用レプリカへの接続で本番環境に影響を与えずに調査を実施。解析結果をスライド形式のレポートにまとめ、技術的リスクを経営層に可視化した
短期拡張案のPoC構想・意思決定支援資料作成難易度: 中
Mermaid記法によるフロー・構造図を積極活用した提案資料を作成。Genspark・Gamma・Canva等の生成AIを活用し、資料作成工程を短期イテレーションで高速化。
担当・貢献
- •7評価軸の3択比較マトリクスと意思決定ツリーを設計し、Reactブラウザ拡張のPoCアーキテクチャを策定
- •6部門の要望を「拡張で対応可能/改修必要/ERP待ち」の3段階に仕分け、各部門に実現見通しを提示
技術的意思決定 (2)
3択比較フレームワークによる戦略選定支援
7つの評価軸(開発リスク・コスト・工期・品質保証・運用影響・拡張性・ROI)で3択を比較するマトリクスを作成し、意思決定ツリー形式で判断フローを可視化した
Reactブラウザ拡張による低リスク改善アプローチの提案
Chrome拡張機能としてReact UIをレガシー画面に重ねるアプローチを提案。既存DBやバックエンドロジックを変更せず、フロント側で値引きマスタの階層ドロップダウン等を実装するPoC設計を行った
成果・アウトカム (1)
Before: 複数の拡張アプローチ(改修/ERP/拡張)の判断基準がなく、経営層が意思決定できなかった
After: 3択比較マトリクス+意思決定ツリーで戦略選定を支援。Reactブラウザ拡張のPoCアーキテクチャ(Lambda+S3+IndexedDB+Chrome Extension)を設計し、値引き基準柔軟化のユースケースで具体的な実装方針を提示
ブラウザ拡張が短期施策として承認。ERP導入は2-3年の中長期計画として別途予算化の検討開始
課題・解決 (1)
6部門の要望整理と実現可否の仕分け
全要望をヒアリング結果としてExcelに集約し、「ブラウザ拡張で対応可能」「既存コード改修必要」「ERP待ち」の3段階で仕分け。優先度を★で表示し、各部門の要望がどの段階で実現されるかを可視化した
開発組織アドバイザー
2名生成AI翻訳SaaS国内スタートアップ•2025-04 — 2025-07Consulting約30名規模の開発組織におけるQCD(品質・コスト・納期)課題を外部アドバイザーとして構造分析。MECE×Issue Treeで100仮説を構造化し、5軸加重スコアリングで施策優先度を客観化。6フェーズ実行ロードマップと経営提案資料を作成し、経営会議でCOO承認を獲得
3タスク
開発組織アドバイザー
2名約30名規模の開発組織におけるQCD(品質・コスト・納期)課題を外部アドバイザーとして構造分析。MECE×Issue Treeで100仮説を構造化し、5軸加重スコアリングで施策優先度を客観化。6フェーズ実行ロードマップと経営提案資料を作成し、経営会議でCOO承認を獲得
開発組織のQCD課題構造分析難易度: 高
開発ベロシティ・品質低下の原因を調査し、技術面・体制面の課題を整理。コード管理・レビュー体制・リリース手順・属人化構造など、エンジニア組織の構造的課題を深掘り。
担当・貢献
- •MECE×Issue Treeで100仮説を構造化し、5軸スコアリングで8大課題を抽出。組織政治的課題もシステム課題として中立的に記述
技術的意思決定 (2)
MECE×Issue Treeによる100仮説の構造化アプローチ
MECE(Mutually Exclusive, Collectively Exhaustive)とIssue Tree手法を組み合わせ、5軸定量スコアリング(リリース速度寄与度・バグ発生率寄与度・実行容易性・計測容易性・リードタイム)で100仮説を網羅的に列挙・評価した
8大課題の重要度順序付けと組織構造マッピング
最重要課題「既存アプリのデリバリー低下」への寄与度を基準に、実装者に直結する3課題を重点的に深掘りし、残り5課題はステークホルダー別に整理。8課題を重要度順に並べ替えた
成果・アウトカム (1)
Before: 課題が断片的で全体像不明。ヒアリング結果が主観的で優先度判断不可
After: MECE×Issue Treeで100仮説を構造化し、5軸スコアリングで8大課題を抽出。経営層が意思決定に使える課題マップを構築
100仮説→8大課題の構造化完了。Top仮説スコア4.35(最高)〜1.9(最低)の定量評価を実現
課題・解決 (2)
定量データ不足の中での課題構造化
定量データに依存せず、MECE×Issue Treeで仮説を構造化し、5軸スコアリングで相対評価する手法を採用。ヒアリング内容を「課題の重み」に変換する独自フレームワークを構築した
組織政治的な課題の中立的記述
個人名を出さず「意思決定構造」「決裁権限の不明確」等のシステム課題として記述し、解決策も個人批判ではなく制度設計として提案した
QCD改善施策の評価フレーム・実行優先度マトリクス構築難易度: 高
品質・コスト・納期を軸にした改善施策の調査・整理。施策ごとに「影響度×実現性」の定量評価を実施。重み付きマトリクス・優先順位チャートを資料内に実装し、ガントチャートと責任分界図で段階的実行計画を提示。
担当・貢献
- •5軸加重スコアリング関数を設計し、RANK.EQ関数で6フェーズ×3週間のロードマップを自動生成
技術的意思決定 (2)
5軸加重スコアリングによる施策優先度の客観化
Q寄与度(0.1)・C寄与度(0.1)・D寄与度(0.4)・金銭コスト(0.1)・所要工数(0.3)の5軸に重み付けしたスコアリング関数を設計。D(納期)への寄与度と所要工数を重視する重み配分にした
6フェーズ×3週間の段階展開ロードマップ設計
RANK.EQ関数でスコア順位をフェーズ番号に自動マッピングし、6フェーズ×3週間のガントチャートを自動生成。各フェーズに4〜5施策を配置し、前フェーズの成果を次フェーズの前提条件として段階的に展開
成果・アウトカム (1)
Before: 27施策の優先度が不明確で、経営層の意思決定が遅延
After: 5軸加重スコアリング+6フェーズロードマップにより、月単位で進捗を可視化できる実行計画を構築
Top5施策の優先度が1回の経営会議で承認。4ヶ月でリリース速度30%向上・バグ率30%削減(仮目標)
課題・解決 (1)
施策優先度の客観的評価フレームワーク構築
5軸加重スコアリングをExcelで実装し、重み付けの根拠をCOOと事前合意することで、スコアリング結果の客観性と透明性を確保した
経営会議提出用スライド資料の設計・作成難易度: 中
非エンジニア層への合意形成を促進するため、Mermaid記法でフロー図・シーケンス図・判断分岐チャート等を多用。NotebookLMのRAG基盤を活用し、経営判断を支援する意思決定資料をリード作成。
担当・貢献
- •2部構成(23+10スライド)の経営提案資料をリード作成。技術課題をQCD影響として再定義し因果関係チェーンで説明
技術的意思決定 (2)
2部構成の経営提案資料設計(人材最適化+チケット基盤再設計)
「AI翻訳事業における開発組織の人材最適化提案」(23スライド・全体像)と「チケット管理基盤の再設計によるQCD向上」(10スライド・深掘り)の2部構成で資料を設計した
Jira統一基盤の提案とツール比較による意思決定支援
Notion、Planio、Notion+Planio併用、Jiraの4選択肢を「チケット構造柔軟性」「部門横断連携」「UI/UX」「ワークフロー設計」「他ツール連携」の5軸で比較表を作成し、Jira+Jira Service Managementを推奨した
成果・アウトカム (1)
Before: 技術課題の経営層への説明手段がなく、改善投資の承認が困難
After: 2部構成の経営提案資料(23スライド+10スライド)でQCD改善の全体像と具体施策を可視化。ツール比較表やRACIチャートで意思決定を支援
COOがPoC実施を承認。チケット管理統一とJira導入検証の開始が決定
課題・解決 (1)
非エンジニアの経営層への技術課題の説明
技術課題をQCD(品質・コスト・納期)への影響として再定義し、「バグ流出→手戻り工数→コスト増」のように因果関係チェーンで説明。KPI目標値(バグ率40%削減、リードタイム25%短縮)を設定し、改善効果を定量化した
フルスタックエンジニア
4名製造業向け業務アプリスタートアップ•2024-10 — 2025-03FrontendBackendInfra製造業の設備保全・点検業務を管理するマルチテナントSaaS。NestJS + GraphQL + PostgreSQLのバックエンドとReact + Apollo Clientのフロントエンドを一貫担当。RFC5545準拠の繰り返しタスク機能、RBAC+ReBAC 3軸アクセス制御、Googleカレンダー風タスクUI、フィールド単位逐次保存等のコア機能を設計・実装
8タスク
フルスタックエンジニア
4名製造業の設備保全・点検業務を管理するマルチテナントSaaS。NestJS + GraphQL + PostgreSQLのバックエンドとReact + Apollo Clientのフロントエンドを一貫担当。RFC5545準拠の繰り返しタスク機能、RBAC+ReBAC 3軸アクセス制御、Googleカレンダー風タスクUI、フィールド単位逐次保存等のコア機能を設計・実装
RFC5545準拠の繰り返しタスク機能の設計・実装難易度: 極高
年・月(第n週n曜日/n日)・週(複数曜日可)・日の繰り返しを網羅し、一括更新・スキップ・終了条件まで対応。未実体・実体を分離しつつ同一画面に統合表示できるスキーマ・API・バッチを設計。Redis+SQS+EventBridgeで前日バッチ実体化アーキテクチャを採択。
担当・貢献
- •RFC5545仕様を分析し、繰り返しルール展開・例外処理・バッチ実体化のアーキテクチャを設計。仕様書と設計振り返りドキュメントを作成し、設計意図と代替案を体系的に記録
- •generate_series + UNION ALL + DISTINCT ONによる実体・未実体マージ方式のSQL/APIを実装
技術的意思決定 (3)
前日バッチ実体化(EventBridge+SQS)の採用
EventBridge+SQS+NestJS SQS Consumerによる前日バッチ実体化を採用
generate_series + UNION ALL による実体・未実体マージ方式
PostgreSQLのgenerate_seriesで日付展開し、テンプレートのJSON定義から20+カラムを復元、実体レコードとUNION ALL後にDISTINCT ONでデデュプリケーション
単一モデルでの3種類時間モデル統合
既存システムとの互換性を重視し、3種類の時間モデル(日付のみ・時刻あり・期間指定)を単一モデルに統合する設計を採用。将来の分離を見据え、テンプレート側にtimeModelの概念を持たせる拡張設計を文書化した
成果・アウトカム (2)
Before: 繰り返しタスク機能が未実装で、毎日/毎週の定期点検を手動で作成していた
After: RFC5545準拠の繰り返しルール機能をリリースし、Daily/Weekly/Monthly の繰り返しタスクを自動生成可能に
定期点検の手動作成工数削減
Before: 繰り返し設計の議論が収束せず、設計仕様が散在していた
After: 仕様書と振り返りドキュメントを作成し、現実装の問題点と理想設計を体系化。6フェーズの改善ロードマップを策定
設計知識の組織的蓄積と改善ロードマップの明確化
課題・解決 (3)
3種類の時間モデルを単一モデルで統合した繰り返しルール設計
日付のみ(時刻未対応)の最小実装で着手し、テンプレート側にtimeModelの概念を持たせる理想設計を仕様書として文書化。将来の3モデル分離への移行パスを明確にした
テンプレートJSONB定義からの全フィールド復元による300行超SQL
300行超のCTEチェーンを段階的に構築し、繰り返しルール展開→日付生成→未実体タスク生成→実体タスクとのマージ→重複排除の各段階でCTEの責務を明確に分離。保守可能な構造を維持しつつ、振り返り文書でテンプレート参照方式への移行など理想設計を詳細に記述
ダッシュボードピボットAPIの制約によるバッチ実体化の強制
SQL内で未実体タスクを実体レコードと同じカラム構造に変換するCTEチェーンを構築。振り返り文書でCOUNT/SUMの結合律を利用した二段階集計+アプリ層マージの代替案を詳細に分析(数学的証明付き)
スコープ×リソース×アクション3軸アクセス制御の設計・合意形成・実装難易度: 高
本部/工場等のスコープ×リソース×アクションの3軸で権限を定義。個別設定方式とロール割当型の2案を比較・ファシリテーションで合意取得。CASL AbilityでAPI認可とUI表示制御を共管し整合性を維持。
担当・貢献
- •RBAC+ReBACハイブリッドACLモデルを設計し、30件以上のユースケースを網羅的に検証。設計ドキュメントで意思決定の根拠と代替案を詳細に記録
- •個別設定方式とロール割当型の2案を比較し、チームとの設計合意形成をファシリテート
技術的意思決定 (3)
RBAC+ReBAC ハイブリッドACLモデルの採用
DB層はRBAC+ReBAC ハイブリッド(将来ABAC拡張可能)、UI層は3段階フェーズで段階的に公開する設計を採用
Deny-by-default + テンプレート方式の権限評価
デフォルト拒否、明示的denyが1つでもあればdeny、それ以外でallowがあればallow、どちらもなければdenyの3段階評価
scopeType+inheritChildren による階層継承のオプション化
継承フラグをスコープ別ロール割当に追加し、継承のオン/オフをロール割当時に選択可能にした
成果・アウトカム (2)
Before: アクセス制御が未実装で全ユーザーが全データにアクセス可能だった
After: 3層スコープ階層(組織>拠点>案件)と5種類のシステム定義テンプレートによるRBAC+ReBAC ACLシステムを設計・合意形成
ACLモデルの設計完了とチーム合意形成
Before: ACL要件が散在し30+ユースケースの網羅的な検証ができていなかった
After: 設計ドキュメントとユースケース検証表を作成。12のユースケース(複数工場兼任、外部エンジニア、監査員等)がカバーされることを確認
要件の網羅的検証と設計ドキュメント化
課題・解決 (1)
マルチテナントSaaSにおける権限階層設計のバランス
継承フラグによる継承のオプション化と、ロールテンプレート+個別権限上書きの2層構造で柔軟性と管理容易性を両立。30件以上のユースケースをドキュメント化し、各パターンがカバーされることを検証
トップ画面の描画最適化(描画時間70%以上削減)難易度: 高
フィルター・一覧・詳細の連動描画による再描画負荷を状態構造の見直しで最小化。描画コストが高くUXへの影響が大きい箇所に限定し、限られた工数内でリファクタリングを実施。
担当・貢献
- •React DevTools Profilerで再レンダリングを分析し、選択的にReact.memo/useMemo/useCallbackを適用して描画時間70%以上削減
技術的意思決定 (1)
React.memo + useMemo による不要再レンダリングの排除
React DevToolsのProfilerでコンポーネントツリーの再レンダリングを可視化し、不要な再レンダリングをReact.memo、useMemo、useCallbackで排除。描画時間70%以上削減を達成
成果・アウトカム (1)
Before: 描画時間が遅くUXへ悪影響
After: 描画時間70%以上削減
描画時間削減率
課題・解決 (1)
全コンポーネント一括メモ化 vs Profiler駆動の選択的最適化
React DevTools Profilerを使い、コンポーネントツリーの再レンダリングを目視で確認。実際に遅いコンポーネントのみを特定し、React.memo/useMemo/useCallbackを選択的に適用。工数を抑えながら70%以上の描画時間削減を達成
Googleカレンダー風タスク表示UIの実装難易度: 中
週表示・月表示・3日表示に対応したカレンダービューを実装。CSS Grid/Subgridを用いた角丸表示・可変表示領域・スケジューラ対応を実現。
担当・貢献
- •パッキングアルゴリズム(行占有マッピング→上詰め配置)を自作し、Apollo Client SSoTのリアクティブ更新設計を策定
- •3/4/7日可変ビュー、D&D日付変更、週またぎ角丸、CSS scroll snapモバイル対応をフルスクラッチで実装
技術的意思決定 (3)
カレンダーUIをフルスクラッチで実装する決定
ライブラリに依存せず、React+CSSでゼロからカレンダーUIを構築した。3日/4日/週次等の可変日数ビューを外部パラメータとして受け取り、任意の日数幅でレイアウトが崩れないよう設計した
Apollo ClientをSSoTとしたドラッグ&ドロップ日付変更と逐次保存連携
Apollo Clientのキャッシュを唯一の信頼できるデータソース(SSoT)として設計。D&Dでの日付変更時も、編集モーダルでの逐次保存後もApolloキャッシュを更新することで、カレンダーがリアクティブに再描画される仕組みを構築
レスポンシブカレンダーUIとCSS scroll snapによるスマホ最適化
スマホ時はPC版とは大きく異なるUIに切り替え、日付タップでタスク一覧をスライド表示する設計を採用。CSS scroll snapを適用して、スクロールが常に日付単位でスナップし、中途半端な位置で止まらないようにした
成果・アウトカム (2)
Before: カレンダーUIが存在せず、作業予定はリスト表示のみで一覧性が低かった
After: Googleカレンダーと同等の操作感を持つカスタムカレンダーUIをフルスクラッチで実装。3日/4日/週次ビューの動的切り替え、週またぎイベントの角丸表示を実現
ユーザーが直感的に作業予定を把握・管理できるUIを提供。フルスクラッチにより要件変更への柔軟な対応が可能に
Before: タスクの実施日管理がテーブル形式の一覧表示のみで、視覚的にスケジュール全体を把握しにくかった
After: Googleカレンダー風のUIをゼロから構築。複数日/単一日タスクの密なパッキング表示、D&Dによる日付変更、Apollo Client SSoTによるリアルタイム更新、レスポンシブ対応(scroll snap含む)を実現。3日/4日/7日の可変表示切替にも対応
カレンダーUIの完成度とユーザビリティ
課題・解決 (3)
週をまたぐイベントの角丸UI表現
イベントを週ごとにセグメント分割し、各セグメントの位置(先頭/中間/末尾)に応じてborder-radiusのクラスを動的に適用した。先頭セグメントは左角丸、末尾セグメントは右角丸、中間セグメントは角丸なしにした
可変日数ビューのレスポンシブレイアウト
日数パラメータをコンポーネントのpropsとして受け取り、列幅をCSS Gridのfr単位で動的に計算。イベント配置もstartDate/endDateから動的にgrid-column位置を算出するロジックに変更した
複数日タスクと単一日タスクのパッキングアルゴリズム(隙間なく上詰め)
行ごとの占有状態を管理するパッキングアルゴリズムを自作。複数日タスクが占有する行を先にマッピングし、単一日タスクは空いている最上位の行に配置。これによりGoogleカレンダー同様の密なレイアウトを実現
動的フォーム構造に対応した型別バリデーション実装難易度: 高
テンプレート上で追加・削除可能な項目(文字列/数値/日付等)に対して型別バリデーションをRHF+Zodで実装。作成モーダル・編集画面間で処理分離と再利用性を両立。活性制御・選択肢表示制御・相関バリデーションに対応。
担当・貢献
- •テンプレート上で追加・削除可能な項目(文字列/数値/日付等)に対して型別バリデーションをRHF+Zodで実装。作成モーダル・編集画面間で処理分離と再利用性を両立。活性制御・選択肢表示制御・相関バリデーションに対応。
フォーカスアウト時差分逐次保存機能の実装難易度: 中
保存漏れ防止のため、フォーカスアウト時に差分のみを対象とした逐次保存を実装。DevToolsスロットリングを活用し、不安定回線下での再送テストも実施。
担当・貢献
- •フィールド単位onBlur逐次保存+Command Patternのアーキテクチャを設計し、送信失敗コマンドの再送信機構を実装
技術的意思決定 (2)
フィールド単位onBlur逐次保存の採用(フォーム一括保存の不採用)
フィールドごとに独立したreact-hook-formインスタンスを持ち、onBlurイベントでisEqual差分チェック後にGraphQL mutationを即座送信する逐次保存方式を採用
コマンドをデータとして扱うRPC的アプローチによるフィールド変更のカプセル化
各フィールド変更をコマンドデータとして構造化し、UUIDでID付与してバックエンドに送信するRPC的方式を採用。リソース種別ごとに変更対象のフィールドセットを型定義し、変更操作をシリアライズ可能なデータとして扱う設計にした
成果・アウトカム (1)
Before: フォーム一括保存方式で工場内Wi-Fi環境での入力データ消失リスクがあった
After: フィールド単位onBlur逐次保存+Command Pattern+送信失敗コマンドの再送信機構を実装。3段階改善ロードマップ(localStorage永続化→SW導入→フルオフライン)を設計
データ消失リスクの大幅軽減と将来改善計画の策定
課題・解決 (1)
工場内Wi-Fi不安定環境でのデータ保全
フィールド単位onBlur逐次保存+送信失敗コマンドのuseRef蓄積+保存ボタンでの再送信機構を実装。ネットワークエラー時はフォーム値を保持し、クライアントエラー時はサーバー値にリセットする二段階エラーハンドリング
UIコンポーネントディレクトリ構成・命名規則の策定と導入難易度: 中
ドメイン密着型コンポーネントの再利用性を高めるため、ディレクトリ構成・命名規則・コンポーネント構成ルールを提案・合意形成。チーム内共通規約として浸透させた。
担当・貢献
- •ドメイン密着型コンポーネントの再利用性を高めるため、ディレクトリ構成・命名規則・コンポーネント構成ルールを提案・合意形成。チーム内共通規約として浸透させた。
Storybook活用による全UI状態可視化と多言語対応基盤整備難易度: 中
StorybookでUI全状態を可視化し、将来の表示バリエーション対応を容易化。カードUIの多言語対応(英語文言提案含む)を実装し、国際対応基盤を整備。
担当・貢献
- •StorybookでUI全状態を可視化し、将来の表示バリエーション対応を容易化。カードUIの多言語対応(英語文言提案含む)を実装し、国際対応基盤を整備。
フロントエンドテックリード
10名HRコンサル・システム上場連結子会社•2022-10 — 2024-09FrontendTech LeadTesting新卒採用管理SaaSのフロントエンド開発をテックリードとして2年間主導。B2B(人事向け管理画面)とB2C(応募者向けエントリー画面)をpnpmモノレポ構成で開発。Specificationパターンによる動的フォームビルダー、Suspense対応ダッシュボード、VRTパイプライン等のコア機能を設計・実装し、10名チームの品質・開発効率向上を推進
8タスク
フロントエンドテックリード
10名新卒採用管理SaaSのフロントエンド開発をテックリードとして2年間主導。B2B(人事向け管理画面)とB2C(応募者向けエントリー画面)をpnpmモノレポ構成で開発。Specificationパターンによる動的フォームビルダー、Suspense対応ダッシュボード、VRTパイプライン等のコア機能を設計・実装し、10名チームの品質・開発効率向上を推進
フロントエンドテックリードとしてのチーム運営・品質管理難易度: 高
タスクアサイン・SP更新・知見共有・PRレビュー文化醸成・実装ガイド整備を主導。Renovateによるライブラリ定期アップデート自動化を導入。チームミーティングを主催し技術・コード規約・画面仕様の共有を推進。
担当・貢献
- •B2Cアプリ全体の仕様洗い出し・バックエンドチームとの合意形成・タスク分解・メンバーアサイン・クリティカルパス担当をオーケストレーター型で主導
- •コードレビューガイドライン策定、VRT環境構築、インターン育成を通じてチーム品質基準を確立
技術的意思決定 (3)
インターン育成とコードレビューによるチーム品質底上げ
自身もコードレビューを積極的に実施し、インターンメンバーへのフィードバックを通じて育成を行った。レビューを通じてコーディング規約・設計パターンを実践的に伝えるOJT型のアプローチを採用
バックエンドチームへの窓口一本化とオーケストレーター型マネジメント
自分一人がB2Cアプリ全体の仕様を短期間で洗い出し、バックエンドチームリーダーと1対1で徹底的にすり合わせを実施。合意後にB2Cチームメンバー向けオンボーディングミーティングを開催し、全仕様を説明。チームから上がった質問・疑問点をまとめてバックエンドチームと解消するワンストップ窓口として機能した
仕様のタスク分解・依存関係整理・メンバー特性に基づくアサインメント
詰めた仕様をタスク分解し依存関係を明確にしてJiraチケットに落とし込み。メンバーの得意・不得意、スキルレベル、希望に応じてチケットをアサイン。タスク依存関係上、単一障害点(クリティカルパス)になりやすい箇所は自分が率先して引き受けた
成果・アウトカム (1)
Before: フロントエンド品質のばらつきとCSSリグレッションの見落としが発生していた
After: Storybook+storycap+reg-suitによるビジュアルリグレッション環境を構築し、PRごとにUI差分を自動検知。コードレビューガイドラインも策定
UI品質の自動担保体制の確立
課題・解決 (3)
FEテックリードとしての技術的負債と開発速度のバランス
Storybook+storycap+reg-suitによるビジュアルリグレッション環境を構築し、UIの品質を自動的に担保。コードレビューガイドラインを策定し、チーム全体の品質水準を向上
4ヶ月の短期間でB2C応募者向けアプリケーションの仕様詳細詰め
テックリードとして仕様の詳細詰めから主導。応募者のユーザーフローを整理し、各ステータスでの遷移条件・表示内容・バリデーションルールを体系的に定義。実装と並行して仕様をアジャイルに確定させていった
動的フォームの仕様エッジケース洗い出しとバックエンド合意形成
選択肢0件のケースはB2B側のフォーム設定運用でカスタマーサポートを介入させる方針とし、B2Cアプリ側では特にアラートを出さないと決定。このように各エッジケースについてバックエンドチームリーダーと個別に合意を取り、決定事項をドキュメント化してチームに共有した
応募者エントリー導線の仕様策定・実装難易度: 高
会員登録→求人応募→選考ステップへのエントリーフローの詳細仕様詰めとFE実装。4ヶ月の開発期間内に機能開発を完了し、契約先から高い評価を獲得。
担当・貢献
- •4フォーム導線を共通DynamicForm基盤で統一する設計を策定し、マルチページバリデーション・遷移制御を実装
技術的意思決定 (2)
4つのB2Cフォーム導線を共通DynamicForm基盤で実装
フォーム仕様定義クラスを中核に、共通のuseFormフック・入力コンポーネント群・バリデーションシステムを共有しつつ、導線ごとのページ構成・送信先・パラメータ差分のみを個別に定義する設計を採用
マルチページフォームのページ単位バリデーションと遷移制御
URLのページインデックス(1始まり)と配列インデックス(0始まり)を変換しつつ、useFormStateでページ単位のバリデーション状態を管理。trigger()をページスコープで実行し、未バリデーションのページへの遷移をブロック
成果・アウトカム (2)
Before: 4ヶ月の開発期間という制約
After: 期間内に全機能開発完了、契約先から高い評価を獲得
開発完了率・顧客満足度
Before: 応募者向けのエントリーフォームが存在せず、採用管理SaaSのB2C側が未整備だった
After: 4つのフォーム導線(新規登録・プリエントリー・プロフィール更新・マイページタスク)を共通DynamicForm基盤で実装。24種の入力コンポーネント・50+バリデーションルール・マルチページ遷移を実現
B2C応募者向けフォーム基盤の完成度
課題・解決 (2)
応募者エントリー導線における複雑な状態遷移管理
仕様策定段階で状態遷移図を詳細に作成し、全パターンを可視化。不正な遷移を型レベルで防止する設計を実装。4ヶ月の開発期間内に全機能を完了
サーバーサイドバリデーションエラーのフィールドレベルマッピング
useEffect内でGraphQLバリデーションエラーを判定し、画面全体のバナーエラーとフィールドレベルエラーを分離して設定。カスタムuseFormフックでエラーハンドリングを統一
人事用動的フォームビルダーの設計・実装(Specificationパターン採用)難易度: 極高
人事がページ・見出し・入力項目・バリデーション・親子関係等を設定できるフォームビルダーを実装。Specificationパターンでクラスの状態問題を解決し、RHFとの整合性を保持。凝集性と拡張性を両立した設計を実現。
担当・貢献
- •Specificationパターン×Yupカスタムメソッド50+の相関バリデーション基盤を設計・実装。3層フォーム生成エンジンを構築
- •親子フィールド連動+useWatch+選択値自動クリアによるリアクティブ選択肢フィルタリングを実装
技術的意思決定 (4)
Specificationパターンによる動的フォームバリデーション設計
Specificationパターン(ドメイン駆動設計のパターン)を採用し、条件式をオブジェクトとして合成可能な設計を実装
Specificationパターン×Yupカスタムメソッドによる相関バリデーション基盤
Yupのスキーマにカスタムメソッドを50+追加し、全スキーマ型に一括適用するパターンを実装。メタデータで依存フィールドを宣言的に記述し、依存グラフを自動構築
pnpmモノレポ構成でバリデーションをsharedパッケージに分離
pnpm workspaceでB2B・B2C・共通の3パッケージ構成を採用。バリデーション基盤を共通パッケージに配置し、B2B/B2Cからは再エクスポートで利用。列挙型レジストリでGraphQL由来のenum定義を一元管理
親子フィールド連動によるリロードなし選択肢フィルタリング
親子連動コンポーネントでuseWatch()を使い親フィールドの値変更をリアクティブに監視。フィルタ関数を子コンポーネントに渡し、useMemoで選択肢をフィルタリング。選択値リセッターが無効になった選択値を自動クリア
成果・アウトカム (2)
Before: 応募フォームの条件定義がハードコードで、条件変更のたびにコード修正が必要だった
After: Specificationパターンによる宣言的条件定義を実装し、人事担当者がコードなしでフォーム条件を設定可能に
フォーム条件変更のセルフサービス化
Before: フォーム項目がハードコードされており、項目追加・変更のたびにエンジニアの実装が必要だった
After: 動的フォーム生成エンジンにより、人事担当者がフォーム項目を自由に設定可能。50+のバリデーションルール・24種の入力コンポーネント・フィールド間相関バリデーション・リアクティブ選択肢フィルタリングを備えた動的フォーム基盤を実現。共通パッケージでB2B/B2C両方に提供
動的フォーム基盤の柔軟性と品質
課題・解決 (3)
人事用動的フォームの条件式組み合わせ爆発
Specificationパターン(DDD由来)を採用し、条件式をAND/OR/NOTで合成可能なファーストクラスオブジェクトとして設計。JSON Schemaライクな宣言的条件定義を実装
フォーム項目間の相関バリデーションとリアクティブUIの同期制御
選択値リセットコンポーネントで選択肢変更を検知し無効値を即座にクリア。フィールド依存グラフを自動構築し、React Hook Formのdepsオプションで依存フィールドの再バリデーションを自動トリガー。配列インデックスのワイルドカードマッチングで動的フォームの依存関係も対応
スキーマ駆動の動的フォーム生成エンジンの設計
フォーム全体→ページ→項目の3層仕様定義クラスを設計。各層がバリデーションスキーマを動的に構築し、ページごとのスキーマを自動生成。TypeScript型パラメータでフォーム値の型安全性も確保
人事用ダッシュボードの詳細仕様策定・Suspense対応実装難易度: 高
トップ画面ダッシュボードの詳細仕様詰め・実装。全体・3種のパネルをSuspense対応。React Profilerでレンダー原因を特定し、実際のパフォーマンスと体感待ち時間の双方を改善。
担当・貢献
- •ウィジェット独立データフェッチ(Suspense+ErrorBoundary)アーキテクチャとカスタムMasonryグリッドアルゴリズムを設計・実装
技術的意思決定 (3)
ウィジェット独立データフェッチアーキテクチャの採用
各ウィジェットが独立してデータフェッチを行うアーキテクチャを採用。Apollo Client useReadQueryを使用し、ウィジェットコンポーネント内でSuspense対応のデータ取得を完結させた
カスタムMasonryグリッドレイアウトのフルスクラッチ実装
カスタムグリッド配置アルゴリズムを実装。左右列の現在行インデックスを追跡し、高さの短い列にウィジェットを配置するロジックでMasonry効果を実現した
dnd-kit v6によるウィジェットドラッグ&ドロップ並べ替え
@dnd-kit/core v6.1.0 + @dnd-kit/sortable v8.0.0を採用。SortableContextでリスト管理し、useSortableフックで各ウィジェットのD&D状態を制御。DragOverlayで移動中のプレビュー表示を実装した
成果・アウトカム (1)
Before: ダッシュボードのデータフェッチがウォーターフォール方式で、全ウィジェットの読み込み完了まで操作不可だった。ウィジェット間に隙間が生じる配置問題もあった
After: React Suspense + Apollo useReadQuery + Material UI Skeletonで独立フェッチ+スケルトン表示を実現。カスタムMasonryグリッドで隙間なし配置。dnd-kit v6でD&D並べ替え、1列/2列切り替えを実装
各ウィジェットが独立してロード完了→描画に遷移するUXに改善。将来のサードパーティマーケットプレイス拡張にも対応可能な疎結合アーキテクチャを実現
課題・解決 (2)
20ウィジェット同時データフェッチのウォーターフォール問題解消
Apollo Client 3.10のuseReadQueryを使用してSuspense対応のデータフェッチに移行。各ウィジェットをReact Suspense境界でラップし、Material UIのSkeletonコンポーネントをfallbackに設定。ErrorBoundaryも各ウィジェットに個別適用し、1つのAPI障害が他ウィジェットに波及しない設計にした
CSS Masonry非対応環境でのカスタムグリッドレイアウト実装
カスタム配置アルゴリズムを実装。左右列の現在行インデックスを追跡し、各ウィジェットを高さの短い列に配置。grid-row-start/grid-row-spanをCSS Grid上で動的に算出するアプローチで、Masonry的な隙間なし配置を実現した
エラーハンドリング・キャッシュ・アクセス制御等の横断的画面機能整備難易度: 高
エラーハンドリング・キャッシュリセット・クエリヘッダパラメータ付与・リダイレクト・クエリバッチング・GraphQLスキーマからの自動生成バリデーション修正を実装。
担当・貢献
- •エラーハンドリング・キャッシュリセット・クエリヘッダパラメータ付与・リダイレクト・クエリバッチング・GraphQLスキーマからの自動生成バリデーション修正を実装。
Storybook+storycap+reg-suitによるビジュアルリグレッション環境構築難易度: 高
StorybookとStoycap・reg-suitをGitHub ActionsのCIに組み込みUIの回帰テストを実施。Playwrightによる回帰テスト用E2EテストもCI環境に整備。
担当・貢献
- •Storybook+storycap+reg-suit+GitHub Actions+S3のVRTパイプラインを設計・構築し、チームにVRT文化を定着させた
- •matrix strategyによるb2b/b2c並列撮影、閾値0.1%差分比較、PRコメント自動投稿を実装
技術的意思決定 (2)
Storybook v8 + storycap + reg-suit + S3によるVRTパイプライン設計
@storybook/react-vite v8.1.5でStorybook環境を構築し、storycap v5.0.0でスクリーンショット自動取得、reg-suitでピクセル差分比較(閾値0.1%)、AWS S3への結果パブリッシュ、GitHub PR通知による差分レビューフローを構築した
GitHub Actions matrixストラテジーによるb2b/b2c並列VRT実行
GitHub Actionsのmatrix strategyでb2b/b2cを並列にstorycapで撮影し、アーティファクトとしてアップロード。後続のvrtジョブで統合してreg-suit runを実行する2ステージパイプラインを設計した
成果・アウトカム (2)
Before: UIの意図しない変更(CSSリグレッション)がリリース後に発覚していた
After: storycap+reg-suitでPRごとにスクリーンショット比較を自動実行。CSSリグレッションをマージ前に100%検知可能に
CSSリグレッション検知率
Before: UI変更の品質確認が手動目視のみで、見落としによる退行バグがリリース後に発見されていた
After: Storybook v8.1.5 + storycap + reg-suit + GitHub Actions + S3のVRTパイプラインを構築。b2b 215ストーリー・b2c 49ページの全UIコンポーネントを毎PR自動スクリーンショット比較
閾値0.1%のピクセル差分検出で視覚的退行を自動検出。PRコメントでの差分画像レビューが定着し、リリース後のUI退行バグが削減
課題・解決 (2)
storycapのタイムアウトとアセット待機の安定化
preview.tsxのdefaultパラメータにscreenshot: { waitAssets: true }を設定してアセットの読み込み完了を待機。storycap実行時にserverTimeout 60000ms・captureTimeout 15000msを設定。ストーリー個別にdelayを調整して安定した撮影環境を構築した
チームへのVRT文化の定着
reg-notify-github-pluginによるPRコメントでの差分画像表示を導入し、差分がある場合はレビューに含めるチームルールを策定。Storybook上でのコンポーネント開発フローを推奨し、ストーリー作成がVRTの一部として自然に組み込まれる開発プロセスを構築した
react-admin→Apollo Client/RHF/MUIへの移行とGraphQL Suspense導入難易度: 高
開発効率向上のためreact-adminからApollo Client・RHF・MUIへの移行を提起し完全移行まで推進。GraphQL Suspense・React Suspense導入による表示速度向上を検証・本格導入。
担当・貢献
- •開発効率向上のためreact-adminからApollo Client・RHF・MUIへの移行を提起し完全移行まで推進。GraphQL Suspense・React Suspense導入による表示速度向上を検証・本格導入。
スモークテストチームリーダーとしてのテスト推進難易度: 中
テストフェーズのリーダーとして率先してドライバー役を担当。他メンバーのドライバー時に画面・遷移仕様を共有。不具合チケット起票・テストステータス管理を主導。
担当・貢献
- •テストフェーズのリーダーとして率先してドライバー役を担当。他メンバーのドライバー時に画面・遷移仕様を共有。不具合チケット起票・テストステータス管理を主導。
LIFFフロントエンド/ネイティブアプリ/バックエンドエンジニア
7名モバイルオーダーアプリケーション販売会社•2022-04 — 2022-09FrontendBackend4タスク
LIFFフロントエンド/ネイティブアプリ/バックエンドエンジニア
7名Web/LIFF/ネイティブアプリの複数プラットフォーム対応フロントエンド開発難易度: 高
Web(Next.js)・LIFFアプリ・ネイティブアプリ(React Native/Expo)全ての開発を一貫対応。注文管理・店舗LINE連携・レジ連携・在庫管理・締め処理など幅広いドメインロジックを実装。
担当・貢献
- •Web(Next.js)・LIFFアプリ・ネイティブアプリ(React Native/Expo)全ての開発を一貫対応。注文管理・店舗LINE連携・レジ連携・在庫管理・締め処理など幅広いドメインロジックを実装。
モバイルオーダーの多言語化(英語・中国語)対応難易度: 中
ユーザーデバイスに関わらずロゴ・文言の表示が崩れないこと、意味が簡潔に理解できることを前提に英語圏・中国語圏アプリUIを調査。プロトタイプを用いてデザイナー・POと議論しながらUIを改善。
担当・貢献
- •ユーザーデバイスに関わらずロゴ・文言の表示が崩れないこと、意味が簡潔に理解できることを前提に英語圏・中国語圏アプリUIを調査。プロトタイプを用いてデザイナー・POと議論しながらUIを改善。
POSシステム仮締め処理の実装(本締め共通化・単体テスト整備)難易度: 中
本締め処理と重なる処理を共通化し、変数の命名揺れを解消。単体テストを追加し、負債の少ない実装を実現。
担当・貢献
- •本締め処理と重なる処理を共通化し、変数の命名揺れを解消。単体テストを追加し、負債の少ない実装を実現。
キッチンディスプレイの卓別・メニュー別・時間別注文状況集計実装難易度: 中
キッチンディスプレイの機能実装・UI改善。卓別・メニュー別・時間別注文状況を集計する機能を実装。
担当・貢献
- •キッチンディスプレイの機能実装・UI改善。卓別・メニュー別・時間別注文状況を集計する機能を実装。
フロントエンド/バックエンドエンジニア
5名取締役会DXサービス会社•2022-03 — 2022-05FrontendBackend3タスク
フロントエンド/バックエンドエンジニア
5名UIコンポーネント実装・Storybook整備(Atomic Design採用)難易度: 中
UIコンポーネントの発見性・検索性が低い問題を解決するため、StorybookのディレクトリをAtomic Designに寄せる。全UIコンポーネントをStorybookで一覧化し、画面実装の効率を改善。
担当・貢献
- •UIコンポーネントの発見性・検索性が低い問題を解決するため、StorybookのディレクトリをAtomic Designに寄せる。全UIコンポーネントをStorybookで一覧化し、画面実装の効率を改善。
書類作成サポート・書面決議画面の実装とE2Eテスト難易度: 中
書類作成サポートおよび書面決議画面の詳細実装。Playwright E2Eテストを実装し品質を担保。
担当・貢献
- •書類作成サポートおよび書面決議画面の詳細実装。Playwright E2Eテストを実装し品質を担保。
日程調整機能のバックエンド実装難易度: 中
日程調整機能のNode.js/Express/GraphQL/Prismaを用いたバックエンド実装。
担当・貢献
- •日程調整機能のNode.js/Express/GraphQL/Prismaを用いたバックエンド実装。
フロントエンドエンジニア
1名フリーランス•2021-05 — 2022-03Frontend1タスク
フロントエンドエンジニア
1名React/Next.jsによるSPAホームページ制作(4案件)難易度: 中
サイト制作会社・転職会社・データ分析会社・レストランのSPAホームページを制作。フロントエンドアプリとCMS(WordPress/Contentful等)の連携・Vercel/Netlify/S3へのホスティングを担当。
担当・貢献
- •サイト制作会社・転職会社・データ分析会社・レストランのSPAホームページを制作。フロントエンドアプリとCMS(WordPress/Contentful等)の連携・Vercel/Netlify/S3へのホスティングを担当。
データエンジニア・フロントエンドエンジニア
3名株式会社ビットキー•2020-08 — 2021-03DataFrontend4タスク
データエンジニア・フロントエンドエンジニア
3名全社共有KPIの定義・策定難易度: 高
経営・製品・営業・品質・利用状況に関するKPIを整理し、社員全体が共有すべき指標群を定義。チーム横断で知恵を出し合う文化を広めるための指標設計を主導。
担当・貢献
- •経営・製品・営業・品質・利用状況に関するKPIを整理し、社員全体が共有すべき指標群を定義。チーム横断で知恵を出し合う文化を広めるための指標設計を主導。
複数データソースからBigQueryへの集約パイプライン構築難易度: 高
Amazon Redshift・Amazon Aurora・Salesforce・Cloud Firestoreに散在するデータをBigQueryに集める定期実行処理をAWS Lambda・Cloud Functionsに実装。半構造化データの変形・集計自動化も担当。
担当・貢献
- •Amazon Redshift・Amazon Aurora・Salesforce・Cloud Firestoreに散在するデータをBigQueryに集める定期実行処理をAWS Lambda・Cloud Functionsに実装。半構造化データの変形・集計自動化も担当。
Google Data Portalダッシュボード設計・実装と社内浸透難易度: 中
Google Data Portalでダッシュボードを設計・実装し、営業・品質・利用指標を常時可視化。オフィス入口パネル設置・社員ポータル配置・週次ミーティング発表でデータ活用文化を定着。
担当・貢献
- •Google Data Portalでダッシュボードを設計・実装し、営業・品質・利用指標を常時可視化。オフィス入口パネル設置・社員ポータル配置・週次ミーティング発表でデータ活用文化を定着。
タウンポータルサイトのUIコンポーネント実装難易度: 中
スマートロック採用ニュータウンの入居者間情報共有用タウンポータルサイト。UIデザイナーと相談しながら複数画面共通UIコンポーネントを実装。StorybookでUIカタログを作成。
担当・貢献
- •スマートロック採用ニュータウンの入居者間情報共有用タウンポータルサイト。UIデザイナーと相談しながら複数画面共通UIコンポーネントを実装。StorybookでUIカタログを作成。
フロントエンドエンジニア/テスター/保守運用担当
9名シンプレクス株式会社•2019-06 — 2020-06FrontendTesting3タスク
フロントエンドエンジニア/テスター/保守運用担当
9名VBAによるJava JSON API連携Excelフロントエンドアプリ開発難易度: 高
VBAでJava JSON APIと通信してExcel上にデータを表示するアプリを開発。JSONデータの結果に応じて動的にカラムを追加し、各カラムにExcelの数式を埋め込む機能を実装。リーダブルな命名を心がけた。
担当・貢献
- •VBAでJava JSON APIと通信してExcel上にデータを表示するアプリを開発。JSONデータの結果に応じて動的にカラムを追加し、各カラムにExcelの数式を埋め込む機能を実装。リーダブルな命名を心がけた。
客先テスト・リリース作業・保守運用・顧客対応難易度: 中
シェルコマンド&AWSでの客先テスト・リリース作業を担当。顧客からのメール質問対応・エンハンスPJの基本設計・不具合チケット起票・定例での対応確認を主導。
担当・貢献
- •シェルコマンド&AWSでの客先テスト・リリース作業を担当。顧客からのメール質問対応・エンハンスPJの基本設計・不具合チケット起票・定例での対応確認を主導。
保険会社向け新規登録アプリのVue.jsフロントエンド実装難易度: 中
ヘルプチップ・モーダルの詳細仕様を設計者と詰め、全画面の各入力項目に実装。ユーザー入力複数画面のUI実装。業務シナリオテスト・システムテストの実施・管理を担当。
担当・貢献
- •ヘルプチップ・モーダルの詳細仕様を設計者と詰め、全画面の各入力項目に実装。ユーザー入力複数画面のUI実装。業務シナリオテスト・システムテストの実施・管理を担当。
データエンジニア・インターン
2名株式会社グラフ•2018-01 — 2019-03Data3タスク
データエンジニア・インターン
2名アパレルECレコメンドエンジンのプロトタイプ開発(3種アルゴリズム)難易度: 高
トップ画面・商品ページ・カート画面に表示するおすすめ一覧用レコメンドエンジンをプロトタイプ開発。新規顧客・既存顧客・商品ページそれぞれにコンテンツベースフィルタリング・協調フィルタリングを適用し、セレンディピティ性も考慮した設計を実現。
担当・貢献
- •トップ画面・商品ページ・カート画面に表示するおすすめ一覧用レコメンドエンジンをプロトタイプ開発。新規顧客・既存顧客・商品ページそれぞれにコンテンツベースフィルタリング・協調フィルタリングを適用し、セレンディピティ性も考慮した設計を実現。
k近傍法による顧客分類・購買状況基礎集計難易度: 中
アパレルEC経営陣のマーケティング施策検討のため、k近傍法で現顧客を分類し、分類ごとの購買状況(商品カテゴリ別売上等)を基礎集計。
担当・貢献
- •アパレルEC経営陣のマーケティング施策検討のため、k近傍法で現顧客を分類し、分類ごとの購買状況(商品カテゴリ別売上等)を基礎集計。
デモ用チャットボットのフルスタック開発・デプロイ難易度: 中
デモ用チャットボットのデザイン仕様決定、画面・API実装(Python/Flask)。アプリケーションをS3・EC2にデプロイ。
担当・貢献
- •デモ用チャットボットのデザイン仕様決定、画面・API実装(Python/Flask)。アプリケーションをS3・EC2にデプロイ。
学歴
教養学部 学士
ケンブリッジ大学・トロント大学への交換留学。TOEIC 960, IELTS 7.0, HSK 6級取得。