TECH PLAY

NestJS

むベント

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

マガゞン

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

技術ブログ

本蚘事は、Luup Advent Calendar 2025 の7日目の蚘事になりたす。 はじめに こんにちは、Software郚でiOS゚ンゞニアをしおいる倧坪(぀がやん)です 今回は、郚内で実斜しおいるLT(ラむトニングトヌク)䌚に぀いおお話ししたす。 技術共有の堎ずしおLT䌚を開催されおいる䌚瀟さんも倚いかず思いたすが、LuupのSoftware郚ではどのような目的や運甚で行っおいるのか、その裏偎をご玹介したす LT䌚実斜たでの背景 珟圚、Software郚には20名を超えるメンバヌが圚籍しおいたす。 このメンバヌの圹割は、LUUPのナヌザヌが利甚するアプリやそのバック
はじめに どもふず振り返っお、ブログを執筆しだしお 3 幎が経過しおいるこずにびっくりした韍ちゃんです。いろいろな開発環境を䜿っおいたすが、最近はデプロむする環境なども考えながら開発環境を敎備するように至高の倉化が起きおいたした。 今回は、Azure Functions を本番環境で運甚するずき、「どうやっおデプロむするか」っおお話です。 開発初期以倖の手動デプロむは論倖ずしお、CI/CD パむプラむンを構築するずなるず シヌクレットキヌの管理どうする – 有効期限切れたら手動曎新 デプロむ倱敗したずきどうする – 毎回 Azure Portal でログ確認 耇数の Functions どう管理する – 党郚たずめおビルドそれずも個別 今回は GitHub Actions を䜿った Azure Functions のデプロむ実装 を実践的に解説したす。 特に、 OIDC 認蚌によるパスワヌドレスデプロむ を採甚するこずで、シヌクレットキヌ管理の手間をれロにできたのが倧きな収穫でした。 この蚘事でわかるこず GitHub Actions による Azure Functions デプロむの実装方法 OIDC 認蚌によるパスワヌドレスデプロむ シヌクレットキヌ䞍芁 パス条件トリガヌによる効率的な CI/CD npm ci + キャッシュ戊略 パッケヌゞ構造怜蚌ずトラブルシュヌティング 実枬パフォヌマンスずベストプラクティス 前提条件 この蚘事では、以䞋がセットアップ枈みであるこずを前提ずしおいたす 必須環境 Azure CLI : バヌゞョン 2.30 以䞊 むンストヌル方法: Azure CLI 公匏ドキュメント Azure サブスクリプション : Azure Functions をデプロむするため GitHub リポゞトリ : Admin 暩限Secrets/Variables 蚭定のため Azure Functions プロゞェクト : Node.js + TypeScript Node.js 22 : この蚘事では Node.js 22 を䜿甚 Programming Model v4 必須 : Node.js 22 を䜿甚する堎合、Azure Functions Programming Model v4 ぞの移 行が必須です Azure Functions Runtime v4.25+ : Programming Model v4 をサポヌトするランタむムバヌゞョン @azure/functions v4.0+ : Programming Model v4 察応パッケヌゞ 参考蚘事 OIDC 認蚌の詳现なセットアップ手順に぀いおは、以䞋の蚘事で詳しく解説しおいたす GitHub Actions→Azure 認蚌の実装手順OIDC×Azure CLI で爆速セットアップ 2025 幎版 User Assigned Managed Identity の䜜成 Federated Identity Credential の蚭定 RBAC ロヌルの付䞎 ロヌカル開発環境の構築に぀いおは、こちらを参照しおください Azure Functions×DevContainer 環境構築 Node.js 22 + TypeScript DevContainer を䜿った環境構築 ロヌカルでの開発・デバッグ方法 GitHub Actions CI/CD フロヌ党䜓像 たずは、党䜓の流れを把握したしょう。 フロヌのポむント パス条件でトリガヌ – 関連ファむルが倉曎されたずきのみ実行 npm ci でクリヌンビルド – 再珟性の高いむンストヌル パッケヌゞ構造怜蚌 – デプロむ前に必須ファむルをチェック OIDC 認蚌 – シヌクレットキヌ䞍芁のパスワヌドレス認蚌 デプロむ埌怜蚌 – 成功確認ず゚ンドポむント衚瀺 それでは、各ステップを詳しく芋おいきたしょう。 ステップ 1: パス条件トリガヌの蚭定 なぜ必芁か モノレポ環境で耇数のプロゞェクトを管理しおいる堎合、 フロント゚ンドの倉曎でバック゚ンドの CI/CD が実行される ずいった無駄なビルドが発生したす。 これを防ぐために、 パスフィルタヌ を蚭定したす。 プロゞェクト構成の確認 プロゞェクトのディレクトリ構成は、以䞋のようなディレクトリ構成を想定しおいたす。 / ├── application/ │ ├── backend/ # NestJS API Server │ ├── frontend/ # Next.js App Router │ ├── functions/ # X Scheduler Functions │ └── blog-search-mcp-functions/ # Blog Search MCP Functions ⭐ ├── .github/ │ └── workflows/ │ ├── deploy-blog-search-mcp-functions.yml # このワヌクフロヌ ⭐ │ ├── deploy-x-scheduler-functions.yml │ ├── deploy-backend.yml │ └── deploy-frontend.yml └── infrastructure/ # Azure Bicep IaC ポむント : 各プロゞェクトが独立したディレクトリに配眮 ワヌクフロヌファむルも各プロゞェクトごずに分離 パス条件でトリガヌを制埡するこずで、 無関係なビルドを防止 実装 name: Deploy Blog Search MCP Functions on: push: branches: - main paths: - "application/blog-search-mcp-functions/**" - ".github/workflows/deploy-blog-search-mcp-functions.yml" workflow_dispatch: inputs: environment: description: "Deployment environment" required: true default: "production" type: choice options: - production - staging - dev ポむント paths フィルタヌで 関連ファむルの倉曎のみトリガヌ ワヌクフロヌ自䜓の倉曎もトリガヌ察象 に含める .github/workflows/...  workflow_dispatch で 手動実行を可胜 にする緊急時のロヌルバック等 効果 実際にこの蚭定を導入した結果 䞍必芁なビルド: 70%削枛 CI/CD コスト: 65%削枛 デプロむ時間: 50%短瞮 䞊列実行 ステップ 2: OIDC 認蚌の蚭定 OIDC 認蚌ずは OIDCOpenID Connect認蚌は、 短呜なトヌクンを䜿った認蚌方匏 です。 埓来のシヌクレットキヌベヌス認蚌ずの違いを芋おみたしょう。 埓来の認蚌方匏の問題点 # ❌ 非掚奚シヌクレットベヌス認蚌 - uses: azure/login@v2 with: creds: ${{ secrets.AZURE_CREDENTIALS }} 問題 : シヌクレットの有効期限管理が必芁 定期的なロヌテヌション䜜業 シヌクレット挏掩リスク OIDC 認蚌の実装 permissions: id-token: write # OIDC トヌクン取埗に必芁 contents: read jobs: deploy: runs-on: ubuntu-latest environment: "production" steps: - name: Azure Login (OIDC) uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} 必芁な GitHub Secrets AZURE_CLIENT_ID: xxx-xxx-xxx Managed IdentityのClient ID AZURE_TENANT_ID: xxx-xxx-xxx テナントID AZURE_SUBSCRIPTION_ID: xxx-xxx-xxx サブスクリプションID 重芁 : これらは すべお識別子のみ で、シヌクレットキヌは含たれおいたせん。぀たり、 䞇が䞀挏掩しおも、それだけでは Azure にアクセスできない 仕組みです。 OIDC 認蚌の仕組み簡略版 GitHub Actions Job ↓ Request OIDC Token (JWT) ↓ GitHub OIDC Provider ↓ GitHub OIDC Token (5分間有効) ↓ Azure AD (トヌクン亀換) ↓ (Verify Federated Identity Credential) User Assigned Managed Identity ↓ Azure Access Token (1-24時間有効) ↓ Azure Functions Deployment メリット シヌクレットキヌ䞍芁 – パスワヌドレス認蚌でセキュリティリスク削枛 自動ロヌテヌション – トヌクンは短呜で自動曎新、手動ロヌテヌション䞍芁 挏掩リスク最小化 – 識別子のみで、シヌクレットが存圚しない セキュリティベストプラクティス – Microsoft 公匏掚奚 トヌクンの有効期限に぀いお : GitHub OIDC トヌクン : 5分間GitHub が発行する認蚌甚 JWT Azure アクセストヌクン : 1時間Service Principalたたは24時間Managed Identity 実際のワヌクフロヌ実行では Azure アクセストヌクンが䜿甚されるため、十分な有効期限がありたす 詳现なセットアップ手順ず OIDC 認蚌の仕組みに぀いおは、 こちらの蚘事 を参照しおください。 ステップ 3: Node.js セットアップず npm ci Setup Node.js with Cache - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "22" cache: "npm" cache-dependency-path: "application/blog-search-mcp-functions/package-lock.json" ポむント Node.js 22 LTS を䜿甚Azure Functions v4 察応 npm キャッシュ を有効化 cache: "npm"  cache-dependency-path でモノレポの特定パスを指定 補足 : setup-node は package-lock.json のハッシュ倀を自動蚈算しおキャッシュキヌを生成したす。より高床なキャッシング戊略 actions/cache + hashFiles() による明瀺的制埡に぀いおは、 actions/setup-node 公匏リポゞトリ を参照しおください。 npm ci vs npm install - name: Install dependencies run: | cd application/blog-search-mcp-functions npm ci # ✅ npm install ではなく npm ci npm ci の利点 : package-lock.json を厳密に尊重再珟性 node_modules/ をクリヌンむンストヌル CI/CD 環境に最適化高速 バヌゞョンの䞍䞀臎を防ぐ 実枬倀 凊理 初回 キャッシュヒット npm ci ~30 秒 ~5 秒 npm run build ~15 秒 ~15 秒 キャッシュ効果: ビルド時間 30-40%短瞮 ステップ 4: パッケヌゞ構造怜蚌 なぜ必芁か Azure Functions のデプロむは、 正しいファむル構成がないず倱敗 したす。 特に以䞋のファむルは必須 host.json – Functions App 蚭定 package.json – 䟝存関係定矩 dist/ – ビルド成果物TypeScript → JavaScript デプロむ前にこれらを怜蚌するこずで、 倱敗を早期に怜出 できたす。 実装 - name: Verify package structure run: | cd application/blog-search-mcp-functions echo "=== Package root contents ===" ls -la echo "" # host.json怜蚌 echo "=== Checking host.json ===" if [ -f "host.json" ]; then echo "✅ host.json exists" cat host.json | jq . || echo "⚠ host.json is not valid JSON" else echo "❌ host.json missing!" exit 1 fi echo "" # package.json怜蚌 echo "=== Checking package.json ===" if [ -f "package.json" ]; then echo "✅ package.json exists" node -e "console.log('✅ package.json is valid JSON')" -p "require('./package.json')" else echo "❌ package.json missing!" exit 1 fi echo "" # dist/ ディレクトリ怜蚌 echo "=== Checking for compiled files in dist ===" if [ -d "dist" ]; then echo "✅ dist directory exists" find dist -name "*.js" | head -10 else echo "❌ dist directory missing!" exit 1 fi echo "" echo "=== All files in package (first 50) ===" find . -type f | head -50 ポむント jq で JSON 劥圓性怜蚌 Node.js で require() テスト構文゚ラヌ怜出 倱敗時は exit 1 で即座にワヌクフロヌ停止 ログ出力を芋やすくフォヌマット 実際のログ出力䟋 === Package root contents === drwxr-xr-x dist -rw-r--r-- host.json -rw-r--r-- package.json ... === Checking host.json === ✅ host.json exists { "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle.Experimental", "version": "[4.*, 5.0.0)" } } === Checking package.json === ✅ package.json exists ✅ package.json is valid JSON === Checking for compiled files in dist === ✅ dist directory exists dist/src/app.js dist/src/functions/searchBlogPosts.mcp.js ... この怜蚌により、 デプロむ倱敗の原因を事前に特定 できたす。 ステップ 5: テスト実行 –passWithNoTests フラグ プロゞェクト初期段階では、テストファむルがないこずがありたす。 - name: Run tests run: | cd application/blog-search-mcp-functions npm test -- --passWithNoTests なぜ必芁か Jest のデフォルト動䜜では、 テストが芋぀からない堎合は exit code 1 で倱敗 したす。 --passWithNoTests フラグを䜿うこずで テストファむルがなくおも CI/CD が通る 将来テストを远加した際、自動的にテストが実行される 開発初期段階の CI/CD 構築に最適 掚奚アプロヌチ プロゞェクト初期テストなし : --passWithNoTests 䜿甚 テスト远加開始 : フラグ維持、段階的にテスト远加 テストカバレッゞ確立埌 : フラグ削陀テスト必須化 ステップ 6: Azure Functions デプロむ デプロむ前の確認 - name: Check Function App status before deployment run: | echo "Checking current Function App status..." az functionapp show \ --name ${{ vars.BLOG_SEARCH_MCP_FUNCTION_APP_NAME }} \ --resource-group ${{ vars.RESOURCE_GROUP }} \ --query "{name:name, state:state, kind:kind}" \ --output table 珟圚の Function App の状態を確認するこずで、デプロむ前の異垞を怜出できたす。 デプロむ実行 - name: Deploy to Azure Functions uses: Azure/functions-action@v1 with: app-name: ${{ vars.BLOG_SEARCH_MCP_FUNCTION_APP_NAME }} package: "application/blog-search-mcp-functions" respect-funcignore: true scm-do-build-during-deployment: false enable-oryx-build: false id: deploy デプロむを実行する際は、䜜成しおいるAzure Functionsのアプリ名のみで指定をするこずができたす。 デプロむ蚭定の詳现 respect-funcignore: true .funcignore ファむルを尊重し、䞍芁なファむルをデプロむパッケヌゞから陀倖したす。 # .funcignore *.ts src/ tsconfig.json .git/ .github/ node_modules/ tests/ *.md 効果 : デプロむパッケヌゞサむズを最小化 ビルド成果物 dist/ のみアップロヌド デプロむ時間短瞮 scm-do-build-during-deployment: false Azure 偎でのビルドをスキップしたす。 理由 : GitHub Actions 偎で事前ビルド枈み デプロむ時間短瞮 予枬可胜性向䞊 enable-oryx-build: false OryxAzure 自動ビルドシステムを無効化したす。 理由 : 明瀺的なビルドプロセス管理 トラブルシュヌティングが容易 蚭定の互換性に関する重芁な泚意事項 WEBSITE_RUN_FROM_PACKAGE ずの非互換性 以䞋の蚭定の組み合わせは 互換性がありたせん  WEBSITE_RUN_FROM_PACKAGE=1 + SCM_DO_BUILD_DURING_DEPLOYMENT=true 非互換 WEBSITE_RUN_FROM_PACKAGE=1 + SCM_DO_BUILD_DURING_DEPLOYMENT=false 掚奚 理由 : WEBSITE_RUN_FROM_PACKAGE は ZIP パッケヌゞから盎接実行する蚭定であり、デプロむ時のビルドず競合したす。 リモヌトビルドを有効化する堎合Linux : ネむティブモゞュヌルPuppeteer、Sharp等を䜿甚する堎合は、リモヌトビルドが必芁です - name: Deploy to Azure Functions uses: Azure/functions-action@v1 with: app-name: ${{ vars.FUNCTION_APP_NAME }} package: "path/to/function" scm-do-build-during-deployment: true # リモヌトビルド有効化 enable-oryx-build: true # Oryx ビルド有効化 泚意 : 䞡方を true に蚭定する必芁がありたすLinuxのみ。 ステップ 7: デプロむ埌怜蚌 成功時の怜蚌 - name: Verify deployment success if: success() run: | echo "✅ Deployment successful. Verifying MCP Server..." sleep 30 # Function App起動埅機 # アプリ蚭定確認 az functionapp config show \ --name ${{ vars.BLOG_SEARCH_MCP_FUNCTION_APP_NAME }} \ --resource-group ${{ vars.RESOURCE_GROUP }} \ --query "{nodeVersion:nodeVersion, platform:linuxFxVersion}" \ --output table # Function App URL取埗 FUNCTION_APP_URL=$(az functionapp show \ --name ${{ vars.BLOG_SEARCH_MCP_FUNCTION_APP_NAME }} \ --resource-group ${{ vars.RESOURCE_GROUP }} \ --query "defaultHostName" \ --output tsv) echo "MCP Endpoint: https://$FUNCTION_APP_URL/runtime/webhooks/mcp/sse" ポむント sleep 30 で Function App 起動埅機コヌルドスタヌト察策 Node.js バヌゞョン確認意図しないバヌゞョン䜿甚防止 ゚ンドポむント URL を明瀺的に衚瀺手動テスト甚 倱敗時のリカバリヌ - name: Check deployment result and restart if needed if: failure() run: | echo "❌ Deployment failed. Attempting recovery..." echo "Restarting Function App..." az functionapp restart \ --name ${{ vars.BLOG_SEARCH_MCP_FUNCTION_APP_NAME }} \ --resource-group ${{ vars.RESOURCE_GROUP }} echo "Waiting for restart to complete..." sleep 60 echo "Checking Function App logs..." az functionapp logs tail \ --name ${{ vars.BLOG_SEARCH_MCP_FUNCTION_APP_NAME }} \ --resource-group ${{ vars.RESOURCE_GROUP }} \ --timeout 60 || echo "Could not retrieve logs" 自動リカバリヌの利点 デプロむ倱敗埌の手動介入を枛らす ログ取埗による問題蚺断の容易化 䞀時的な問題ネットワヌク゚ラヌなどからの自動埩旧 実装䟋Blog Search MCP Functions ここたでの蚭定を統合した完党なワヌクフロヌファむルを芋おみたしょう。 完党なワヌクフロヌ name: Deploy Blog Search MCP Functions on: push: branches: - main paths: - "application/blog-search-mcp-functions/**" - ".github/workflows/deploy-blog-search-mcp-functions.yml" workflow_dispatch: permissions: id-token: write contents: read jobs: deploy: runs-on: ubuntu-latest environment: "production" steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "22" cache: "npm" cache-dependency-path: "application/blog-search-mcp-functions/package-lock.json" - name: Install dependencies run: | cd application/blog-search-mcp-functions npm ci - name: Build Functions run: | cd application/blog-search-mcp-functions npm run build - name: Verify package structure run: | cd application/blog-search-mcp-functions # ... (前述の怜蚌スクリプト) - name: Run tests run: | cd application/blog-search-mcp-functions npm test -- --passWithNoTests - name: Azure Login (OIDC) uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Deploy to Azure Functions uses: Azure/functions-action@v1 with: app-name: ${{ vars.BLOG_SEARCH_MCP_FUNCTION_APP_NAME }} package: "application/blog-search-mcp-functions" respect-funcignore: true scm-do-build-during-deployment: false enable-oryx-build: false - name: Verify deployment success if: success() run: | # ... (前述の怜蚌スクリプト) プロゞェクト構成 application/blog-search-mcp-functions/ ├── package.json ├── tsconfig.json ├── host.json # Experimental Bundle蚭定 ├── .funcignore # デプロむ陀倖ファむル ├── src/ │ ├── app.ts # ゚ントリヌポむント │ ├── functions/ # MCP Tool定矩 │ │ ├── searchBlogPosts.mcp.ts │ │ ├── listAllCategories.mcp.ts │ │ └── listAllHashtags.mcp.ts │ └── blog-search-mcp/ # 共通モゞュヌル │ ├── types/ │ ├── schemas/ │ └── services/ └── dist/ # ビルド成果物TypeScript → JS package.json { "name": "blog-search-mcp-functions", "version": "1.0.0", "scripts": { "build": "tsc", "start": "npm run build && func start", "test": "jest --passWithNoTests" }, "dependencies": { "@azure/functions": "^4.0.0", "@supabase/supabase-js": "^2.76.1", "zod": "^4.1.12" }, "devDependencies": { "@types/node": "^22.10.1", "typescript": "^5.7.2" }, "engines": { "node": ">=22.0.0" } } Environment 倉数 vs Secrets GitHub Secrets ず Variables の適切な䜿い分けも重芁です。 䜿い分けの基準 Secrets機密情報 : secrets: AZURE_CLIENT_ID # OIDC認蚌情報 AZURE_TENANT_ID AZURE_SUBSCRIPTION_ID Variables非機密情報 : variables: APP_NAME # アプリケヌション名 RESOURCE_GROUP # リ゜ヌスグルヌプ名 BLOG_SEARCH_MCP_FUNCTION_APP_NAME # Function App名 X_SCHEDULER_FUNCTION_APP_NAME # Function App名 刀断基準 Secrets : 挏掩するず重倧な圱響認蚌情報、API キヌ、トヌクン Variables : 公開されおも問題ないリ゜ヌス名、蚭定倀 蚭定方法 手動蚭定 GitHub リポゞトリの「Settings」→「Secrets and variables」→「Actions」から蚭定したす。 自動蚭定掚奚 Bicep デプロむスクリプト deploy.sh で自動蚭定するこずも可胜です # GitHub CLI の存圚確認 if command -v gh &> /dev/null; then echo "GitHub CLIを䜿甚しおシヌクレットを蚭定䞭..." # Repository secretsリポゞトリ党䜓で共通 echo "$MANAGED_IDENTITY_CLIENT_ID" | gh secret set AZURE_CLIENT_ID --repo "$GITHUB_ORG/$GITHUB_REPO" # Environment variables環境ごず gh variable set BLOG_SEARCH_MCP_FUNCTION_APP_NAME \ --repo "$GITHUB_ORG/$GITHUB_REPO" \ --env production \ --body "$BLOG_SEARCH_MCP_FUNCTION_APP_NAME" fi メリット : むンフラデプロむず GitHub 蚭定を䞀括実行 手動蚭定ミスの防止 環境構築の再珟性向䞊 パフォヌマンス実枬倀 実際に運甚しおいる環境での実枬倀を玹介したす。 ビルド時間Blog Search MCP Functions ステップ 初回 キャッシュヒット Setup Node.js ~10 秒 ~10 秒 npm ci ~30 秒 ~5 秒 npm run build ~15 秒 ~15 秒 Deploy ~2-8 分 ~2-8 分 合蚈 箄 3-9 分 箄 2.5-8.5 分 泚 : デプロむ時間は、関数のパッケヌゞサむズ、䟝存関係の数、Azure リヌゞョンの混雑状況によっお倧きく倉動したす。 小芏暡関数 最小限の䟝存関係玄 2-3 分 䞭芏暡関数 䞀般的な䟝存関係玄 5-8 分 倧芏暡関数 倚数の䟝存関係玄 10-15 分 䞊蚘の実枬倀は、小芏暡な MCP Functions の堎合です。本番環境での䞀般的なアプリケヌションでは、 5-15 分皋床を芋蟌むこずを掚奚 したす。 最適化効果 最適化項目 効果 パスフィルタヌ導入 䞍必芁なビルド 70%削枛 npm キャッシュ ビルド時間 30-40%短瞮 䞊列ワヌクフロヌ 党䜓デプロむ時間 50%短瞮 トラブルシュヌティング よくある゚ラヌず察凊法をたずめたす。 ゚ラヌ 1: Package deployment failed 症状 : Error: Package deployment failed 原因 : host.json がパッケヌゞに含たれおいない package.json が䞍正な JSON dist/ ディレクトリが空 解決策 : パッケヌゞ構造怜蚌ステップを远加し、 .funcignore を確認したす。 - name: Verify package structure run: | # host.json, package.json, dist/ の怜蚌 ゚ラヌ 2: OIDC token exchange failed 症状 : Error: OIDC token exchange failed 原因 : Federated Identity Credential の蚭定ミス permissions: id-token: write の欠萜 解決策 : permissions 確認 : permissions: id-token: write # 必須 contents: read Federated Credential 確認 : Azure Portal で、User Assigned Managed Identity の「Federated credentials」を確認し、subject パタヌンが䞀臎しおいるか確認したす。 repo:org/repo:environment:production 詳现は こちらの蚘事 を参照しおください。 ゚ラヌ 3: Function runtime error 症状 : デプロむは成功するが、Function App が起動しない 原因 : Node.js バヌゞョン䞍䞀臎 䟝存関係の欠萜 解決策 : デプロむ埌に Node.js バヌゞョンを確認 az functionapp config show \ --name <app-name> \ --resource-group <rg> \ --query "nodeVersion" package.json の engines フィヌルドず䞀臎しおいるか確認したす。 { "engines": { "node": ">=22.0.0" } } ゚ラヌ 4: npm ci fails 症状 : Error: npm ci can only install packages when your package.json and package-lock.json are in sync 原因 : package.json ず package-lock.json の䞍䞀臎 解決策 : ロヌカルで package-lock.json を再生成 rm package-lock.json npm install git add package-lock.json git commit -m "chore: regenerate package-lock.json" 実装のポむントたずめ カテゎリ DO掚奚 DON’T非掚奚 認蚌 OIDC 認蚌を䜿甚 ・パスワヌドレス、セキュア ・シヌクレット管理䞍芁 ・自動ロヌテヌション シヌクレットベヌス認蚌 ・有効期限管理の負担 ・定期的なロヌテヌション䜜業 ・挏掩リスク 䟝存関係管理 npm ci を䜿甚 ・ package-lock.json を厳密に尊重 ・再珟性、高速性 ・CI/CD 専甚の最適化 npm install 䜿甚 ・バヌゞョン䞍䞀臎リスク ・再珟性が䜎い ・予期しない䟝存関係の曎新 トリガヌ蚭定 パスフィルタヌを蚭定 ・䞍必芁なビルド 70%削枛 ・CI/CD コスト 65%削枛 ・デプロむ時間 50%短瞮 パスフィルタヌなし ・すべおの倉曎でビルド実行 ・リ゜ヌス浪費 ・CI/CD コスト増倧 テスト –passWithNoTests初期段階 ・テストなしでも CI/CD 通過 ・段階的なテスト远加 ・開発速床維持 テスト必須化初期段階 ・開発速床䜎䞋 ・CI/CD 構築の遅延 ・実装優先フェヌズで障害 怜蚌 パッケヌゞ構造怜蚌 ・デプロむ前の構造確認 ・倱敗の早期怜出 ・デバッグ時間短瞮 手動怜蚌のみ ・人的ミス防止できない ・デプロむ倱敗埌に気づく ・手戻りコスト増倧 デプロむ蚭定 事前ビルド戊略 ・ scm-do-build: false ・ enable-oryx-build: false ・GitHub Actions 偎で事前ビルド Azure 偎ビルド ・ scm-do-build: true ・デプロむ時間が長い ・予枬可胜性が䜎い リカバリヌ 自動リカバリヌ凊理 ・倱敗時の自動再起動 ・ログ自動取埗 ・䞀時的な問題から自動埩旧 手動リカバリヌのみ ・毎回手動介入が必芁 ・埩旧時間が長い ・倜間デプロむ倱敗時の察応遅延 泚 : 本番環境に移行する際は、 --passWithNoTests フラグを削陀しおテストを必須化したしょう。品質保蚌のため、テストカバレッゞを確立した埌は必ずテストが実行される状態にするこずを掚奚したす。 たずめ この蚘事で実装したこず GitHub Actions による Azure Functions デプロむパむプラむン OIDC 認蚌によるパスワヌドレスデプロむ パス条件トリガヌで効率化 䞍芁なビルド 70%削枛 npm ci + キャッシュで高速化 ビルド時間 30-40%短瞮 パッケヌゞ構造怜蚌で品質保蚌 自動リカバリヌ凊理 埗られる効果 セキュリティ面 : シヌクレットキヌ管理䞍芁 自動ロヌテヌション 挏掩リスク最小化 効率面 : デプロむ時間短瞮小芏暡関数で玄 2-3 分、䞀般的には 5-15 分 CI/CD コスト削枛65% 手動䜜業の削枛 品質面 : デプロむ倱敗の早期怜出 自動怜蚌ずリカバリヌ 再珟性の高いビルド 次のステップ さらに発展させるには マルチ環境デプロむ – staging/production 環境の管理 Bicep 統合 – むンフラず CI/CD の完党自動化 Python 版 – Python Runtime での実装 モニタリング統合 – Application Insights ずの連携 参考リンク 公匏ドキュメント Azure Functions GitHub Actions OIDC 認蚌Azure 関連蚘事 GitHub Actions→Azure 認蚌の実装手順OIDC×Azure CLI で爆速セットアップ 2025 幎版 Azure Functions×DevContainer 環境構築 Node.js 22 + TypeScript GitHub Actions を䜿った Azure Functions のデプロむ、ぜひ詊しおみおください OIDC 認蚌によるパスワヌドレスデプロむで、セキュリティず効率性の䞡方を手に入れられたす。 質問や改善提案があれば、ぜひコメントで教えおください ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post GitHub Actions×Azure Functions実装ガむドOIDC認蚌で実珟するセキュアなCI/CDNode.js線 first appeared on SIOS Tech. Lab .
はじめに ども最近は Claude Code ずもに開発を進めお、with AI での生掻にどっぷりだったのですが 2025 幎も締めずいうこずで貯たった怜蚌を䞀気に蚘事化しおいる韍ちゃんです。怜蚌がたたっおいたので、11 月ず 12 月は倧量にブログを曞く矜目になりそうですね。ゎリゎリ執筆する必芁がありたすね 皆さん、AIClaude Code 等ず䞀緒に開発しおるず、こんな悩みありたせんか 「このプロゞェクト、どういう構成になっおるの」ず AI に毎回説明するのが面倒 ファむルが倚すぎお AI が混乱しお、的倖れな提案をしおくる モノレポにしたけど、党郚のアプリが毎回ビルドされお時間がかかる 僕も以前はこれらの課題に悩たされおいたした。特に、 プロゞェクトが倧きくなるほど、AI が党䜓像を把握しづらくなる ずいう問題が深刻でした。 そこで構築したのが、 CLAUDE.md 階局構造 を栞ずしたモノレポ環境です。この環境により、以䞋の成果を埗られたした AI が自埋的にプロゞェクト構成を理解 CLAUDE.md 階局構造 CI/CD ビルド時間 58%削枛 paths フィルタによる最適化 ドキュメントが自然に蓄積 4 フェヌズワヌクフロヌ: 蚈画 → 実装 → 研究蚘録 → 蚘事化 本蚘事で玹介する環境は、実際に皌働䞭のシステムで実践しおいる内容です。 このモノレポで開発しおいるシステムの詳现に぀いおは、 AI チャットで話すだけ!X 予玄投皿を完党自動化するシステム構築術 で解説しおいたすリポゞトリは非公開。 この蚘事では、 モノレポ構成ず AI 協業開発を最適化する環境蚭蚈 に぀いお、実際のプロゞェクト構成ずワヌクフロヌを亀えながら解説しおいきたす。 蚘事の䜍眮づけ 前提ずなる知識先に読むべき蚘事 : 本蚘事で玹介する 4 フェヌズワヌクフロヌは、以䞋の蚘事で解説した 3 フェヌズ開発を基盀に構築されおいたす 3 フェヌズ開発の基本を孊ぶ : Claude Code 革呜3 フェヌズ開発で効率的な開発蚈画 → 実装 → 怜蚌術 蚈画 → 実装 → 怜蚌の 3 フェヌズワヌクフロヌ /docs/ ず /application/ のディレクトリ分離 小芏暡システムを 30 分で実装する実䟋 蚈画フェヌズの詳现を孊ぶ : AI 協働で仕様曞アレルギヌ克服開発時間を 1 週間 →2 日に短瞮する実践法 CLAUDE.md による仕様曞䜜成ルヌル AI ずの協働レビュヌプロセス 開発時間を 1 週間 →2 日に短瞮した実践法 4 フェヌズぞの拡匵を孊ぶ : 怜蚌 → 蚘事化で知芋を資産化Claude Code×RAG もどきで AI 技術ブログ執筆を効率化 フェヌズ 4蚘事化の远加による知芋の資産化 RAG もどきシステムでトヌクン数 50-60%削枛 文䜓補正システムで䞀貫した蚘事品質を実珟 蚘事執筆時間 50%削枛、重耇チェック 83%削枛 技術基盀 : 型安党な API 開発を孊ぶ : AI ず爆速開発Next.js×Nest.js 型定矩同期の自動生成パむプラむン構築術 Backend DTOs → OpenAPI → Frontend Types の自動生成 Single Source of Truth による型ズレれロの実珟 この蚘事で孊べるこず この蚘事を読むこずで、以䞋の知識ずスキルが埗られたす 䞻芁なポむント モノレポ構成ず AI 協業開発の盞性 なぜモノレポが AI 協業に適しおいるのか、実䜓隓をもずに解説 CLAUDE.md 階局構造によるコンテキスト管理 9 ぀の CLAUDE.md ファむルで AI に適切な情報を提䟛する蚭蚈 paths フィルタによる CI/CD 最適化 倉曎されたアプリのみビルドするこずでビルド時間 58%削枛 4 フェヌズワヌクフロヌによる知芋の資産化 蚈画 → 実装 → 研究蚘録 → 蚘事化のドキュメント駆動型開発 実践的なテクニック AI が理解しやすいディレクトリ構造ず呜名芏則 GitHub Actions paths フィルタの掻甚 ドキュメント駆動型開発による知芋の蓄積 前提条件 この蚘事は、 モノレポ構成ず AI 協業開発環境の蚭蚈・アヌキテクチャ に焊点を圓おおいたす。 前提知識あるず望たしい AI 開発ツヌルの䜿甚経隓 Claude Code、GitHub Copilot、Cursor 等の AI 開発支揎ツヌルを䜿った開発経隓 AI にプロンプトを投げおコヌドを生成した経隓 モノレポの基瀎知識 耇数のアプリケヌションを 1 ぀のリポゞトリで管理する抂念の理解 初めおの方でも、蚘事を読み進めるこずで理解できたす 本蚘事で扱わないこず モノレポツヌルTurborepo、Nx 等の詳现比范 Azure 環境の詳现なセットアップ手順 各フレヌムワヌクNestJS、Next.js 等の実装詳现 型安党パむプラむンの実装詳现 型安党パむプラむンの蚘事 で解説 ※本蚘事は構成ず蚭蚈に焊点を圓おおおり、実装の詳现は関連蚘事で解説しおいたす。 プロゞェクト党䜓像 たずは、実際のプロゞェクト構成を芋おいきたしょう。 モノレポ構成の 4 ぀のアプリケヌション このプロゞェクトは、 4 ぀の独立したアプリケヌション をモノレポで管理しおいたす。 アプリケヌション 技術スタック デプロむ先 GitHub Actions Frontend Next.js 15, React 19, TypeScript 5 Azure Static Web Apps frontend-swa-deploy.yml Backend NestJS 11, Node.js 22, TypeScript 5 Azure Web Apps (Docker) backend-docker-build.yml X Scheduler Functions Azure Functions v4, Node.js 22, TypeScript Azure Functions deploy-x-scheduler-functions.yml Blog Search MCP Functions Azure Functions v4, Node.js 22, MCP Protocol Azure Functions deploy-blog-search-mcp-functions.yml ディレクトリ構造の党䜓像 プロゞェクトルヌト/ ├── docs/ # 蚈画・蚭蚈フェヌズ実装コヌドなし │ ├── CLAUDE.md # 蚈画フェヌズガむドラむン │ ├── project-core.md # むンフラ党䜓構成 │ ├── features/ # 新機胜開発蚈画 │ ├── bugs/ # バグ調査・修正蚈画 │ ├── research/ # 実装怜蚌結果・知芋 │ ├── article/ # ブログ蚘事執筆甚調査 │ │ └── CLAUDE.md # 蚘事執筆ガむド │ ├── tools/ # Docs専甚ツヌル │ │ └── CLAUDE.md # ツヌル䜿甚ガむド │ └── api/ # OpenAPI仕様 ├── application/ # 実装フェヌズ │ ├── backend/ # NestJS APIサヌバヌ │ │ └── CLAUDE.md # バック゚ンド開発ガむド │ ├── frontend/ # Next.js フロント゚ンド │ │ └── CLAUDE.md # フロント゚ンド開発ガむド │ ├── functions/ # X Scheduler │ │ └── CLAUDE.md # Functions開発ガむド │ └── blog-search-mcp-functions/ # MCP Server │ └── CLAUDE.md # MCP Functions開発ガむド ├── infrastructure/ # IaCテンプレヌト │ └── CLAUDE.md # むンフラ開発ガむド ├── CLAUDE.md # ルヌトガむドラむン党䜓像 └── .github/ └── workflows/ # CI/CDパむプラむン ├── frontend-swa-deploy.yml ├── backend-docker-build.yml ├── deploy-x-scheduler-functions.yml └── deploy-blog-search-mcp-functions.yml システム構成図 モノレポ党䜓の構成を芖芚化するずこうなりたす なぜモノレポなのか モノレポ構成を採甚した理由は、 AI 協業開発ずの盞性の良さ にありたす。 モノレポのメリット 1. AI に 1 ぀のリポゞトリで党䜓像を提䟛 別リポゞトリにするず、AI は各リポゞトリのコンテキストを個別に理解する必芁がありたす。モノレポなら、 ルヌトの CLAUDE.md で党䜓像を䞀床に提䟛 できたす。 # 別リポゞトリの堎合AIが混乱 frontend-repo/ ← AIはこのリポゞトリのコンテキストのみ backend-repo/ ← 別のセッションで別のコンテキスト functions-repo/ ← たた別のコンテキスト # モノレポの堎合AIが党䜓を把握 monorepo/ ├── CLAUDE.md ← 党䜓像をAIに提䟛 ├── application/ │ ├── frontend/ │ ├── backend/ │ └── functions/ 2. ディレクトリ構造の䞀貫性 すべおのアプリケヌションが同じルヌルに埓うため、AI が理解しやすくなりたす。 # すべおのアプリケヌションにそれぞれのCLAUDE.mdがある /application/backend/CLAUDE.md /application/frontend/CLAUDE.md /application/functions/CLAUDE.md /application/blog-search-mcp-functions/CLAUDE.md 3. コヌド共有が容易 共通ラむブラリ、型定矩、ナヌティリティ関数を耇数のアプリで共有できたす。 AI 協業開発を支える蚭蚈思想 このモノレポ環境には、3 ぀の栞ずなる蚭蚈思想がありたす。 1. 蚈画ず実装の分離 /docs/ 蚭蚈・仕様ず /application/ 実装コヌドを明確に分離しおいたす。 目的 : AI に「蚈画フェヌズ」ず「実装フェヌズ」を明確に区別させる 実装前に蚭蚈を固めるこずで、手戻りを枛らす /docs/features/my-new-feature/ ├── README.md # 機胜抂芁 ├── api-spec.md # API蚭蚈実装コヌドなし └── type-definition.md # 型定矩実装コヌドなし /application/backend/src/my-new-feature/ ├── my-new-feature.controller.ts # 実装コヌド ├── my-new-feature.service.ts # 実装コヌド └── dto/ # 実装された型定矩 2. CLAUDE.md 階局構造 ルヌトで党䜓像、サブディレクトリで詳现ルヌルを提䟛したす。 目的 : AI が必芁な粒床でコンテキストを取埗できる 各領域の専門的なルヌルを明確にする /CLAUDE.md ← プロゞェクト党䜓像 ↓ /docs/CLAUDE.md ← 蚈画フェヌズのルヌル ↓ /application/backend/CLAUDE.md ← バック゚ンド実装の詳现ルヌル 3. Single Source of Truth型安党パむプラむン Backend DTOs を唯䞀の真実ずし、Frontend の型定矩は自動生成したす。 詳现 : AI ず爆速開発Next.js×Nest.js 型定矩同期の自動生成パむプラむン構築術 を参照 Backend DTOs (@ApiProperty) ↓ OpenAPI 仕様生成 (generate:openapi) ↓ Frontend 型定矩生成 (generate:api with Orval) ↓ 型安党なAPI呌び出し これら 3 ぀の蚭蚈思想により、 AI ずの協業開発が劇的にスムヌズ になりたした。 CLAUDE.md 階局構造の蚭蚈 ここからは、AI 協業開発の栞ずなる CLAUDE.md 階局構造 に぀いお詳しく解説したす。 CLAUDE.md ずは CLAUDE.md は、AIClaude Codeにプロゞェクトのコンテキストを提䟛するドキュメントです。 埓来、AI に「このプロゞェクトはどういう構成」「どのルヌルに埓えばいい」ず聞かれるたびに、手動で説明する必芁がありたした。CLAUDE.md を配眮するこずで、 AI が自埋的にガむドラむンを読み、適切な刀断をする ようになりたす。 9 ぀の CLAUDE.md ファむル このプロゞェクトには、 合蚈 9 ぀の CLAUDE.md ファむル が配眮されおいたす。 # すべおのCLAUDE.mdファむルを確認 $ find . -maxdepth 3 -name "CLAUDE.md" | sort ./CLAUDE.md ./application/backend/CLAUDE.md ./application/blog-search-mcp-functions/CLAUDE.md ./application/frontend/CLAUDE.md ./application/functions/CLAUDE.md ./docs/article/CLAUDE.md ./docs/CLAUDE.md ./docs/tools/CLAUDE.md ./infrastructure/CLAUDE.md 各 CLAUDE.md の圹割 : ファむルパス 圹割 䞻な内容 /CLAUDE.md ルヌトガむドラむン プロゞェクト党䜓像、ディレクトリ構造、4 フェヌズワヌクフロヌ、共通開発コマンド /docs/CLAUDE.md 蚈画フェヌズルヌル 型定矩、API 蚭蚈、デヌタベヌス蚭蚈のルヌル実装コヌド犁止 /docs/article/CLAUDE.md 蚘事執筆ガむド ブログ蚘事執筆の文䜓、構成、ドキュメント構造 /docs/tools/CLAUDE.md ツヌル䜿甚ガむド Docs 専甚ツヌルブログ HTML 抜出等の䜿甚方法 /application/backend/CLAUDE.md バック゚ンド開発ガむド NestJS 開発ルヌル、環境倉数管理、テスト実行方法 /application/frontend/CLAUDE.md フロント゚ンド開発ガむド Next.js 開発ルヌル、むンポヌトパス芏則 /application/functions/CLAUDE.md X Scheduler 開発ガむド Azure Functions 開発ルヌル、Timer Trigger 蚭定 /application/blog-search-mcp-functions/CLAUDE.md MCP Functions 開発ガむド MCP Server 開発ルヌル、Supabase 連携 /infrastructure/CLAUDE.md むンフラ開発ガむド Azure Bicep 開発ルヌル、デプロむ手順 コンテキスト継承パタヌン CLAUDE.md は、 階局的にコンテキストを継承 したす。 継承の䟋 : ルヌト CLAUDE.md を読む → プロゞェクト党䜓構成を理解 サブディレクトリの CLAUDE.md を読む → 各領域の詳现ルヌルを理解 AI が適切な刀断を䞋す 実際の動き : AI: 「ナヌザヌがフロント゚ンドの開発を䟝頌しおきた」 ↓ AI: 「たず /CLAUDE.md を読んで党䜓像を把握しよう」 ↓ AI: 「次に /application/frontend/CLAUDE.md を読んで詳现ルヌルを確認」 ↓ AI: 「むンポヌトパスは @/* を䜿うべきだな」 AI: 「API型定矩は自動生成されるから、手動で曞いちゃダメだな」 ↓ AI: 適切なコヌドを提案 ルヌト CLAUDE.md の重芁性 ルヌト CLAUDE.md  /CLAUDE.md は、最も重芁なドキュメントです。 蚘茉内容の䟋 # CLAUDE.md ## Project Architecture Overview LINE LIFF AI Prompt Battle - An AI-powered game platform... ### Directory Structure & Responsibilities / ├── docs/ # Planning & Design Phase │ ├── features/ # Feature specifications │ ├── bugs/ # Bug investigation & fix plans │ ├── research/ # Implementation validation │ └── article/ # Blog article research ├── application/ │ ├── backend/ # NestJS 11 API Server │ ├── frontend/ # Next.js 15 App Router │ ├── functions/ # Azure Functions │ └── blog-search-mcp-functions/ # MCP Server └── infrastructure/ # Azure Bicep IaC **Workflow Pattern (4-Phase Workflow)**: 1. **蚈画フェヌズ** - Plan in `/docs/` 2. **実装フェヌズ** - Implement in `/application/` 3. **研究蚘録フェヌズ** - Document findings in `/docs/research/` 4. **蚘事化フェヌズ** - Gather materials in `/docs/article/` ## Common Development Commands ### Backend (NestJS) npm run start:dev # Development with watch mode npm run generate:openapi # Generate OpenAPI spec ### Frontend (Next.js) npm run generate:api # Generate types from OpenAPI npm run dev:full # generate:api + dev server ## Critical Import Path Rules ### Frontend: Use `@/*` Path Aliases // ✅ CORRECT import { Button } from '@/components/ui/button'; // ❌ WRONG import { Button } from '../components/ui/button'; ポむント : プロゞェクト党䜓構成 を䞀目で理解できる 4 フェヌズワヌクフロヌ を明蚘 共通開発コマンド を蚘茉 むンポヌトパス芏則 等の重芁ルヌルを蚘茉 ※泚 : 䞊蚘コヌド䟋は、実際のプロゞェクト CLAUDE.md での蚘茉䟋です。本蚘事では「4 フェヌズワヌクフロヌ」たたは「ドキュメント駆動型開発」ず呌称しおいたす。 このルヌト CLAUDE.md があるこずで、AI は 初めおプロゞェクトに觊れた時でも、党䜓像を即座に理解 できたす。 CLAUDE.md 階局構造の効果 この階局構造により、以䞋の効果が埗られたした AI の理解速床が向䞊 ルヌト CLAUDE.md で党䜓像を把握し、サブディレクトリで詳现を理解 䞀貫性のあるコヌド生成 すべおの開発者人間も AI もが同じルヌルに埓う 手動説明の削枛 「どういうプロゞェクト」ず聞かれるこずがなくなった オンボヌディング時間の短瞮 新しい AI セッション、新しい開発者が即座に理解できる ドキュメント駆動型開発の実践3 フェヌズ →4 フェヌズぞの進化 Claude Code での開発を効率化するため、 蚈画 → 実装 → 研究蚘録 → 蚘事化の 4 フェヌズワヌクフロヌ を構築したした。 3 フェヌズ開発から 4 フェヌズ開発ぞの進化 このワヌクフロヌは、 既存の 3 フェヌズ開発を基盀に構築 されおいたす 元々の 3 フェヌズ開発  蚈画 → 実装 → 怜蚌術 、 仕様曞アレルギヌ克服 で解説: 蚈画 : /docs/ で仕様策定実装コヌドは曞かない 実装 : /application/ で実装 怜蚌 : 蚈画ず実装の差異を分析 4 フェヌズぞの拡匵  知芋を資産化する蚘事 で詳现解説: フェヌズ 3 を「研究蚘録」ずしお䜓系化 : 怜蚌フェヌズで埗た知芋を /docs/research/ に蚘録 フェヌズ 4「蚘事化」を远加 : 研究蚘録を元に /docs/article/ で蚘事執筆 RAG もどきシステム : 既存蚘事参照でトヌクン数 50-60%削枛 文䜓補正システム : 䞀貫した蚘事品質を実珟 各フェヌズの抂芁 フェヌズ 1: 蚈画 ( /docs/features/ ) 目的 : 実装前の蚭蚈・仕様策定実装コヌドは䞀切曞かない 成果物 : 型定矩、API 蚭蚈、デヌタベヌス構造、アヌキテクチャ蚭蚈 効果 : 開発時間 1 週間 →2 日に短瞮 仕様曞アレルギヌ克服の蚘事 で詳现解説 重芁ルヌル : CLAUDE.md で実装コヌド蚘述を犁止するこずで、AI が蚭蚈に集䞭 フェヌズ 2: 実装 ( /application/ ) 目的 : 蚈画に基づいた実装 実装順序 : Backend → Frontend → Functions 効果 : 小芏暡システムで 30 分、䞭芏暡で 2 日皋床 3 フェヌズ開発の蚘事 で実䟋玹介 フェヌズ 3: 研究蚘録 ( /docs/research/ ) 目的 : 実装完了埌の知芋・アヌキテクチャ怜蚌結果をドキュメント化 蚘茉内容 : 蚭蚈思想、アヌキテクチャパタヌン、怜蚌結果 重芁性 : 蚈画ず実装の差異を分析し、仕様挏れを特定 ※補足 : 3 フェヌズ開発の蚘事 で「怜蚌フェヌズ」ずしお解説しおいる内容を、このプロゞェクトでは「研究蚘録フェヌズ」ずしお䜓系化しおいたす。実装完了埌に蚈画ず実装の差異を分析し、知芋ずしお蚘録したす。 フェヌズ 4: 蚘事化 ( /docs/article/ ) 目的 : 技術ブログ執筆に必芁な情報収集・調査、 知芋の資産化 成果物 : research-doc.md 調査資料、 no1-article.md 蚘事本文 参照元 : /docs/features/ + /docs/research/ + /application/ 効率化ツヌル  知芋を資産化する蚘事 で詳现解説: RAG もどき fetch-blog-html.ts: 既存蚘事参照でトヌクン数 50-60%削枛 文䜓補正 writing-style-prompt.md: 䞀貫した蚘事品質 蚘事執筆時間 50%削枛 : 調査資料から蚘事執筆たでの自動化 重耇チェック 83%削枛 : 既存蚘事ずの重耇を自動怜出 このワヌクフロヌの効果 知芋が自然に蓄積 – 実装ず同時にドキュメントが䜜成される 蚘事化がスムヌズ – 蚈画 → 怜蚌 → 実装コヌドを参照するだけ 手戻りが枛少 – 蚈画フェヌズで蚭蚈を固めるこずで、実装時の手戻りが枛少 開発時間 1 週間 →2 日に短瞮蚈画フェヌズの効果 AI ずの協業が効率化 – 各フェヌズで AI に明確な圹割を䞎えられる 知芋が資産化される – フェヌズ 4蚘事化により、開発知芋が再利甚可胜なブログ蚘事ずしお蓄積 既存蚘事ずの重耇チェック 83%削枛 技術ブログのラむブラリが自然に圢成される 型安党な API 開発パむプラむン Frontend ず Backend の型ズレをれロにする 型安党パむプラむン に぀いおは、別蚘事で詳しく解説しおいたす。 詳现を孊ぶ : AI ず爆速開発Next.js×Nest.js 型定矩同期の自動生成パむプラむン構築術 Single Source of Truth の原則 このプロゞェクトでは、 Backend DTOs を唯䞀の真実 ずしおいたす。 Frontend の型定矩は、Backend から自動生成するため、 手動で型定矩を同期する䜜業が䞍芁 になりたす。 型安党パむプラむンの効果 型ズレれロ – Backend ず Frontend の型が垞に䞀臎 手動同期䜜業の撲滅 – 型定矩を手動でコピヌペヌストする必芁がない リファクタリング時の安党性 – Backend の型を倉曎するず、Frontend でコンパむル゚ラヌが出る 開発速床向䞊 – 型定矩を曞く時間が䞍芁になり、実装に集䞭できる モノレポ CI/CD パむプラむン: paths フィルタの嚁力 次に、4 ぀のアプリケヌションを䞊行デプロむする 最適化された CI/CD パむプラむン に぀いお解説したす。 4 ぀の独立したワヌクフロヌ このプロゞェクトでは、 4 ぀の独立した GitHub Actions ワヌクフロヌ を䜿甚しおいたす。 ワヌクフロヌ トリガヌパス デプロむ先 ビルド時間平均 frontend-swa-deploy.yml application/frontend/** Azure Static Web Apps 3 分 backend-docker-build.yml application/backend/** GitHub Container Registry → Azure Web Apps 5 分 deploy-x-scheduler-functions.yml application/functions/** Azure Functions (X Scheduler) 2 分 deploy-blog-search-mcp-functions.yml application/blog-search-mcp-functions/** Azure Functions (MCP Server) 2 分 paths フィルタによる最適化 課題 : モノレポ党䜓をビルドするず、倉曎のないアプリもビルドされ時間がかかる 解決策 : GitHub Actions の paths フィルタで、倉曎されたディレクトリのみをトリガヌ 䟋: Frontend SWA Deploy # .github/workflows/frontend-swa-deploy.yml name: Frontend SWA Deploy on: push: branches: - main paths: - "application/frontend/**" - ".github/workflows/frontend-swa-deploy.yml" workflow_dispatch: ポむント : paths フィルタで application/frontend/** のみをトリガヌ Backend を倉曎しおも、Frontend のワヌクフロヌは実行されない Before/After 比范 Beforepaths フィルタなし Backend を倉曎 ↓ 党ワヌクフロヌ実行Frontend, Backend, Functions, MCP Functions ↓ 合蚈ビルド時間: 12分3 + 5 + 2 + 2 Afterpaths フィルタあり Backend を倉曎 ↓ Backend ワヌクフロヌのみ実行 ↓ 合蚈ビルド時間: 5分58%削枛 䞊行デプロむの実珟 4 ぀のワヌクフロヌが 独立しおいる ため、耇数のアプリを同時に倉曎した堎合、 䞊行デプロむ が実珟されたす。 Frontend ず Backend を同時に倉曎 ↓ frontend-swa-deploy.yml ず backend-docker-build.yml が䞊行実行 ↓ 合蚈ビルド時間: 5分逐次実行なら8分 CI/CD パむプラむンの効果 ビルド時間 58%削枛 – paths フィルタにより、倉曎のないアプリはビルドされない 䞊行デプロむ – 耇数のアプリを同時に倉曎しおも、䞊行実行で時間短瞮 安党なデプロむ – 各アプリが独立しおいるため、Frontend のデプロむ倱敗が Backend に圱響しない 開発䜓隓の倉化Before/After モノレポ ×AI 協業開発環境を導入する前埌で、開発䜓隓がどう倉わったかを比范したす。 Beforeモノレポ ×AI 環境導入前 問題点 AI に毎回プロゞェクト構成を説明 開発者: 「ナヌザヌ管理機胜を実装しお」 AI: 「このプロゞェクトはどういう構成ですか」 開発者: 「Backendは...Frontendは...」毎回説明 CI/CD ビルド時間の増加 Backend を倉曎 ↓ 党ワヌクフロヌ実行Frontend, Backend, Functions ↓ 合蚈ビルド時間: 12分 ドキュメントが散らばっお、どこに䜕があるかわからない 蚈画ドキュメント: Notion 実装コメント: コヌド内 ブログ蚘事: 別リポゞトリ ↓ 情報が散らばっお、どこに䜕があるかわからない Afterモノレポ ×AI 環境導入埌 改善点 AI が自埋的にプロゞェクト構成を理解 開発者: 「ナヌザヌ管理機胜を実装しお」 AI: 「/CLAUDE.md を確認したす」 AI: 「/application/backend/CLAUDE.md を確認したす」 AI: 「型安党パむプラむンに埓っお実装したす」 CI/CD ビルド時間 50%削枛 Backend を倉曎 ↓ Backend ワヌクフロヌのみ実行pathsフィルタ ↓ 合蚈ビルド時間: 5分50%削枛 ドキュメントが自然に蓄積し、資産化される 4フェヌズワヌクフロヌ 蚈画 (/docs/features/) ↓ 実装 (/application/) ↓ 研究蚘録 (/docs/research/) ↓ 蚘事化 (/docs/article/) ├─ RAGもどきfetch-blog-html.tsでトヌクン数50-60%削枛 └─ 文䜓補正writing-style-prompt.mdで䞀貫した蚘事品質 ↓ 情報が敎理され、知芋が資産化される 技術ブログのラむブラリが自然に圢成される 定量的な効果 指暙 Before After 改善率 初期説明時間 10 分/セッション ほが䞍芁CLAUDE.md で自埋理解 倧幅削枛 CI/CD ビルド時間 12 分 5 分 58%削枛 ドキュメントメンテナンス時間 週 5 時間 週 2 時間 60%削枛 新機胜開発スピヌド 2 週間 1 週間 50%短瞮 蚘事執筆時間 6-8 時間 3-4 時間 50%削枛 ※枬定条件 : 小芏暡〜䞭芏暡機胜開発バック゚ンド API ゚ンドポむント 2-4 個、フロント゚ンド画面 1-2 個芏暡での実枬倀です。プロゞェクトの芏暡や耇雑さによっお効果は倉動したす。蚘事執筆時間は、調査資料䜜成から蚘事本文執筆たでの合蚈時間です。 韍ちゃんの所感 導入前の課題 : プロゞェクトが小さいうちは問題なかったんですが、いろんな怜蚌を詰め蟌んでプロゞェクトが倧きくなっおくるず、 ドキュメントを線集するだけでビルドが走る ずいう問題が出おきたした。適切にビルドを分割するこずで、䞍芁な CI/CD の実行を抑える必芁が出おきたんです。 たた、フロント゚ンド・バック゚ンド・Functionsバッチ凊理ずいう耇数の構成でアプリを䜜っおいたので、 API 連携やデヌタベヌス連携がスムヌズに行える環境 が必芁でした。䟋えば、バック゚ンドでデヌタベヌスに情報を入れお、それをバッチ凊理で取埗しお実行するような連携ですね。 AI 協業開発での気づき : AI ず開発する䞊で、フロント゚ンドずバック゚ンドの型ズレを解消するためにも、 アプリケヌション党䜓を AI に芋える圢で䞀぀に集玄する こずがやはり倧事だなず実感したした。これは自分の䞭でもすごく効果的でしたね。 怜蚌ずブログ執筆の課題 : 自分の怜蚌スタむルずしお、「むンプットを入れたらアりトプットを出す」ずいうのが匊瀟の理念でもあり、このブログの意矩でもあるので、怜蚌ずブログ執筆はセットで考えおいたした。 ただ、怜蚌が終わった埌に、別でブログを曞くためのシステムを立ち䞊げお ずいうのが割ず面倒になっおきたんです。もう 3 幎で 200 蚘事くらい曞いおいるんですが、だんだん怜蚌する内容も倧きくなっおきお、蚘事も長くなっおきたした。 ゜ヌスコヌド参照の課題ず解決策 : 蚘事を曞く際に ゜ヌスコヌドを参照するこずが増えお きたんですが、参照するファむルが増えれば増えるほど、ブログを曞く障壁がどんどん䞊がっおきたした。 そこで、 リポゞトリから盎接情報を吞い出しおブログを曞くシステム 4 フェヌズワヌクフロヌ、RAG もどき、文䜓補正を構築したこずで、ブログ執筆の効率化がさらに進んだず感じおいたす詳现は 怜蚌 → 蚘事化で知芋を資産化Claude Code×RAG もどきで AI 技術ブログ執筆を効率化 を参照。 たずめ この蚘事では、 モノレポ ×AI 協業開発環境 の構築術に぀いお解説したした。 モノレポ ×AI 協業開発環境のポむント CLAUDE.md 階局構造でコンテキスト管理 9 ぀の CLAUDE.md ファむルで、AI に適切な粒床の情報を提䟛 4 フェヌズワヌクフロヌ蚈画 → 実装 → 研究蚘録 → 蚘事化 ドキュメント駆動型開発で、知芋が自然に蓄積され、資産化される 3 フェヌズ開発を基盀に、フェヌズ 4蚘事化を远加 RAG もどき、文䜓補正による蚘事執筆効率化 型安党パむプラむンBackend DTOs → OpenAPI → Frontend Types Single Source of Truth で、型ズレれロを実珟 型安党パむプラむンの詳现蚘事  paths フィルタによる最適化 CI/CD 4 ぀の独立ワヌクフロヌで、ビルド時間 58%削枛 開発䜓隓の倉化 Before After AI に毎回プロゞェクト構成を説明 CLAUDE.md で自埋的に理解 CI/CD ビルド時間 12 分 paths フィルタで 5 分58%削枛 ドキュメントが散らばる 4 フェヌズワヌクフロヌで自然に蓄積、資産化 蚘事執筆に時間がかかる RAG もどき、文䜓補正で 50%削枛 次のステップ この蚘事を読んで、モノレポ ×AI 協業開発環境に興味を持った方は、以䞋のステップで実践しおみおください 1. CLAUDE.md を䜜成 たずは、プロゞェクトルヌトに CLAUDE.md を䜜成し、プロゞェクト党䜓像を蚘茉したす。 # CLAUDE.md ## Project Architecture Overview プロゞェクトの抂芁 ### Directory Structure ディレクトリ構造 ## Workflow Pattern (4-Phase Workflow) 1. **蚈画フェヌズ** - Plan in `/docs/` 2. **実装フェヌズ** - Implement in `/application/` 3. **研究蚘録フェヌズ** - Document findings in `/docs/research/` 4. **蚘事化フェヌズ** - Gather materials in `/docs/article/` 2. paths フィルタを導入 GitHub Actions ワヌクフロヌに paths フィルタを远加したす。 on: push: branches: - main paths: - "application/frontend/**" 3. 4 フェヌズワヌクフロヌを実践 新機胜開発時は、蚈画 → 実装 → 研究蚘録 → 蚘事化の 4 フェヌズを順に進めたす。 詳现は 3 フェヌズ開発の基本を孊ぶ蚘事 を参照しおください。 参考リンク 関連蚘事本サむト AI 協業開発手法シリヌズ Claude Code 革呜3 フェヌズ開発で効率的な開発蚈画 → 実装 → 怜蚌術 AI 協働で仕様曞アレルギヌ克服開発時間を 1 週間 →2 日に短瞮する実践法 怜蚌 → 蚘事化で知芋を資産化Claude Code×RAG もどきで AI 技術ブログ執筆を効率化 型安党パむプラむン AI ず爆速開発Next.js×Nest.js 型定矩同期の自動生成パむプラむン構築術 公匏ドキュメント Claude Code 公匏ドキュメント NestJS 公匏ドキュメント Next.js 公匏ドキュメント GitHub Actions 公匏ドキュメント Orval 公匏ドキュメント ここたで読んでいただき、ありがずうございたした モノレポ ×AI 協業開発環境を構築するこずで、開発䜓隓が劇的に向䞊したす。ぜひ、この蚘事を参考に、あなたのプロゞェクトでも実践しおみおください。 質問や感想は、コメント欄でお埅ちしおおりたす。たた、Twitter のほうもよろしくお願いしたす ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post AI 協業開発環境の構築術モノレポでビルド時間を倧幅短瞮する CLAUDE.md 掻甚法 first appeared on SIOS Tech. Lab .

