[{"data":1,"prerenderedAt":2909},["ShallowReactive",2],{"content-/lighthouse-ci-local-setup":3,"all-pages-for-dir":2888,"related-/lighthouse-ci-local-setup":2889,"og-image-/lighthouse-ci-local-setup":2908},{"id":4,"title":5,"body":6,"category":2873,"concepts":2873,"description":2874,"extension":2875,"meta":2876,"navigation":170,"ogImage":2873,"path":2877,"project_name":2873,"published":2878,"publishedAt":2879,"seo":2880,"source":2873,"stem":2881,"tags":2882,"todo":2873,"unpublished":2878,"updatedAt":2879,"__hash__":2887},"pages/2025-12/2025-12-04/lighthouse-ci-local-setup.md","Lighthouse CI ローカルセットアップガイド",{"type":7,"value":8,"toc":2833},"minimark",[9,13,17,21,25,55,58,74,77,80,96,99,117,120,123,126,145,187,193,201,205,287,290,293,296,387,390,393,501,505,659,663,667,680,686,702,705,754,758,765,768,898,901,1162,1165,1213,1216,1220,1223,1227,1515,1518,1533,1539,1543,1554,1558,1840,1843,1877,1881,1887,1893,1896,1915,1926,1930,1934,1940,1952,1955,1961,1965,1972,1979,1991,1994,1999,2050,2055,2086,2090,2093,2099,2102,2105,2109,2112,2116,2409,2411,2423,2429,2433,2436,2483,2487,2596,2600,2654,2661,2664,2667,2673,2737,2741,2744,2747,2750,2800,2803,2829],[10,11,5],"h1",{"id":12},"lighthouse-ci-ローカルセットアップガイド",[14,15,16],"p",{},"Lighthouse CIは、Lighthouseを継続的に実行し、結果の保存・取得・アサーションを簡単に行うためのツール群です。",[18,19,20],"h2",{"id":20},"インストール",[22,23,24],"h3",{"id":24},"グローバルインストール",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-bash shiki shiki-themes vitesse-light vitesse-light","npm install -g @lhci/cli\n","bash","",[33,34,35],"code",{"__ignoreMap":31},[36,37,40,44,48,52],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"senZ8","npm",[36,45,47],{"class":46},"sdGka"," install",[36,49,51],{"class":50},"snbK4"," -g",[36,53,54],{"class":46}," @lhci/cli\n",[14,56,57],{},"バージョンを指定する場合：",[26,59,61],{"className":28,"code":60,"language":30,"meta":31,"style":31},"npm install -g @lhci/cli@0.15.x\n",[33,62,63],{"__ignoreMap":31},[36,64,65,67,69,71],{"class":38,"line":39},[36,66,43],{"class":42},[36,68,47],{"class":46},[36,70,51],{"class":50},[36,72,73],{"class":46}," @lhci/cli@0.15.x\n",[22,75,76],{"id":76},"プロジェクトローカルインストール",[14,78,79],{},"プロジェクト内でのみ使用する場合：",[26,81,83],{"className":28,"code":82,"language":30,"meta":31,"style":31},"npm install --save-dev @lhci/cli\n",[33,84,85],{"__ignoreMap":31},[36,86,87,89,91,94],{"class":38,"line":39},[36,88,43],{"class":42},[36,90,47],{"class":46},[36,92,93],{"class":50}," --save-dev",[36,95,54],{"class":46},[14,97,98],{},"または pnpm の場合：",[26,100,102],{"className":28,"code":101,"language":30,"meta":31,"style":31},"pnpm add -D @lhci/cli\n",[33,103,104],{"__ignoreMap":31},[36,105,106,109,112,115],{"class":38,"line":39},[36,107,108],{"class":42},"pnpm",[36,110,111],{"class":46}," add",[36,113,114],{"class":50}," -D",[36,116,54],{"class":46},[18,118,119],{"id":119},"設定ファイルの作成",[14,121,122],{},"プロジェクトルートに設定ファイルを作成します。",[22,124,125],{"id":125},"ファイル拡張子の注意点",[14,127,128,132,133,136,137,140,141,144],{},[129,130,131],"strong",{},"重要",": ",[33,134,135],{},"package.json","に",[33,138,139],{},"\"type\": \"module\"","が設定されているプロジェクトでは、設定ファイルを",[33,142,143],{},".cjs","拡張子にする必要があります。",[26,146,148],{"className":28,"code":147,"language":30,"meta":31,"style":31},"# ESモジュールプロジェクトの場合\nlighthouserc.cjs  # ← .cjs を使用\n\n# CommonJSプロジェクトの場合\nlighthouserc.js   # ← .js でOK\n",[33,149,150,156,165,172,178],{"__ignoreMap":31},[36,151,152],{"class":38,"line":39},[36,153,155],{"class":154},"sxvE3","# ESモジュールプロジェクトの場合\n",[36,157,159,162],{"class":38,"line":158},2,[36,160,161],{"class":42},"lighthouserc.cjs",[36,163,164],{"class":154},"  # ← .cjs を使用\n",[36,166,168],{"class":38,"line":167},3,[36,169,171],{"emptyLinePlaceholder":170},true,"\n",[36,173,175],{"class":38,"line":174},4,[36,176,177],{"class":154},"# CommonJSプロジェクトの場合\n",[36,179,181,184],{"class":38,"line":180},5,[36,182,183],{"class":42},"lighthouserc.js",[36,185,186],{"class":154},"   # ← .js でOK\n",[14,188,189,192],{},[33,190,191],{},".js"," のまま実行すると以下のエラーが発生します：",[26,194,199],{"className":195,"code":197,"language":198},[196],"language-text","ReferenceError: module is not defined in ES module scope\nThis file is being treated as an ES module because it has a '.js' file extension\nand 'package.json' contains \"type\": \"module\".\nTo treat it as a CommonJS script, rename it to use the '.cjs' file extension.\n","text",[33,200,197],{"__ignoreMap":31},[22,202,204],{"id":203},"基本設定一時的なパブリックストレージを使用","基本設定（一時的なパブリックストレージを使用）",[26,206,210],{"className":207,"code":208,"language":209,"meta":31,"style":31},"language-javascript shiki shiki-themes vitesse-light vitesse-light","module.exports = {\n  ci: {\n    upload: {\n      target: 'temporary-public-storage',\n    },\n  },\n};\n","javascript",[33,211,212,231,241,250,270,275,281],{"__ignoreMap":31},[36,213,214,218,222,225,228],{"class":38,"line":39},[36,215,217],{"class":216},"sz8Xr","module",[36,219,221],{"class":220},"shFtX",".",[36,223,224],{"class":216},"exports",[36,226,227],{"class":220}," =",[36,229,230],{"class":220}," {\n",[36,232,233,236,239],{"class":38,"line":158},[36,234,235],{"class":216},"  ci",[36,237,238],{"class":220},":",[36,240,230],{"class":220},[36,242,243,246,248],{"class":38,"line":167},[36,244,245],{"class":216},"    upload",[36,247,238],{"class":220},[36,249,230],{"class":220},[36,251,252,255,257,261,264,267],{"class":38,"line":174},[36,253,254],{"class":216},"      target",[36,256,238],{"class":220},[36,258,260],{"class":259},"sMJiu"," '",[36,262,263],{"class":46},"temporary-public-storage",[36,265,266],{"class":259},"'",[36,268,269],{"class":220},",\n",[36,271,272],{"class":38,"line":180},[36,273,274],{"class":220},"    },\n",[36,276,278],{"class":38,"line":277},6,[36,279,280],{"class":220},"  },\n",[36,282,284],{"class":38,"line":283},7,[36,285,286],{"class":220},"};\n",[14,288,289],{},"レポートは7日間保存されます。",[22,291,292],{"id":292},"静的サイトの設定",[14,294,295],{},"ビルド済みの静的ファイルがある場合：",[26,297,299],{"className":207,"code":298,"language":209,"meta":31,"style":31},"module.exports = {\n  ci: {\n    collect: {\n      staticDistDir: './dist',\n    },\n    upload: {\n      target: 'temporary-public-storage',\n    },\n  },\n};\n",[33,300,301,313,321,330,346,350,358,372,377,382],{"__ignoreMap":31},[36,302,303,305,307,309,311],{"class":38,"line":39},[36,304,217],{"class":216},[36,306,221],{"class":220},[36,308,224],{"class":216},[36,310,227],{"class":220},[36,312,230],{"class":220},[36,314,315,317,319],{"class":38,"line":158},[36,316,235],{"class":216},[36,318,238],{"class":220},[36,320,230],{"class":220},[36,322,323,326,328],{"class":38,"line":167},[36,324,325],{"class":216},"    collect",[36,327,238],{"class":220},[36,329,230],{"class":220},[36,331,332,335,337,339,342,344],{"class":38,"line":174},[36,333,334],{"class":216},"      staticDistDir",[36,336,238],{"class":220},[36,338,260],{"class":259},[36,340,341],{"class":46},"./dist",[36,343,266],{"class":259},[36,345,269],{"class":220},[36,347,348],{"class":38,"line":180},[36,349,274],{"class":220},[36,351,352,354,356],{"class":38,"line":277},[36,353,245],{"class":216},[36,355,238],{"class":220},[36,357,230],{"class":220},[36,359,360,362,364,366,368,370],{"class":38,"line":283},[36,361,254],{"class":216},[36,363,238],{"class":220},[36,365,260],{"class":259},[36,367,263],{"class":46},[36,369,266],{"class":259},[36,371,269],{"class":220},[36,373,375],{"class":38,"line":374},8,[36,376,274],{"class":220},[36,378,380],{"class":38,"line":379},9,[36,381,280],{"class":220},[36,383,385],{"class":38,"line":384},10,[36,386,286],{"class":220},[22,388,389],{"id":389},"開発サーバーを使用する設定",[14,391,392],{},"Nuxt、Next.js などの開発サーバーを起動して測定する場合：",[26,394,396],{"className":207,"code":395,"language":209,"meta":31,"style":31},"module.exports = {\n  ci: {\n    collect: {\n      startServerCommand: 'npm run start',\n      url: ['http://localhost:3000/'],\n    },\n    upload: {\n      target: 'temporary-public-storage',\n    },\n  },\n};\n",[33,397,398,410,418,426,442,462,466,474,488,492,496],{"__ignoreMap":31},[36,399,400,402,404,406,408],{"class":38,"line":39},[36,401,217],{"class":216},[36,403,221],{"class":220},[36,405,224],{"class":216},[36,407,227],{"class":220},[36,409,230],{"class":220},[36,411,412,414,416],{"class":38,"line":158},[36,413,235],{"class":216},[36,415,238],{"class":220},[36,417,230],{"class":220},[36,419,420,422,424],{"class":38,"line":167},[36,421,325],{"class":216},[36,423,238],{"class":220},[36,425,230],{"class":220},[36,427,428,431,433,435,438,440],{"class":38,"line":174},[36,429,430],{"class":216},"      startServerCommand",[36,432,238],{"class":220},[36,434,260],{"class":259},[36,436,437],{"class":46},"npm run start",[36,439,266],{"class":259},[36,441,269],{"class":220},[36,443,444,447,449,452,454,457,459],{"class":38,"line":180},[36,445,446],{"class":216},"      url",[36,448,238],{"class":220},[36,450,451],{"class":220}," [",[36,453,266],{"class":259},[36,455,456],{"class":46},"http://localhost:3000/",[36,458,266],{"class":259},[36,460,461],{"class":220},"],\n",[36,463,464],{"class":38,"line":277},[36,465,274],{"class":220},[36,467,468,470,472],{"class":38,"line":283},[36,469,245],{"class":216},[36,471,238],{"class":220},[36,473,230],{"class":220},[36,475,476,478,480,482,484,486],{"class":38,"line":374},[36,477,254],{"class":216},[36,479,238],{"class":220},[36,481,260],{"class":259},[36,483,263],{"class":46},[36,485,266],{"class":259},[36,487,269],{"class":220},[36,489,490],{"class":38,"line":379},[36,491,274],{"class":220},[36,493,494],{"class":38,"line":384},[36,495,280],{"class":220},[36,497,499],{"class":38,"line":498},11,[36,500,286],{"class":220},[22,502,504],{"id":503},"複数urlを測定する設定","複数URLを測定する設定",[26,506,508],{"className":207,"code":507,"language":209,"meta":31,"style":31},"module.exports = {\n  ci: {\n    collect: {\n      startServerCommand: 'npm run start',\n      url: [\n        'http://localhost:3000/',\n        'http://localhost:3000/about',\n        'http://localhost:3000/blog',\n      ],\n      numberOfRuns: 3, // 各URLに対する実行回数（デフォルト: 3）\n    },\n    upload: {\n      target: 'temporary-public-storage',\n    },\n  },\n};\n",[33,509,510,522,530,538,552,561,572,583,594,599,616,620,629,644,649,654],{"__ignoreMap":31},[36,511,512,514,516,518,520],{"class":38,"line":39},[36,513,217],{"class":216},[36,515,221],{"class":220},[36,517,224],{"class":216},[36,519,227],{"class":220},[36,521,230],{"class":220},[36,523,524,526,528],{"class":38,"line":158},[36,525,235],{"class":216},[36,527,238],{"class":220},[36,529,230],{"class":220},[36,531,532,534,536],{"class":38,"line":167},[36,533,325],{"class":216},[36,535,238],{"class":220},[36,537,230],{"class":220},[36,539,540,542,544,546,548,550],{"class":38,"line":174},[36,541,430],{"class":216},[36,543,238],{"class":220},[36,545,260],{"class":259},[36,547,437],{"class":46},[36,549,266],{"class":259},[36,551,269],{"class":220},[36,553,554,556,558],{"class":38,"line":180},[36,555,446],{"class":216},[36,557,238],{"class":220},[36,559,560],{"class":220}," [\n",[36,562,563,566,568,570],{"class":38,"line":277},[36,564,565],{"class":259},"        '",[36,567,456],{"class":46},[36,569,266],{"class":259},[36,571,269],{"class":220},[36,573,574,576,579,581],{"class":38,"line":283},[36,575,565],{"class":259},[36,577,578],{"class":46},"http://localhost:3000/about",[36,580,266],{"class":259},[36,582,269],{"class":220},[36,584,585,587,590,592],{"class":38,"line":374},[36,586,565],{"class":259},[36,588,589],{"class":46},"http://localhost:3000/blog",[36,591,266],{"class":259},[36,593,269],{"class":220},[36,595,596],{"class":38,"line":379},[36,597,598],{"class":220},"      ],\n",[36,600,601,604,606,610,613],{"class":38,"line":384},[36,602,603],{"class":216},"      numberOfRuns",[36,605,238],{"class":220},[36,607,609],{"class":608},"sM54T"," 3",[36,611,612],{"class":220},",",[36,614,615],{"class":154}," // 各URLに対する実行回数（デフォルト: 3）\n",[36,617,618],{"class":38,"line":498},[36,619,274],{"class":220},[36,621,623,625,627],{"class":38,"line":622},12,[36,624,245],{"class":216},[36,626,238],{"class":220},[36,628,230],{"class":220},[36,630,632,634,636,638,640,642],{"class":38,"line":631},13,[36,633,254],{"class":216},[36,635,238],{"class":220},[36,637,260],{"class":259},[36,639,263],{"class":46},[36,641,266],{"class":259},[36,643,269],{"class":220},[36,645,647],{"class":38,"line":646},14,[36,648,274],{"class":220},[36,650,652],{"class":38,"line":651},15,[36,653,280],{"class":220},[36,655,657],{"class":38,"line":656},16,[36,658,286],{"class":220},[18,660,662],{"id":661},"lighthouse-ci-の実行","Lighthouse CI の実行",[22,664,666],{"id":665},"自動実行推奨","自動実行（推奨）",[26,668,670],{"className":28,"code":669,"language":30,"meta":31,"style":31},"lhci autorun\n",[33,671,672],{"__ignoreMap":31},[36,673,674,677],{"class":38,"line":39},[36,675,676],{"class":42},"lhci",[36,678,679],{"class":46}," autorun\n",[14,681,682,685],{},[33,683,684],{},"autorun"," は以下を自動的に実行します：",[687,688,689,693,696,699],"ol",{},[690,691,692],"li",{},"サーバーの起動（設定されている場合）",[690,694,695],{},"各URLに対してLighthouseを複数回実行",[690,697,698],{},"中央値のレポートを特定",[690,700,701],{},"レポートをアップロード",[22,703,704],{"id":704},"個別コマンドの実行",[26,706,708],{"className":28,"code":707,"language":30,"meta":31,"style":31},"# Lighthouseの実行のみ\nlhci collect\n\n# アサーションの実行\nlhci assert\n\n# レポートのアップロード\nlhci upload\n",[33,709,710,715,722,726,731,738,742,747],{"__ignoreMap":31},[36,711,712],{"class":38,"line":39},[36,713,714],{"class":154},"# Lighthouseの実行のみ\n",[36,716,717,719],{"class":38,"line":158},[36,718,676],{"class":42},[36,720,721],{"class":46}," collect\n",[36,723,724],{"class":38,"line":167},[36,725,171],{"emptyLinePlaceholder":170},[36,727,728],{"class":38,"line":174},[36,729,730],{"class":154},"# アサーションの実行\n",[36,732,733,735],{"class":38,"line":180},[36,734,676],{"class":42},[36,736,737],{"class":46}," assert\n",[36,739,740],{"class":38,"line":277},[36,741,171],{"emptyLinePlaceholder":170},[36,743,744],{"class":38,"line":283},[36,745,746],{"class":154},"# レポートのアップロード\n",[36,748,749,751],{"class":38,"line":374},[36,750,676],{"class":42},[36,752,753],{"class":46}," upload\n",[18,755,757],{"id":756},"アサーション品質チェックの設定","アサーション（品質チェック）の設定",[14,759,760,761,764],{},"ビルド時にパフォーマンス閾値をチェックするには、",[33,762,763],{},"assert"," セクションを追加します。",[22,766,767],{"id":767},"推奨プリセットを使用",[26,769,771],{"className":207,"code":770,"language":209,"meta":31,"style":31},"module.exports = {\n  ci: {\n    collect: {\n      startServerCommand: 'npm run start',\n      url: ['http://localhost:3000/'],\n    },\n    assert: {\n      preset: 'lighthouse:recommended',\n    },\n    upload: {\n      target: 'temporary-public-storage',\n    },\n  },\n};\n",[33,772,773,785,793,801,815,831,835,844,860,864,872,886,890,894],{"__ignoreMap":31},[36,774,775,777,779,781,783],{"class":38,"line":39},[36,776,217],{"class":216},[36,778,221],{"class":220},[36,780,224],{"class":216},[36,782,227],{"class":220},[36,784,230],{"class":220},[36,786,787,789,791],{"class":38,"line":158},[36,788,235],{"class":216},[36,790,238],{"class":220},[36,792,230],{"class":220},[36,794,795,797,799],{"class":38,"line":167},[36,796,325],{"class":216},[36,798,238],{"class":220},[36,800,230],{"class":220},[36,802,803,805,807,809,811,813],{"class":38,"line":174},[36,804,430],{"class":216},[36,806,238],{"class":220},[36,808,260],{"class":259},[36,810,437],{"class":46},[36,812,266],{"class":259},[36,814,269],{"class":220},[36,816,817,819,821,823,825,827,829],{"class":38,"line":180},[36,818,446],{"class":216},[36,820,238],{"class":220},[36,822,451],{"class":220},[36,824,266],{"class":259},[36,826,456],{"class":46},[36,828,266],{"class":259},[36,830,461],{"class":220},[36,832,833],{"class":38,"line":277},[36,834,274],{"class":220},[36,836,837,840,842],{"class":38,"line":283},[36,838,839],{"class":216},"    assert",[36,841,238],{"class":220},[36,843,230],{"class":220},[36,845,846,849,851,853,856,858],{"class":38,"line":374},[36,847,848],{"class":216},"      preset",[36,850,238],{"class":220},[36,852,260],{"class":259},[36,854,855],{"class":46},"lighthouse:recommended",[36,857,266],{"class":259},[36,859,269],{"class":220},[36,861,862],{"class":38,"line":379},[36,863,274],{"class":220},[36,865,866,868,870],{"class":38,"line":384},[36,867,245],{"class":216},[36,869,238],{"class":220},[36,871,230],{"class":220},[36,873,874,876,878,880,882,884],{"class":38,"line":498},[36,875,254],{"class":216},[36,877,238],{"class":220},[36,879,260],{"class":259},[36,881,263],{"class":46},[36,883,266],{"class":259},[36,885,269],{"class":220},[36,887,888],{"class":38,"line":622},[36,889,274],{"class":220},[36,891,892],{"class":38,"line":631},[36,893,280],{"class":220},[36,895,896],{"class":38,"line":646},[36,897,286],{"class":220},[22,899,900],{"id":900},"カスタムアサーション",[26,902,904],{"className":207,"code":903,"language":209,"meta":31,"style":31},"module.exports = {\n  ci: {\n    collect: {\n      startServerCommand: 'npm run start',\n      url: ['http://localhost:3000/'],\n    },\n    assert: {\n      assertions: {\n        'categories:performance': ['warn', { minScore: 0.9 }],\n        'categories:accessibility': ['error', { minScore: 1 }],\n        'categories:best-practices': ['warn', { minScore: 0.9 }],\n        'categories:seo': ['warn', { minScore: 0.9 }],\n      },\n    },\n    upload: {\n      target: 'temporary-public-storage',\n    },\n  },\n};\n",[33,905,906,918,926,934,948,964,968,976,985,1021,1054,1085,1116,1121,1125,1133,1147,1152,1157],{"__ignoreMap":31},[36,907,908,910,912,914,916],{"class":38,"line":39},[36,909,217],{"class":216},[36,911,221],{"class":220},[36,913,224],{"class":216},[36,915,227],{"class":220},[36,917,230],{"class":220},[36,919,920,922,924],{"class":38,"line":158},[36,921,235],{"class":216},[36,923,238],{"class":220},[36,925,230],{"class":220},[36,927,928,930,932],{"class":38,"line":167},[36,929,325],{"class":216},[36,931,238],{"class":220},[36,933,230],{"class":220},[36,935,936,938,940,942,944,946],{"class":38,"line":174},[36,937,430],{"class":216},[36,939,238],{"class":220},[36,941,260],{"class":259},[36,943,437],{"class":46},[36,945,266],{"class":259},[36,947,269],{"class":220},[36,949,950,952,954,956,958,960,962],{"class":38,"line":180},[36,951,446],{"class":216},[36,953,238],{"class":220},[36,955,451],{"class":220},[36,957,266],{"class":259},[36,959,456],{"class":46},[36,961,266],{"class":259},[36,963,461],{"class":220},[36,965,966],{"class":38,"line":277},[36,967,274],{"class":220},[36,969,970,972,974],{"class":38,"line":283},[36,971,839],{"class":216},[36,973,238],{"class":220},[36,975,230],{"class":220},[36,977,978,981,983],{"class":38,"line":374},[36,979,980],{"class":216},"      assertions",[36,982,238],{"class":220},[36,984,230],{"class":220},[36,986,987,989,992,994,996,998,1000,1003,1005,1007,1010,1013,1015,1018],{"class":38,"line":379},[36,988,565],{"class":259},[36,990,991],{"class":46},"categories:performance",[36,993,266],{"class":259},[36,995,238],{"class":220},[36,997,451],{"class":220},[36,999,266],{"class":259},[36,1001,1002],{"class":46},"warn",[36,1004,266],{"class":259},[36,1006,612],{"class":220},[36,1008,1009],{"class":220}," {",[36,1011,1012],{"class":216}," minScore",[36,1014,238],{"class":220},[36,1016,1017],{"class":608}," 0.9",[36,1019,1020],{"class":220}," }],\n",[36,1022,1023,1025,1028,1030,1032,1034,1036,1039,1041,1043,1045,1047,1049,1052],{"class":38,"line":384},[36,1024,565],{"class":259},[36,1026,1027],{"class":46},"categories:accessibility",[36,1029,266],{"class":259},[36,1031,238],{"class":220},[36,1033,451],{"class":220},[36,1035,266],{"class":259},[36,1037,1038],{"class":46},"error",[36,1040,266],{"class":259},[36,1042,612],{"class":220},[36,1044,1009],{"class":220},[36,1046,1012],{"class":216},[36,1048,238],{"class":220},[36,1050,1051],{"class":608}," 1",[36,1053,1020],{"class":220},[36,1055,1056,1058,1061,1063,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083],{"class":38,"line":498},[36,1057,565],{"class":259},[36,1059,1060],{"class":46},"categories:best-practices",[36,1062,266],{"class":259},[36,1064,238],{"class":220},[36,1066,451],{"class":220},[36,1068,266],{"class":259},[36,1070,1002],{"class":46},[36,1072,266],{"class":259},[36,1074,612],{"class":220},[36,1076,1009],{"class":220},[36,1078,1012],{"class":216},[36,1080,238],{"class":220},[36,1082,1017],{"class":608},[36,1084,1020],{"class":220},[36,1086,1087,1089,1092,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114],{"class":38,"line":622},[36,1088,565],{"class":259},[36,1090,1091],{"class":46},"categories:seo",[36,1093,266],{"class":259},[36,1095,238],{"class":220},[36,1097,451],{"class":220},[36,1099,266],{"class":259},[36,1101,1002],{"class":46},[36,1103,266],{"class":259},[36,1105,612],{"class":220},[36,1107,1009],{"class":220},[36,1109,1012],{"class":216},[36,1111,238],{"class":220},[36,1113,1017],{"class":608},[36,1115,1020],{"class":220},[36,1117,1118],{"class":38,"line":631},[36,1119,1120],{"class":220},"      },\n",[36,1122,1123],{"class":38,"line":646},[36,1124,274],{"class":220},[36,1126,1127,1129,1131],{"class":38,"line":651},[36,1128,245],{"class":216},[36,1130,238],{"class":220},[36,1132,230],{"class":220},[36,1134,1135,1137,1139,1141,1143,1145],{"class":38,"line":656},[36,1136,254],{"class":216},[36,1138,238],{"class":220},[36,1140,260],{"class":259},[36,1142,263],{"class":46},[36,1144,266],{"class":259},[36,1146,269],{"class":220},[36,1148,1150],{"class":38,"line":1149},17,[36,1151,274],{"class":220},[36,1153,1155],{"class":38,"line":1154},18,[36,1156,280],{"class":220},[36,1158,1160],{"class":38,"line":1159},19,[36,1161,286],{"class":220},[22,1163,1164],{"id":1164},"アサーションレベル",[1166,1167,1168,1181],"table",{},[1169,1170,1171],"thead",{},[1172,1173,1174,1178],"tr",{},[1175,1176,1177],"th",{},"レベル",[1175,1179,1180],{},"動作",[1182,1183,1184,1195,1204],"tbody",{},[1172,1185,1186,1192],{},[1187,1188,1189],"td",{},[33,1190,1191],{},"off",[1187,1193,1194],{},"失敗を無視",[1172,1196,1197,1201],{},[1187,1198,1199],{},[33,1200,1002],{},[1187,1202,1203],{},"標準エラー出力に警告をログ",[1172,1205,1206,1210],{},[1187,1207,1208],{},[33,1209,1038],{},[1187,1211,1212],{},"非ゼロの終了コードでビルドを失敗させる",[18,1214,1215],{"id":1215},"ローカルでの実行例",[22,1217,1219],{"id":1218},"_1-開発サーバーを使用する方法推奨","1. 開発サーバーを使用する方法（推奨）",[14,1221,1222],{},"最もシンプルな方法です。開発サーバーに対してLighthouseを実行します。",[14,1224,1225,238],{},[33,1226,161],{},[26,1228,1230],{"className":207,"code":1229,"language":209,"meta":31,"style":31},"module.exports = {\n  ci: {\n    collect: {\n      startServerCommand: 'pnpm dev',\n      startServerReadyPattern: 'Local:',\n      startServerReadyTimeout: 60000,\n      url: ['http://localhost:3000/'],\n      numberOfRuns: 3,\n    },\n    assert: {\n      assertions: {\n        'categories:performance': ['warn', { minScore: 0.8 }],\n        'categories:accessibility': ['warn', { minScore: 0.9 }],\n        'categories:best-practices': ['warn', { minScore: 0.9 }],\n        'categories:seo': ['warn', { minScore: 0.9 }],\n      },\n    },\n    upload: {\n      target: 'temporary-public-storage',\n    },\n  },\n};\n",[33,1231,1232,1244,1252,1260,1275,1291,1303,1319,1329,1333,1341,1349,1380,1410,1440,1470,1474,1478,1486,1500,1505,1510],{"__ignoreMap":31},[36,1233,1234,1236,1238,1240,1242],{"class":38,"line":39},[36,1235,217],{"class":216},[36,1237,221],{"class":220},[36,1239,224],{"class":216},[36,1241,227],{"class":220},[36,1243,230],{"class":220},[36,1245,1246,1248,1250],{"class":38,"line":158},[36,1247,235],{"class":216},[36,1249,238],{"class":220},[36,1251,230],{"class":220},[36,1253,1254,1256,1258],{"class":38,"line":167},[36,1255,325],{"class":216},[36,1257,238],{"class":220},[36,1259,230],{"class":220},[36,1261,1262,1264,1266,1268,1271,1273],{"class":38,"line":174},[36,1263,430],{"class":216},[36,1265,238],{"class":220},[36,1267,260],{"class":259},[36,1269,1270],{"class":46},"pnpm dev",[36,1272,266],{"class":259},[36,1274,269],{"class":220},[36,1276,1277,1280,1282,1284,1287,1289],{"class":38,"line":180},[36,1278,1279],{"class":216},"      startServerReadyPattern",[36,1281,238],{"class":220},[36,1283,260],{"class":259},[36,1285,1286],{"class":46},"Local:",[36,1288,266],{"class":259},[36,1290,269],{"class":220},[36,1292,1293,1296,1298,1301],{"class":38,"line":277},[36,1294,1295],{"class":216},"      startServerReadyTimeout",[36,1297,238],{"class":220},[36,1299,1300],{"class":608}," 60000",[36,1302,269],{"class":220},[36,1304,1305,1307,1309,1311,1313,1315,1317],{"class":38,"line":283},[36,1306,446],{"class":216},[36,1308,238],{"class":220},[36,1310,451],{"class":220},[36,1312,266],{"class":259},[36,1314,456],{"class":46},[36,1316,266],{"class":259},[36,1318,461],{"class":220},[36,1320,1321,1323,1325,1327],{"class":38,"line":374},[36,1322,603],{"class":216},[36,1324,238],{"class":220},[36,1326,609],{"class":608},[36,1328,269],{"class":220},[36,1330,1331],{"class":38,"line":379},[36,1332,274],{"class":220},[36,1334,1335,1337,1339],{"class":38,"line":384},[36,1336,839],{"class":216},[36,1338,238],{"class":220},[36,1340,230],{"class":220},[36,1342,1343,1345,1347],{"class":38,"line":498},[36,1344,980],{"class":216},[36,1346,238],{"class":220},[36,1348,230],{"class":220},[36,1350,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1378],{"class":38,"line":622},[36,1352,565],{"class":259},[36,1354,991],{"class":46},[36,1356,266],{"class":259},[36,1358,238],{"class":220},[36,1360,451],{"class":220},[36,1362,266],{"class":259},[36,1364,1002],{"class":46},[36,1366,266],{"class":259},[36,1368,612],{"class":220},[36,1370,1009],{"class":220},[36,1372,1012],{"class":216},[36,1374,238],{"class":220},[36,1376,1377],{"class":608}," 0.8",[36,1379,1020],{"class":220},[36,1381,1382,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408],{"class":38,"line":631},[36,1383,565],{"class":259},[36,1385,1027],{"class":46},[36,1387,266],{"class":259},[36,1389,238],{"class":220},[36,1391,451],{"class":220},[36,1393,266],{"class":259},[36,1395,1002],{"class":46},[36,1397,266],{"class":259},[36,1399,612],{"class":220},[36,1401,1009],{"class":220},[36,1403,1012],{"class":216},[36,1405,238],{"class":220},[36,1407,1017],{"class":608},[36,1409,1020],{"class":220},[36,1411,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436,1438],{"class":38,"line":646},[36,1413,565],{"class":259},[36,1415,1060],{"class":46},[36,1417,266],{"class":259},[36,1419,238],{"class":220},[36,1421,451],{"class":220},[36,1423,266],{"class":259},[36,1425,1002],{"class":46},[36,1427,266],{"class":259},[36,1429,612],{"class":220},[36,1431,1009],{"class":220},[36,1433,1012],{"class":216},[36,1435,238],{"class":220},[36,1437,1017],{"class":608},[36,1439,1020],{"class":220},[36,1441,1442,1444,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468],{"class":38,"line":651},[36,1443,565],{"class":259},[36,1445,1091],{"class":46},[36,1447,266],{"class":259},[36,1449,238],{"class":220},[36,1451,451],{"class":220},[36,1453,266],{"class":259},[36,1455,1002],{"class":46},[36,1457,266],{"class":259},[36,1459,612],{"class":220},[36,1461,1009],{"class":220},[36,1463,1012],{"class":216},[36,1465,238],{"class":220},[36,1467,1017],{"class":608},[36,1469,1020],{"class":220},[36,1471,1472],{"class":38,"line":656},[36,1473,1120],{"class":220},[36,1475,1476],{"class":38,"line":1149},[36,1477,274],{"class":220},[36,1479,1480,1482,1484],{"class":38,"line":1154},[36,1481,245],{"class":216},[36,1483,238],{"class":220},[36,1485,230],{"class":220},[36,1487,1488,1490,1492,1494,1496,1498],{"class":38,"line":1159},[36,1489,254],{"class":216},[36,1491,238],{"class":220},[36,1493,260],{"class":259},[36,1495,263],{"class":46},[36,1497,266],{"class":259},[36,1499,269],{"class":220},[36,1501,1503],{"class":38,"line":1502},20,[36,1504,274],{"class":220},[36,1506,1508],{"class":38,"line":1507},21,[36,1509,280],{"class":220},[36,1511,1513],{"class":38,"line":1512},22,[36,1514,286],{"class":220},[14,1516,1517],{},"実行：",[26,1519,1521],{"className":28,"code":1520,"language":30,"meta":31,"style":31},"npx lhci autorun\n",[33,1522,1523],{"__ignoreMap":31},[36,1524,1525,1528,1531],{"class":38,"line":39},[36,1526,1527],{"class":42},"npx",[36,1529,1530],{"class":46}," lhci",[36,1532,679],{"class":46},[14,1534,1535,1538],{},[129,1536,1537],{},"注意",": 開発サーバーでの測定は本番環境より低いスコアになることがあります。",[22,1540,1542],{"id":1541},"_2-cloudflare-pages-プロジェクトの場合wrangler使用","2. Cloudflare Pages プロジェクトの場合（wrangler使用）",[14,1544,1545,1546,1549,1550,1553],{},"Nitroプリセットが ",[33,1547,1548],{},"cloudflare-pages"," の場合、",[33,1551,1552],{},"pnpm preview"," は内部で wrangler を起動します。この場合、wrangler を直接使用する方法が確実です。",[14,1555,1556,238],{},[33,1557,161],{},[26,1559,1561],{"className":207,"code":1560,"language":209,"meta":31,"style":31},"module.exports = {\n  ci: {\n    collect: {\n      startServerCommand: 'npx wrangler pages dev dist --port 8788',\n      startServerReadyPattern: 'Ready on',\n      startServerReadyTimeout: 60000,\n      url: ['http://localhost:8788/'],\n      numberOfRuns: 3,\n    },\n    assert: {\n      assertions: {\n        'categories:performance': ['warn', { minScore: 0.8 }],\n        'categories:accessibility': ['warn', { minScore: 0.9 }],\n        'categories:best-practices': ['warn', { minScore: 0.9 }],\n        'categories:seo': ['warn', { minScore: 0.9 }],\n      },\n    },\n    upload: {\n      target: 'temporary-public-storage',\n    },\n  },\n};\n",[33,1562,1563,1575,1583,1591,1606,1621,1631,1648,1658,1662,1670,1678,1708,1738,1768,1798,1802,1806,1814,1828,1832,1836],{"__ignoreMap":31},[36,1564,1565,1567,1569,1571,1573],{"class":38,"line":39},[36,1566,217],{"class":216},[36,1568,221],{"class":220},[36,1570,224],{"class":216},[36,1572,227],{"class":220},[36,1574,230],{"class":220},[36,1576,1577,1579,1581],{"class":38,"line":158},[36,1578,235],{"class":216},[36,1580,238],{"class":220},[36,1582,230],{"class":220},[36,1584,1585,1587,1589],{"class":38,"line":167},[36,1586,325],{"class":216},[36,1588,238],{"class":220},[36,1590,230],{"class":220},[36,1592,1593,1595,1597,1599,1602,1604],{"class":38,"line":174},[36,1594,430],{"class":216},[36,1596,238],{"class":220},[36,1598,260],{"class":259},[36,1600,1601],{"class":46},"npx wrangler pages dev dist --port 8788",[36,1603,266],{"class":259},[36,1605,269],{"class":220},[36,1607,1608,1610,1612,1614,1617,1619],{"class":38,"line":180},[36,1609,1279],{"class":216},[36,1611,238],{"class":220},[36,1613,260],{"class":259},[36,1615,1616],{"class":46},"Ready on",[36,1618,266],{"class":259},[36,1620,269],{"class":220},[36,1622,1623,1625,1627,1629],{"class":38,"line":277},[36,1624,1295],{"class":216},[36,1626,238],{"class":220},[36,1628,1300],{"class":608},[36,1630,269],{"class":220},[36,1632,1633,1635,1637,1639,1641,1644,1646],{"class":38,"line":283},[36,1634,446],{"class":216},[36,1636,238],{"class":220},[36,1638,451],{"class":220},[36,1640,266],{"class":259},[36,1642,1643],{"class":46},"http://localhost:8788/",[36,1645,266],{"class":259},[36,1647,461],{"class":220},[36,1649,1650,1652,1654,1656],{"class":38,"line":374},[36,1651,603],{"class":216},[36,1653,238],{"class":220},[36,1655,609],{"class":608},[36,1657,269],{"class":220},[36,1659,1660],{"class":38,"line":379},[36,1661,274],{"class":220},[36,1663,1664,1666,1668],{"class":38,"line":384},[36,1665,839],{"class":216},[36,1667,238],{"class":220},[36,1669,230],{"class":220},[36,1671,1672,1674,1676],{"class":38,"line":498},[36,1673,980],{"class":216},[36,1675,238],{"class":220},[36,1677,230],{"class":220},[36,1679,1680,1682,1684,1686,1688,1690,1692,1694,1696,1698,1700,1702,1704,1706],{"class":38,"line":622},[36,1681,565],{"class":259},[36,1683,991],{"class":46},[36,1685,266],{"class":259},[36,1687,238],{"class":220},[36,1689,451],{"class":220},[36,1691,266],{"class":259},[36,1693,1002],{"class":46},[36,1695,266],{"class":259},[36,1697,612],{"class":220},[36,1699,1009],{"class":220},[36,1701,1012],{"class":216},[36,1703,238],{"class":220},[36,1705,1377],{"class":608},[36,1707,1020],{"class":220},[36,1709,1710,1712,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732,1734,1736],{"class":38,"line":631},[36,1711,565],{"class":259},[36,1713,1027],{"class":46},[36,1715,266],{"class":259},[36,1717,238],{"class":220},[36,1719,451],{"class":220},[36,1721,266],{"class":259},[36,1723,1002],{"class":46},[36,1725,266],{"class":259},[36,1727,612],{"class":220},[36,1729,1009],{"class":220},[36,1731,1012],{"class":216},[36,1733,238],{"class":220},[36,1735,1017],{"class":608},[36,1737,1020],{"class":220},[36,1739,1740,1742,1744,1746,1748,1750,1752,1754,1756,1758,1760,1762,1764,1766],{"class":38,"line":646},[36,1741,565],{"class":259},[36,1743,1060],{"class":46},[36,1745,266],{"class":259},[36,1747,238],{"class":220},[36,1749,451],{"class":220},[36,1751,266],{"class":259},[36,1753,1002],{"class":46},[36,1755,266],{"class":259},[36,1757,612],{"class":220},[36,1759,1009],{"class":220},[36,1761,1012],{"class":216},[36,1763,238],{"class":220},[36,1765,1017],{"class":608},[36,1767,1020],{"class":220},[36,1769,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788,1790,1792,1794,1796],{"class":38,"line":651},[36,1771,565],{"class":259},[36,1773,1091],{"class":46},[36,1775,266],{"class":259},[36,1777,238],{"class":220},[36,1779,451],{"class":220},[36,1781,266],{"class":259},[36,1783,1002],{"class":46},[36,1785,266],{"class":259},[36,1787,612],{"class":220},[36,1789,1009],{"class":220},[36,1791,1012],{"class":216},[36,1793,238],{"class":220},[36,1795,1017],{"class":608},[36,1797,1020],{"class":220},[36,1799,1800],{"class":38,"line":656},[36,1801,1120],{"class":220},[36,1803,1804],{"class":38,"line":1149},[36,1805,274],{"class":220},[36,1807,1808,1810,1812],{"class":38,"line":1154},[36,1809,245],{"class":216},[36,1811,238],{"class":220},[36,1813,230],{"class":220},[36,1815,1816,1818,1820,1822,1824,1826],{"class":38,"line":1159},[36,1817,254],{"class":216},[36,1819,238],{"class":220},[36,1821,260],{"class":259},[36,1823,263],{"class":46},[36,1825,266],{"class":259},[36,1827,269],{"class":220},[36,1829,1830],{"class":38,"line":1502},[36,1831,274],{"class":220},[36,1833,1834],{"class":38,"line":1507},[36,1835,280],{"class":220},[36,1837,1838],{"class":38,"line":1512},[36,1839,286],{"class":220},[14,1841,1842],{},"実行手順：",[26,1844,1846],{"className":28,"code":1845,"language":30,"meta":31,"style":31},"# 先にビルド\npnpm build\n\n# Lighthouse CI 実行\nnpx lhci autorun\n",[33,1847,1848,1853,1860,1864,1869],{"__ignoreMap":31},[36,1849,1850],{"class":38,"line":39},[36,1851,1852],{"class":154},"# 先にビルド\n",[36,1854,1855,1857],{"class":38,"line":158},[36,1856,108],{"class":42},[36,1858,1859],{"class":46}," build\n",[36,1861,1862],{"class":38,"line":167},[36,1863,171],{"emptyLinePlaceholder":170},[36,1865,1866],{"class":38,"line":174},[36,1867,1868],{"class":154},"# Lighthouse CI 実行\n",[36,1870,1871,1873,1875],{"class":38,"line":180},[36,1872,1527],{"class":42},[36,1874,1530],{"class":46},[36,1876,679],{"class":46},[22,1878,1880],{"id":1879},"_3-pnpm-preview-が動かない場合","3. pnpm preview が動かない場合",[14,1882,1883,1884,1886],{},"Cloudflare Pages プリセットで ",[33,1885,1552],{}," を使うと、以下のようなエラーが発生することがあります：",[26,1888,1891],{"className":1889,"code":1890,"language":198},[196],"Error: Could not resolve \"worker_threads\"\nThe package \"worker_threads\" wasn't found on the file system but is built into node.\n- Add the \"nodejs_compat\" compatibility flag to your project.\n",[33,1892,1890],{"__ignoreMap":31},[14,1894,1895],{},"この場合は以下のいずれかで対処します：",[687,1897,1898,1904,1910],{},[690,1899,1900,1903],{},[129,1901,1902],{},"開発サーバーを使う","（上記「方法1」）",[690,1905,1906,1909],{},[129,1907,1908],{},"wrangler を直接使う","（上記「方法2」）",[690,1911,1912,238],{},[129,1913,1914],{},"wrangler.toml に compatibility_flags を追加",[26,1916,1920],{"className":1917,"code":1918,"language":1919,"meta":31,"style":31},"language-toml shiki shiki-themes vitesse-light vitesse-light","compatibility_flags = [\"nodejs_compat\"]\n","toml",[33,1921,1922],{"__ignoreMap":31},[36,1923,1924],{"class":38,"line":39},[36,1925,1918],{},[22,1927,1929],{"id":1928},"_4-結果の確認方法","4. 結果の確認方法",[1931,1932,1933],"h4",{"id":1933},"コンソールで一覧確認",[14,1935,1936,1939],{},[33,1937,1938],{},"manifest.json"," にはすべてのページのスコアが保存されます。一覧表示用のスクリプトを使うと便利です：",[26,1941,1943],{"className":28,"code":1942,"language":30,"meta":31,"style":31},"pnpm lighthouse:summary\n",[33,1944,1945],{"__ignoreMap":31},[36,1946,1947,1949],{"class":38,"line":39},[36,1948,108],{"class":42},[36,1950,1951],{"class":46}," lighthouse:summary\n",[14,1953,1954],{},"出力例：",[26,1956,1959],{"className":1957,"code":1958,"language":198},[196],"📊 Lighthouse CI レポートサマリー\n\n──────────────────────────────────────────────────────────────────────────────────────────\nURL                                                   Perf    A11y      BP     SEO\n──────────────────────────────────────────────────────────────────────────────────────────\n/                                                       42     100      96     100\n/about                                                  72     100     100     100\n/blog                                                   29      95     100     100\n──────────────────────────────────────────────────────────────────────────────────────────\n平均                                                      48      98      99     100\n\n📁 HTMLレポート: .lighthouseci/reports/\n\n⚠️  パフォーマンスが低いページ:\n   - / (42)\n   - /blog (29)\n",[33,1960,1958],{"__ignoreMap":31},[1931,1962,1964],{"id":1963},"htmlレポートを開く","HTMLレポートを開く",[14,1966,1967,1968,1971],{},"個別のHTMLレポートは ",[33,1969,1970],{},".lighthouseci/reports/"," フォルダに保存されます。ブラウザで直接開くことができます。",[14,1973,1974,1975,1978],{},"または ",[33,1976,1977],{},"lhci open"," コマンドでレポートを開けます：",[26,1980,1982],{"className":28,"code":1981,"language":30,"meta":31,"style":31},"pnpm lighthouse:open\n",[33,1983,1984],{"__ignoreMap":31},[36,1985,1986,1988],{"class":38,"line":39},[36,1987,108],{"class":42},[36,1989,1990],{"class":46}," lighthouse:open\n",[1931,1992,1993],{"id":1993},"出力先の設定",[14,1995,1996,238],{},[129,1997,1998],{},"ローカル保存（オフラインで確認可能）",[26,2000,2002],{"className":207,"code":2001,"language":209,"meta":31,"style":31},"upload: {\n  target: 'filesystem',\n  outputDir: './.lighthouseci/reports',\n}\n",[33,2003,2004,2013,2029,2045],{"__ignoreMap":31},[36,2005,2006,2009,2011],{"class":38,"line":39},[36,2007,2008],{"class":42},"upload",[36,2010,238],{"class":220},[36,2012,230],{"class":220},[36,2014,2015,2018,2020,2022,2025,2027],{"class":38,"line":158},[36,2016,2017],{"class":42},"  target",[36,2019,238],{"class":220},[36,2021,260],{"class":259},[36,2023,2024],{"class":46},"filesystem",[36,2026,266],{"class":259},[36,2028,269],{"class":220},[36,2030,2031,2034,2036,2038,2041,2043],{"class":38,"line":167},[36,2032,2033],{"class":42},"  outputDir",[36,2035,238],{"class":220},[36,2037,260],{"class":259},[36,2039,2040],{"class":46},"./.lighthouseci/reports",[36,2042,266],{"class":259},[36,2044,269],{"class":220},[36,2046,2047],{"class":38,"line":174},[36,2048,2049],{"class":220},"}\n",[14,2051,2052,238],{},[129,2053,2054],{},"一時的なパブリックストレージ（URL共有可能、7日間保存）",[26,2056,2058],{"className":207,"code":2057,"language":209,"meta":31,"style":31},"upload: {\n  target: 'temporary-public-storage',\n}\n",[33,2059,2060,2068,2082],{"__ignoreMap":31},[36,2061,2062,2064,2066],{"class":38,"line":39},[36,2063,2008],{"class":42},[36,2065,238],{"class":220},[36,2067,230],{"class":220},[36,2069,2070,2072,2074,2076,2078,2080],{"class":38,"line":158},[36,2071,2017],{"class":42},[36,2073,238],{"class":220},[36,2075,260],{"class":259},[36,2077,263],{"class":46},[36,2079,266],{"class":259},[36,2081,269],{"class":220},[36,2083,2084],{"class":38,"line":167},[36,2085,2049],{"class":220},[22,2087,2089],{"id":2088},"_5-実行結果の例","5. 実行結果の例",[14,2091,2092],{},"実行後、コンソールにレポートURLが表示されます：",[26,2094,2097],{"className":2095,"code":2096,"language":198},[196],"✅ .lighthouseci/ directory writable\n✅ Configuration file found\n✅ Chrome installation found\n⚠️  GitHub token not set\n\nHealthcheck passed!\n\nRunning Lighthouse 3 time(s) on http://localhost:3000/\nRun #1...done.\nRun #2...done.\nRun #3...done.\n\nDone running Lighthouse!\n\nUploading median LHR of http://localhost:3000/...success!\nOpen the report at https://storage.googleapis.com/lighthouse-infrastructure.appspot.com/reports/xxxxx.report.html\n",[33,2098,2096],{"__ignoreMap":31},[18,2100,2101],{"id":2101},"本番環境の測定",[14,2103,2104],{},"開発サーバーでの測定はオーバーヘッドがあり、スコアが低くなります。正確な測定には本番環境を使いましょう。",[22,2106,2108],{"id":2107},"方法1-デプロイ済みの本番urlを直接測定推奨","方法1: デプロイ済みの本番URLを直接測定（推奨）",[14,2110,2111],{},"最も正確な方法です。実際の本番環境をそのまま測定します。",[14,2113,2114,238],{},[33,2115,161],{},[26,2117,2119],{"className":207,"code":2118,"language":209,"meta":31,"style":31},"module.exports = {\n  ci: {\n    collect: {\n      // サーバー起動不要 - 本番URLを直接指定\n      url: [\n        'https://your-site.example.com/',\n        'https://your-site.example.com/about',\n        'https://your-site.example.com/blog',\n      ],\n      numberOfRuns: 3,\n    },\n    assert: {\n      assertions: {\n        'categories:performance': ['warn', { minScore: 0.8 }],\n        'categories:accessibility': ['warn', { minScore: 0.9 }],\n        'categories:best-practices': ['warn', { minScore: 0.9 }],\n        'categories:seo': ['warn', { minScore: 0.9 }],\n      },\n    },\n    upload: {\n      target: 'filesystem',\n      outputDir: './.lighthouseci/reports',\n    },\n  },\n};\n",[33,2120,2121,2133,2141,2149,2154,2162,2173,2184,2195,2199,2209,2213,2221,2229,2259,2289,2319,2349,2353,2357,2365,2379,2394,2399,2404],{"__ignoreMap":31},[36,2122,2123,2125,2127,2129,2131],{"class":38,"line":39},[36,2124,217],{"class":216},[36,2126,221],{"class":220},[36,2128,224],{"class":216},[36,2130,227],{"class":220},[36,2132,230],{"class":220},[36,2134,2135,2137,2139],{"class":38,"line":158},[36,2136,235],{"class":216},[36,2138,238],{"class":220},[36,2140,230],{"class":220},[36,2142,2143,2145,2147],{"class":38,"line":167},[36,2144,325],{"class":216},[36,2146,238],{"class":220},[36,2148,230],{"class":220},[36,2150,2151],{"class":38,"line":174},[36,2152,2153],{"class":154},"      // サーバー起動不要 - 本番URLを直接指定\n",[36,2155,2156,2158,2160],{"class":38,"line":180},[36,2157,446],{"class":216},[36,2159,238],{"class":220},[36,2161,560],{"class":220},[36,2163,2164,2166,2169,2171],{"class":38,"line":277},[36,2165,565],{"class":259},[36,2167,2168],{"class":46},"https://your-site.example.com/",[36,2170,266],{"class":259},[36,2172,269],{"class":220},[36,2174,2175,2177,2180,2182],{"class":38,"line":283},[36,2176,565],{"class":259},[36,2178,2179],{"class":46},"https://your-site.example.com/about",[36,2181,266],{"class":259},[36,2183,269],{"class":220},[36,2185,2186,2188,2191,2193],{"class":38,"line":374},[36,2187,565],{"class":259},[36,2189,2190],{"class":46},"https://your-site.example.com/blog",[36,2192,266],{"class":259},[36,2194,269],{"class":220},[36,2196,2197],{"class":38,"line":379},[36,2198,598],{"class":220},[36,2200,2201,2203,2205,2207],{"class":38,"line":384},[36,2202,603],{"class":216},[36,2204,238],{"class":220},[36,2206,609],{"class":608},[36,2208,269],{"class":220},[36,2210,2211],{"class":38,"line":498},[36,2212,274],{"class":220},[36,2214,2215,2217,2219],{"class":38,"line":622},[36,2216,839],{"class":216},[36,2218,238],{"class":220},[36,2220,230],{"class":220},[36,2222,2223,2225,2227],{"class":38,"line":631},[36,2224,980],{"class":216},[36,2226,238],{"class":220},[36,2228,230],{"class":220},[36,2230,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257],{"class":38,"line":646},[36,2232,565],{"class":259},[36,2234,991],{"class":46},[36,2236,266],{"class":259},[36,2238,238],{"class":220},[36,2240,451],{"class":220},[36,2242,266],{"class":259},[36,2244,1002],{"class":46},[36,2246,266],{"class":259},[36,2248,612],{"class":220},[36,2250,1009],{"class":220},[36,2252,1012],{"class":216},[36,2254,238],{"class":220},[36,2256,1377],{"class":608},[36,2258,1020],{"class":220},[36,2260,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287],{"class":38,"line":651},[36,2262,565],{"class":259},[36,2264,1027],{"class":46},[36,2266,266],{"class":259},[36,2268,238],{"class":220},[36,2270,451],{"class":220},[36,2272,266],{"class":259},[36,2274,1002],{"class":46},[36,2276,266],{"class":259},[36,2278,612],{"class":220},[36,2280,1009],{"class":220},[36,2282,1012],{"class":216},[36,2284,238],{"class":220},[36,2286,1017],{"class":608},[36,2288,1020],{"class":220},[36,2290,2291,2293,2295,2297,2299,2301,2303,2305,2307,2309,2311,2313,2315,2317],{"class":38,"line":656},[36,2292,565],{"class":259},[36,2294,1060],{"class":46},[36,2296,266],{"class":259},[36,2298,238],{"class":220},[36,2300,451],{"class":220},[36,2302,266],{"class":259},[36,2304,1002],{"class":46},[36,2306,266],{"class":259},[36,2308,612],{"class":220},[36,2310,1009],{"class":220},[36,2312,1012],{"class":216},[36,2314,238],{"class":220},[36,2316,1017],{"class":608},[36,2318,1020],{"class":220},[36,2320,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347],{"class":38,"line":1149},[36,2322,565],{"class":259},[36,2324,1091],{"class":46},[36,2326,266],{"class":259},[36,2328,238],{"class":220},[36,2330,451],{"class":220},[36,2332,266],{"class":259},[36,2334,1002],{"class":46},[36,2336,266],{"class":259},[36,2338,612],{"class":220},[36,2340,1009],{"class":220},[36,2342,1012],{"class":216},[36,2344,238],{"class":220},[36,2346,1017],{"class":608},[36,2348,1020],{"class":220},[36,2350,2351],{"class":38,"line":1154},[36,2352,1120],{"class":220},[36,2354,2355],{"class":38,"line":1159},[36,2356,274],{"class":220},[36,2358,2359,2361,2363],{"class":38,"line":1502},[36,2360,245],{"class":216},[36,2362,238],{"class":220},[36,2364,230],{"class":220},[36,2366,2367,2369,2371,2373,2375,2377],{"class":38,"line":1507},[36,2368,254],{"class":216},[36,2370,238],{"class":220},[36,2372,260],{"class":259},[36,2374,2024],{"class":46},[36,2376,266],{"class":259},[36,2378,269],{"class":220},[36,2380,2381,2384,2386,2388,2390,2392],{"class":38,"line":1512},[36,2382,2383],{"class":216},"      outputDir",[36,2385,238],{"class":220},[36,2387,260],{"class":259},[36,2389,2040],{"class":46},[36,2391,266],{"class":259},[36,2393,269],{"class":220},[36,2395,2397],{"class":38,"line":2396},23,[36,2398,274],{"class":220},[36,2400,2402],{"class":38,"line":2401},24,[36,2403,280],{"class":220},[36,2405,2407],{"class":38,"line":2406},25,[36,2408,286],{"class":220},[14,2410,1517],{},[26,2412,2414],{"className":28,"code":2413,"language":30,"meta":31,"style":31},"pnpm lighthouse\n",[33,2415,2416],{"__ignoreMap":31},[36,2417,2418,2420],{"class":38,"line":39},[36,2419,108],{"class":42},[36,2421,2422],{"class":46}," lighthouse\n",[14,2424,2425,2428],{},[129,2426,2427],{},"メリット",": CDN、キャッシュ、圧縮など本番環境の最適化がすべて反映される",[22,2430,2432],{"id":2431},"方法2-ローカルで本番ビルドを測定","方法2: ローカルで本番ビルドを測定",[14,2434,2435],{},"デプロイ前に本番に近い状態で確認したい場合。",[26,2437,2439],{"className":28,"code":2438,"language":30,"meta":31,"style":31},"# 1. 本番ビルド\npnpm build\n\n# 2. wrangler で本番環境をシミュレート\nnpx wrangler pages dev dist --port 8788\n",[33,2440,2441,2446,2452,2456,2461],{"__ignoreMap":31},[36,2442,2443],{"class":38,"line":39},[36,2444,2445],{"class":154},"# 1. 本番ビルド\n",[36,2447,2448,2450],{"class":38,"line":158},[36,2449,108],{"class":42},[36,2451,1859],{"class":46},[36,2453,2454],{"class":38,"line":167},[36,2455,171],{"emptyLinePlaceholder":170},[36,2457,2458],{"class":38,"line":174},[36,2459,2460],{"class":154},"# 2. wrangler で本番環境をシミュレート\n",[36,2462,2463,2465,2468,2471,2474,2477,2480],{"class":38,"line":180},[36,2464,1527],{"class":42},[36,2466,2467],{"class":46}," wrangler",[36,2469,2470],{"class":46}," pages",[36,2472,2473],{"class":46}," dev",[36,2475,2476],{"class":46}," dist",[36,2478,2479],{"class":50}," --port",[36,2481,2482],{"class":608}," 8788\n",[14,2484,2485,238],{},[33,2486,161],{},[26,2488,2490],{"className":207,"code":2489,"language":209,"meta":31,"style":31},"module.exports = {\n  ci: {\n    collect: {\n      // wrangler が起動済みの場合、startServerCommand は不要\n      url: [\n        'http://localhost:8788/',\n        'http://localhost:8788/about',\n        'http://localhost:8788/blog',\n      ],\n      numberOfRuns: 3,\n    },\n    // ...\n  },\n};\n",[33,2491,2492,2504,2512,2520,2525,2533,2543,2554,2565,2569,2579,2583,2588,2592],{"__ignoreMap":31},[36,2493,2494,2496,2498,2500,2502],{"class":38,"line":39},[36,2495,217],{"class":216},[36,2497,221],{"class":220},[36,2499,224],{"class":216},[36,2501,227],{"class":220},[36,2503,230],{"class":220},[36,2505,2506,2508,2510],{"class":38,"line":158},[36,2507,235],{"class":216},[36,2509,238],{"class":220},[36,2511,230],{"class":220},[36,2513,2514,2516,2518],{"class":38,"line":167},[36,2515,325],{"class":216},[36,2517,238],{"class":220},[36,2519,230],{"class":220},[36,2521,2522],{"class":38,"line":174},[36,2523,2524],{"class":154},"      // wrangler が起動済みの場合、startServerCommand は不要\n",[36,2526,2527,2529,2531],{"class":38,"line":180},[36,2528,446],{"class":216},[36,2530,238],{"class":220},[36,2532,560],{"class":220},[36,2534,2535,2537,2539,2541],{"class":38,"line":277},[36,2536,565],{"class":259},[36,2538,1643],{"class":46},[36,2540,266],{"class":259},[36,2542,269],{"class":220},[36,2544,2545,2547,2550,2552],{"class":38,"line":283},[36,2546,565],{"class":259},[36,2548,2549],{"class":46},"http://localhost:8788/about",[36,2551,266],{"class":259},[36,2553,269],{"class":220},[36,2555,2556,2558,2561,2563],{"class":38,"line":374},[36,2557,565],{"class":259},[36,2559,2560],{"class":46},"http://localhost:8788/blog",[36,2562,266],{"class":259},[36,2564,269],{"class":220},[36,2566,2567],{"class":38,"line":379},[36,2568,598],{"class":220},[36,2570,2571,2573,2575,2577],{"class":38,"line":384},[36,2572,603],{"class":216},[36,2574,238],{"class":220},[36,2576,609],{"class":608},[36,2578,269],{"class":220},[36,2580,2581],{"class":38,"line":498},[36,2582,274],{"class":220},[36,2584,2585],{"class":38,"line":622},[36,2586,2587],{"class":154},"    // ...\n",[36,2589,2590],{"class":38,"line":631},[36,2591,280],{"class":220},[36,2593,2594],{"class":38,"line":646},[36,2595,286],{"class":220},[22,2597,2599],{"id":2598},"開発サーバー-vs-本番環境の比較例","開発サーバー vs 本番環境の比較例",[1166,2601,2602,2615],{},[1169,2603,2604],{},[1172,2605,2606,2609,2612],{},[1175,2607,2608],{},"ページ",[1175,2610,2611],{},"開発サーバー",[1175,2613,2614],{},"本番環境",[1182,2616,2617,2630,2643],{},[1172,2618,2619,2622,2625],{},[1187,2620,2621],{},"/",[1187,2623,2624],{},"42",[1187,2626,2627],{},[129,2628,2629],{},"96",[1172,2631,2632,2635,2638],{},[1187,2633,2634],{},"/about",[1187,2636,2637],{},"72",[1187,2639,2640],{},[129,2641,2642],{},"98",[1172,2644,2645,2648,2651],{},[1187,2646,2647],{},"/blog",[1187,2649,2650],{},"29",[1187,2652,2653],{},"43",[14,2655,2656,2657,2660],{},"トップページは ",[129,2658,2659],{},"42 → 96"," と大幅に改善されます。",[18,2662,2663],{"id":2663},"トラブルシューティング",[22,2665,2666],{"id":2666},"サーバーが起動しない",[14,2668,2669,2672],{},[33,2670,2671],{},"startServerReadyPattern"," を設定して、サーバーの起動完了を正しく検出できるようにします：",[26,2674,2676],{"className":207,"code":2675,"language":209,"meta":31,"style":31},"collect: {\n  startServerCommand: 'npm run start',\n  startServerReadyPattern: 'ready|listening|started',\n  startServerReadyTimeout: 30000, // 30秒のタイムアウト\n}\n",[33,2677,2678,2687,2702,2718,2733],{"__ignoreMap":31},[36,2679,2680,2683,2685],{"class":38,"line":39},[36,2681,2682],{"class":42},"collect",[36,2684,238],{"class":220},[36,2686,230],{"class":220},[36,2688,2689,2692,2694,2696,2698,2700],{"class":38,"line":158},[36,2690,2691],{"class":42},"  startServerCommand",[36,2693,238],{"class":220},[36,2695,260],{"class":259},[36,2697,437],{"class":46},[36,2699,266],{"class":259},[36,2701,269],{"class":220},[36,2703,2704,2707,2709,2711,2714,2716],{"class":38,"line":167},[36,2705,2706],{"class":42},"  startServerReadyPattern",[36,2708,238],{"class":220},[36,2710,260],{"class":259},[36,2712,2713],{"class":46},"ready|listening|started",[36,2715,266],{"class":259},[36,2717,269],{"class":220},[36,2719,2720,2723,2725,2728,2730],{"class":38,"line":174},[36,2721,2722],{"class":42},"  startServerReadyTimeout",[36,2724,238],{"class":220},[36,2726,2727],{"class":608}," 30000",[36,2729,612],{"class":220},[36,2731,2732],{"class":154}," // 30秒のタイムアウト\n",[36,2734,2735],{"class":38,"line":180},[36,2736,2049],{"class":220},[22,2738,2740],{"id":2739},"chromeが見つからない","Chromeが見つからない",[14,2742,2743],{},"Lighthouse CIはChrome/Chromiumを必要とします。インストールされていることを確認してください。",[22,2745,2746],{"id":2746},"ポートが使用中",[14,2748,2749],{},"別のポートを使用するように設定を変更します：",[26,2751,2753],{"className":207,"code":2752,"language":209,"meta":31,"style":31},"collect: {\n  startServerCommand: 'PORT=4000 npm run start',\n  url: ['http://localhost:4000/'],\n}\n",[33,2754,2755,2763,2778,2796],{"__ignoreMap":31},[36,2756,2757,2759,2761],{"class":38,"line":39},[36,2758,2682],{"class":42},[36,2760,238],{"class":220},[36,2762,230],{"class":220},[36,2764,2765,2767,2769,2771,2774,2776],{"class":38,"line":158},[36,2766,2691],{"class":42},[36,2768,238],{"class":220},[36,2770,260],{"class":259},[36,2772,2773],{"class":46},"PORT=4000 npm run start",[36,2775,266],{"class":259},[36,2777,269],{"class":220},[36,2779,2780,2783,2785,2787,2789,2792,2794],{"class":38,"line":167},[36,2781,2782],{"class":42},"  url",[36,2784,238],{"class":220},[36,2786,451],{"class":220},[36,2788,266],{"class":259},[36,2790,2791],{"class":46},"http://localhost:4000/",[36,2793,266],{"class":259},[36,2795,461],{"class":220},[36,2797,2798],{"class":38,"line":174},[36,2799,2049],{"class":220},[18,2801,2802],{"id":2802},"参考リンク",[2804,2805,2806,2815,2822],"ul",{},[690,2807,2808],{},[2809,2810,2814],"a",{"href":2811,"rel":2812},"https://github.com/GoogleChrome/lighthouse-ci",[2813],"nofollow","Lighthouse CI GitHub リポジトリ",[690,2816,2817],{},[2809,2818,2821],{"href":2819,"rel":2820},"https://github.com/GoogleChrome/lighthouse-ci/blob/main/docs/getting-started.md",[2813],"公式 Getting Started ガイド",[690,2823,2824],{},[2809,2825,2828],{"href":2826,"rel":2827},"https://web.dev/articles/lighthouse-ci",[2813],"web.dev - Lighthouse CI ガイド",[2830,2831,2832],"style",{},"html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html pre.shiki code .snbK4, html code.shiki .snbK4{--shiki-default:#A65E2B;--shiki-dark:#A65E2B}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 .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .sM54T, html code.shiki .sM54T{--shiki-default:#2F798A;--shiki-dark:#2F798A}",{"title":31,"searchDepth":158,"depth":158,"links":2834},[2835,2839,2846,2850,2855,2862,2867,2872],{"id":20,"depth":158,"text":20,"children":2836},[2837,2838],{"id":24,"depth":167,"text":24},{"id":76,"depth":167,"text":76},{"id":119,"depth":158,"text":119,"children":2840},[2841,2842,2843,2844,2845],{"id":125,"depth":167,"text":125},{"id":203,"depth":167,"text":204},{"id":292,"depth":167,"text":292},{"id":389,"depth":167,"text":389},{"id":503,"depth":167,"text":504},{"id":661,"depth":158,"text":662,"children":2847},[2848,2849],{"id":665,"depth":167,"text":666},{"id":704,"depth":167,"text":704},{"id":756,"depth":158,"text":757,"children":2851},[2852,2853,2854],{"id":767,"depth":167,"text":767},{"id":900,"depth":167,"text":900},{"id":1164,"depth":167,"text":1164},{"id":1215,"depth":158,"text":1215,"children":2856},[2857,2858,2859,2860,2861],{"id":1218,"depth":167,"text":1219},{"id":1541,"depth":167,"text":1542},{"id":1879,"depth":167,"text":1880},{"id":1928,"depth":167,"text":1929},{"id":2088,"depth":167,"text":2089},{"id":2101,"depth":158,"text":2101,"children":2863},[2864,2865,2866],{"id":2107,"depth":167,"text":2108},{"id":2431,"depth":167,"text":2432},{"id":2598,"depth":167,"text":2599},{"id":2663,"depth":158,"text":2663,"children":2868},[2869,2870,2871],{"id":2666,"depth":167,"text":2666},{"id":2739,"depth":167,"text":2740},{"id":2746,"depth":167,"text":2746},{"id":2802,"depth":158,"text":2802},null,"Lighthouse CIをローカル環境にインストールして、パフォーマンス測定を自動化する方法","md",{},"/lighthouse-ci-local-setup",false,"2025-12-04T00:00:00.000Z",{"title":5,"description":2874},"2025-12/2025-12-04/lighthouse-ci-local-setup",[2883,2884,2885,2886],"lighthouse","performance","ci","testing","uZgRG3DkzzS8NQM1anK2xeCyUR0LFpb7ERz3txUUBeg",[],[2890,2893,2896,2900,2904],{"title":2891,"path":2892,"publishedAt":2879},"Lighthouse テスト実行ガイド","/lighthouse-testing-guide",{"title":2894,"path":2895,"publishedAt":2879},"Lighthouseパフォーマンス改善記録","/lighthouse-performance-improvement",{"title":2897,"path":2898,"publishedAt":2899},"Chrome DevTools for agents 1.0 が出た — Claude Codeの表示確認フローに何を足せるか","/chrome-devtools-for-agents-v1","2026-07-07T00:00:00.000Z",{"title":2901,"path":2902,"publishedAt":2903},"tripleBeat の GAAP評価データを9銘柄に拡充し、散布図にGAAP/Non-GAAP切替を実装した","/triplebeat-gaap-valuation-scatter","2026-05-31T00:00:00.000Z",{"title":2905,"path":2906,"publishedAt":2907},"テスト失敗修正・Cloudflareデプロイの日本語コミットメッセージ問題・公開記事3本","/tests-deploy-and-misc-articles","2026-05-15T00:00:00.000Z","https://log.eurekapu.com/og/blog/lighthouse-ci-local-setup.png?v=2025-12-04T00%3A00%3A00.000Z&title=Lighthouse%20CI%20%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%82%AC%E3%82%A4%E3%83%89&author=Kei%20Komatsu&sig=6fe9c8e53a0c43fd",1785654671627]