Next.js - TECH PLAY - TECH PLAY

TECH PLAY

Next.js

むベント

該圓するコンテンツが芋぀かりたせんでした

マガゞン

技術ブログ

こんにちは、新卒3幎目でビゞネスむノベヌション統括本郚ITD1-3の堀川です。 愛甚しおいるキヌボヌドは GoForty v2のOrtho配列 です。 今回、私が普段の業務で䜿甚しおいるTypeScriptをテヌマにした倧型カンファレンス『TSKaigi 2026』の参加レポヌトを曞かせおいただきたした 去幎の参加レポヌト蚘事に匕き続き、カンファレンスの様子や感想、魅力などを発信しおいきたす TSKaigi2025で分かったTypeScriptの流行 ↑今幎の愉快なTSKaigi参加メンバヌたち カンファレンス抂芁 情報区分 カンファレンス詳现 むベント名 TSKaigi 2026 開催日 2026/05/22、2026/05/23 開催堎所 ベルサヌル矜田 京急空枯線矜田空枯第3タヌミナル駅から埒歩5分 ミッション 孊び、繋がり、"型"を砎ろう セッション感想 ここでは私が参加したセッションの䞭で、特に面癜かったものを自分なりの理解を亀えお玹介したす セッション感想① 実践TanStack Start: 新芏プロダクトを開発しお確立した、サヌバヌずクラむアント境界の蚭蚈パタヌン セッション抂芁 https://2026.tskaigi.org/talks/26 スピヌカヌ Shimmy スラむド資料 https://speakerdeck.com/kaminashi/practical-tanstack-start-server-client-boundary-patterns?slide=3 Next.js ず同じ React 向けフルスタックフレヌムワヌクである  TanStack Start  に関するセッションです。ただ v1.0 未満でコミュニティや事䟋が少ない䞭、 実際に採甚した新芏プロダクトの蚭蚈知芋 を聞ける貎重な内容でした。 loader ず Server Functions の責務蚭蚈 TanStack Start を䜿う䞊で栞心ずなるのが、この2぀の責務をどう分けるかずいう問題です。 圹割 loader ペヌゞ描画「前」に走る凊理を曞く堎所 Server Functions クラむアントから呌び出せるサヌバヌ偎の凊理 Next.js ではこの2぀の挙動がフレヌムワヌク偎であらかじめ決たっおいたす。䞀方 TanStack Start は、どちらに䜕を曞くかを 開発者自身が決める 蚭蚈です。 この違いは開発䜓隓にも珟れたす。Next.js はキャッシュ挙動がフレヌムワヌク内郚で自動的に決たるため、「なぜデヌタが叀いたた衚瀺されるのか」を調べるために内郚実装を読み蟌むこずも少なくありたせん。TanStack Start はすべおの挙動を自分たちのコヌドに明瀺する蚭蚈のため、 動䜜ぞの理解を保ったたた開発できる ずいうメリットがありたす。 蚭蚈パタヌンloader ç·š loader 内の取埗は最小限に留め、各コンポヌネントが必芁なデヌタを自分で取埗する ずいうアプロヌチです。 // loader では認蚌情報から tenantId だけを取り出すexport const Route = createFileRoute("/_authed/orders")({ loader: ({ context: { session } }) => ({ tenantId: session.tenantId }), component: OrdersPage,});// 各コンポヌネントが useQuery で必芁なデヌタを取埗するfunction OrdersPage() { const { tenantId } = Route.useLoaderData(); const { data } = useSuspenseQuery(ordersQueryOptions(tenantId)); return ( <> <NotificationBadge /> {/* 子の䞭で useQuery */} <OrdersTable orders={data} /> <Recommendations /> {/* 子の䞭で useQuery */} </> );} // loader では認蚌情報から tenantId だけを取り出す export const Route = createFileRoute ( " /_authed/orders " )( { loader : ({ context : { session } }) => ( { tenantId : session . tenantId } ) , component : OrdersPage , } ) ; // 各コンポヌネントが useQuery で必芁なデヌタを取埗する function OrdersPage () { const { tenantId } = Route . useLoaderData () ; const { data } = useSuspenseQuery ( ordersQueryOptions ( tenantId )) ; return ( <> < NotificationBadge /> { /* 子の䞭で useQuery */ } < OrdersTable orders ={ data } /> < Recommendations /> { /* 子の䞭で useQuery */ } </> ) ; } 蚭蚈パタヌンServer Functions ç·š ① 暪断関心事は Middleware ぞ切り出す ログ出力や認蚌チェックなど、耇数の Server Functions に共通する凊理は handler に盎接曞かず、Middleware ずしお分離したす。 export const loggerMiddleware = createMiddleware({ type: "function" }).server( async ({ next, functionId }) => { const requestId = crypto.randomUUID(); logger.info({ requestId, functionId }, "handler:start"); return next({ context: { requestId } }); },); export const loggerMiddleware = createMiddleware ( { type : " function " } ) . server ( async ({ next , functionId }) => { const requestId = crypto . randomUUID () ; logger . info ( { requestId , functionId }, " handler:start " ) ; return next ( { context : { requestId } } ) ; }, ) ; ② handler にはロゞックや I/O の詳现を盎接曞かない handler は「受け取っお委譲する」だけにずどめ、実装の詳现は別の関数に任せたす。 export const saveOrder = createServerFn({ method: "POST" }) .middleware([loggerMiddleware]) // 暪断関心事 .inputValidator(saveOrderInputSchema) // 入力の怜蚌 .handler(async ({ data }) => upsertOrder(data), // ロゞックは別関数ぞ委譲 export const saveOrder = createServerFn ( { method : " POST " } ) . middleware ([loggerMiddleware]) // 暪断関心事 . inputValidator (saveOrderInputSchema) // 入力の怜蚌 . handler ( async ({ data }) => upsertOrder (data) , // ロゞックは別関数ぞ委譲 この蚭蚈により責務が自然ず分離され、人間にも AI にも読みやすいコヌドベヌスが実珟できたす。 たずめ もし TanStack Start を新芏プロダクトぞ導入するずしたら、Next.js ずの最倧の違いは「フレヌムワヌクに動䜜を任せるか、自分たちで明瀺するか」ずいう蚭蚈思想の差です。 䜿い分けの目安ずしおは、SEOや高速な初期衚瀺が求められるサヌビス、たたはチヌムに Next.js の知芋が豊富な堎合は Next.js が無難です。䞀方、耇雑なサヌバヌクラむアント間のデヌタフロヌを自分たちで制埡したい堎合や、コヌドベヌスの挙動を隅々たで把握したい堎合は TanStack Start が向いおいるずいえたす。 Next.js に慣れ芪しんでいるほど、最初は自由床の高さに戞惑うかもしれたせん。しかし今回玹介した蚭蚈パタヌンを最初から取り入れるこずで、コヌドベヌスの芋通しを保ったたた開発をスタヌトできたす。 「なぜこの挙動になるのか」を把握したたた開発したい新芏プロダクトにおいお、TanStack Start は有力な遞択肢になりそうです。 セッション感想② AI時代に考える、Branded Types で実珟する堅牢な型付け セッション抂芁 https://2026.tskaigi.org/talks/62 スピヌカヌ 池奥裕倪 / @yuta-ike スラむド資料 https://www.docswell.com/s/4136989/Z6NJ78-tskaigi2026#p1 TypeScript の䞭でもさらに厳栌な型定矩を行う Branded Types に぀いお、その意矩ず具䜓的な魅力をわかりやすく解説したセッションでした。 型チェックの意矩 たず前提ずしお、型チェックには4぀のパタヌンがありたす。 実装 型チェック 評䟡 正しい 通る 嬉しい 間違っおいる 通らない 正垞 正しい 通らない よくある・蟛い 間違っおいる 通る 䞀番避けたい 「実装が間違っおいるのに型チェックが通る」ずは、たずえば次のようなケヌスです。 <em>// 足し算関数 (number + number → number)</em>function add(a: number, b: number): number { return 0; // 垞に 0 を返す} < em > // 足し算関数 (number + number → number)</em> function add ( a : number , b : number ): number { return 0 ; // 垞に 0 を返す } 足し算を期埅しおいるのに垞に  0  ãŒè¿”っおくる実装ですが、戻り倀の型は  number  ãšã—お正しいため、型チェックでは怜知できたせん。 これは極端な䟋ですが、AI に実装を䟝頌した際に「パッず芋は問題なさそうだが、よく読むず意図した凊理になっおいない」ずいう経隓をした方もいるのではないでしょうか。こうした問題に察凊するために、より厳栌な型定矩が求められたす。そこで有効なのが Branded Types です。 Branded Types ずは 同じ構造を持ちながら意味合いの異なる型䟋 User  ãš  Book を区別するために、架空のプロパティ  __type  ã‚’付䞎しお型を識別する手法です。 User  型を期埅する匕数に  Book  型を枡そうずするず、型チェックで゚ラヌになりたす。 function createUser(user: User) { ... }const book: Book = { id: getUUID(), name: "吟茩ぱンゞニアである", date: new Date(2000, 0, 1),} as Book;createUser(book); // TypeError: Book 型を User 型に代入できない function createUser ( user : User ) { ... } const book : Book = { id : getUUID () , name : " 吟茩ぱンゞニアである " , date : new Date ( 2000 , 0 , 1 ) , } as Book ; createUser (book) ; // TypeError: Book 型を User 型に代入できない プロダクト開発における Branded Types の䜿いどころ セッションでは、Branded Types を効果的に掻甚するための方針ずしお2぀が玹介されおいたした。 ① ドメむンモデルを区別する 倉数名で区別できれば理想的ですが、AI が  FailedUploadingFileId  ã®ã‚ˆã†ãªäžå¯§ãªå‘œåã‚’垞にしおくれるずは限りたせん。せいぜい  FailedFileId  çš‹åºŠã«ãªã‚‹ã“ずも倚いでしょう。Branded Types ず型チェックを組み合わせるこずで、その区別をコヌドレベルで担保できたす。 ② 倀の状態や属性を衚珟する たずえばバック゚ンドぞ送る  string  åž‹ã®å€€ã«å¯Ÿã—お、「型チェック枈み」「ドメむンチェック蚘号を含たないなど枈み」ずいう条件を本圓に満たしおいるかどうかは、通垞の型定矩だけでは保蚌できたせん。Branded Types を䜿うこずで、こうした「チェック枈みの状態」を型ずしお衚珟できたす。 Branded Types によっお型安党なコヌドを曞くこずで、コヌドの前埌を読たなければ刀断できなかった芁玠を、型定矩を芋るだけで把握できるようになりたす。 たずめ AI コヌディングが普及した今、コヌドを曞く速さよりも「AI が生成したコヌドを正しく怜蚌できるか」が重芁になっおいたす。Branded Types が泚目されおいる背景には、たさにこの倉化があるず考えおいたす。 型定矩を厳栌にしおおくこずで、AI が生成したコヌドが意図通りかどうかを、コヌドを现かく読たなくおも型チェックの段階で怜知できるようになりたす。「関数の匕数・戻り倀の型を厳栌に定矩する」「副䜜甚を持たせない」ずいった方針がレビュヌコスト削枛に぀ながる事䟋ずしお挙がっおいる䞭で、Branded Types はこうした流れず特に盞性の良いアプロヌチです。 「AI に実装を任せる機䌚が増えた」ず感じおいる方ほど、導入を怜蚎する䟡倀があるずいえるでしょう。 䌁業ブヌス 今幎も1日目にかなりの数を回らせおいただきたした 去幎ずは違い、スタンプラリヌは䌁業名別に区切られおおらず、どのブヌスに行っおいるかの進捗を忘れおしたうこずがしばしばありたした... (今幎はラムネがずおも倚かったです。嬉しい) セッション感想に力を入れ過ぎお、文字数がかなり倚くなっおしたったので、今回は1瀟さんだけの玹介になりたす... テむラヌ株匏䌚瀟 テむラヌ株匏䌚瀟は、TSKaigiに参加されおいる䌁業の䞭で特に印象に残った䌚瀟です。TypeScriptの特城的な事業掻甚事䟋を持぀䌚瀟で、その内容がずおも興味深かったのでご玹介したす。 具䜓的には、゚ンタヌプラむズ向けの倧芏暡なERPを10倍の速さで構築できる、䞖界初のヘッドレスERPプラットフォヌムを事業ずしお提䟛しおいたす。 䌚瀟ペヌゞ ERPEnterprise Resource Planningずは、䌁業の基幹業務䌚蚈・圚庫・人事・販売などを䞀元管理するシステムのこずで、MicrosoftやFreeeなどのサヌビスが有名です。 しかも、このプラットフォヌムは䌚瀟独自のReactアプリケヌションフレヌムワヌクで開発されおおり、その保守運甚はもちろん、専門゚ンゞニアずしお開発サポヌトも担っおいるずのこずでした。 独自フレヌムワヌクapp-shellのリポゞトリ 䌚瀟の事業ずしお独自のフレヌムワヌクを開発するだけでなく、その開発サポヌト、぀たりテックリヌド的なこずも担っおいるずいうのは、゚ンゞニアずしお琎線に觊れるものがありたした。 TSKaigiに参加しお 去幎よりもAIの掻甚をからめたセッションもありたしたが、それ以䞊に型定矩を厳栌にするBranded Typesや最近出おきたTanstack Startに関する内容が耇数あったのが驚きでした。 特にBranded Typesに関しおはAIに実装を任せるこずが倚くなったからこそ、型チェックを通した品質の担保に泚目されおいるのかな、ず感じおいたす。 去幎に匕き続き、セッションや䌁業ブヌスでTypeScriptやフロント゚ンドの流行を孊ぶこずができ、ずおも貎重な経隓になりたした 業務はもちろんプラむベヌトでの開発モチベにも繋がったので、これからも開発に励んでいきたい所存です。 おたけ 去幎に匕き続き、サプラむ品がずおも良かったので、瀟員蚌に付けさせおいただいおたす 今幎は先端がカラビナ(?)になっおおり、付けやすくなっおいたした。ありがずうございたす。 たた、1日目のオヌプニングが終わった盎埌、芋芚えのあるキヌボヌドを芋かけおお声かけした際、Xで䞀方的に存じ䞊げおた某モテるWeztermの人ずお話しするこずができたした モテるタヌミナルにカスタマむズしようWezTerm 特城的なキヌボヌドは名刺になりたす() ←Weztermの方のキヌボヌド  私のキヌボヌド→
こんにちは、゚ス・゚ム・゚スでカむポケコネクトのSREをしおいる 小笠原翔倪 です。 2026幎7月10日に開催された SRE NEXT 2026 のスポンサヌセッションで、「 PR単䜍で䜿い捚おるカむポケコネクトのpreview環境の蚭蚈ず運甚 」ずいうタむトルで発衚したした。 発衚スラむドも公開しおいたすが、せっかく取り組みに぀いお文章をたずめたのでテックブログにも展開しようず思い、たずめ盎したものがこちらの蚘事ずなりたす。発衚内容に加えお、ブヌスで展瀺しおいた珟圚のpreview環境のアヌキテクチャに぀いおの補足説明も加筆しおいるので、そちらは発衚ずの差分ずなっおいたす。 はじめに 党䜓の話はひずこずでいうず、 既存プロダクトにPR単䜍で䜿い捚おられるpreview環境を導入し、1幎間運甚しおきた話 です。 目次 はじめに 目次 カむポケコネクトず開発フェヌズ カむポケコネクトずは システムアヌキテクチャ 開発フェヌズ 圓時のリリヌスフロヌ リリヌストレむンの課題 1. リリヌス呚期が長い 2. QA環境の利甚が詰たる 3. 担圓者の負担が倧きい 解決策 怜蚌䜜業を分離しお䞊列化する preview環境をどう蚭蚈したか 必須芁件 むンタヌフェヌス蚭蚈 アヌキテクチャ デプロむフロヌ サヌビス構成 蚭蚈時に考えたこず 運甚しおどうだったか 狙いどおりリリヌス頻床を高められた 段階的に改善しながら育おた 結果的に利甚が䌞びた 運甚しおわかったこず 1. 耇補機構の利甚技術に぀いおわかったこず 2. 耇補「できない」倖郚サヌビスずの付き合い方が難しい 3. preview環境の想定倖な需芁が芋えた たずめ 付録: 珟圚のアヌキテクチャの玹介 カむポケコネクトず開発フェヌズ カむポケコネクトずは 最初に、私たちが扱っおいるシステム「カむポケコネクト」は、介護/障害犏祉事業者向け経営支揎を行うSaaSプロダクトです。 システムアヌキテクチャ カむポケコネクトのシステムアヌキテクチャは、拡匵性ず独立性を保぀ためドメむンごずにアプリずDBを分割しお蚭蚈しおいたす。 利甚されおいる技術スタックず本番系の基盀構成は次のずおりです。 レむダヌ 技術スタック 本番系の基盀構成 フロント゚ンド React / Next.jsによるSPA CloudFront + S3 バック゚ンド Kotlin / Spring Boot / GraphQL ECS Fargateでホスティング。5぀のタスクでGraphQL APIを構成 DB PostgreSQL RDS Aurora PostgreSQL たた、本䜓サヌビスずは別の耇数の瀟内サヌビスずも連携しおおり、バック゚ンドのコンテナ数から考えるず䞭芏暡サむズのシステムず捉えおもらうず良さそうです。 開発フェヌズ プロダクトは初期の開発フェヌズが完了し、プロダクトの䟡倀を拡倧する「機胜远加・サヌビス拡倧フェヌズ」ぞ移行しようずしおいるタむミングでした。 そのため、 プロダクト開発の生産性を支えるために機胜開発を加速させる必芁があった ずいうのが背景です。 圓時のリリヌスフロヌ そのような開発の事情があるなかで、圓時のリリヌスフロヌは以䞋のようになっおいたした。 圓時のリリヌスフロヌ デプロむ先のAWS環境はDev, QA, Staging, Productionの4぀甚意しおそれぞれ䜿い分けおいたした。 たず開発フェヌズでは、開発者がPRを甚意しおテストが通ればmainにマヌゞしおDev環境にデプロむしおいたした。Dev環境は開発者が最初にデプロむするAWS環境で、少し壊れやすいのですがアプリの動䜜怜蚌や基盀の構成倉曎の怜蚌を行う甚途で利甚されおいたした。 䞀方で、本番系ぞのリリヌスフェヌズでは、それずは別で リリヌス担圓やリリヌスマネゞャヌが䞻導しおデプロむする方匏 を取っおいたした。 具䜓的には以䞋の流れでリリヌスが行われおいたした。 リリヌス担圓がリリヌスするrevisionを決めおコヌドフリヌズを行い、そのrevisionでQA環境ぞデプロむする å…šQAメンバヌがQA環境を占有しお怜蚌䜜業を実斜 リリヌス担圓がリリヌスタグを䜜成し、Staging環境ぞデプロむする リリヌス担圓がテストランナヌでE2Eテストを実行する リリヌス担圓がリリヌスタグを䜜成し、Production環境ぞデプロむする QA環境はバヌゞョンを固定しお怜蚌を行うための専甚環境、Staging環境はE2Eテストを実行しお意図しないデグレが発生しないこずを保蚌するための環境ずいう建付けでした。 ぀たり、いわゆる リリヌストレむン方匏でリリヌス しおいたした。 リリヌストレむンの課題 このプロゞェクトにおけるリリヌストレむンには倧きく以䞋3぀の課題がありたした。 1. リリヌス呚期が長い 最も倧きな課題はリリヌス呚期が長いこず です。このプロゞェクトのリリヌスサむクルは2週間に䞀床でした。 開発スピヌドに察しおリリヌスサむクルが長いため、䟡倀提䟛の倧きなボトルネックになっおいたした。たたリリヌス時には2週間分の差分がたずめお本番ぞ反映されたす。そのためリリヌスのタむミングで事故が起きやすく、問題発生時の切り分けも難しい状態でした。 2. QA環境の利甚が詰たる 次の課題ずしおはQA環境の利甚が詰たるずいう問題がありたした。QA環境は怜蚌甚の占有環境ずしお利甚され、か぀ å…šQAメンバヌが盎列に怜蚌䜜業を行うためどうしおも長期間ロックされおしたいたす 。結果的に怜蚌期間が長匕き、圓時は1週間ほど環境を確保するようになっおいたした。 怜蚌䜜業を効率的に実斜できず、その間は新しいリリヌスもブロックされる構造になっおいたした。 そのため、 今埌開発を加速させようずしたずきに、ここの詰たりによっおスケヌルできなくなるこずが容易に想像できたした 。 3. 担圓者の負担が倧きい リリヌストレむンのもう1぀の問題ずしお、取りたずめを行う人の負担が倧きいずいう人的な問題もありたした。リリヌス担圓やリリヌスマネヌゞャヌがリリヌスを䞻導する必芁があるのですが、そこに 運甚䜜業ずリスク管理の負荷が集䞭 しおいたした。 ミスを防ぐための手動プロセスや手順も増えがちで、運甚が重厚になっおいたした。さらに、リリヌスされる差分のすべおを把握するこずが困難でした。そのため、問題発生時の察応に手間取ったり、チヌムをたたいだ調敎コストが増えたりしお、担圓者を疲匊させおいたした。 解決策 怜蚌䜜業を分離しお䞊列化する 解決策ずしお考えたのは「 リリヌスフロヌから怜蚌䜜業を分離しお䞊列化する 」こずです。 以䞋の図は怜蚌䜜業を分離・䞊列化したずきのリリヌスフロヌの抂念図です。 怜蚌䜜業を分離・䞊列化したリリヌスフロヌ これたでリリヌスフェヌズで行っおいた QA環境での怜蚌䜜業をすべお開発フェヌズに移行 しおいたす。 開発フェヌズで開発者がPRを䜜成したあずに専甚の怜蚌環境を立ち䞊げ、QAメンバヌがPRごずに怜蚌䜜業を䞊列で実斜できるようにしたす。 そしお、リリヌスフェヌズでは、Dev環境にデプロむした埌は毎日定時にGitHub Actionsのscheduled workflowを起動したす。このゞョブはStaging環境ぞのデプロむからE2Eテストの実行、production環境ぞのデプロむたでを連続しお実行する軜量なワヌクフロヌです。 たた、リリヌスフラグを導入するこずで、POプロダクトオヌナヌが任意のタむミングで新機胜をリリヌスできるようにしたす。 この方匏に倉曎するこずで次の効果を狙いたす。 リリヌスが毎日できる 隔週から毎日ぞず頻床が䞊がり、䟡倀提䟛が高速化。デプロむごずの倉曎差分が小さくなり、原因特定も容易になる QAのシフトレフトず䞊列化 怜蚌䜜業を開発フェヌズに移すこずでリリヌスを安定化させ、チヌムや機胜ごずに怜蚌䜜業を䞊列化するこずで詰たりを解消する プロセスの軜量化 重厚なリリヌス手順を廃止し、リリヌスフロヌを自動化・軜量化する。リリヌスフラグを導入するこずでデプロむず新機胜の有効化機胜リリヌスを分離する 先ほど玹介したリリヌストレむンの䞻芁課題をすべお解決できるようになっおいたす。 preview環境をどう蚭蚈したか 先ほど述べた、リリヌス改善斜策実珟に必芁な構成芁玠の1぀が、怜蚌䜜業を行うための環境私たちはこれをpreview環境ず呜名でした。 この章ではそのpreview環境をどう蚭蚈したかに぀いお説明したす。 必須芁件 たずQAプロセスで必芁な芁件は以䞋3぀でした。 十分な数の環境を 容易に 䜜れるこず 利甚チヌムが 任意のバヌゞョンをデプロむできる こず DBを䜿い捚おできるこず ヌデヌタが汚れるこずを気にせず占有しお䜿えるこず むンタヌフェヌス蚭蚈 次に利甚者のむンタヌフェヌスの蚭蚈に぀いおですが、こちらはVercel等のSaaSの開発者䜓隓を参考にしお以䞋のように蚭蚈したした。 GitHubのむベントをトリガヌ に、preview環境を自動で構築・曎新・砎棄する PRのコメントに自動で 各皮アクセス情報を付䞎 する 以䞋はpreview環境を立おたPRのサンプルです。 preview環境を立おるPRのサンプル PRにラベルを付けるず環境構築が始たり、完了するずbotがコメントでアクセス方法を案内する、ずいう開発者䜓隓になっおいたす。 このようにむンタヌフェヌスを䜜った理由は、以䞋を狙ったためです。 開発者ずQAのスムヌズな連携 開発者がPRに実装をたずめ、それをQA担圓者ぞ枡すこずでスムヌズに怜蚌䜜業に移るこずができる ラむフサむクル管理のしやすさ 環境がPRに玐づくため、䞍芁な環境の消し忘れを防いだり、クリヌンな環境管理が可胜になる アヌキテクチャ 次にpreview環境のアヌキテクチャを玹介したす。党䜓像は以䞋のようになっおいたす。 preview環境のアヌキテクチャ党䜓図 デプロむフロヌ たず、preview環境のラむフサむクルはGitHub Actionsのワヌクフロヌで以䞋のように管理したす。 PRにpreviewラベルを付䞎 : PRの先頭のコミットハッシュを利甚しお環境を構築する PRにコミットをプッシュ : 差分が入ったコンポヌネントFE/BE/DBのみ曎新凊理を行う PRをマヌゞ、クロヌズたたはpreviewラベルを倖す : 環境を削陀する サヌビス構成 次にサヌビス構成ですが、 preview環境ごずにフロント゚ンド/API/DBを1セットず぀甚意する ようになっおいたす。 ドメむンは https://preview-N.kaipoke.com NはPR番号を環境ごずに払い出しおおり、そこからアクセスできたす。 フロント゚ンドはSPAなので、シンプルにCloudFrontずS3で配信しおいたす。リク゚ストのホスト名に応じおアセットを出し分けるようにLambdaCloudFunctionを挟んでいたす。 APIぞのアクセスはCloudFrontずALBを介しおmirage-ecsコンテナのproxy機胜でハンドリングされ、ホスト名ごずにリク゚ストを各環境に振り分けおいたす。環境ごずにバック゚ンドずDBが1セットず぀甚意されおおり、バック゚ンドのECSタスクは mirage-ecs で、DBはSaaSの Neon でそれぞれ構築・管理しおいたす。 なお、バック゚ンドは䞀環境あたりECSタスクが党郚で5個動いおおり、内郚でGraphQLのfederationを組む構成です。 モニタリングは本番系ず同じくDataDogを利甚しお、トレヌスやログ、基盀のメトリクスを確認できるようにしおいたす。 このような仕組みによっお、 PRごずの環境をAPIやDBたで独立した圢で耇数個準備できるように䜜っおいたす 。 参考情報ですが、環境の初期構築にかかる時間は2026/07/14時点で 10分皋床 です。 蚭蚈時に考えたこず 蚭蚈にあたっおは、以䞋3぀の原則を守るようにしおいたした。 芁件が䞍明確なうちから䜜り蟌たない 初期段階での過剰な蚭蚈や実装を避けるため 運甚・開発の負担が少ない技術を遞ぶ 圓時は アプリ開発者のリ゜ヌスが逌迫 しおおり、開発者の負担を極力抑える必芁がありたした 最初から完璧を目指すのではなく継続的に提䟛䟡倀を高めおいく  仕組み䜜りに䜿えるSREのリ゜ヌスが圓時少なかった ため、小さく䜜っお継続的に提䟛䟡倀を高めおいく方針を採甚 運甚しおどうだったか 実際に1幎ほど運甚しおどうだったか、振り返っおいきたす。 狙いどおりリリヌス頻床を高められた たず 圓初の狙いにしおいたリリヌス頻床を高めるこずには成功 したした。 以䞋は月別のデプロむ回数の掚移を衚したグラフです。 月別デプロむ回数の掚移 リリヌス方匏を切り替えた2025幎10月ごろから、 月2回だったデプロむが月20回前埌たで増えたした 。営業日は毎日リリヌスできるようになったこずがわかりたす。 これはpreview環境以倖の斜策ずの合わせ技による成果ではありたすが、 サヌビス拡倧期の開発効率の向䞊に貢献できた ず考えおいたす。 段階的に改善しながら育おた そしお、蚭蚈方針に埓っおpreview環境は導入埌に芁件を適宜芋盎しながら改善したした。 以䞋のグラフはpreview環境に関するPRの月別件数掚移を衚しおいたす。 preview環境に関するPRの月別件数 党䜓のタスク量は倚く、PR総数も結果的に 200件超ずなっおいた のですが、察応を段階的に行うこずで少人数蚭蚈から導入初期たでは担圓䞀人でも早期に仕組みを開発に展開でき、その埌の改善も継続するこずができたした。 蚭蚈時に眮いた「小さく䜜っお継続的に改善する」ずいう原則が、うたく機胜した ず感じおいたす。 結果的に利甚が䌞びた 結果的にpreview環境の利甚数は順調に䌞びたした。以䞋は月別のpreview環境を利甚したPRの件数掚移のグラフです。 preview環境を利甚したPRの月別件数 導入圓初は80件ほどだった利甚件数が2026幎6月は160件皋床たで利甚が䌞びおいる こずがわかりたす。 あずでも觊れたすがこれは圓初想定の甚途以倖の利甚が増えたこずも理由ずなっおいたす。 運甚しおわかったこず 次に運甚しおわかったこずや気付きに぀いお倧きく3぀玹介したす。 1. 耇補機構の利甚技術に぀いおわかったこず 今回、バック゚ンドの耇補には mirage-ecs ずいうコンテナ管理の軜量なOSS、DBの耇補にはSaaSの Neon を䜿いたした。 たずmirage-ecsは、既存のECS Fargate構成ずデプロむの仕組みecspressoにアドオンする圢で導入できたした。ecspressoの䜜者が䜜ったツヌルのため、 芪和性が高くデプロむの仕組みをそのたた維持するこずができたした 。 ツヌル導入で孊習すべき新しい抂念が少なく、メンテナンスも簡単で、開発チヌムぞの負担を最小限に抑えながら導入できたのは非垞によかったです。珟圚たで、他゜リュヌションぞの眮き換え怜蚎が必芁ずなる問題も出おおらず、安定しお運甚できおいたす。 次にNeonですが、盎感的で扱いやすいWeb UIや高速なブランチ機胜、各皮管理機胜が充実しおおり、 DB耇補機胜の初期導入にかかる工数を倧幅に削枛できた のは良かったです。 䞀方で、サヌバ配眮先の制玄による性胜課題がありたした。DBの配眮先は最寄りでもSingaporeリヌゞョンのため、SQL実行時のレむテンシヌが倧きくなり、 結果ずしお䞀郚のペヌゞで衚瀺に時間を芁する点が課題ずしお残っおしたいたした 。 機胜怜蚌においおは無芖しおも問題ないずいうこずでしばらくはそのたた利甚しおいたしたが、動䜜がもっさりするのでなんずかしたいずいう声が倚く出る状況でした。 そのため、珟圚はtokyoリヌゞョンに立おたAurora Serverless v2RDSを利甚する方匏をメむンに運甚しおいたす。付録におそちらのアヌキテクチャに぀いおは補足したす。 2. 耇補「できない」倖郚サヌビスずの付き合い方が難しい 2぀目の気づきですが運甚しおみお実感したのは、 プロダクト本䜓の耇補よりも、耇補できない倖郚サヌビスの扱いが難しい 、ずいうこずです。 本䜓の耇補は開発チヌムでコントロヌルできるのですが、利甚しおいる倖郚サヌビス連携する瀟内サヌビス含むには様々な制玄があり、それぞれ劥協案を䜜っお運甚しおいく必芁がありたした。 䟋えば認蚌基盀に぀いおは契玄プランの制玄でテナントを新芏䜜成できなかったため、既存テナントに盞乗りする圢で察応したした。 結果的に特に䞍䟿なく運甚できおいるもののDev環境のDBをコピヌする方匏を遞択せざるを埗なくなりたした 。 ある瀟内サヌビスではアヌキテクチャ䞊の制玄により、環境耇補の難易床が高くすぐには実珟できたせんでした。 結果的に既存環境に盞乗りし、preview環境向けのデヌタを識別できるようにアプリを改修しおもらい、運甚でカバヌする圢になりたした 。 たた他の瀟内サヌビスでは、契玄プランや予算管理䞊の制玄があるため環境の耇補ができないため、特定のpreview環境にのみ期間限定で連携するずいうような運甚になりたした。 これらの倖郚サヌビスに共通する課題は2぀ありたす。1぀は、 連携が増えるたびに運甚の取り決めや調敎を個別に行う必芁があり、察応コストの増加に぀ながる 点です。もう1぀は、 自チヌムだけではコントロヌル・解決できない他郚眲・他チヌムの仕様や予算制玄が絡むケヌスも倚く、難易床を匕き䞊げおいる点 です。 preview環境を有甚な状態で維持するためには倖郚のサヌビスをうたく怜蚌甚途で動かし続けるための工倫ずいう、技術以倖の課題をクリアしおいく必芁がある点に泚意が必芁だず匷く感じたした。 3. preview環境の想定倖な需芁が芋えた 3぀目の気づきはpreview環境の想定倖な需芁が芋えたこずです。 圓初はQAプロセスでの利甚を想定しおいたのですが、実際は 党䜓の8割が開発チヌムの自䞻的な動䜜確認・怜蚌目的で利甚 されおいたした。QA匕き枡しでの利甚は予想に反しお党䜓の20%にずどたっおいたのです。 開発者のナヌスケヌスには䟋えば以䞋がありたした。 リスク回避 Dev環境ぞのデプロむ前の早期リスク怜知 DB migrationの確認 DB migrationの簡単で安党な怜蚌に利甚 AIを掻甚した䞊列開発 耇数PRを互いに圱響させず同時に怜蚌 ロヌカル代替 䞀時的にロヌカルがうたく起動できない堎合などに代替の怜蚌環境に利甚 ぀たり 「容易に立おられる怜蚌環境」の存圚自䜓が、開発䜓隓DXにずっお実は倧きな䟡倀になっおいる こずが運甚しおから初めおわかりたした。蚭蚈時は実際にどのくらい䜿われるか芋えおおらず、これは運甚埌の䞀番倧きな気付きでした。 たずめ 既存プロダクトにpreview環境を導入・運甚しお芋えおきたこずは、次の3点です。 環境運甚の実珟性 今回の技術スタックでも、䞭芏暡システムのpreview環境は十分に運甚できるこずがわかりたした。少人数で運甚でき、開発負担も小さく抑えるこずができたした 倖郚連携の課題 本䜓の耇補以䞊に、耇補できない倖郚サヌビスずの連携蚭蚈が重芁になるこずがわかりたした 導入埌の進化が倧切 今回のように導入しおから改善しおいくアプロヌチでは、運甚に乗っおからの継続的な改善こそが本番ずなりたす。プロダクトの成長に合わせお育おおいくこずが重芁です preview環境ずいうコンセプト自䜓は目新しくありたせんが、既存プロダクトぞ導入しお1幎間運甚しおきた知芋が、読んでいただいた方の参考になれば嬉しいです。 なお、発衚資料は Speaker Deck で公開しおいたすのでそちらも適宜参照しおください。 付録: 珟圚のアヌキテクチャの玹介 圓日の発衚スラむドではお芋せできなかったのですが、ブヌスで展瀺・玹介しおいた珟圚のアヌキテクチャは以䞋のようになっおいたす。 珟圚のアヌキテクチャ党䜓図 先に玹介したアヌキテクチャずの違いは DBの耇補機構がNeonからAurora Serverless v2RDSを利甚した圢に倉わっおいる ずころです。 サヌビスごずに1぀むンスタンスを甚意し、preview環境ごずに内郚的にPostgreSQLのデヌタベヌスを䜜り、dump/restoreでDev環境のデヌタを流し蟌んで䜜っおいたす。 Neonで利甚者によく䜿われおいたWeb UIに぀いおは、自䜜しお提䟛しおいたす。 Web UIの画面サンプル接続ペヌゞ Web UIの画面サンプルテヌブルビュヌ デヌタベヌスの䞭身を気軜に閲芧したり、テヌブルの倀をGUIで線集する、SQLを実行するなどの機胜を持った軜量なDBのwrapperツヌルずなっおいたす。以前は自力でこのようなツヌルを䜜るのは工数的に難しかったのですが、生成AIの力を借りるこずで芁件の緩い瀟内ツヌルであれば数日で䜜成できるようになっおいお倧倉ありがたい限りです。 なお、RDS方匏はNeonず比范するず新しいデヌタベヌスを䜜るのにかかる時間は少し倧きくなっおいたす。これはdump/restoreで耇補を行っおいるためで、珟状は最倧4分皋床かかっおいたす。デヌタ量が増えるずCopy on Write方匏でクロヌンするNeonに優䜍性が出る可胜性もあり、このあたりは利甚実䜓を確認しながら郜床調敎しおいく必芁があるず考えおいたす。
こんにちは、ミむダス Tech Officeです。 ミむダス株匏䌚瀟のテックチヌムが盎近で開発した機胜を珟堎の゚ンゞニアから共有する「MIIDAS Tech LIVE」。 第14回目の開催ずなる今回は2぀のリリヌス情報をお届けしたした。 採甚マッチングサヌビス「ミむダス」は、独自の蚺断ツヌルで採甚のミスマッチを枛らす䞭途採甚サヌビスです。メむンの採甚関連の機胜に加え、蚺断や研修、組織サヌベむの支揎金の怜玢機胜など、幅広い機胜開発が行われおいたす。 MIIDAS Tech LIVE #14 (2026/06/24 12:00〜) ## 📢 抂芁 MIIDAS Tech LIVEでは、ミむダス株匏䌚瀟のテックチヌムが盎近で開発した機胜を珟堎の゚ンゞニ miidas-tech.connpass.com

動画

該圓するコンテンツが芋぀かりたせんでした

曞籍

おすすめマガゞン

蚘事の写真

SDV時代の「むネヌブラヌ」を目指す。パナ゜ニック オヌトモヌティブシステムズが远求する「゜フトりェア・ファヌスト」の本...

蚘事の写真

SDV時代の「むネヌブラヌ」を目指す。パナ゜ニック オヌトモヌティブシステムズが远求する「゜フトりェア・ファヌスト」の本...

蚘事の写真

死亡亀通事故れロぞ。アむサむトを支えるステレオ画像認識ず半導䜓内補の裏偎

新着動画

蚘事の写真

【解説】SNSで話題の「グラプンゞニアリング」の正䜓は / ルヌプ゚ンゞニアリングずの関係も解説

蚘事の写真

クラりドAIが䜿えない珟堎は、どうAIを"持぀"のか補造業の事䟋から孊ぶロヌカルAIFOCUSTUDIO

蚘事の写真

【ルヌプ゚ンゞニアリングずは】AIに自動で仕事を任せる前に決めるべき4぀のこず