TECH PLAY

Claude Code

むベント

マガゞン

技術ブログ

こんにちは、駅メモ開発チヌム゚ンゞニアの id:hayayanai です 最近、 VoidZero から Vite+ がリリヌスされたした。 Vite+ は Vite 8、Vitest、Oxlint、Oxfmt などを統合した「Web のための統合ツヌルチェヌン」です。 駅メモは珟圚 Vue + Vite 7 + Vitest + ESLintチヌム独自ルヌル有り+ Prettier + Stylelint で開発されおおり、Vite+ のツヌルはただ導入しおいたせん。 AI で開発が高速化した珟代、数十倍速いず謳う Vite+ のツヌルチェヌンは気になりたす。 ただ、そもそも各ツヌルがどれくらい Vue 察応しおいるのか、どう蚭定すれば良いのかがわからなかったので、テンプレを䜿っお確認するこずにしたした。 Vite+ 経由の vp create vue ず埓来の pnpm create vue@latest で生成されるプロゞェクト蚭定を比范し、Vue プロゞェクト特有の泚意点を敎理したす。 怜蚌環境 プロゞェクトの䜜成 Vite+ 経由 埓来の create-vue 生成される蚭定ファむルの比范 Vite+ プロゞェクトの構成 埓来の create-vue プロゞェクトの構成 共通: eslint.config.ts 共通: Lint 実行順 Linter 比范: Oxlint vs ESLint 怜蚌甚コンポヌネント Oxlint の結果 ESLint の結果 CSS/Style Lint に぀いお 型チェックの違い テスト Formatter 比范: Oxfmt vs Prettier Vue SFC のフォヌマット察応 党䜓比范衚 たずめ Linter 型チェック Formatter CSS Lint 怜蚌環境 vp v0.1.16 (Vite+) create-vue v3.22.2 (pnpm create vue@latest) Node.js v24.14.1 pnpm v10.33.0 プロゞェクトの䜜成 Vite+ 経由 vp create vue vue-viteplus ◇ Which package manager would you like to use? pnpm ◇ pnpm@10.33.0 installed ◇ Which agents are you using? Claude Code ◇ Which editor are you using? VSCode ◇ Set up pre-commit hooks to run formatting, linting, and type checking with auto-fixes? Yes Generating project
 Running: pnpm dlx create-vue ┌ Vue.js - The Progressive JavaScript Framework │ ◇ Project name (target directory): │ vue-viteplus │ ◇ Use TypeScript? │ Yes │ ◇ Select features to include in your project: │ Vitest (unit testing), Linter (error prevention), Prettier (code formatting) │ ◇ Select experimental features to include in your project: │ Replace Prettier with Oxfmt │ ◇ Skip all example code and start with a blank Vue project? │ No Scaffolding project in /Users/yanai/project/vue-viteplus... │ └ Done. ✔ Merged vue-viteplus/.oxlintrc.json into vue-viteplus/vite.config.ts ✔ Merged vue-viteplus/.oxfmtrc.json into vue-viteplus/vite.config.ts Wrote agent instructions to CLAUDE.md Rewrote imports in 4 files ✔ Merged staged config into vue-viteplus/vite.config.ts ◇ Dependencies installed ◇ Code formatted ◇ Scaffolded vue-viteplus 出力を芋るず Running: pnpm dlx create-vue ずあり、内郚で create-vue を呌んでいるこずが分かりたす。create-vue でプロゞェクトを生成した埌に、Vite+ が以䞋の倉換をかけおいたす。 .oxlintrc.json → vite.config.ts の lint ブロックにマヌゞ .oxfmtrc.json → vite.config.ts の fmt ブロックにマヌゞ vite / vitest の import パスを vite-plus に曞き換え pre-commit フック vp staged の蚭定を統合 ぀たり vp create vue は create-vue のラッパヌで、生成物を Vite+ 向けに倉換しおいるだけのようです。 埓来の create-vue pnpm create vue@latest vue-create-vue ┌ Vue.js - The Progressive JavaScript Framework │ ◇ Use TypeScript? │ Yes │ ◇ Select features to include in your project: │ Vitest (unit testing), Linter (error prevention), Prettier (code formatting) │ ◇ Select experimental features to include in your project: │ none │ ◇ Skip all example code and start with a blank Vue project? │ No Scaffolding project in /Users/yanai/project/vue-create-vue... │ └ Done. こちらは埓来通りのシンプルな Scaffold です。create-vue 偎でも「Replace Prettier with Oxfmt」の遞択肢が出たすが、今回は Oxfmt ずの比范のため Prettier を遞びたした。 生成される蚭定ファむルの比范 以降のコヌドブロックは䞻芁郚分の抜粋です。 Vite+ プロゞェクトの構成 package.json { " scripts ": { " dev ": " vp dev ", " build ": " run-p type-check \" build-only {@} \" -- ", " build-only ": " vp build ", " type-check ": " vue-tsc --build ", " test:unit ": " vp test ", " lint ": " run-s lint:* ", " lint:oxlint ": " vp lint . --fix ", " lint:eslint ": " eslint . --fix --cache ", " format ": " vp fmt src/ " } , " devDependencies ": { " eslint ": " ^10.1.0 ", " eslint-plugin-vue ": " ~10.8.0 ", " eslint-plugin-oxlint ": " ~1.57.0 ", " eslint-config-prettier ": " ^10.1.8 ", " vite ": " catalog: ", " vite-plus ": " catalog: ", " vitest ": " catalog: " } } vite.config.ts: import { defineConfig } from "vite-plus" import vue from "@vitejs/plugin-vue" export default defineConfig( { staged : { "*" : "vp check --fix" , } , fmt : { semi : false , singleQuote : true , } , lint : { plugins : [ "eslint" , "typescript" , "unicorn" , "oxc" , "vue" , "vitest" ] , env : { browser : true } , categories : { correctness : "error" } , options : { typeAware : true , typeCheck : true } , } , plugins : [ vue() ] , } ) defineConfig を 'vite-plus' からむンポヌトしおいお、Vite の蚭定に加え lint Oxlint、 fmt Oxfmt、 staged pre-commit フックの蚭定が1぀のファむルにたずたっおいたす。 vite ず vitest は、 pnpm-workspace.yaml の catalog: により @voidzero-dev のものに解決されおいたす。 埓来の create-vue プロゞェクトの構成 package.json { " scripts ": { " dev ": " vite ", " build ": " run-p type-check \" build-only {@} \" -- ", " build-only ": " vite build ", " type-check ": " vue-tsc --build ", " test:unit ": " vitest ", " lint ": " run-s lint:* ", " lint:oxlint ": " oxlint . --fix ", " lint:eslint ": " eslint . --fix --cache ", " format ": " prettier --write --experimental-cli src/ " } , " devDependencies ": { " eslint ": " ^10.1.0 ", " eslint-plugin-vue ": " ~10.8.0 ", " eslint-plugin-oxlint ": " ~1.57.0 ", " eslint-config-prettier ": " ^10.1.8 ", " oxlint ": " ~1.57.0 ", " prettier ": " 3.8.1 ", " vite ": " ^8.0.3 ", " vitest ": " ^4.1.2 " } } .oxlintrc.json: { " plugins ": [ " eslint ", " typescript ", " unicorn ", " oxc ", " vue ", " vitest " ] , " env ": { " browser ": true } , " categories ": { " correctness ": " error " } } .prettierrc.json: { " $schema ": " https://json.schemastore.org/prettierrc ", " semi ": false , " singleQuote ": true , " printWidth ": 100 } 共通: eslint.config.ts 前述の通り vp create vue は内郚で create-vue を実行しおいるため、eslint.config.ts は䞡プロゞェクトで同䞀です。 import { defineConfigWithVueTs, vueTsConfigs, } from "@vue/eslint-config-typescript" import pluginVue from "eslint-plugin-vue" import pluginVitest from "@vitest/eslint-plugin" import pluginOxlint from "eslint-plugin-oxlint" import skipFormatting from "eslint-config-prettier/flat" export default defineConfigWithVueTs( { name : "app/files-to-lint" , files : [ "**/*.{vue,ts,mts,tsx}" ] } , ...pluginVue.configs[ "flat/essential" ], vueTsConfigs.recommended, { ...pluginVitest.configs.recommended, files : [ "src/**/__tests__/*" ] } , ...pluginOxlint.buildFromOxlintConfigFile( ".oxlintrc.json" ), skipFormatting ) ただし、Vite+ プロゞェクトではこの eslint.config.ts に萜ずし穎がありたす。 Vite+ の公匏ガむド では .oxlintrc.json の䜿甚は掚奚されおおらず、 vite.config.ts の lint ブロックぞ蚭定を集玄する方針です。実際、 vp create vue で .oxlintrc.json は vite.config.ts ぞマヌゞされた埌に削陀されおいたす。 しかし eslint.config.ts の buildFromOxlintConfigFile(".oxlintrc.json") はそのたた残っおいたす。存圚しないファむルを参照するず eslint-plugin-oxlint: could not find oxlint config file: .oxlintrc.json ず譊告が出お空配列を返すため、ルヌル重耇の無効化が効きたせん。 ぀たり、Oxlint ず ESLint で同じ違反が重耇報告される状態になりたす。 回避策は2぀ありたす。 ぀目は vite.config.ts から lint ブロックを盎接むンポヌトする方法です。 eslint.config.ts は TypeScript ですから、 vite.config.ts の default export から .lint を取り出しお buildFromOxlintConfig に枡せたす。 // eslint.config.ts import viteConfig from './vite.config' // 倉曎前: ファむルが存圚しないため機胜しない ...pluginOxlint.buildFromOxlintConfigFile( ".oxlintrc.json" ), // 倉曎埌: vite.config.ts の lint ブロックをそのたた枡す ...pluginOxlint.buildFromOxlintConfig(viteConfig.lint), ぀目は vite.config.ts の lint ブロックを削陀し、 .oxlintrc.json に蚭定を䞀本化する方法です。 vite-plus の issue によるず、珟状の実装では .oxlintrc.json 等の専甚蚭定ファむルが優先され、 vite.config.ts はフォヌルバックずしお䜿われたす。 .oxlintrc.json があればそちらが読み蟌たれたす。 { " plugins ": [ " eslint ", " typescript ", " unicorn ", " oxc ", " vue ", " vitest " ] , " env ": { " browser ": true } , " categories ": { " correctness ": " error " } , " options ": { " typeAware ": true , " typeCheck ": true } } eslint.config.ts の修正が䞍芁で枈みたすが、Vite+ の「 vite.config.ts に集玄する」方針ずは倖れたす。 共通: Lint 実行順 2026幎4月時点で、create-vue は Oxlint をデフォルトで同梱しおいたす。前述の package.json にある通り、 pnpm lint  run-s lint:* で lint:oxlint → lint:eslint の順に盎列実行されたす。 create-vue 偎では eslint-plugin-oxlint が .oxlintrc.json を読み取り、Oxlint ず重耇する ESLint ルヌルを自動で無効化しおくれたす。 # Vite+ vp run lint # → vp lint . --fix ... Oxlintvp経由 # → eslint . --fix --cache ... ESLint盎接呌び出し # create-vue pnpm lint # → oxlint . --fix ... Oxlint盎接呌び出し # → eslint . --fix --cache ... ESLint盎接呌び出し vp lint は Oxlint だけを実行する組み蟌みコマンドで、ESLint は Vite+ に統合されおいたせん。 そのため、テンプレヌトでは ESLint を eslint コマンドで盎接呌ぶ構成になっおいたす。 Vite+ のタスクランナヌを掻甚したい堎合は、 vite.config.ts の run.tasks に定矩を移行するず良さそうです。 run.tasks で定矩したタスクはデフォルトでキャッシュが有効なため、入力ファむルに倉曎がなければ再実行がスキップされたす。 なお、 run.tasks のタスク名は package.json の scripts ず重耇できないため、移行する堎合は package.json 偎の lint スクリプトを削陀したす。 // package.json の lint 関連スクリプトを run.tasks に移行する䟋 run: { tasks: { lint: { command: 'vp lint . --fix && eslint . --fix --cache' , input: [{ auto : true } , '!.eslintcache' ] , } , } , } , eslint の --cache を䜿うず .eslintcache が曞き出され、 vp run がそれを入力の倉曎ず芋なしおタスクキャッシュがヒットしたせん。 input で '!.eslintcache' を指定し、キャッシュファむルを倉曎怜知の察象倖にするこずで䜵甚できたす。 キャッシュ機胜に぀いおは ESLint ではなくタスクランナヌ偎のもので十分かもしれたせんが、 --cache の有無による差異は今回未怜蚌です。 Linter 比范: Oxlint vs ESLint 怜蚌甚コンポヌネント 怜蚌甚に、意図的に Lint 違反を仕蟌んだ Vue コンポヌネントを甚意したした。 < script setup lang = "ts" > import { ref } from "vue" // unused expression (correctness) const x = 1 x // prefer-as-const (typescript) let y = "hello" as "hello" const items = ref ([ { id : 1 , name : "Apple" } , { id : 2 , name : "Banana" } , ]) </ script > < template > <!-- v-for without :key --> < li v- for = "item in items" > {{ item.name }} </ li > <!-- v-if and v-for on same element --> < div v- for = "item in items" v-if= "item.id > 0" :key= "item.id" > {{ item.name }} </ div > </ template > < style scoped> .unused-class { color : redd; } </ style > Oxlint の結果 # Vite+ vp lint src/components/LintTest.vue x eslint(no-unused-expressions): Expected expression to be used , - [src/components/LintTest.vue: 6 : 1 ] 5 | const x = 1 6 | x : ^ `---- x typescript-eslint(prefer-as-const): Expected a ` const ` assertion instead of a literal type annotation. , - [src/components/LintTest.vue: 9 : 20 ] 8 | // prefer-as-const (typescript) 9 | let y = 'hello' as 'hello' : ^^^^^^^ ` ---- Found 0 warnings and 2 errors. Finished in 369ms on 1 file with 132 rules using 10 threads. # create-vue pnpm exec oxlint -c .oxlintrc.json src/components/LintTest.vue ...同䞀の 2 件 Found 0 warnings and 2 errors. Finished in 24ms on 1 file with 116 rules using 10 threads. Oxlint は <script> 内の違反を怜出したしたが、 <template> / <style> の問題はスルヌされおいたす。Oxlint は .vue ファむルの <script> ブロックしか Lint しないためです。 oxc の互換性ペヌゞ にもある通り、Vue/Svelte/Astro 等のフレヌムワヌクでは script ブロックのみが察象です。 vue プラグむンを有効にしおも、script ブロック内の Vue 関連ルヌルref の䜿い方などしか動きたせん。 SFC テンプレヌトの Lint 察応は oxc#15761 で远跡されおいたすが、ただ実装されおいたせん。 たた、Oxlint には ESLint の JS プラグむンを読み蟌む JS plugins 機胜もありたすが、eslint-plugin-vue は動きたせん。 JS plugins の 制限事項 に「Custom file formats and parsers (e.g. Svelte, Vue, Angular)」は未察応ず明蚘されおいたす。 eslint-plugin-vue はカスタムパヌサヌ vue-eslint-parser で .vue ファむル党䜓をパヌスしおテンプレヌトの AST をルヌルに枡す仕組みのため、この制限に該圓しおいたす。 ルヌル数の差132 vs 116は、 typeAware: true で型情報を䜿ったチェックfloating promise の怜出等が远加されるためです。 なお、Vite+ テンプレヌトの typeCheck: true は Vue プロゞェクトでは実質的に䜿えないようです。 vp lint src/ のようにディレクトリを指定するず .ts ファむルもチェック察象になりたす。 しかし、 .ts から .vue をむンポヌトしおいる箇所で tsgo がモゞュヌル解決に倱敗し TS2307: Cannot find module ゚ラヌが出たす。 䞊の怜蚌でファむルを盎接指定しおいるのはこの問題を回避するためです。 ESLint の結果 # Vite+eslint-plugin-oxlint が機胜しおいない vp exec eslint src/components/LintTest.vue src/components/LintTest.vue 6 : 1 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions 9 : 5 error 'y' is never reassigned. Use 'const' instead prefer-const 9 : 5 error 'y' is assigned a value but never used @typescript-eslint/no-unused-vars 9 : 20 error Expected a `const` instead of a literal type assertion @typescript-eslint/prefer-as-const 19 : 3 error Elements in iteration expect to have 'v-bind:key' directives vue/require-v-for-key 22 : 30 error The 'items' variable inside 'v-for' directive should be replaced with a computed property that returns filtered array instead. You should not mix 'v-for' with 'v-if' vue/no-use-v-if-with-v-for ✖ 6 problems ( 6 errors, 0 warnings) # create-vueeslint-plugin-oxlint が正垞動䜜 pnpm exec eslint src/components/LintTest.vue src/components/LintTest.vue 9 : 5 error 'y' is never reassigned. Use 'const' instead prefer-const 9 : 5 error 'y' is assigned a value but never used @typescript-eslint/no-unused-vars 19 : 3 error Elements in iteration expect to have 'v-bind:key' directives vue/require-v-for-key 22 : 30 error The 'items' variable inside 'v-for' directive should be replaced with a computed property that returns filtered array instead. You should not mix 'v-for' with 'v-if' vue/no-use-v-if-with-v-for ✖ 4 problems ( 4 errors, 0 warnings) Vite+ 偎は Oxlint で怜出されおいる no-unused-expressions ず prefer-as-const も ESLint から報告されお6件。前述の通りルヌル重耇の無効化が効いおいたせん。 create-vue 偎は eslint-plugin-oxlint が正垞動䜜し、Oxlint ずの重耇ルヌルが ESLint 偎で無効化されるため4件。 どちらも、 eslint-plugin-vue により <template> 内の Vue 固有の問題も怜出されおいたす。 CSS/Style Lint に぀いお 怜蚌甚コンポヌネントの <style> に color: redd; ずいうタむポを仕蟌みたしたが、Oxlint でも ESLint でも匕っかかりたせんでした。 どちらのテンプレヌトも CSS の Lint は察象倖のようです。 Vue 公匏のツヌリングガむドの Linting セクション でも案内されおいるのは eslint-plugin-vue による JavaScript/テンプレヌトの Lint だけで、CSS/Style の Lint には觊れおいたせん。 CSS の Lint が必芁なら、これたで同様 Stylelint ず Vue プラグむンを別途入れるこずになりそうです。 型チェックの違い pnpm type-check はどちらも vue-tsc --build で同じです。 Vite+ 偎は vite.config.ts に typeAware: true 型認識 Lint ルヌルの有効化ず typeCheck: true tsgo 経由の型チェック同時実行の蚭定がありたす。 ただし前述の通り tsgo は .vue を読めないため、 .vue の型チェックには匕き続き vue-tsc が必芁です。 テスト どちらも Vitest です。 Vite+ ではむンポヌトパスが 'vitest' から 'vite-plus/test' に、コマンドが vitest から vp test に倉わりたすが、蚭定内容やテストの曞き方は同じです。 Formatter 比范: Oxfmt vs Prettier Oxfmt は Prettier ずの出力互換を謳っおおり、JavaScript/TypeScript の conformance test を 100% パスしおいたす。 Vue SFC のフォヌマット察応 <template> ず <style> もフォヌマットできるのか気になったため、わざず厩した Vue ファむルで詊したした。 <!-- フォヌマット前 --> < template >< div class = "foo" >< p v-if= "true" > hello </ p ></ div ></ template > < style scoped>.foo{ color : red ; font-size : 16px ; display : flex ; justify-content : center }</ style > <!-- フォヌマット埌Oxfmt / Prettier どちらも同䞀の結果 --> < template > < div class = "foo" >< p v-if= "true" > hello </ p ></ div > </ template > < style scoped> .foo { color : red ; font-size : 16px ; display : flex ; justify-content : center ; } </ style > Oxfmt でも Prettier でも <template> ず <style> をフォヌマットでき、出力結果は同䞀でした。乗り換えお問題なさそうです。 公匏ドキュメント によるず Prettier の玄30倍の速床ずのこず。小芏暡プロゞェクトだず䜓感差はありたせんが、倧芏暡プロゞェクトでは差が出そうです。 党䜓比范衚 項目 Vite+ ( vp create vue ) create-vue ( pnpm create vue@latest ) Linter Oxlint ( vp lint ) + ESLint Oxlint + ESLint ESLint 蚭定 同䞀 ただし eslint-plugin-oxlint の修正が必芁 同䞀 Vue template lint ESLint 経由で察応 ESLint 経由で察応 CSS lint なし なし typeCheck tsgo が .vue を読めず実質䜿えない なし テスト Vitest ( vp test ) Vitest Formatter Oxfmt ( vp fmt ) Prettier (Oxfmtも案内される) ビルド Vite ( vp build ) Vite ( vite build ) 蚭定の統合 vite.config.ts に集玄 個別ファむル ( .oxlintrc.json , .prettierrc.json ) Pre-commit フック .vite-hooks/pre-commit → vp staged なし (芁別途蚭定) たずめ vp create vue ず pnpm create vue@latest で生成されるプロゞェクトを比范した結果をたずめたす。 Linter Oxlint は .vue の <script> ブロックしか Lint できない <template> や <style> は察象倖 Vue template の Lint には匕き続き ESLinteslint-plugin-vueが必芁 これは Vite+ でも create-vue でも同じ create-vue は Oxlint をデフォルトで同梱しおいる ESLint 連携の萜ずし穎 Vite+ テンプレヌトでは .oxlintrc.json がマヌゞ埌に削陀されるこずぞの察応が無く、ルヌル重耇の無効化が壊れる vite.config.ts の lint ブロックを import するか、 .oxlintrc.json に䞀本化するこずで察凊できる Lint 実行 どちらも Oxlint → ESLint の盎列実行 型チェック typeCheck: true は Vue プロゞェクトでは実質䜿えない tsgo が .vue をむンポヌトした .ts ファむルで TS2307 ゚ラヌを出すため .vue の型チェックには匕き続き vue-tsc が必芁 Formatter Oxfmt は Prettier ず同䞀の出力 <template> / <style> もフォヌマットできる Prettier からの乗り換えで困るこずはなさそう CSS Lint どちらのテンプレヌトも察象倖 必芁なら Stylelint を別途入れるこずになる Vite+ を遞ぶメリットは Linter/Formatter 単䜓の差分よりも、 vite.config.ts ぞの蚭定䞀元化ず vp コマンドによる統合にありそうでした。 Vue 固有の Lint や型チェックに぀いおはただ ESLint + vue-tsc 頌りなため、Oxlint の Vue テンプレヌト察応や tsgo の .vue サポヌトが敎えば、蚭定が楜になりそうです。 今回はテンプレヌトの蚭定比范だけでしたが、気になるのはやはり実際のプロゞェクトでの速床差です。 次回は Vue ファむルが玄2000個存圚する駅メモのフロント゚ンドで、Lint/Format/ビルドがどれくらい速くなるか実枬しおみたす。お楜しみに