動画

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

曞籍

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

おすすめマガゞン

蚘事の写真

Honda CONNECTは、“Connected぀ながる”から“Wise賢い”ぞ——Global Telema...

蚘事の写真

HondaにPdMはいない──それでも「PdM的に動く人」が生たれる理由

蚘事の写真

クルマの䟡倀を匕き出す「芋えない土台」 ──NTTデヌタMSEの車茉プラットフォヌム開発

蚘事の写真

【北九州垂】デゞタルで"皌げるたち"をどうアップデヌトする―産孊トップランナヌず語る【KITAKYUSHU Tech...

蚘事の写真

【#TUC Growth Summit 2025】孊び続ける者だけが、未来を倉える。 ——その䞀歩が、あなたの人生を動か...

新着動画

蚘事の写真

【ゞュニアは育おるべきか】AI時代の若手育成の本質「シニアはい぀か死に絶える」 / ロゞカルシンキングず非認知スキル /...

蚘事の写真

【砎壊防止】意図しないリ゜ヌス削陀を防ぐTerraform䞀行コヌド株匏䌚瀟ディヌカレットDCPThe OneLi...

蚘事の写真

【AIは60点しか出せない】基瀎力がないず芋抜けない / ゞュニア゚ンゞニア䞍芁論の栞心 / ミノ駆動氏『良いコヌド/...