技術記事

nagiyu のサービス開発で得た技術知見・アーキテクチャ解説を公開しています。

記事一覧

Jest の coverageThreshold で 80% カバレッジを CI で強制する

Jest の coverageThreshold を使って statements / branches / functions / lines を 80% で足切りし、カバレッジ低下を CI で自動失敗させる方法を解説。collectCoverageFrom による対象の絞り込み、ts-jest と next/jest(v8)の違い、モノレポでの運用ノウハウまで実運用ベースで紹介します。

2026-07-01
開発スタック
JestテストCI/CDTypeScript

zod でランタイムバリデーションと型を一元化する

TypeScript の型は実行時には消える。外部から来る入力を信用しないために、zod でスキーマを単一の真実源にし、ランタイム検証と静的型を一元化する方法を、parse/safeParse の使い分けや API 境界での実践とともに整理します。

2026-06-20
開発スタック
TypeScriptzodバリデーション型設計

Auth.js の signOut がリバースプロキシ背後で内部ホストにリダイレクトする問題

Auth.js(NextAuth)の signOut が、ALB / CloudFront などのリバースプロキシ背後で `ip-10-2-0-48.ec2.internal` のような内部ホスト名にリダイレクトして ERR_NAME_NOT_RESOLVED になる原因と、サーバー側リダイレクト解決に頼らずクライアント側で遷移する確実な対処を解説します。

2026-06-14
Next.js
Next.jsAuth.jsNextAuth認証リバースプロキシ

DynamoDB の GSI は 1 デプロイにつき 1 つまで:CloudFormation 一括追加でハマった話

CloudFormation / CDK で DynamoDB テーブルに GSI を 2 つ同時追加して "Cannot perform more than one GSI creation or deletion in a single update" で本番デプロイが失敗した実体験を整理。UPDATE 時のみの制約・CREATE 時は一括 OK という仕様の差、RETAIN を踏まえた復旧手順、本番で使える恒久対策まで解説します。

2026-06-14
AWS
AWSDynamoDBCloudFormationCDK運用

Markdown を DOMPurify で安全にレンダリングする:Next.js SSG の XSS 対策

Next.js SSG で Markdown を HTML 化して dangerouslySetInnerHTML で描画する際の XSS リスクを解説し、DOMPurify(isomorphic-dompurify)によるサニタイズとリポジトリ規約に沿った責務分離設計を紹介します。

2026-06-14
Next.js
Next.jsセキュリティMarkdown

draw.io が「d.setId is not a function」で開けない:ID と Array.prototype の衝突

draw.io で特定の .drawio ファイルを開いたときに「d.setId is not a function」が出る原因を解説します。mxGraph のデコーダがキャッシュに配列を使っており、セルの id 属性が Array.prototype のメンバ名(push など)と衝突すると、プロトタイプチェーンを経由して関数が返ってしまうのが真因です。再現手順・修正方法・JavaScript での汎用的な対策まで整理します。

2026-06-13
開発スタック
JavaScriptTypeScriptデバッグdraw.io

EventBridge Rules で定期バッチを CDK で組む:資産・株価管理サービスの 6 ルール構成

AWS CDK(aws-events)を使って EventBridge Rules でバッチ定期実行を組む方法を解説。rate() / cron() の使い分け、LambdaFunction target の指定、EventBridge Scheduler との選択判断まで、資産・株価管理サービスの実装をベースに紹介します。

2026-05-27
AWS
AWSEventBridgeLambdaCDK

SSM Parameter Store と Secrets Manager の使い分け:クロススタック参照と機密管理の実装

AWS の SSM Parameter Store と Secrets Manager を、モノレポ × マルチサービス構成の実装に即して使い分ける指針を整理。Parameter Store はスタック間のリソース参照(CfnOutput / ImportValue の代替)、Secrets Manager は API キーや鍵ペアの機密管理という役割分担を、CDK のコードとともに解説します。

2026-05-25
AWS
AWSSSMSecrets ManagerCDK

AWS CDK で IAM 最小権限を設計する:Grant メソッドと PolicyStatement の使い分け

AWS CDK でコンストラクト間の権限を付与する方法を解説。Grant メソッド・addToRolePolicy・PolicyStatement の使い分け、ARN のハードコードを避けるテクニック、ユニットテストによる権限検証まで実運用ベースで整理します。

2026-05-21
AWS
AWSCDKIAMセキュリティ

Next.js 16 Metadata API で SEO・OGP・JSON-LD を整える

Next.js 16 App Router の Metadata API を使って、title・description・OGP・Twitter Card・canonical・JSON-LD を体系的に管理する方法を解説。SSG ページと動的ページそれぞれの設定パターンを実装例で紹介します。

2026-04-30
Next.js
Next.jsSEOメタデータ

Next.js generateStaticParams 完全ガイド:SSG の動的ルートを使いこなす

Next.js App Router の generateStaticParams を使って動的ルートを SSG ビルド時に展開する方法を解説。複数階層の動的ルート・dynamicParams・部分的 SSG(ISR)・型安全な実装まで網羅します。

2026-04-28
Next.js
Next.jsSSGApp Router

ECS Fargate と Lambda の使い分け基準を実運用で整理する

AWS の ECS Fargate と Lambda、どちらでサービスを動かすべきか迷う場面の判断基準を整理。コールドスタート・常時稼働コスト・実行時間・依存ライブラリサイズなど、実運用で効いてくる観点ごとに比較します。

2026-04-25
AWS
AWSECSLambdaアーキテクチャ

CloudFront キャッシュ戦略:TTL・Cache-Control・Invalidation の実践

CloudFront のキャッシュを正しく効かせるための TTL 設定・Cache-Control ヘッダ設計・キャッシュキー・Invalidation の使いどころを実運用ベースで解説します。Next.js を CloudFront の背後に置く構成を例に取ります。