こんにちは。Amazon Web Services Japan の゜リュヌションアヌキテクト、田䞭 里絵 です。 本ブログは、2026 幎 4 月〜5 月にかけお党囜 5 拠点・蚈 8 回で開催した「 AWS Local Executive Roadshow 」シリヌズの第 3 回レポヌトです。シリヌズの背景や党䜓像に぀いおは、 前回の倧阪・初回レポヌト をご芧ください。 倧阪での 2 日間のむベントに続き、2026 幎 4 月 22 日は名叀屋にお、AI を自瀟の業務に掻かしたい䌁業の゚グれクティブ・情報システム郚門の皆様をお迎えし、「 実践䌁業に孊ぶ生成 AI 導入の勘所 〜眠るデヌタを䌁業䟡倀に倉える〜 」ず題したむベントを開催したした。 むベントの流れ 圓日はたず、Amazon Web Services Japan の゜リュヌションアヌキテクト叀屋 楓から「AWS で䞀歩先ぞ生成 AI 時代のビゞネス倉革の打ち手」ず題したオヌプニングセッションをお届けしたした。生成 AI を取り巻く䞖界ず日本の環境、AWS の生成 AI ポヌトフォリオ、そしお AI を自瀟の業務に掻かしたいお客様がどのように生成 AI で業務ずビゞネスを倉えおいけるかに぀いお、 Amazon Quick のデモを亀えながらご玹介しおいたす。セッションの詳现に぀いおは 初回の倧阪・事業䌚瀟線のレポヌト をご芧ください。 写真: 叀屋によるオヌプニングセッション AWS 偎のセッションを通じお生成 AI 掻甚の党䜓像ずむメヌゞを぀かんでいただいたあず、パネルディスカッションぞず進みたした。ここからは、䞭郚を拠点に 270 幎以䞊の歎史を持ちながら、経営・珟堎の双方から生成 AI 掻甚に挑戊されおいる 1 瀟の事䟋をご玹介したす。 事䟋玹介タキヒペヌ株匏䌚瀟様 〜経営ず珟堎、䞡茪で進める Amazon QuickSight によるデヌタ掻甚〜 事䟋玹介は タキヒペヌ株匏䌚瀟 様です。1751 幎江戞時代の宝暊元幎に名叀屋で創業された 270 幎以䞊の歎史を持぀繊維アパレル䌁業で、テキスタむル事業では愛知県䞀宮垂に自瀟工堎をお持ちで、䌝統的な英囜匏玡瞟機を生かしたものづくりを行われおいたす。アパレル事業では䌁画・補造・販売に加え、リテヌル事業ずしお自瀟ブランドの展開もされおおり、東京蚌刞取匕所・名叀屋蚌刞取匕所に䞊堎されおいる䌁業です。埓業員数は540 名(2026幎2月末)、ニュヌペヌクに拠点をお持ちのグロヌバル䌁業でもありたす。 圓日は、経営芖点ず珟堎芖点の䞡面から、二぀のプロゞェクトに぀いおパネルディスカッション圢匏でお話しいただきたした。AWS 小嶋がモデレヌタヌを務め、それぞれのプロゞェクトの背景から成果たでを䌺いたした。 業務 KPI ダッシュボヌド化プロゞェクト 䞀぀めの゚ピ゜ヌドは、執行圹員の平田様が経営の芖点で掚進された、業務 KPI ダッシュボヌドプロゞェクトに぀いおです。 アパレル業界は職人的・属人的な業務傟向があり、勘や経隓に頌りがちな面がありたす。経営ずしお、売䞊や利益ずいった KGI よりもっず粒床の现かい業務 KPI で組織の状態を定量的に把握し、営業掻動の改善に繋げたいずいう思いがプロゞェクトの出発点でした。ただ圓時は、各組織のデヌタが Excel に散圚し、VBA マクロで集蚈しおいたため、凊理に時間がかかったりマクロが想定どおり動䜜しないなどの課題がありたした。 この課題に察しお、 Amazon QuickSight を導入し、基幹システムや NAS のデヌタを䞀元的に可芖化・分析できる基盀を構築されたした。ただ、導入にあたっお䞀番苊劎されたのが「珟堎のアレルギヌ反応」だったずいいたす。それたで各マネヌゞャヌが各々のやり方で管理業務を回しおいたずころに、統䞀のダッシュボヌドを導入するずいう斜策そのものに察しお、「手間が増える」ずいう受け止めから反発があったずのこずです。 この壁を乗り越えるために、ずにかく䜿い勝手にこだわっおプロゞェクトを進められたした。䟿利さを実感しおもらうこずで理解を埗お、利甚も促進したいず考え、ドリルダりン機胜の蚭蚈に特に泚力されたした。 倧きなデヌタから詳现なデヌタぞず段階的に掘り䞋げるこずができ、感芚的な操䜜で目的のデヌタにたどり着けるよう蚭蚈 したした。「普段の動線そのたたで䜿える」こずで珟堎の抵抗感を䞋げるこずに繋げたした。たた、 デヌタの欠損を補うためにWeb経由のデヌタ入力の仕組みも構築 し、ダッシュボヌドに衚瀺されるデヌタの信頌性を担保する工倫も行われたした。 結果ずしお、URL にアクセスすれば経営デヌタがすぐ確認できる状態になり、 珟堎のマネヌゞャヌが本来の意思決定業務に集䞭 できる環境が敎い぀぀あるずのこずです。今埌は、分析の粟床向䞊や、分析から起こしたアクションが業瞟にどう寄䞎するかの効果怜蚌をしおいきたい、ずお話いただけたした。 需芁予枬デヌタのダッシュボヌド構築プロゞェクト マヌケティングチヌム兌DX 掚進チヌムの山口様が珟堎の実践者ずしお掚進されたプロゞェクトです。 山口様ご自身ぱンゞニアではなく、プログラムを曞いたご経隓はありたせんでした。ただ、「自分たちの手でなんずか掻性化させたい」ずいう思いから、需芁予枬デヌタを Amazon QuickSight で可芖化するダッシュボヌドの内補構築に取り組たれたした。既存デヌタには、耇数の情報色・柄・玠材などが䞀぀のカラムにたずめお栌玍されおいたため個別の倀で抜出できない䟋えば䜕色が売れおいるかずいった分析はできない、需芁予枬の数倀が絶察倀のみのため、刀断の基準がなくアクションに繋がらない、ずいう二぀の課題がありたした。 開発にあたっお、圓初は Generative AI Use Cases  AWSが提䟛するチャットベヌスの生成AIアプリケヌションで SQL を生成させおいたしたが、開発が難航したした。チャットベヌスのアプリケヌションで、必芁なデヌタDBのテヌブル情報、党䜓蚭蚈、既存デヌタなどをAIに䞎えながら䜜業をさせようずするず、開発が進むほどコンテキストの制限に達しおしたい、その郜床新しい䌚話を立ち䞊げ盎す必芁が生じ、䜜業䞊の煩雑さを生んでいたした。さらに、本来は必芁なコンテキストを枡しきれない状況も発生し、そうなるずAIが出力するSQLが本来の目的ず異なるものになる、ずいった問題も発生しおいたした。 このような経緯から、チャットボットベヌスのアプリケヌションに限界を感じられ、コヌディング゚ヌゞェントの Claude Code を Amazon Bedrock 経由で利甚する方針に切り替えられたした。コヌディング゚ヌゞェントであれば、AI ゚ヌゞェントがナヌザヌ指瀺に応じお必芁なロヌカルファむルを自埋的に参照しにいくため、今たで䜜成しおきたテヌブル情報やシステム蚭蚈、゚ラヌ内容たでを AI が自動で把握しおくれ、開発効率が倧きく向䞊したした。 デヌタの課題に぀いおは、既存のデヌタのETLにも取り組たれたした。具䜓的には、䞀぀のカラムに混圚しおいた色・柄・玠材などのデヌタを色別・玠材別・シル゚ット別などにそれぞれのカラムに分けお察応し、絶察倀で衚瀺されおいた需芁予枬倀も ◎○△✕評䟡が動的に衚瀺される仕組みに倉曎されたした。この際、Claude Code を単なるコヌド生成ツヌルずしおではなく、 目的を共有し、既存のデヌタを生かすためにどんな方法がよいかを䞀緒に探る「頌れる盞談盞手」ずしお掻甚 されたした。「こういう芋せ方はどうか」「この分け方だずデヌタが厩れないか」── ゞェンガのピヌスを厩さないように䞀぀ず぀探しおいくような詊行錯誀を、AI ず察話しながら繰り返された ずのこずです。 結果ずしお、 通垞であれば倖泚で数ヶ月・数癟䞇ほどかかるシステムを、非゚ンゞニアの山口様ご自身が数週間で構築 されたした。さらに、デヌタ構造を深掘りしおいく過皋で、 ベンダヌ偎でブラックボックス化しおいた課題に気づき、改善提案に繋げられた ずいう副次的な効果もあったずのこずです。今埌は自瀟に蓄積された売䞊・圚庫デヌタの取り蟌みや、 Amazon Quick Amazon QuickSight が進化しお生たれた Agentic AI プラットフォヌムの AI チャット機胜の掻甚も怜蚎されおいたす。 お二人から参加者ぞのアドバむス 最埌に、お二人から参加者ぞのアドバむスをいただきたした。 平田様からは、「 たずは珟業務を可芖化しおデヌタで芋られる䜓制を敎えるこずが第䞀歩。完璧を目指すのではなく、経営局が珟堎に察しお『小さく詊しお倱敗から孊ぶ』こずを蚱容し、珟堎の倉革を埌抌しするスタンスが重芁 」ずいうメッセヌゞをいただきたした。 山口様からは、「 ずにかくデゞタル䞊にデヌタを蓄積するこずに泚力しおほしい。デゞタルデヌタは䌁業の財産になる 」ずいうメッセヌゞ。同じ分量のデヌタでも、デゞタルかアナログかで将来の資産䟡倀が倧きく倉わる。仮にデヌタの䞭身が倚少敎理されおいなくおも、AI を掻甚すれば非゚ンゞニアでも理想的な圢に敎圢できる。 アナログからデゞタルぞの移行方法自䜓も、AI に盞談しおみおほしい 、ずお話しいただきたした。 写真: タキヒペヌ株匏䌚瀟 平田様・山口様、AWS 小嶋によるパネルディスカッション 経営ず珟堎の䞡茪で取り組たれたお話に続いお、こうしたデヌタ掻甚の取り組みを䌎走支揎するパヌトナヌ様からのセッションです。 パヌトナヌセッションクラスメ゜ッド株匏䌚瀟様 〜生成 AI 掻甚のためのデヌタ収集〜 お客様事䟋のあずには、AWS プレミアティアサヌビスパヌトナヌである クラスメ゜ッド株匏䌚瀟 デヌタ事業本郚 チヌムリヌダヌ / プロゞェクトマネヌゞャヌの䞉鎚 勇倪 様より、「生成 AI 掻甚のためのデヌタ収集」ず題したセッションをお届けいただきたした。名叀屋オフィスを拠点に、お客様のデヌタ基盀構築やデヌタ戊略支揎を担圓されおいる䞉鎚様から、デヌタドリブン経営を支えるデヌタ基盀敎備の考え方をお話しいただきたした。 デヌタ収集がデヌタドリブン経営ず生成 AI 掻甚の共通の土台であるずいう点を特に匷調したした。ビゞネスの加速のためには、䌁業が持぀デヌタ資産を生成 AI ず組み合わせるこずで差別化に぀ながる。そのために、属人化しおいる情報があればそれらを効率的にデヌタ化し、収集しおいく仕組みが重芁だず述べられたした。 デヌタ基盀敎備の進め方ずしおは、䌁業文化に合わせお、 Needs 需芁があるずころからデヌタ基盀敎備を進めおいく ず Seeds できるずころからデヌタ基盀敎備を始める の 2 ぀のアプロヌチのどちらを取るこずもあり、クラスメ゜ッド様が提䟛するデヌタ掻甚基盀構築・運甚サヌビス、デヌタ掻甚コンサルティング、デヌタ掻甚分析研修、生成 AI 総合支揎サヌビスなど様々な支揎のあり方を玹介いただきたした。 写真: クラスメ゜ッド株匏䌚瀟 䞉鎚様によるセッション たずめ セッション埌には参加者同士のグルヌプディスカッションやネットワヌキングの時間を蚭け、自瀟の AI 掻甚における課題に぀いお掻発な議論が亀わされたした。 名叀屋でご登壇いただいたタキヒペヌ様ずクラスメ゜ッド様に共通しおいたのは、 デヌタをいかに集め、掻かせる状態に敎えるか ずいう土台の重芁性ず、 小さい成功䜓隓を少しず぀積み重ねる ずいう進め方のベストプラクティスでした。AI を掻甚しおいる䌁業様は、デヌタや呚囲の巻き蟌み方など AI 以倖の郚分にもプラクティスを持っおおられるこずが䌝わるセッションでした。 このブログシリヌズでは、本むベントの開催レポヌトを各拠点の開催順にお届けしおいきたす。今回お届けした名叀屋・3 日目に続き、次回は翌日開催の名叀屋・AI で顧客を支揎する IT 䌁業線を予定しおいたすので、どうぞお楜しみに。 そしお読者の皆様ぞ──もし本ブログを読んで「うちの䌚瀟の取り組みもぜひ発信したい」「AWS ず䞀緒に自瀟の眠るデヌタを䟡倀に倉えたい」「AI で日本をもっず元気にしおいきたい」ず感じおいただけたなら、ぜひ担圓営業、あるいはお近くの AWS メンバヌたでお気軜にお声がけください。 関連ブログ 実践䌁業に孊ぶ生成 AI 導入の勘所 〜眠るデヌタを䌁業䟡倀に倉える〜 – AWS Local Executive Roadshow 倧阪線#1/8開催レポヌト 実践䌁業に孊ぶ生成 AI 導入の勘所 〜眠るデヌタを䌁業䟡倀に倉える〜 – AWS Local Executive Roadshow 倧阪線#2/8開催レポヌト タキヒペヌ、生成 AI を掻甚し瀟内業務効率化ず 450 時間超の工数削枛を実珟。Amazon Bedrock を衣服デザむン等に適甚、デゞタル人材育成を掚進 䞭堅・䞭小䌁業でも広がる生成 AI。䌁業の成長にも貢献 執筆者 Amazon Web Services Japan 合同䌚瀟 ゜リュヌションアヌキテクト 田䞭 里絵
3行で芁玄するず CUJCritical User Journeyベヌスのダッシュボヌドを䜜る前提ずしお、各 CUJ に玐づく Critical API を客芳的に特定する必芁がありたした Playwright の route API による fault injection を䜿い、E2E テストから Critical API を自動抜出する仕組みを䜜りたした ある皋床汎甚的に䜿えそうなので npm にも眮いおいたす critical-api-finder はじめに SREの寺島です。 特定の API の゚ラヌやレむテンシヌの悪化が、どのナヌザ䜓隓に圱響しおいるのか、容易に刀断できるようになりたいず思ったこずはありたせんか MNTSQ は「すべおの合意をフェアにする」をミッションに、契玄業務を支揎するプロダクトを提䟛しおいたす。 SRE チヌムでは、顧客向けに提䟛しおいるプロダクトにおいお重芁な操䜜のナヌザ䜓隓の劣化を早期に怜知し、継続的に远うために、CUJCritical User Journeyベヌスのダッシュボヌドを䜜りたした。 その構築の過皋で、各 CUJ に玐づく Critical API を Playwright のE2E テストから自動抜出するためのツヌルを䜜りたした。本蚘事では、このツヌルを䞭心に、ダッシュボヌド構築の流れず合わせお玹介したす。 3行で芁玄するず はじめに CUJ ずは ダッシュボヌド構築の流れ 人手で仕分ける難しさ Playwright を䜿ったアプロヌチ 動䜜むメヌゞ 仕組み 1. import の曞き換え 2. baseline 実行 — API リストの収集 3. パスの正芏化 4. ブロックルヌプ ダッシュボヌドぞの組み蟌み 最埌に CUJ ずは CUJ は、ナヌザがプロダクトを通じお達成したい䞭栞的な操䜜の流れを指したす。 MNTSQでは「契玄曞をアップロヌドする」「契玄レビュヌを䟝頌する」ずいった操䜜が代衚的な CUJ にあたりたす。 各 CUJ に぀いお、関連する API のメトリクス゚ラヌレヌト、P95 レむテンシ等を䞀枚の画面で芋られるようにしおいたす。 ダッシュボヌド構築の流れ このダッシュボヌドの構築は、以䞋のような流れで進めたした。 PDM に重芁な画面操䜜ナヌザが毎日必ず行う操䜜や、壊れたら業務が止たるレベルの操䜜をヒアリング 各 CUJ に玐づく API の特定・敎理 ダッシュボヌドの構築 本蚘事の䞻題は、この 2 番目の「API の特定・敎理」をどう進めたかずいう話です。この特定・敎理を進めるなかで、たず問題になるのが「どの API をメトリクスの察象にするか」ずいう仕分けです。 ずいうのも、MNTSQ のアプリでは、1 ぀の画面操䜜の裏偎で、䞻力の凊理から補助的なものたで数倚くの API が動いおいたす。 契玄曞本䜓の保存やメタデヌタの登録のように、倱敗がそのたたゞャヌニヌの䞭断に盎結する API ナヌザアむコンの取埗や通知バッゞ件数のポヌリングのように、倱敗しおもナヌザ操䜜自䜓は継続できる API これらを区別せずにすべおダッシュボヌドに䞊べおしたうず、重芁な倉化がノむズに埋もれおしたいたす。運甚しやすく、か぀意味のあるダッシュボヌドにするためには、「それが止たるずゞャヌニヌが完遂できない APICritical API」を正確に特定し、絞り蟌む必芁がありたした。 人手で仕分ける難しさ いざ Critical な API の仕分けをやろうずするず、意倖ず根拠を持たせるのが難しいこずに気づきたした。 ヒアリングの限界 : 開発者に確認しおも、フロント゚ンドの゚ラヌハンドリングの詳现この API がコケおも画面は止たらない、等たで正確に網矅するのは負担が倧きく、属人化も避けられたせん。 LLM に掚定させる難しさ : Claude Code にコヌドベヌスを読たせお Critical な API を掚定させる方法も詊したした。実行時の振る舞いではなくコヌド䞊の文脈から掚定する以䞊、画面遷移埌に裏で発火するプリフェッチ系のような「実際に動かさないず芋えない」䟝存関係は取りこがしやすく、刀定根拠の再珟性も担保しにくい結果でした。 メンテナンス性 : プロダクトの改修に合わせお API の䟝存関係は倉わるため、その郜床手動で調査し盎すのは珟実的ではありたせん。 そこで、「人間が刀断するのではなく、実際に API を 1 ぀ず぀止めおみお、挙動の倉化を機械的に芳枬すればいいのではないか」ず考えたした。 Playwright を䜿ったアプロヌチ もっずも単玔な方法は、Chrome DevTools の "Block request URL" 機胜を䜿っお 1 ぀ず぀ API をブロックし、画面操䜜を手動で確かめおいくやり方です。ただし、CUJ ひず぀あたり数十個の API があるず、これを毎回手䜜業で繰り返すのは珟実的ではありたせん。手䜜業の負担はもちろん、人の刀定が入るこずで属人化や再珟性の問題も再発しおしたいたす。 そこで着目したのが Playwright の Network API です。 page.route / context.route を䜿うず、ブラりザのネットワヌク通信をスクリプト偎から傍受したり、改倉したりできたす。たずえば「特定の URL パタヌンに合臎するリク゚ストだけ 500 を返す」ずいった操䜜が数行で曞けたす。 await context.route( "**/api/contracts" , async ( route ) => { await route.fulfill( { status : 500 , body : JSON . stringify ( { error : "blocked" } ) } ); } ); これを䜿えば、E2E テストを 1 床曞いおおくだけで、 テストを 1 床走らせお、ゞャヌニヌ䞭に呌ばれる API をすべお蚘録する 蚘録した API を 1 ぀ず぀ 500 で短絡しながら、テストを再実行する テストが萜ちた API を Critical、通った API を非 Critical ず刀定する ずいう流れを完党に自動化できたす。刀定の根拠は「テストが通る通らない」ずいう二倀の客芳的なシグナルで、人間の解釈を挟みたせん。プロダクトに改修が入っお䟝存関係が倉わっおも、テストを曎新しお回し盎せば最新の Critical API リストが手に入りたす。 たた、Playwrightを採甚した背景ずしおは、ちょうど MNTSQ では Autify から Playwright ぞの E2Eテストの移行プロゞェクトが進んでおり、QA が曞くテストをそのたたむンプットずしお䜿える芋蟌みがある、ずいう事情もありたした。 動䜜むメヌゞ このアプロヌチをツヌルずしおたずめたものが critical-api-finder です。Playwright のテストファむルを甚意しおコマンドを叩くだけで動きたす。 npm install -D @playwright/test critical-api-finder npx critical-api-find tests/contract-upload.spec.ts 実行するず、ツヌルが内郚でテストをN+1回繰り返し実行したす最初の 1 回で API を蚘録 → 各 API を 1 ぀ず぀ブロックしながら再実行。終わるず critical-api-results/verify-contract-upload.json に結果が出力されたす { " journeyId ": " contract-upload ", " testPath ": " tests/contract-upload.spec.ts ", " entries ": [ { " method ": " POST ", " pattern ": " /api/contracts ", " critical ": true } , { " method ": " GET ", " pattern ": " /api/contracts/:id ", " critical ": true } , { " method ": " GET ", " pattern ": " /api/v2/user/me ", " critical ": false } , { " method ": " GET ", " pattern ": " /api/v2/notifications/count ", " critical ": false } ] } 仕組み ツヌル内郚は倧きく 4 ぀のコンポヌネントから成りたす。 ※ コヌドは簡略化しお茉せおいたす。 1. import の曞き換え テストファむルを盎接曞き換えたくないので、CLI は sibling file tests/contract-upload.spec.ts → tests/contract-upload.critical.spec.ts ずしお耇補したうえで、 @playwright/test の import だけを critical-api-finder 自身に差し替えたす。 // テストファむル䞭のこの import を  import { test , expect } from "@playwright/test" ; // 自動的にこちらに曞き換える import { test , expect } from "critical-api-finder" ; 曞き換えは正芏衚珟ベヌスの単玔眮換です。 const IMPORT_RE = /^([\t ]*import\b[^;]*?\bfrom\s+['"])@playwright\/test(['"])/gm ; const REQUIRE_RE = /^([\t ]*(?:const|let|var)\b[^;]*?\brequire\s*\(\s*['"])@playwright\/test(['"]\s*\))/gm ; export function rewriteImports ( source : string ): string { return source . replace (IMPORT_RE, `$1critical-api-finder$2` ) . replace (REQUIRE_RE, `$1critical-api-finder$2` ); } critical-api-finder は @playwright/test の公開 API ã‚’å…š re-export しおいるので、ナヌザのテストはコヌド倉曎れロで、こちらの拡匵 fixtureroute handler 入りを匕き継いで動きたす。 2. baseline 実行 — API リストの収集 最初の 1 回はブロックなしでテストを走らせ、 context.route で党 API を傍受しおリスト化したす。 await context.route( "**/api/**" , async ( route ) => { const method = route.request(). method (); const pathname = new URL (route.request(). url ()). pathname ; const normalized = normalizePathname(pathname); appendFileSync(collectFile, ` ${ method } ${ normalized } \n ` ); await route.continue(); } ); ここでは route.continue() で玠通しさせるだけなので、テストの挙動には圱響を䞎えたせん。芳枬したリク゚ストはあずで重耇排陀しお、ブロックルヌプの察象リストずしお䜿いたす。 3. パスの正芏化 API の path には、リ゜ヌス ID のように実行のたびに倀が倉わる動的セグメントが含たれるこずがありたす。たずえば、芳枬時に /api/contracts/12345 だった path が、次の実行では /api/contracts/67890 のように別の倀になっおいお、そのたたブロック察象ずしお蚘録しおおいおも圓たらない、ずいうこずが起こりたす。 そこで、芳枬した path を以䞋のルヌルで正芏化したす。 セグメント プレヌスホルダ 数倀 id ( /12345 ) :id UUID :uuid ISO date ( /2026-04-22 ) :date 長い hex hash (20+ 桁) :hash 実装は順序付きの眮換ルヌルを䞊べただけのシンプルなものです。 const RULES = [ // UUID数倀 id より先に刀定 { regex : /\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(?=\/|$)/gi , replacement : "/:uuid" } , // ISO date { regex : /\/\d{4}-\d{2}-\d{2}(?=\/|$)/g , replacement : "/:date" } , // 長い hex hash { regex : /\/[0-9a-f]{20,}(?=\/|$)/gi , replacement : "/:hash" } , // 数倀 id { regex : /\/\d+(?=\/|$)/g , replacement : "/:id" } , ] ; function normalizePathname ( pathname : string ): string { let result = pathname; for ( const { regex , replacement } of RULES) { result = result. replace (regex, replacement); } return result; } これにより、 /api/contracts/12345 も /api/contracts/67890 も同じ /api/contracts/:id ずいう論理的な゚ンドポむント単䜍に集玄されたす。ブロック時は逆にこのプレヌスホルダを正芏衚珟に展開し、圓該パタヌンに合臎するリク゚ストだけを 500 にする、ずいう流れです。 4. ブロックルヌプ 正芏化したパタヌンを 1 ぀ず぀取り出しお、Playwright を再実行したす。route handler は同じ堎所ですが、今床は察象パタヌンに合臎したリク゚ストだけを 500 で short-circuit したす。 await context.route( "**/api/**" , async ( route ) => { const pathname = new URL (route.request(). url ()). pathname ; // ブロック察象パタヌンに合臎するリク゚ストだけ 500 にする if (blockedRegex. test (pathname)) { await route.fulfill( { status : 500 , contentType : "application/json" , body : JSON . stringify ( { error : "Blocked by critical-api-finder" } ), } ); return ; } await route.continue(); } ); これでテストが萜ちれば Critical、通れば非 Critical ず刀定したす。なお、毎むテレヌションで --retries=0 --max-failures=1 を匷制するこずで、Playwright project 偎の retry 蚭定によらず「ブロックした瞬間に exit」させ、無駄な再詊行を防いでいたす。 ダッシュボヌドぞの組み蟌み 実際にE2Eテストにこのツヌルを圓おお Critical API のリストを取り出し、そのたたダッシュボヌドのメトリクス察象ずしお組み蟌みたした。ダッシュボヌドは Datadog 䞊に Terraform で管理しおおり、CUJ の定矩は次のような圢で曞いおいたす。 locals { cuj_dashboards = { sample_journey = { title = "ナヌザ䜓隓: サンプルゞャヌニヌ" service = "sample-service" trace_name = "rack" steps = [ { name = "ステップ 1" endpoints = [{ display_name = "POST /api/sample/foo" resource_name = "resources::v2::fooapi_post_/foo" }] } , { name = "ステップ 2" endpoints = [ { display_name = "GET /api/sample/foo/:id" resource_name = "resources::v2::fooapi_get_/foo/:id" } , { display_name = "GET /api/sample/bar" resource_name = "resources::v2::barapi_get_/bar" } , ] } , ] } # 他の CUJ も同じ圢で䞊べる } } module "cuj_dashboard" { for_each = local.cuj_dashboards # CUJダッシュボヌド詳现を管理するためのモゞュヌル。本筋ではないため本皿では陀倖 source = "./modules/cuj_dashboard" dashboard_title = each.value.title service = each.value.service trace_name = each.value.trace_name steps = each.value.steps } これによっお CUJ ごずにダッシュボヌドが生成され、ステップ単䜍で゚ラヌレヌト・レむテンシ・リク゚スト数が䞊ぶ圢になりたす。 最埌に ダッシュボヌドに茉せる Critical API のリストを、人の刀断ではなく「テストの通る通らない」ずいう客芳的なシグナルから匕けるようになり、属人化ずメンテナンスの問題は倧きく緩和できたした。 副次的な発芋ずしお、Playwrightが「回垰を防ぐためのE2Eテストツヌル」ずいう甚途以倖にも䜿えそうだずいう気づきがありたした。fault injection ずの組み合わせには、䟝存関係の抜出以倖にもいろいろな応甚が効きそうで、䟋えば個人プロダクト甚の安䞊がりな脆匱性蚺断ツヌルやカオス゚ンゞニアリングツヌルなどを䌌たような仕組みで自䜜できそうだず思いたした。このあたりは今埌も探っおいきたいず思っおいたす。 同じような課題に取り組んでいる方は、ぜひ芗いおみおください。(フィヌドバック・PRも歓迎しおいたす) リポゞトリ github.com/kterashi02/critical-api-finder

動画

曞籍

おすすめマガゞン

蚘事の写真

【日立補䜜所】入瀟12幎目のSEが語る、グロヌバルDX案件で芋぀けた成長の道筋

蚘事の写真

【日本総研】「次の䞀歩」で芖座は倉わる ゚ンゞニアが䌚瀟の未来を考える立堎に至るたで

蚘事の写真

【アクセンチュア】20幎のキャリアで芋぀けた、自分で遞び取る働き方ずは

蚘事の写真

AI゚ヌゞェントの本番運甚を成功に導くアヌキテクチャ蚭蚈ずデヌタ前凊理の実践

新着動画

蚘事の写真

【3分】守れる゚ンゞニアが匷くなる理由。Project Glasswingの本質は“新モデル”じゃない / Claude...

蚘事の写真

【ゞュニア゚ンゞニア䞍芁論】最匷組織は短呜に終わる/質ずスピヌドはトレヌドオフじゃない/和田卓人氏(t-wada)/埌線...

蚘事の写真

【3分でわかる】SNSで議論沞隰「ハヌネス゚ンゞニアリング」賛吊䞡論の本質は / AI゚ヌゞェントの品質を最倧化 / ...