[{"data":1,"prerenderedAt":2210},["ShallowReactive",2],{"navigation_docs":3,"-git-cicd":190,"-git-cicd-surround":2205},[4,136,150,183],{"title":5,"path":6,"stem":7,"children":8},"Frontend","\u002Ffrontend","1.frontend",[9,13,39,76,109,130],{"title":10,"path":6,"stem":11,"order":12},"フロントエンド ガイドライン","1.frontend\u002Findex",1,{"title":14,"path":15,"stem":16,"children":17},"HTML","\u002Ffrontend\u002Fhtml","1.frontend\u002F1.html\u002Findex",[18,19,23,27,31,35],{"title":14,"path":15,"stem":16},{"title":20,"path":21,"stem":22},"コードスタイル","\u002Ffrontend\u002Fhtml\u002Fcode-style","1.frontend\u002F1.html\u002Fcode-style",{"title":24,"path":25,"stem":26},"見出しタグ","\u002Ffrontend\u002Fhtml\u002Fheading","1.frontend\u002F1.html\u002Fheading",{"title":28,"path":29,"stem":30},"img タグ","\u002Ffrontend\u002Fhtml\u002Fimg","1.frontend\u002F1.html\u002Fimg",{"title":32,"path":33,"stem":34},"パスとリンク","\u002Ffrontend\u002Fhtml\u002Flink","1.frontend\u002F1.html\u002Flink",{"title":36,"path":37,"stem":38},"品質管理","\u002Ffrontend\u002Fhtml\u002Fquality","1.frontend\u002F1.html\u002Fquality",{"title":40,"path":41,"stem":42,"children":43},"CSS","\u002Ffrontend\u002Fcss","1.frontend\u002F2.css\u002Findex",[44,45,49,52,56,60,64,68,72],{"title":40,"path":41,"stem":42},{"title":46,"path":47,"stem":48},"命名規則・コンポーネント設計","\u002Ffrontend\u002Fcss\u002Farchitecture","1.frontend\u002F2.css\u002Farchitecture",{"title":20,"path":50,"stem":51},"\u002Ffrontend\u002Fcss\u002Fcode-style","1.frontend\u002F2.css\u002Fcode-style",{"title":53,"path":54,"stem":55},"Web フォント","\u002Ffrontend\u002Fcss\u002Ffonts","1.frontend\u002F2.css\u002Ffonts",{"title":57,"path":58,"stem":59},"記述順番","\u002Ffrontend\u002Fcss\u002Forder","1.frontend\u002F2.css\u002Forder",{"title":61,"path":62,"stem":63},"プロパティのルール","\u002Ffrontend\u002Fcss\u002Fproperties","1.frontend\u002F2.css\u002Fproperties",{"title":65,"path":66,"stem":67},"Tailwind CSS","\u002Ffrontend\u002Fcss\u002Ftailwind","1.frontend\u002F2.css\u002Ftailwind",{"title":69,"path":70,"stem":71},"値のルール","\u002Ffrontend\u002Fcss\u002Fvalues","1.frontend\u002F2.css\u002Fvalues",{"title":73,"path":74,"stem":75},"CSS 変数（カスタムプロパティ）","\u002Ffrontend\u002Fcss\u002Fvariables","1.frontend\u002F2.css\u002Fvariables",{"title":77,"path":78,"stem":79,"children":80},"JavaScript","\u002Ffrontend\u002Fjs","1.frontend\u002F3.js\u002Findex",[81,82,85,89,93,97,101,105],{"title":77,"path":78,"stem":79},{"title":20,"path":83,"stem":84},"\u002Ffrontend\u002Fjs\u002Fcode-style","1.frontend\u002F3.js\u002Fcode-style",{"title":86,"path":87,"stem":88},"エラーハンドリング","\u002Ffrontend\u002Fjs\u002Ferror-handling","1.frontend\u002F3.js\u002Ferror-handling",{"title":90,"path":91,"stem":92},"ライブラリの利用","\u002Ffrontend\u002Fjs\u002Flibraries","1.frontend\u002F3.js\u002Flibraries",{"title":94,"path":95,"stem":96},"HTML への読み込み","\u002Ffrontend\u002Fjs\u002Floading","1.frontend\u002F3.js\u002Floading",{"title":98,"path":99,"stem":100},"モジュール","\u002Ffrontend\u002Fjs\u002Fmodule-structure","1.frontend\u002F3.js\u002Fmodule-structure",{"title":102,"path":103,"stem":104},"命名規則","\u002Ffrontend\u002Fjs\u002Fnaming","1.frontend\u002F3.js\u002Fnaming",{"title":106,"path":107,"stem":108},"パフォーマンス最適化","\u002Ffrontend\u002Fjs\u002Fperformance","1.frontend\u002F3.js\u002Fperformance",{"title":110,"path":111,"stem":112,"children":113},"画像・メディアリソースガイドライン","\u002Ffrontend\u002Fmedia","1.frontend\u002F4.media\u002Findex",[114,115,119,123,127],{"title":110,"path":111,"stem":112},{"title":116,"path":117,"stem":118},"アクセシビリティ","\u002Ffrontend\u002Fmedia\u002Faccessibility","1.frontend\u002F4.media\u002Faccessibility",{"title":120,"path":121,"stem":122},"画像フォーマット","\u002Ffrontend\u002Fmedia\u002Fformats","1.frontend\u002F4.media\u002Fformats",{"title":124,"path":125,"stem":126},"ファイル命名規則","\u002Ffrontend\u002Fmedia\u002Fnaming","1.frontend\u002F4.media\u002Fnaming",{"title":106,"path":128,"stem":129},"\u002Ffrontend\u002Fmedia\u002Foptimization","1.frontend\u002F4.media\u002Foptimization",{"title":131,"path":132,"stem":133,"children":134},"開発環境テンプレート","\u002Ffrontend\u002Fenvironment","1.frontend\u002F5.environment\u002Findex",[135],{"title":131,"path":132,"stem":133},{"title":137,"path":138,"stem":139,"children":140,"page":149},"Deploy Release","\u002Fdeploy-release","2.deploy-release",[141,145],{"title":142,"path":143,"stem":144},"デプロイ","\u002Fdeploy-release\u002Fdeploy","2.deploy-release\u002Fdeploy",{"title":146,"path":147,"stem":148},"リリース","\u002Fdeploy-release\u002Frelease","2.deploy-release\u002Frelease",false,{"title":151,"path":152,"stem":153,"children":154},"Git","\u002Fgit","3.git",[155,159,163,167,171,175,179],{"title":156,"path":152,"stem":157,"order":158},"Git ガイドライン","3.git\u002Findex",3,{"title":160,"path":161,"stem":162},"ブランチ戦略","\u002Fgit\u002Fbranch","3.git\u002Fbranch",{"title":164,"path":165,"stem":166},"CI\u002FCD運用","\u002Fgit\u002Fcicd","3.git\u002Fcicd",{"title":168,"path":169,"stem":170},"コミットメッセージとタグ","\u002Fgit\u002Fmessage","3.git\u002Fmessage",{"title":172,"path":173,"stem":174},"Pull Request運用","\u002Fgit\u002Fpull-request","3.git\u002Fpull-request",{"title":176,"path":177,"stem":178},"リポジトリ運用","\u002Fgit\u002Frepository","3.git\u002Frepository",{"title":180,"path":181,"stem":182},"GitHub権限・セキュリティ","\u002Fgit\u002Fsecurity","3.git\u002Fsecurity",{"title":184,"path":185,"stem":186,"children":187,"order":189},"AI 利用ガイドライン","\u002Fai","4.ai\u002Findex",[188],{"title":184,"path":185,"stem":186,"order":189},4,{"id":191,"title":164,"body":192,"description":2199,"extension":2200,"links":2201,"meta":2202,"navigation":315,"path":165,"seo":2203,"stem":166,"__hash__":2204},"docs\u002F3.git\u002Fcicd.md",{"type":193,"value":194,"toc":2182},"minimark",[195,200,204,209,213,242,245,271,275,279,283,692,695,961,965,984,993,997,1000,1020,1148,1152,1155,1158,1161,1175,1178,1181,1195,1199,1203,1500,1504,1849,1861,1864,1890,1893,1896,1899,1903,1934,1938,1958,1966,1969,1972,2178],[196,197,199],"h2",{"id":198},"ci継続的インテグレーション","CI（継続的インテグレーション）",[201,202,203],"p",{},"CI（Continuous Integration）は、コードの品質を維持し、バグを早期に発見するための自動化プロセスです。",[205,206,208],"h3",{"id":207},"ciで実行すべき項目","CIで実行すべき項目",[210,211,212],"h4",{"id":212},"必須項目",[214,215,216,224,230,236],"ul",{},[217,218,219,223],"li",{},[220,221,222],"strong",{},"Lint（コードスタイルチェック）",": ESLint、Prettier、Stylelintなど",[217,225,226,229],{},[220,227,228],{},"型チェック",": TypeScript の型エラー検出",[217,231,232,235],{},[220,233,234],{},"テスト",": ユニットテスト、統合テストの実行",[217,237,238,241],{},[220,239,240],{},"ビルド確認",": ビルドが正常に完了するか確認",[210,243,244],{"id":244},"推奨項目",[214,246,247,253,259,265],{},[217,248,249,252],{},[220,250,251],{},"カバレッジ測定",": テストカバレッジの計測",[217,254,255,258],{},[220,256,257],{},"セキュリティスキャン",": 脆弱性の自動検出",[217,260,261,264],{},[220,262,263],{},"パフォーマンステスト",": Lighthouse CI など",[217,266,267,270],{},[220,268,269],{},"依存関係チェック",": 脆弱性のある依存関係の検出",[272,273,274],"note",{},"プロジェクトの規模や要件に応じて、必要なチェックを選択してください。\nすべてを実装する必要はありません。",[205,276,278],{"id":277},"github-actions-の設定例","GitHub Actions の設定例",[210,280,282],{"id":281},"基本的なci設定","基本的なCI設定",[284,285,291],"pre",{"className":286,"code":287,"language":288,"meta":289,"style":290},"language-yaml shiki shiki-themes github-light material-theme material-theme-palenight","name: CI\n\non:\n  pull_request:\n    branches: [develop, main]\n  push:\n    branches: [develop, main]\n\njobs:\n  lint-and-test:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Setup Node.js\n        uses: actions\u002Fsetup-node@v4\n        with:\n          node-version: \"20\"\n          cache: \"pnpm\"\n\n      - name: Install pnpm\n        uses: pnpm\u002Faction-setup@v4\n        with:\n          version: 9\n\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Run linter\n        run: pnpm run lint\n\n      - name: Run type check\n        run: pnpm run type-check\n\n      - name: Run tests\n        run: pnpm run test\n\n      - name: Build\n        run: pnpm run build\n","yaml",".github\u002Fworkflows\u002Fci.yml","",[292,293,294,310,317,326,333,356,364,381,386,394,402,413,418,426,440,445,458,469,477,495,510,515,527,537,544,556,561,573,584,589,601,611,616,628,638,643,655,665,670,682],"code",{"__ignoreMap":290},[295,296,298,302,306],"span",{"class":297,"line":12},"line",[295,299,301],{"class":300},"sF3G6","name",[295,303,305],{"class":304},"sN50r",":",[295,307,309],{"class":308},"scigg"," CI\n",[295,311,313],{"class":297,"line":312},2,[295,314,316],{"emptyLinePlaceholder":315},true,"\n",[295,318,319,323],{"class":297,"line":158},[295,320,322],{"class":321},"s1f5w","on",[295,324,325],{"class":304},":\n",[295,327,328,331],{"class":297,"line":189},[295,329,330],{"class":300},"  pull_request",[295,332,325],{"class":304},[295,334,336,339,341,344,347,350,353],{"class":297,"line":335},5,[295,337,338],{"class":300},"    branches",[295,340,305],{"class":304},[295,342,343],{"class":304}," [",[295,345,346],{"class":308},"develop",[295,348,349],{"class":304},",",[295,351,352],{"class":308}," main",[295,354,355],{"class":304},"]\n",[295,357,359,362],{"class":297,"line":358},6,[295,360,361],{"class":300},"  push",[295,363,325],{"class":304},[295,365,367,369,371,373,375,377,379],{"class":297,"line":366},7,[295,368,338],{"class":300},[295,370,305],{"class":304},[295,372,343],{"class":304},[295,374,346],{"class":308},[295,376,349],{"class":304},[295,378,352],{"class":308},[295,380,355],{"class":304},[295,382,384],{"class":297,"line":383},8,[295,385,316],{"emptyLinePlaceholder":315},[295,387,389,392],{"class":297,"line":388},9,[295,390,391],{"class":300},"jobs",[295,393,325],{"class":304},[295,395,397,400],{"class":297,"line":396},10,[295,398,399],{"class":300},"  lint-and-test",[295,401,325],{"class":304},[295,403,405,408,410],{"class":297,"line":404},11,[295,406,407],{"class":300},"    runs-on",[295,409,305],{"class":304},[295,411,412],{"class":308}," ubuntu-latest\n",[295,414,416],{"class":297,"line":415},12,[295,417,316],{"emptyLinePlaceholder":315},[295,419,421,424],{"class":297,"line":420},13,[295,422,423],{"class":300},"    steps",[295,425,325],{"class":304},[295,427,429,432,435,437],{"class":297,"line":428},14,[295,430,431],{"class":304},"      -",[295,433,434],{"class":300}," uses",[295,436,305],{"class":304},[295,438,439],{"class":308}," actions\u002Fcheckout@v4\n",[295,441,443],{"class":297,"line":442},15,[295,444,316],{"emptyLinePlaceholder":315},[295,446,448,450,453,455],{"class":297,"line":447},16,[295,449,431],{"class":304},[295,451,452],{"class":300}," name",[295,454,305],{"class":304},[295,456,457],{"class":308}," Setup Node.js\n",[295,459,461,464,466],{"class":297,"line":460},17,[295,462,463],{"class":300},"        uses",[295,465,305],{"class":304},[295,467,468],{"class":308}," actions\u002Fsetup-node@v4\n",[295,470,472,475],{"class":297,"line":471},18,[295,473,474],{"class":300},"        with",[295,476,325],{"class":304},[295,478,480,483,485,489,492],{"class":297,"line":479},19,[295,481,482],{"class":300},"          node-version",[295,484,305],{"class":304},[295,486,488],{"class":487},"ssQ5U"," \"",[295,490,491],{"class":308},"20",[295,493,494],{"class":487},"\"\n",[295,496,498,501,503,505,508],{"class":297,"line":497},20,[295,499,500],{"class":300},"          cache",[295,502,305],{"class":304},[295,504,488],{"class":487},[295,506,507],{"class":308},"pnpm",[295,509,494],{"class":487},[295,511,513],{"class":297,"line":512},21,[295,514,316],{"emptyLinePlaceholder":315},[295,516,518,520,522,524],{"class":297,"line":517},22,[295,519,431],{"class":304},[295,521,452],{"class":300},[295,523,305],{"class":304},[295,525,526],{"class":308}," Install pnpm\n",[295,528,530,532,534],{"class":297,"line":529},23,[295,531,463],{"class":300},[295,533,305],{"class":304},[295,535,536],{"class":308}," pnpm\u002Faction-setup@v4\n",[295,538,540,542],{"class":297,"line":539},24,[295,541,474],{"class":300},[295,543,325],{"class":304},[295,545,547,550,552],{"class":297,"line":546},25,[295,548,549],{"class":300},"          version",[295,551,305],{"class":304},[295,553,555],{"class":554},"s9owh"," 9\n",[295,557,559],{"class":297,"line":558},26,[295,560,316],{"emptyLinePlaceholder":315},[295,562,564,566,568,570],{"class":297,"line":563},27,[295,565,431],{"class":304},[295,567,452],{"class":300},[295,569,305],{"class":304},[295,571,572],{"class":308}," Install dependencies\n",[295,574,576,579,581],{"class":297,"line":575},28,[295,577,578],{"class":300},"        run",[295,580,305],{"class":304},[295,582,583],{"class":308}," pnpm install --frozen-lockfile\n",[295,585,587],{"class":297,"line":586},29,[295,588,316],{"emptyLinePlaceholder":315},[295,590,592,594,596,598],{"class":297,"line":591},30,[295,593,431],{"class":304},[295,595,452],{"class":300},[295,597,305],{"class":304},[295,599,600],{"class":308}," Run linter\n",[295,602,604,606,608],{"class":297,"line":603},31,[295,605,578],{"class":300},[295,607,305],{"class":304},[295,609,610],{"class":308}," pnpm run lint\n",[295,612,614],{"class":297,"line":613},32,[295,615,316],{"emptyLinePlaceholder":315},[295,617,619,621,623,625],{"class":297,"line":618},33,[295,620,431],{"class":304},[295,622,452],{"class":300},[295,624,305],{"class":304},[295,626,627],{"class":308}," Run type check\n",[295,629,631,633,635],{"class":297,"line":630},34,[295,632,578],{"class":300},[295,634,305],{"class":304},[295,636,637],{"class":308}," pnpm run type-check\n",[295,639,641],{"class":297,"line":640},35,[295,642,316],{"emptyLinePlaceholder":315},[295,644,646,648,650,652],{"class":297,"line":645},36,[295,647,431],{"class":304},[295,649,452],{"class":300},[295,651,305],{"class":304},[295,653,654],{"class":308}," Run tests\n",[295,656,658,660,662],{"class":297,"line":657},37,[295,659,578],{"class":300},[295,661,305],{"class":304},[295,663,664],{"class":308}," pnpm run test\n",[295,666,668],{"class":297,"line":667},38,[295,669,316],{"emptyLinePlaceholder":315},[295,671,673,675,677,679],{"class":297,"line":672},39,[295,674,431],{"class":304},[295,676,452],{"class":300},[295,678,305],{"class":304},[295,680,681],{"class":308}," Build\n",[295,683,685,687,689],{"class":297,"line":684},40,[295,686,578],{"class":300},[295,688,305],{"class":304},[295,690,691],{"class":308}," pnpm run build\n",[210,693,694],{"id":694},"カバレッジ付きテスト",[284,696,699],{"className":286,"code":697,"language":288,"meta":698,"style":290},"name: Test Coverage\n\non:\n  pull_request:\n    branches: [develop, main]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Setup Node.js\n        uses: actions\u002Fsetup-node@v4\n        with:\n          node-version: \"20\"\n          cache: \"pnpm\"\n\n      - name: Install pnpm\n        uses: pnpm\u002Faction-setup@v4\n        with:\n          version: 9\n\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Run tests with coverage\n        run: pnpm run test:coverage\n\n      - name: Upload coverage to Codecov\n        uses: codecov\u002Fcodecov-action@v4\n        with:\n          token: ${{ secrets.CODECOV_TOKEN }}\n",".github\u002Fworkflows\u002Ftest-coverage.yml",[292,700,701,710,714,720,726,742,746,752,759,767,771,777,787,791,801,809,815,827,839,843,853,861,867,875,879,889,897,901,912,921,925,936,945,951],{"__ignoreMap":290},[295,702,703,705,707],{"class":297,"line":12},[295,704,301],{"class":300},[295,706,305],{"class":304},[295,708,709],{"class":308}," Test Coverage\n",[295,711,712],{"class":297,"line":312},[295,713,316],{"emptyLinePlaceholder":315},[295,715,716,718],{"class":297,"line":158},[295,717,322],{"class":321},[295,719,325],{"class":304},[295,721,722,724],{"class":297,"line":189},[295,723,330],{"class":300},[295,725,325],{"class":304},[295,727,728,730,732,734,736,738,740],{"class":297,"line":335},[295,729,338],{"class":300},[295,731,305],{"class":304},[295,733,343],{"class":304},[295,735,346],{"class":308},[295,737,349],{"class":304},[295,739,352],{"class":308},[295,741,355],{"class":304},[295,743,744],{"class":297,"line":358},[295,745,316],{"emptyLinePlaceholder":315},[295,747,748,750],{"class":297,"line":366},[295,749,391],{"class":300},[295,751,325],{"class":304},[295,753,754,757],{"class":297,"line":383},[295,755,756],{"class":300},"  test",[295,758,325],{"class":304},[295,760,761,763,765],{"class":297,"line":388},[295,762,407],{"class":300},[295,764,305],{"class":304},[295,766,412],{"class":308},[295,768,769],{"class":297,"line":396},[295,770,316],{"emptyLinePlaceholder":315},[295,772,773,775],{"class":297,"line":404},[295,774,423],{"class":300},[295,776,325],{"class":304},[295,778,779,781,783,785],{"class":297,"line":415},[295,780,431],{"class":304},[295,782,434],{"class":300},[295,784,305],{"class":304},[295,786,439],{"class":308},[295,788,789],{"class":297,"line":420},[295,790,316],{"emptyLinePlaceholder":315},[295,792,793,795,797,799],{"class":297,"line":428},[295,794,431],{"class":304},[295,796,452],{"class":300},[295,798,305],{"class":304},[295,800,457],{"class":308},[295,802,803,805,807],{"class":297,"line":442},[295,804,463],{"class":300},[295,806,305],{"class":304},[295,808,468],{"class":308},[295,810,811,813],{"class":297,"line":447},[295,812,474],{"class":300},[295,814,325],{"class":304},[295,816,817,819,821,823,825],{"class":297,"line":460},[295,818,482],{"class":300},[295,820,305],{"class":304},[295,822,488],{"class":487},[295,824,491],{"class":308},[295,826,494],{"class":487},[295,828,829,831,833,835,837],{"class":297,"line":471},[295,830,500],{"class":300},[295,832,305],{"class":304},[295,834,488],{"class":487},[295,836,507],{"class":308},[295,838,494],{"class":487},[295,840,841],{"class":297,"line":479},[295,842,316],{"emptyLinePlaceholder":315},[295,844,845,847,849,851],{"class":297,"line":497},[295,846,431],{"class":304},[295,848,452],{"class":300},[295,850,305],{"class":304},[295,852,526],{"class":308},[295,854,855,857,859],{"class":297,"line":512},[295,856,463],{"class":300},[295,858,305],{"class":304},[295,860,536],{"class":308},[295,862,863,865],{"class":297,"line":517},[295,864,474],{"class":300},[295,866,325],{"class":304},[295,868,869,871,873],{"class":297,"line":529},[295,870,549],{"class":300},[295,872,305],{"class":304},[295,874,555],{"class":554},[295,876,877],{"class":297,"line":539},[295,878,316],{"emptyLinePlaceholder":315},[295,880,881,883,885,887],{"class":297,"line":546},[295,882,431],{"class":304},[295,884,452],{"class":300},[295,886,305],{"class":304},[295,888,572],{"class":308},[295,890,891,893,895],{"class":297,"line":558},[295,892,578],{"class":300},[295,894,305],{"class":304},[295,896,583],{"class":308},[295,898,899],{"class":297,"line":563},[295,900,316],{"emptyLinePlaceholder":315},[295,902,903,905,907,909],{"class":297,"line":575},[295,904,431],{"class":304},[295,906,452],{"class":300},[295,908,305],{"class":304},[295,910,911],{"class":308}," Run tests with coverage\n",[295,913,914,916,918],{"class":297,"line":586},[295,915,578],{"class":300},[295,917,305],{"class":304},[295,919,920],{"class":308}," pnpm run test:coverage\n",[295,922,923],{"class":297,"line":591},[295,924,316],{"emptyLinePlaceholder":315},[295,926,927,929,931,933],{"class":297,"line":603},[295,928,431],{"class":304},[295,930,452],{"class":300},[295,932,305],{"class":304},[295,934,935],{"class":308}," Upload coverage to Codecov\n",[295,937,938,940,942],{"class":297,"line":613},[295,939,463],{"class":300},[295,941,305],{"class":304},[295,943,944],{"class":308}," codecov\u002Fcodecov-action@v4\n",[295,946,947,949],{"class":297,"line":618},[295,948,474],{"class":300},[295,950,325],{"class":304},[295,952,953,956,958],{"class":297,"line":630},[295,954,955],{"class":300},"          token",[295,957,305],{"class":304},[295,959,960],{"class":308}," ${{ secrets.CODECOV_TOKEN }}\n",[205,962,964],{"id":963},"ciの実行タイミング","CIの実行タイミング",[214,966,967,973,979],{},[217,968,969,972],{},[220,970,971],{},"Pull Request作成時",": すべてのチェックを実行",[217,974,975,978],{},[220,976,977],{},"コミットpush時",": 開発ブランチ（develop）で実行",[217,980,981,972],{},[220,982,983],{},"main\u002Fdevelopへのマージ時",[985,986,987,990],"warning",{},[201,988,989],{},"CIが失敗したPRはマージしない",[201,991,992],{},"CIが失敗している状態でのマージは、品質低下につながります。\nブランチ保護ルールでCIの成功を必須条件に設定することを推奨します。",[205,994,996],{"id":995},"ciの実行時間の最適化","CIの実行時間の最適化",[201,998,999],{},"CIの実行時間が長すぎると、開発速度が低下します。以下の最適化を検討してください。",[214,1001,1002,1008,1014],{},[217,1003,1004,1007],{},[220,1005,1006],{},"キャッシュの活用",": 依存関係のキャッシュ",[217,1009,1010,1013],{},[220,1011,1012],{},"並列実行",": 独立したジョブを並列で実行",[217,1015,1016,1019],{},[220,1017,1018],{},"条件付き実行",": 変更されたファイルに応じて実行を制限",[284,1021,1024],{"className":286,"code":1022,"language":288,"meta":1023,"style":290},"jobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      # ... Lintの実行\n\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      # ... テストの実行\n\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      # ... ビルドの実行\n","並列実行の例",[292,1025,1026,1032,1039,1047,1053,1063,1069,1073,1079,1087,1093,1103,1108,1112,1119,1127,1133,1143],{"__ignoreMap":290},[295,1027,1028,1030],{"class":297,"line":12},[295,1029,391],{"class":300},[295,1031,325],{"class":304},[295,1033,1034,1037],{"class":297,"line":312},[295,1035,1036],{"class":300},"  lint",[295,1038,325],{"class":304},[295,1040,1041,1043,1045],{"class":297,"line":158},[295,1042,407],{"class":300},[295,1044,305],{"class":304},[295,1046,412],{"class":308},[295,1048,1049,1051],{"class":297,"line":189},[295,1050,423],{"class":300},[295,1052,325],{"class":304},[295,1054,1055,1057,1059,1061],{"class":297,"line":335},[295,1056,431],{"class":304},[295,1058,434],{"class":300},[295,1060,305],{"class":304},[295,1062,439],{"class":308},[295,1064,1065],{"class":297,"line":358},[295,1066,1068],{"class":1067},"su8Ar","      # ... Lintの実行\n",[295,1070,1071],{"class":297,"line":366},[295,1072,316],{"emptyLinePlaceholder":315},[295,1074,1075,1077],{"class":297,"line":383},[295,1076,756],{"class":300},[295,1078,325],{"class":304},[295,1080,1081,1083,1085],{"class":297,"line":388},[295,1082,407],{"class":300},[295,1084,305],{"class":304},[295,1086,412],{"class":308},[295,1088,1089,1091],{"class":297,"line":396},[295,1090,423],{"class":300},[295,1092,325],{"class":304},[295,1094,1095,1097,1099,1101],{"class":297,"line":404},[295,1096,431],{"class":304},[295,1098,434],{"class":300},[295,1100,305],{"class":304},[295,1102,439],{"class":308},[295,1104,1105],{"class":297,"line":415},[295,1106,1107],{"class":1067},"      # ... テストの実行\n",[295,1109,1110],{"class":297,"line":420},[295,1111,316],{"emptyLinePlaceholder":315},[295,1113,1114,1117],{"class":297,"line":428},[295,1115,1116],{"class":300},"  build",[295,1118,325],{"class":304},[295,1120,1121,1123,1125],{"class":297,"line":442},[295,1122,407],{"class":300},[295,1124,305],{"class":304},[295,1126,412],{"class":308},[295,1128,1129,1131],{"class":297,"line":447},[295,1130,423],{"class":300},[295,1132,325],{"class":304},[295,1134,1135,1137,1139,1141],{"class":297,"line":460},[295,1136,431],{"class":304},[295,1138,434],{"class":300},[295,1140,305],{"class":304},[295,1142,439],{"class":308},[295,1144,1145],{"class":297,"line":471},[295,1146,1147],{"class":1067},"      # ... ビルドの実行\n",[196,1149,1151],{"id":1150},"cd継続的デリバリー","CD（継続的デリバリー）",[201,1153,1154],{},"CD（Continuous Delivery\u002FDeployment）は、アプリケーションを自動的にデプロイするプロセスです。",[205,1156,1157],{"id":1157},"デプロイ戦略",[210,1159,1160],{"id":1160},"環境の分離",[214,1162,1163,1169],{},[217,1164,1165,1168],{},[220,1166,1167],{},"Staging",": 本番と同等の環境でのテスト",[217,1170,1171,1174],{},[220,1172,1173],{},"Production",": 本番環境",[272,1176,1177],{},"プロジェクトによっては、Development（ローカル環境）、Preview環境、QA環境を追加することもあります。",[210,1179,1180],{"id":1180},"デプロイのトリガー",[214,1182,1183,1189],{},[217,1184,1185,1188],{},[220,1186,1187],{},"develop ブランチへのマージ",": Staging環境へ自動デプロイ",[217,1190,1191,1194],{},[220,1192,1193],{},"main ブランチへのマージ",": Production環境へ自動デプロイ（または手動承認後）",[205,1196,1198],{"id":1197},"github-actions-でのデプロイ設定例","GitHub Actions でのデプロイ設定例",[210,1200,1202],{"id":1201},"stagingへの自動デプロイ","Stagingへの自動デプロイ",[284,1204,1207],{"className":286,"code":1205,"language":288,"meta":1206,"style":290},"name: Deploy to Staging\n\non:\n  push:\n    branches: [develop]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    environment: staging\n\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Setup Node.js\n        uses: actions\u002Fsetup-node@v4\n        with:\n          node-version: \"20\"\n          cache: \"pnpm\"\n\n      - name: Install pnpm\n        uses: pnpm\u002Faction-setup@v4\n        with:\n          version: 9\n\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Build\n        run: pnpm run build\n        env:\n          NODE_ENV: production\n\n      - name: Deploy to Staging\n        env:\n          DEPLOY_TOKEN: ${{ secrets.STAGING_DEPLOY_TOKEN }}\n        run: |\n          # デプロイコマンド（Vercel、Netlifyなど）\n          pnpm run deploy:staging\n",".github\u002Fworkflows\u002Fdeploy-staging.yml",[292,1208,1209,1218,1222,1228,1234,1246,1250,1256,1263,1271,1281,1285,1291,1301,1305,1315,1323,1329,1341,1353,1357,1367,1375,1381,1389,1393,1403,1411,1415,1425,1433,1440,1450,1454,1464,1470,1480,1490,1495],{"__ignoreMap":290},[295,1210,1211,1213,1215],{"class":297,"line":12},[295,1212,301],{"class":300},[295,1214,305],{"class":304},[295,1216,1217],{"class":308}," Deploy to Staging\n",[295,1219,1220],{"class":297,"line":312},[295,1221,316],{"emptyLinePlaceholder":315},[295,1223,1224,1226],{"class":297,"line":158},[295,1225,322],{"class":321},[295,1227,325],{"class":304},[295,1229,1230,1232],{"class":297,"line":189},[295,1231,361],{"class":300},[295,1233,325],{"class":304},[295,1235,1236,1238,1240,1242,1244],{"class":297,"line":335},[295,1237,338],{"class":300},[295,1239,305],{"class":304},[295,1241,343],{"class":304},[295,1243,346],{"class":308},[295,1245,355],{"class":304},[295,1247,1248],{"class":297,"line":358},[295,1249,316],{"emptyLinePlaceholder":315},[295,1251,1252,1254],{"class":297,"line":366},[295,1253,391],{"class":300},[295,1255,325],{"class":304},[295,1257,1258,1261],{"class":297,"line":383},[295,1259,1260],{"class":300},"  deploy",[295,1262,325],{"class":304},[295,1264,1265,1267,1269],{"class":297,"line":388},[295,1266,407],{"class":300},[295,1268,305],{"class":304},[295,1270,412],{"class":308},[295,1272,1273,1276,1278],{"class":297,"line":396},[295,1274,1275],{"class":300},"    environment",[295,1277,305],{"class":304},[295,1279,1280],{"class":308}," staging\n",[295,1282,1283],{"class":297,"line":404},[295,1284,316],{"emptyLinePlaceholder":315},[295,1286,1287,1289],{"class":297,"line":415},[295,1288,423],{"class":300},[295,1290,325],{"class":304},[295,1292,1293,1295,1297,1299],{"class":297,"line":420},[295,1294,431],{"class":304},[295,1296,434],{"class":300},[295,1298,305],{"class":304},[295,1300,439],{"class":308},[295,1302,1303],{"class":297,"line":428},[295,1304,316],{"emptyLinePlaceholder":315},[295,1306,1307,1309,1311,1313],{"class":297,"line":442},[295,1308,431],{"class":304},[295,1310,452],{"class":300},[295,1312,305],{"class":304},[295,1314,457],{"class":308},[295,1316,1317,1319,1321],{"class":297,"line":447},[295,1318,463],{"class":300},[295,1320,305],{"class":304},[295,1322,468],{"class":308},[295,1324,1325,1327],{"class":297,"line":460},[295,1326,474],{"class":300},[295,1328,325],{"class":304},[295,1330,1331,1333,1335,1337,1339],{"class":297,"line":471},[295,1332,482],{"class":300},[295,1334,305],{"class":304},[295,1336,488],{"class":487},[295,1338,491],{"class":308},[295,1340,494],{"class":487},[295,1342,1343,1345,1347,1349,1351],{"class":297,"line":479},[295,1344,500],{"class":300},[295,1346,305],{"class":304},[295,1348,488],{"class":487},[295,1350,507],{"class":308},[295,1352,494],{"class":487},[295,1354,1355],{"class":297,"line":497},[295,1356,316],{"emptyLinePlaceholder":315},[295,1358,1359,1361,1363,1365],{"class":297,"line":512},[295,1360,431],{"class":304},[295,1362,452],{"class":300},[295,1364,305],{"class":304},[295,1366,526],{"class":308},[295,1368,1369,1371,1373],{"class":297,"line":517},[295,1370,463],{"class":300},[295,1372,305],{"class":304},[295,1374,536],{"class":308},[295,1376,1377,1379],{"class":297,"line":529},[295,1378,474],{"class":300},[295,1380,325],{"class":304},[295,1382,1383,1385,1387],{"class":297,"line":539},[295,1384,549],{"class":300},[295,1386,305],{"class":304},[295,1388,555],{"class":554},[295,1390,1391],{"class":297,"line":546},[295,1392,316],{"emptyLinePlaceholder":315},[295,1394,1395,1397,1399,1401],{"class":297,"line":558},[295,1396,431],{"class":304},[295,1398,452],{"class":300},[295,1400,305],{"class":304},[295,1402,572],{"class":308},[295,1404,1405,1407,1409],{"class":297,"line":563},[295,1406,578],{"class":300},[295,1408,305],{"class":304},[295,1410,583],{"class":308},[295,1412,1413],{"class":297,"line":575},[295,1414,316],{"emptyLinePlaceholder":315},[295,1416,1417,1419,1421,1423],{"class":297,"line":586},[295,1418,431],{"class":304},[295,1420,452],{"class":300},[295,1422,305],{"class":304},[295,1424,681],{"class":308},[295,1426,1427,1429,1431],{"class":297,"line":591},[295,1428,578],{"class":300},[295,1430,305],{"class":304},[295,1432,691],{"class":308},[295,1434,1435,1438],{"class":297,"line":603},[295,1436,1437],{"class":300},"        env",[295,1439,325],{"class":304},[295,1441,1442,1445,1447],{"class":297,"line":613},[295,1443,1444],{"class":300},"          NODE_ENV",[295,1446,305],{"class":304},[295,1448,1449],{"class":308}," production\n",[295,1451,1452],{"class":297,"line":618},[295,1453,316],{"emptyLinePlaceholder":315},[295,1455,1456,1458,1460,1462],{"class":297,"line":630},[295,1457,431],{"class":304},[295,1459,452],{"class":300},[295,1461,305],{"class":304},[295,1463,1217],{"class":308},[295,1465,1466,1468],{"class":297,"line":640},[295,1467,1437],{"class":300},[295,1469,325],{"class":304},[295,1471,1472,1475,1477],{"class":297,"line":645},[295,1473,1474],{"class":300},"          DEPLOY_TOKEN",[295,1476,305],{"class":304},[295,1478,1479],{"class":308}," ${{ secrets.STAGING_DEPLOY_TOKEN }}\n",[295,1481,1482,1484,1486],{"class":297,"line":657},[295,1483,578],{"class":300},[295,1485,305],{"class":304},[295,1487,1489],{"class":1488},"sktmp"," |\n",[295,1491,1492],{"class":297,"line":667},[295,1493,1494],{"class":308},"          # デプロイコマンド（Vercel、Netlifyなど）\n",[295,1496,1497],{"class":297,"line":672},[295,1498,1499],{"class":308},"          pnpm run deploy:staging\n",[210,1501,1503],{"id":1502},"productionへの手動承認付きデプロイ","Productionへの手動承認付きデプロイ",[284,1505,1508],{"className":286,"code":1506,"language":288,"meta":1507,"style":290},"name: Deploy to Production\n\non:\n  push:\n    branches: [main]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    environment:\n      name: production\n      # GitHub Environmentで承認者を設定可能\n\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Setup Node.js\n        uses: actions\u002Fsetup-node@v4\n        with:\n          node-version: \"20\"\n          cache: \"pnpm\"\n\n      - name: Install pnpm\n        uses: pnpm\u002Faction-setup@v4\n        with:\n          version: 9\n\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Build\n        run: pnpm run build\n        env:\n          NODE_ENV: production\n\n      - name: Deploy to Production\n        env:\n          DEPLOY_TOKEN: ${{ secrets.PRODUCTION_DEPLOY_TOKEN }}\n        run: |\n          pnpm run deploy:production\n\n      - name: Notify deployment\n        if: success()\n        run: |\n          # デプロイ成功の通知（Slack、Discordなど）\n          echo \"Deployment successful\"\n",".github\u002Fworkflows\u002Fdeploy-production.yml",[292,1509,1510,1519,1523,1529,1535,1548,1552,1558,1564,1572,1578,1587,1592,1596,1602,1612,1616,1626,1634,1640,1652,1664,1668,1678,1686,1692,1700,1704,1714,1722,1726,1736,1744,1750,1758,1762,1772,1778,1787,1795,1800,1805,1817,1828,1837,1843],{"__ignoreMap":290},[295,1511,1512,1514,1516],{"class":297,"line":12},[295,1513,301],{"class":300},[295,1515,305],{"class":304},[295,1517,1518],{"class":308}," Deploy to Production\n",[295,1520,1521],{"class":297,"line":312},[295,1522,316],{"emptyLinePlaceholder":315},[295,1524,1525,1527],{"class":297,"line":158},[295,1526,322],{"class":321},[295,1528,325],{"class":304},[295,1530,1531,1533],{"class":297,"line":189},[295,1532,361],{"class":300},[295,1534,325],{"class":304},[295,1536,1537,1539,1541,1543,1546],{"class":297,"line":335},[295,1538,338],{"class":300},[295,1540,305],{"class":304},[295,1542,343],{"class":304},[295,1544,1545],{"class":308},"main",[295,1547,355],{"class":304},[295,1549,1550],{"class":297,"line":358},[295,1551,316],{"emptyLinePlaceholder":315},[295,1553,1554,1556],{"class":297,"line":366},[295,1555,391],{"class":300},[295,1557,325],{"class":304},[295,1559,1560,1562],{"class":297,"line":383},[295,1561,1260],{"class":300},[295,1563,325],{"class":304},[295,1565,1566,1568,1570],{"class":297,"line":388},[295,1567,407],{"class":300},[295,1569,305],{"class":304},[295,1571,412],{"class":308},[295,1573,1574,1576],{"class":297,"line":396},[295,1575,1275],{"class":300},[295,1577,325],{"class":304},[295,1579,1580,1583,1585],{"class":297,"line":404},[295,1581,1582],{"class":300},"      name",[295,1584,305],{"class":304},[295,1586,1449],{"class":308},[295,1588,1589],{"class":297,"line":415},[295,1590,1591],{"class":1067},"      # GitHub Environmentで承認者を設定可能\n",[295,1593,1594],{"class":297,"line":420},[295,1595,316],{"emptyLinePlaceholder":315},[295,1597,1598,1600],{"class":297,"line":428},[295,1599,423],{"class":300},[295,1601,325],{"class":304},[295,1603,1604,1606,1608,1610],{"class":297,"line":442},[295,1605,431],{"class":304},[295,1607,434],{"class":300},[295,1609,305],{"class":304},[295,1611,439],{"class":308},[295,1613,1614],{"class":297,"line":447},[295,1615,316],{"emptyLinePlaceholder":315},[295,1617,1618,1620,1622,1624],{"class":297,"line":460},[295,1619,431],{"class":304},[295,1621,452],{"class":300},[295,1623,305],{"class":304},[295,1625,457],{"class":308},[295,1627,1628,1630,1632],{"class":297,"line":471},[295,1629,463],{"class":300},[295,1631,305],{"class":304},[295,1633,468],{"class":308},[295,1635,1636,1638],{"class":297,"line":479},[295,1637,474],{"class":300},[295,1639,325],{"class":304},[295,1641,1642,1644,1646,1648,1650],{"class":297,"line":497},[295,1643,482],{"class":300},[295,1645,305],{"class":304},[295,1647,488],{"class":487},[295,1649,491],{"class":308},[295,1651,494],{"class":487},[295,1653,1654,1656,1658,1660,1662],{"class":297,"line":512},[295,1655,500],{"class":300},[295,1657,305],{"class":304},[295,1659,488],{"class":487},[295,1661,507],{"class":308},[295,1663,494],{"class":487},[295,1665,1666],{"class":297,"line":517},[295,1667,316],{"emptyLinePlaceholder":315},[295,1669,1670,1672,1674,1676],{"class":297,"line":529},[295,1671,431],{"class":304},[295,1673,452],{"class":300},[295,1675,305],{"class":304},[295,1677,526],{"class":308},[295,1679,1680,1682,1684],{"class":297,"line":539},[295,1681,463],{"class":300},[295,1683,305],{"class":304},[295,1685,536],{"class":308},[295,1687,1688,1690],{"class":297,"line":546},[295,1689,474],{"class":300},[295,1691,325],{"class":304},[295,1693,1694,1696,1698],{"class":297,"line":558},[295,1695,549],{"class":300},[295,1697,305],{"class":304},[295,1699,555],{"class":554},[295,1701,1702],{"class":297,"line":563},[295,1703,316],{"emptyLinePlaceholder":315},[295,1705,1706,1708,1710,1712],{"class":297,"line":575},[295,1707,431],{"class":304},[295,1709,452],{"class":300},[295,1711,305],{"class":304},[295,1713,572],{"class":308},[295,1715,1716,1718,1720],{"class":297,"line":586},[295,1717,578],{"class":300},[295,1719,305],{"class":304},[295,1721,583],{"class":308},[295,1723,1724],{"class":297,"line":591},[295,1725,316],{"emptyLinePlaceholder":315},[295,1727,1728,1730,1732,1734],{"class":297,"line":603},[295,1729,431],{"class":304},[295,1731,452],{"class":300},[295,1733,305],{"class":304},[295,1735,681],{"class":308},[295,1737,1738,1740,1742],{"class":297,"line":613},[295,1739,578],{"class":300},[295,1741,305],{"class":304},[295,1743,691],{"class":308},[295,1745,1746,1748],{"class":297,"line":618},[295,1747,1437],{"class":300},[295,1749,325],{"class":304},[295,1751,1752,1754,1756],{"class":297,"line":630},[295,1753,1444],{"class":300},[295,1755,305],{"class":304},[295,1757,1449],{"class":308},[295,1759,1760],{"class":297,"line":640},[295,1761,316],{"emptyLinePlaceholder":315},[295,1763,1764,1766,1768,1770],{"class":297,"line":645},[295,1765,431],{"class":304},[295,1767,452],{"class":300},[295,1769,305],{"class":304},[295,1771,1518],{"class":308},[295,1773,1774,1776],{"class":297,"line":657},[295,1775,1437],{"class":300},[295,1777,325],{"class":304},[295,1779,1780,1782,1784],{"class":297,"line":667},[295,1781,1474],{"class":300},[295,1783,305],{"class":304},[295,1785,1786],{"class":308}," ${{ secrets.PRODUCTION_DEPLOY_TOKEN }}\n",[295,1788,1789,1791,1793],{"class":297,"line":672},[295,1790,578],{"class":300},[295,1792,305],{"class":304},[295,1794,1489],{"class":1488},[295,1796,1797],{"class":297,"line":684},[295,1798,1799],{"class":308},"          pnpm run deploy:production\n",[295,1801,1803],{"class":297,"line":1802},41,[295,1804,316],{"emptyLinePlaceholder":315},[295,1806,1808,1810,1812,1814],{"class":297,"line":1807},42,[295,1809,431],{"class":304},[295,1811,452],{"class":300},[295,1813,305],{"class":304},[295,1815,1816],{"class":308}," Notify deployment\n",[295,1818,1820,1823,1825],{"class":297,"line":1819},43,[295,1821,1822],{"class":300},"        if",[295,1824,305],{"class":304},[295,1826,1827],{"class":308}," success()\n",[295,1829,1831,1833,1835],{"class":297,"line":1830},44,[295,1832,578],{"class":300},[295,1834,305],{"class":304},[295,1836,1489],{"class":1488},[295,1838,1840],{"class":297,"line":1839},45,[295,1841,1842],{"class":308},"          # デプロイ成功の通知（Slack、Discordなど）\n",[295,1844,1846],{"class":297,"line":1845},46,[295,1847,1848],{"class":308},"          echo \"Deployment successful\"\n",[1850,1851,1852,1858],"tip",{},[201,1853,1854,1855],{},"GitHub Environmentsの活用",[1856,1857],"br",{},[201,1859,1860],{},"GitHub Environmentsを使用すると、環境ごとにSecretsを分離でき、承認フローも設定できます。\n本番デプロイには必ず承認フローを設定することを推奨します。",[205,1862,1863],{"id":1863},"デプロイ時の注意事項",[214,1865,1866,1872,1878,1884],{},[217,1867,1868,1871],{},[220,1869,1870],{},"ダウンタイムの最小化",": ゼロダウンタイムデプロイを目指す",[217,1873,1874,1877],{},[220,1875,1876],{},"ロールバック可能性",": 問題発生時に即座に戻せる仕組み",[217,1879,1880,1883],{},[220,1881,1882],{},"デプロイ前のヘルスチェック",": CIの成功を確認",[217,1885,1886,1889],{},[220,1887,1888],{},"デプロイ後のヘルスチェック",": 正常に動作しているか確認",[196,1891,1892],{"id":1892},"ロールバック",[201,1894,1895],{},"デプロイ後に問題が発生した場合、迅速にロールバックできる体制を整えます。",[205,1897,1898],{"id":1898},"ロールバックの方法",[210,1900,1902],{"id":1901},"_1-git-revert-によるロールバック","1. Git revert によるロールバック",[284,1904,1908],{"className":1905,"code":1906,"language":1907,"meta":290,"style":290},"language-sh shiki shiki-themes github-light material-theme material-theme-palenight","# 問題のあるコミットを打ち消すコミットを作成\ngit revert \u003Ccommit-hash>\ngit push origin main\n\n# 自動的に前のバージョンへデプロイ\n","sh",[292,1909,1910,1915,1920,1925,1929],{"__ignoreMap":290},[295,1911,1912],{"class":297,"line":12},[295,1913,1914],{},"# 問題のあるコミットを打ち消すコミットを作成\n",[295,1916,1917],{"class":297,"line":312},[295,1918,1919],{},"git revert \u003Ccommit-hash>\n",[295,1921,1922],{"class":297,"line":158},[295,1923,1924],{},"git push origin main\n",[295,1926,1927],{"class":297,"line":189},[295,1928,316],{"emptyLinePlaceholder":315},[295,1930,1931],{"class":297,"line":335},[295,1932,1933],{},"# 自動的に前のバージョンへデプロイ\n",[210,1935,1937],{"id":1936},"_2-プラットフォームの機能を使用","2. プラットフォームの機能を使用",[214,1939,1940,1946,1952],{},[217,1941,1942,1945],{},[220,1943,1944],{},"Vercel",": ダッシュボードから以前のデプロイに戻す",[217,1947,1948,1951],{},[220,1949,1950],{},"Netlify",": デプロイ履歴から以前のバージョンを選択",[217,1953,1954,1957],{},[220,1955,1956],{},"AWS\u002FGCP",": インフラの管理コンソールから巻き戻し",[985,1959,1960,1963],{},[201,1961,1962],{},"ロールバックの準備",[201,1964,1965],{},"ロールバック手順は、デプロイ前に必ず確認しておいてください。\n緊急時にスムーズに対応できるよう、ドキュメント化しておくことを推奨します。",[205,1967,1968],{"id":1968},"ロールバックのテスト",[201,1970,1971],{},"ロールバック手順をテストし、実際に機能することを確認します。",[284,1973,1976],{"className":286,"code":1974,"language":288,"meta":1975,"style":290},"name: Rollback Test (Manual)\n\non:\n  workflow_dispatch:\n    inputs:\n      environment:\n        description: \"Environment to rollback\"\n        required: true\n        type: choice\n        options:\n          - staging\n          - production\n\njobs:\n  rollback:\n    runs-on: ubuntu-latest\n    environment: ${{ inputs.environment }}\n\n    steps:\n      - uses: actions\u002Fcheckout@v4\n        with:\n          fetch-depth: 2 # 直前のコミットも取得\n\n      - name: Rollback to previous commit\n        run: |\n          git revert HEAD --no-edit\n          git push origin main\n",".github\u002Fworkflows\u002Frollback-test.yml",[292,1977,1978,1987,1991,1997,2004,2011,2018,2032,2042,2052,2059,2066,2072,2076,2082,2089,2097,2106,2110,2116,2126,2132,2145,2149,2160,2168,2173],{"__ignoreMap":290},[295,1979,1980,1982,1984],{"class":297,"line":12},[295,1981,301],{"class":300},[295,1983,305],{"class":304},[295,1985,1986],{"class":308}," Rollback Test (Manual)\n",[295,1988,1989],{"class":297,"line":312},[295,1990,316],{"emptyLinePlaceholder":315},[295,1992,1993,1995],{"class":297,"line":158},[295,1994,322],{"class":321},[295,1996,325],{"class":304},[295,1998,1999,2002],{"class":297,"line":189},[295,2000,2001],{"class":300},"  workflow_dispatch",[295,2003,325],{"class":304},[295,2005,2006,2009],{"class":297,"line":335},[295,2007,2008],{"class":300},"    inputs",[295,2010,325],{"class":304},[295,2012,2013,2016],{"class":297,"line":358},[295,2014,2015],{"class":300},"      environment",[295,2017,325],{"class":304},[295,2019,2020,2023,2025,2027,2030],{"class":297,"line":366},[295,2021,2022],{"class":300},"        description",[295,2024,305],{"class":304},[295,2026,488],{"class":487},[295,2028,2029],{"class":308},"Environment to rollback",[295,2031,494],{"class":487},[295,2033,2034,2037,2039],{"class":297,"line":383},[295,2035,2036],{"class":300},"        required",[295,2038,305],{"class":304},[295,2040,2041],{"class":321}," true\n",[295,2043,2044,2047,2049],{"class":297,"line":388},[295,2045,2046],{"class":300},"        type",[295,2048,305],{"class":304},[295,2050,2051],{"class":308}," choice\n",[295,2053,2054,2057],{"class":297,"line":396},[295,2055,2056],{"class":300},"        options",[295,2058,325],{"class":304},[295,2060,2061,2064],{"class":297,"line":404},[295,2062,2063],{"class":304},"          -",[295,2065,1280],{"class":308},[295,2067,2068,2070],{"class":297,"line":415},[295,2069,2063],{"class":304},[295,2071,1449],{"class":308},[295,2073,2074],{"class":297,"line":420},[295,2075,316],{"emptyLinePlaceholder":315},[295,2077,2078,2080],{"class":297,"line":428},[295,2079,391],{"class":300},[295,2081,325],{"class":304},[295,2083,2084,2087],{"class":297,"line":442},[295,2085,2086],{"class":300},"  rollback",[295,2088,325],{"class":304},[295,2090,2091,2093,2095],{"class":297,"line":447},[295,2092,407],{"class":300},[295,2094,305],{"class":304},[295,2096,412],{"class":308},[295,2098,2099,2101,2103],{"class":297,"line":460},[295,2100,1275],{"class":300},[295,2102,305],{"class":304},[295,2104,2105],{"class":308}," ${{ inputs.environment }}\n",[295,2107,2108],{"class":297,"line":471},[295,2109,316],{"emptyLinePlaceholder":315},[295,2111,2112,2114],{"class":297,"line":479},[295,2113,423],{"class":300},[295,2115,325],{"class":304},[295,2117,2118,2120,2122,2124],{"class":297,"line":497},[295,2119,431],{"class":304},[295,2121,434],{"class":300},[295,2123,305],{"class":304},[295,2125,439],{"class":308},[295,2127,2128,2130],{"class":297,"line":512},[295,2129,474],{"class":300},[295,2131,325],{"class":304},[295,2133,2134,2137,2139,2142],{"class":297,"line":517},[295,2135,2136],{"class":300},"          fetch-depth",[295,2138,305],{"class":304},[295,2140,2141],{"class":554}," 2",[295,2143,2144],{"class":1067}," # 直前のコミットも取得\n",[295,2146,2147],{"class":297,"line":529},[295,2148,316],{"emptyLinePlaceholder":315},[295,2150,2151,2153,2155,2157],{"class":297,"line":539},[295,2152,431],{"class":304},[295,2154,452],{"class":300},[295,2156,305],{"class":304},[295,2158,2159],{"class":308}," Rollback to previous commit\n",[295,2161,2162,2164,2166],{"class":297,"line":546},[295,2163,578],{"class":300},[295,2165,305],{"class":304},[295,2167,1489],{"class":1488},[295,2169,2170],{"class":297,"line":558},[295,2171,2172],{"class":308},"          git revert HEAD --no-edit\n",[295,2174,2175],{"class":297,"line":563},[295,2176,2177],{"class":308},"          git push origin main\n",[2179,2180,2181],"style",{},"html pre.shiki code .sF3G6, html code.shiki .sF3G6{--shiki-light:#22863A;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sN50r, html code.shiki .sN50r{--shiki-light:#24292E;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .scigg, html code.shiki .scigg{--shiki-light:#032F62;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s1f5w, html code.shiki .s1f5w{--shiki-light:#005CC5;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .ssQ5U, html code.shiki .ssQ5U{--shiki-light:#032F62;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s9owh, html code.shiki .s9owh{--shiki-light:#005CC5;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .su8Ar, html code.shiki .su8Ar{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sktmp, html code.shiki .sktmp{--shiki-light:#D73A49;--shiki-light-font-style:inherit;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":290,"searchDepth":312,"depth":312,"links":2183},[2184,2190,2195],{"id":198,"depth":312,"text":199,"children":2185},[2186,2187,2188,2189],{"id":207,"depth":158,"text":208},{"id":277,"depth":158,"text":278},{"id":963,"depth":158,"text":964},{"id":995,"depth":158,"text":996},{"id":1150,"depth":312,"text":1151,"children":2191},[2192,2193,2194],{"id":1157,"depth":158,"text":1157},{"id":1197,"depth":158,"text":1198},{"id":1863,"depth":158,"text":1863},{"id":1892,"depth":312,"text":1892,"children":2196},[2197,2198],{"id":1898,"depth":158,"text":1898},{"id":1968,"depth":158,"text":1968},"CI（テスト・Lint）とCD（デプロイ・ロールバック）の運用ガイドライン","md",null,{},{"title":164,"description":2199},"GCBKjjgJuriAQseGdvmIvcOUkskjdcVcDGvJ1DuWXXU",[2206,2208],{"title":160,"path":161,"stem":162,"description":2207,"children":-1},"ブランチ構成、運用フロー、命名規則、保護ルール設定",{"title":168,"path":169,"stem":170,"description":2209,"children":-1},"Conventional Commitsに準拠したコミットメッセージの書き方とタグ運用",1780099576343]