2026-04-22
AWS
AWSCloudFrontキャッシュパフォーマンス

React Server Components の境界設計:use client をどこに置くか

Next.js App Router の React Server Components で `use client` をどこに引くべきかを実装パターンで整理。データ取得・インタラクション・props のシリアライズ可否・パフォーマンス影響を踏まえた実用的な指針を解説します。

2026-04-20
Next.js
Next.jsReactServer ComponentsApp Router

S3 Presigned URL でブラウザから直接安全にアップロード/ダウンロードする

S3 Presigned URL を使って、認証情報をクライアントに渡さずブラウザから S3 へ直接アップロード・ダウンロードする実装方法を解説。期限・サイズ制限・Content-Type 拘束など、本番運用で必要なセキュリティ設計まで踏み込みます。

2026-04-18
AWS
AWSS3セキュリティ

Material-UI v9 と Next.js App Router の SSR を両立する ThemeRegistry 実装

MUI(Material-UI)v9 と Next.js App Router の Server Components で SSR とスタイル一貫性を両立する ThemeRegistry の実装方法を解説。Emotion キャッシュ・ハイドレーション・テーマ切替まで網羅します。

2026-04-15
Next.js
Next.jsMUIApp RouterEmotion

ECR ライフサイクルポリシーで古いイメージを自動削除する

Amazon ECR のライフサイクルポリシーを使って古いコンテナイメージを自動削除する設定を解説。タグ付きと untagged の使い分け・rollback 用イメージの保護・コスト削減効果まで実例で紹介します。

2026-04-12
AWS
AWSECRコスト最適化

AWS Batchで重い処理をサーバーレス化する構成解説

動画変換・画像処理などの重いバッチ処理をAWS Batchでサーバーレス化する構成を解説。ジョブ定義・ジョブキュー・コンピューティング環境・S3トリガー・コスト最適化まで詳しく説明します。

2026-04-10
AWS
AWSAWS Batchサーバーレス

CloudFront+ECSでNext.jsをデプロイする構成解説

CloudFront + ECS FargateでNext.jsをデプロイするAWS構成を解説。ECSサービス設定・ALB構成・CloudFrontディストリビューション・キャッシュ設定・GitHub ActionsでのCI/CDまで詳しく説明します。

2026-04-10
AWS
AWSCloudFrontECSNext.js

Next.jsでMarkdownを静的ページに変換する実装方法

Next.jsのSSGとMarkdownファイルを組み合わせた静的サイト生成の実装方法を解説。gray-matterによるフロントマター解析・remark/rehypeによるレンダリング・generateStaticParamsの活用まで詳しく説明します。

2026-04-10
Next.js
Next.jsMarkdownSSG

Playwright E2E テストを GitHub Actions で並列実行する

Playwright の E2E テストを GitHub Actions のマトリクスとシャーディング機能で並列実行し、CI 時間を短縮する手法を解説。flake 対策・アーティファクト収集・モバイル/デスクトップ複数 viewport 対応まで実運用ベースで紹介します。

2026-04-08
開発スタック
PlaywrightGitHub Actionsテスト

Docker multi-stage build で Next.js standalone をスリム化する

Next.js の standalone モードと Docker multi-stage build を組み合わせて、本番イメージサイズを最小化する手法を解説。Alpine ベース・依存最小化・ECR への push まで一連の流れを示します。

2026-04-05
Next.jsAWS
DockerNext.jsCI/CD

Lambda コールドスタート対策:Provisioned Concurrency と SnapStart の使い分け

AWS Lambda のコールドスタートを抑える 2 大手法、Provisioned Concurrency と SnapStart の仕組み・コスト・対応ランタイムを比較。実運用で「どちらをどう使うか」を判断するための整理。

2026-04-03
AWS
AWSLambdaパフォーマンス

GitHub Actions でモノレポの差分デプロイを実装する

モノレポ構成で GitHub Actions を使い、変更があったサービスだけをデプロイするワークフローの実装方法を解説。paths フィルタ・dorny/paths-filter・依存ライブラリ変更時の波及・並列実行までカバーします。

2026-04-02
開発スタック
GitHub ActionsCI/CDmonorepo

TypeScript の discriminated union で API レスポンスを安全に扱う

TypeScript の discriminated union(判別可能な共用体)を使って、API のレスポンス・状態管理・エラー型を網羅的かつ型安全に扱う方法を解説。switch の網羅性チェック・Zod との連携・実務で効くパターンを整理します。

2026-03-30
開発スタック
TypeScript型設計union types

monorepo + npm workspaces で TypeScript パッケージを共有する

モノレポ構成で TypeScript の型・関数・コンポーネントを複数アプリ間で共有する実装方法を解説。npm workspaces の設定・パッケージ間参照・ビルド順序・デプロイ時の依存解決まで実運用ベースで整理します。

2026-03-20
開発スタック
TypeScriptmonoreponpm workspaces

DynamoDB single-table design 入門:パーティションキーと GSI の設計

DynamoDB の single-table design(単一テーブル設計)の基本を、複数エンティティをひとつのテーブルに格納する具体的な設計例で解説。パーティションキー・ソートキー・GSI の使い分け、アクセスパターンからの逆算手順まで整理します。

2026-03-17
AWS
AWSDynamoDBNoSQL設計

TypeScript strict mode で書く型安全な Repository パターン

TypeScript の strict モードで Repository パターンを実装する具体的な方法を解説。エンティティ型の定義・null と undefined の扱い・トランザクション・テスト容易性まで、実プロダクトで効く型設計を整理します。

2026-03-15
開発スタック
TypeScriptRepository型設計