[{"data":1,"prerenderedAt":2278},["ShallowReactive",2],{"content-/coding-standards-viewer-bugs-analysis":3,"all-pages-for-dir":2257,"related-/coding-standards-viewer-bugs-analysis":2258,"og-image-/coding-standards-viewer-bugs-analysis":2277},{"id":4,"title":5,"body":6,"category":2243,"concepts":2243,"description":2244,"extension":2245,"meta":2246,"navigation":1006,"ogImage":2243,"path":2247,"project_name":2243,"published":2248,"publishedAt":2249,"seo":2250,"source":2243,"stem":2251,"tags":2252,"todo":2243,"unpublished":2248,"updatedAt":2243,"__hash__":2256},"pages/2025-11/2025-11-18/coding-standards-viewer-bugs-analysis.md","コーディング規約ビューアページのバグ分析と修正計画",{"type":7,"value":8,"toc":2212},"minimark",[9,12,16,21,50,54,66,69,76,80,87,264,270,302,308,336,342,345,351,403,409,513,517,520,524,534,624,629,642,646,652,783,788,802,806,811,822,825,829,835,946,951,959,962,966,970,975,1131,1136,1258,1264,1268,1400,1404,1408,1411,1443,1447,1464,1468,1471,1479,1483,1487,1624,1628,1816,1820,2042,2045,2049,2069,2073,2087,2090,2104,2107,2110,2161,2164,2181,2184,2209],[10,11,5],"h1",{"id":5},[13,14,15],"h2",{"id":15},"報告されたバグ",[17,18,20],"h3",{"id":19},"_1-キーボードショートカットが動作しない","1. キーボードショートカットが動作しない",[22,23,24,41],"ul",{},[25,26,27,31,32,36,37,40],"li",{},[28,29,30],"strong",{},"症状",": ",[33,34,35],"code",{},"Ctrl+]"," (次へ) と ",[33,38,39],{},"Ctrl+["," (前へ) のキーボードショートカットが動作しない",[25,42,43,31,46,49],{},[28,44,45],{},"影響範囲",[33,47,48],{},"/coding-standards/viewer#rule-2-1"," などの全体ビューページ",[17,51,53],{"id":52},"_2-スクロールができない","2. スクロールができない",[22,55,56,61],{},[25,57,58,60],{},[28,59,30],{},": ページのスクロールが正常に動作しない",[25,62,63,65],{},[28,64,45],{},": 全体ビューページ",[13,67,68],{"id":68},"コード分析結果",[17,70,72,73],{"id":71},"ファイル-appswebapppagescoding-standardsviewerindexvue","ファイル: ",[33,74,75],{},"apps/web/app/pages/coding-standards/viewer/index.vue",[77,78,79],"h4",{"id":79},"キーボードショートカットの実装状況",[81,82,83,86],"p",{},[28,84,85],{},"定義箇所"," (Line 248-256):",[88,89,94],"pre",{"className":90,"code":91,"language":92,"meta":93,"style":93},"language-javascript shiki shiki-themes vitesse-light vitesse-light","function handleKeydown(e) {\n  if (e.ctrlKey && e.key === '[') {\n    e.preventDefault();\n    goToPrevStep();\n  } else if (e.ctrlKey && e.key === ']') {\n    e.preventDefault();\n    goToNextStep();\n  }\n}\n","javascript","",[33,95,96,123,170,184,192,233,244,252,258],{"__ignoreMap":93},[97,98,101,105,109,113,117,120],"span",{"class":99,"line":100},"line",1,[97,102,104],{"class":103},"stQ0i","function",[97,106,108],{"class":107},"senZ8"," handleKeydown",[97,110,112],{"class":111},"shFtX","(",[97,114,116],{"class":115},"s4oTP","e",[97,118,119],{"class":111},")",[97,121,122],{"class":111}," {\n",[97,124,126,130,133,135,138,141,144,147,149,152,155,159,163,166,168],{"class":99,"line":125},2,[97,127,129],{"class":128},"sHkkW","  if",[97,131,132],{"class":111}," (",[97,134,116],{"class":115},[97,136,137],{"class":111},".",[97,139,140],{"class":115},"ctrlKey",[97,142,143],{"class":103}," &&",[97,145,146],{"class":115}," e",[97,148,137],{"class":111},[97,150,151],{"class":115},"key",[97,153,154],{"class":103}," ===",[97,156,158],{"class":157},"sMJiu"," '",[97,160,162],{"class":161},"sdGka","[",[97,164,165],{"class":157},"'",[97,167,119],{"class":111},[97,169,122],{"class":111},[97,171,173,176,178,181],{"class":99,"line":172},3,[97,174,175],{"class":115},"    e",[97,177,137],{"class":111},[97,179,180],{"class":107},"preventDefault",[97,182,183],{"class":111},"();\n",[97,185,187,190],{"class":99,"line":186},4,[97,188,189],{"class":107},"    goToPrevStep",[97,191,183],{"class":111},[97,193,195,198,201,204,206,208,210,212,214,216,218,220,222,224,227,229,231],{"class":99,"line":194},5,[97,196,197],{"class":111},"  }",[97,199,200],{"class":128}," else",[97,202,203],{"class":128}," if",[97,205,132],{"class":111},[97,207,116],{"class":115},[97,209,137],{"class":111},[97,211,140],{"class":115},[97,213,143],{"class":103},[97,215,146],{"class":115},[97,217,137],{"class":111},[97,219,151],{"class":115},[97,221,154],{"class":103},[97,223,158],{"class":157},[97,225,226],{"class":161},"]",[97,228,165],{"class":157},[97,230,119],{"class":111},[97,232,122],{"class":111},[97,234,236,238,240,242],{"class":99,"line":235},6,[97,237,175],{"class":115},[97,239,137],{"class":111},[97,241,180],{"class":107},[97,243,183],{"class":111},[97,245,247,250],{"class":99,"line":246},7,[97,248,249],{"class":107},"    goToNextStep",[97,251,183],{"class":111},[97,253,255],{"class":99,"line":254},8,[97,256,257],{"class":111},"  }\n",[97,259,261],{"class":99,"line":260},9,[97,262,263],{"class":111},"}\n",[81,265,266,269],{},[28,267,268],{},"イベントリスナー登録"," (Line 370):",[88,271,273],{"className":90,"code":272,"language":92,"meta":93,"style":93},"window.addEventListener('keydown', handleKeydown);\n",[33,274,275],{"__ignoreMap":93},[97,276,277,280,282,285,287,289,292,294,297,299],{"class":99,"line":100},[97,278,279],{"class":115},"window",[97,281,137],{"class":111},[97,283,284],{"class":107},"addEventListener",[97,286,112],{"class":111},[97,288,165],{"class":157},[97,290,291],{"class":161},"keydown",[97,293,165],{"class":157},[97,295,296],{"class":111},",",[97,298,108],{"class":115},[97,300,301],{"class":111},");\n",[81,303,304,307],{},[28,305,306],{},"イベントリスナー解除"," (Line 402):",[88,309,311],{"className":90,"code":310,"language":92,"meta":93,"style":93},"window.removeEventListener('keydown', handleKeydown);\n",[33,312,313],{"__ignoreMap":93},[97,314,315,317,319,322,324,326,328,330,332,334],{"class":99,"line":100},[97,316,279],{"class":115},[97,318,137],{"class":111},[97,320,321],{"class":107},"removeEventListener",[97,323,112],{"class":111},[97,325,165],{"class":157},[97,327,291],{"class":161},[97,329,165],{"class":157},[97,331,296],{"class":111},[97,333,108],{"class":115},[97,335,301],{"class":111},[81,337,338,341],{},[28,339,340],{},"実装状態",": ✅ コード上は正しく実装されている",[77,343,344],{"id":344},"スクロール機能の実装状況",[81,346,347,350],{},[28,348,349],{},"スクロール可能な高さの設定"," (Line 555):",[88,352,356],{"className":353,"code":354,"language":355,"meta":93,"style":93},"language-css shiki shiki-themes vitesse-light vitesse-light",".step {\n  min-height: 150vh;\n  position: relative;\n}\n","css",[33,357,358,367,386,399],{"__ignoreMap":93},[97,359,360,362,365],{"class":99,"line":100},[97,361,137],{"class":111},[97,363,364],{"class":115},"step",[97,366,122],{"class":111},[97,368,369,373,376,380,383],{"class":99,"line":125},[97,370,372],{"class":371},"sz8Xr","  min-height",[97,374,375],{"class":111},":",[97,377,379],{"class":378},"sM54T"," 150",[97,381,382],{"class":103},"vh",[97,384,385],{"class":111},";\n",[97,387,388,391,393,397],{"class":99,"line":172},[97,389,390],{"class":371},"  position",[97,392,375],{"class":111},[97,394,396],{"class":395},"snbK4"," relative",[97,398,385],{"class":111},[97,400,401],{"class":99,"line":186},[97,402,263],{"class":111},[81,404,405,408],{},[28,406,407],{},"右側コードエリアの固定"," (Line 595-603):",[88,410,412],{"className":353,"code":411,"language":355,"meta":93,"style":93},".viz {\n  position: sticky;\n  top: 8vh;\n  height: 84vh;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n}\n",[33,413,414,423,434,448,462,474,486,498,509],{"__ignoreMap":93},[97,415,416,418,421],{"class":99,"line":100},[97,417,137],{"class":111},[97,419,420],{"class":115},"viz",[97,422,122],{"class":111},[97,424,425,427,429,432],{"class":99,"line":125},[97,426,390],{"class":371},[97,428,375],{"class":111},[97,430,431],{"class":395}," sticky",[97,433,385],{"class":111},[97,435,436,439,441,444,446],{"class":99,"line":172},[97,437,438],{"class":371},"  top",[97,440,375],{"class":111},[97,442,443],{"class":378}," 8",[97,445,382],{"class":103},[97,447,385],{"class":111},[97,449,450,453,455,458,460],{"class":99,"line":186},[97,451,452],{"class":371},"  height",[97,454,375],{"class":111},[97,456,457],{"class":378}," 84",[97,459,382],{"class":103},[97,461,385],{"class":111},[97,463,464,467,469,472],{"class":99,"line":194},[97,465,466],{"class":371},"  display",[97,468,375],{"class":111},[97,470,471],{"class":395}," flex",[97,473,385],{"class":111},[97,475,476,479,481,484],{"class":99,"line":235},[97,477,478],{"class":371},"  flex-direction",[97,480,375],{"class":111},[97,482,483],{"class":395}," column",[97,485,385],{"class":111},[97,487,488,491,493,496],{"class":99,"line":246},[97,489,490],{"class":371},"  align-items",[97,492,375],{"class":111},[97,494,495],{"class":395}," center",[97,497,385],{"class":111},[97,499,500,503,505,507],{"class":99,"line":254},[97,501,502],{"class":371},"  justify-content",[97,504,375],{"class":111},[97,506,495],{"class":395},[97,508,385],{"class":111},[97,510,511],{"class":99,"line":260},[97,512,263],{"class":111},[81,514,515,341],{},[28,516,340],{},[13,518,519],{"id":519},"問題の原因仮説",[17,521,523],{"id":522},"_1-clientonlyコンポーネントの影響","1. ClientOnlyコンポーネントの影響",[81,525,526,529,530,533],{},[28,527,528],{},"Line 2-90",": 全体が",[33,531,532],{},"\u003CClientOnly>","でラップされている",[88,535,539],{"className":536,"code":537,"language":538,"meta":93,"style":93},"language-vue shiki shiki-themes vitesse-light vitesse-light","\u003Ctemplate>\n  \u003CClientOnly>\n    \u003Cdiv class=\"breadcrumb-nav\">\n      ...\n    \u003C/div>\n    ...\n  \u003C/ClientOnly>\n\u003C/template>\n","vue",[33,540,541,552,562,586,592,601,606,615],{"__ignoreMap":93},[97,542,543,546,549],{"class":99,"line":100},[97,544,545],{"class":111},"\u003C",[97,547,548],{"class":128},"template",[97,550,551],{"class":111},">\n",[97,553,554,557,560],{"class":99,"line":125},[97,555,556],{"class":111},"  \u003C",[97,558,559],{"class":128},"ClientOnly",[97,561,551],{"class":111},[97,563,564,567,570,573,576,579,582,584],{"class":99,"line":172},[97,565,566],{"class":111},"    \u003C",[97,568,569],{"class":128},"div",[97,571,572],{"class":115}," class",[97,574,575],{"class":111},"=",[97,577,578],{"class":157},"\"",[97,580,581],{"class":161},"breadcrumb-nav",[97,583,578],{"class":157},[97,585,551],{"class":111},[97,587,588],{"class":99,"line":186},[97,589,591],{"class":590},"sG7-3","      ...\n",[97,593,594,597,599],{"class":99,"line":194},[97,595,596],{"class":111},"    \u003C/",[97,598,569],{"class":128},[97,600,551],{"class":111},[97,602,603],{"class":99,"line":235},[97,604,605],{"class":590},"    ...\n",[97,607,608,611,613],{"class":99,"line":246},[97,609,610],{"class":111},"  \u003C/",[97,612,559],{"class":128},[97,614,551],{"class":111},[97,616,617,620,622],{"class":99,"line":254},[97,618,619],{"class":111},"\u003C/",[97,621,548],{"class":128},[97,623,551],{"class":111},[81,625,626,375],{},[28,627,628],{},"仮説",[22,630,631,636,639],{},[25,632,633,635],{},[33,634,559],{},"コンポーネントによるレンダリングのタイミングの問題",[25,637,638],{},"SSR（サーバーサイドレンダリング）とCSR（クライアントサイドレンダリング）の切り替え時にイベントリスナーが正しく登録されない可能性",[25,640,641],{},"ハイドレーションミスマッチが発生している可能性",[17,643,645],{"id":644},"_2-z-indexの定義不足","2. z-indexの定義不足",[81,647,648,651],{},[28,649,650],{},"Line 567-577",": 11個のステップまでしかz-indexが定義されていない",[88,653,655],{"className":353,"code":654,"language":355,"meta":93,"style":93},".step[data-step=\"0\"] .step-content { z-index: 1; }\n.step[data-step=\"1\"] .step-content { z-index: 2; }\n...\n.step[data-step=\"10\"] .step-content { z-index: 11; }\n",[33,656,657,702,740,745],{"__ignoreMap":93},[97,658,659,661,663,665,668,670,672,675,677,679,682,685,688,691,693,696,699],{"class":99,"line":100},[97,660,137],{"class":111},[97,662,364],{"class":115},[97,664,162],{"class":111},[97,666,667],{"class":115},"data-step",[97,669,575],{"class":103},[97,671,578],{"class":157},[97,673,674],{"class":161},"0",[97,676,578],{"class":157},[97,678,226],{"class":111},[97,680,681],{"class":111}," .",[97,683,684],{"class":115},"step-content",[97,686,687],{"class":111}," {",[97,689,690],{"class":371}," z-index",[97,692,375],{"class":111},[97,694,695],{"class":378}," 1",[97,697,698],{"class":111},";",[97,700,701],{"class":111}," }\n",[97,703,704,706,708,710,712,714,716,719,721,723,725,727,729,731,733,736,738],{"class":99,"line":125},[97,705,137],{"class":111},[97,707,364],{"class":115},[97,709,162],{"class":111},[97,711,667],{"class":115},[97,713,575],{"class":103},[97,715,578],{"class":157},[97,717,718],{"class":161},"1",[97,720,578],{"class":157},[97,722,226],{"class":111},[97,724,681],{"class":111},[97,726,684],{"class":115},[97,728,687],{"class":111},[97,730,690],{"class":371},[97,732,375],{"class":111},[97,734,735],{"class":378}," 2",[97,737,698],{"class":111},[97,739,701],{"class":111},[97,741,742],{"class":99,"line":172},[97,743,744],{"class":590},"...\n",[97,746,747,749,751,753,755,757,759,762,764,766,768,770,772,774,776,779,781],{"class":99,"line":186},[97,748,137],{"class":111},[97,750,364],{"class":115},[97,752,162],{"class":111},[97,754,667],{"class":115},[97,756,575],{"class":103},[97,758,578],{"class":157},[97,760,761],{"class":161},"10",[97,763,578],{"class":157},[97,765,226],{"class":111},[97,767,681],{"class":111},[97,769,684],{"class":115},[97,771,687],{"class":111},[97,773,690],{"class":371},[97,775,375],{"class":111},[97,777,778],{"class":378}," 11",[97,780,698],{"class":111},[97,782,701],{"class":111},[81,784,785,375],{},[28,786,787],{},"問題点",[22,789,790,793,796,799],{},[25,791,792],{},"JSONデータには100以上のルールが存在する",[25,794,795],{},"12番目以降のステップにはz-indexが設定されない",[25,797,798],{},"ステップ要素が重なって表示される可能性がある",[25,800,801],{},"これによりクリックイベントやフォーカスが正しく機能しない可能性",[17,803,805],{"id":804},"_3-イベントリスナーの競合","3. イベントリスナーの競合",[81,807,808,375],{},[28,809,810],{},"可能性のある競合",[22,812,813,816,819],{},[25,814,815],{},"IntersectionObserver (Line 349-364)",[25,817,818],{},"Scroll イベント (Line 368)",[25,820,821],{},"Keydown イベント (Line 370)",[81,823,824],{},"これらのイベントが同時に動作することで、競合が発生している可能性がある。",[17,826,828],{"id":827},"_4-ハッシュナビゲーションの副作用","4. ハッシュナビゲーションの副作用",[81,830,831,834],{},[28,832,833],{},"Line 373-392",": ハッシュによるナビゲーション処理",[88,836,838],{"className":90,"code":837,"language":92,"meta":93,"style":93},"if (window.location.hash) {\n  const hash = window.location.hash.slice(1);\n  const targetElement = document.getElementById(hash);\n  if (targetElement) {\n    // ...スクロール処理\n  }\n}\n",[33,839,840,863,896,919,932,938,942],{"__ignoreMap":93},[97,841,842,845,847,849,851,854,856,859,861],{"class":99,"line":100},[97,843,844],{"class":128},"if",[97,846,132],{"class":111},[97,848,279],{"class":115},[97,850,137],{"class":111},[97,852,853],{"class":115},"location",[97,855,137],{"class":111},[97,857,858],{"class":115},"hash",[97,860,119],{"class":111},[97,862,122],{"class":111},[97,864,865,868,871,874,877,879,881,883,885,887,890,892,894],{"class":99,"line":125},[97,866,867],{"class":103},"  const",[97,869,870],{"class":115}," hash",[97,872,873],{"class":111}," =",[97,875,876],{"class":115}," window",[97,878,137],{"class":111},[97,880,853],{"class":115},[97,882,137],{"class":111},[97,884,858],{"class":115},[97,886,137],{"class":111},[97,888,889],{"class":107},"slice",[97,891,112],{"class":111},[97,893,718],{"class":378},[97,895,301],{"class":111},[97,897,898,900,903,905,908,910,913,915,917],{"class":99,"line":172},[97,899,867],{"class":103},[97,901,902],{"class":115}," targetElement",[97,904,873],{"class":111},[97,906,907],{"class":115}," document",[97,909,137],{"class":111},[97,911,912],{"class":107},"getElementById",[97,914,112],{"class":111},[97,916,858],{"class":115},[97,918,301],{"class":111},[97,920,921,923,925,928,930],{"class":99,"line":186},[97,922,129],{"class":128},[97,924,132],{"class":111},[97,926,927],{"class":115},"targetElement",[97,929,119],{"class":111},[97,931,122],{"class":111},[97,933,934],{"class":99,"line":194},[97,935,937],{"class":936},"sxvE3","    // ...スクロール処理\n",[97,939,940],{"class":99,"line":235},[97,941,257],{"class":111},[97,943,944],{"class":99,"line":246},[97,945,263],{"class":111},[81,947,948,375],{},[28,949,950],{},"問題の可能性",[22,952,953,956],{},[25,954,955],{},"ハッシュナビゲーション後にフォーカスが失われる",[25,957,958],{},"キーボードイベントが要素ではなくwindowに登録されているため、フォーカスの影響を受けるべきではないが、何らかの副作用がある可能性",[13,960,961],{"id":961},"修正計画",[17,963,965],{"id":964},"phase-1-緊急修正即座に実施","Phase 1: 緊急修正（即座に実施）",[77,967,969],{"id":968},"_1-1-z-index問題の解決","1-1. z-index問題の解決",[81,971,972],{},[28,973,974],{},"方法A: 動的z-index生成",[88,976,978],{"className":536,"code":977,"language":538,"meta":93,"style":93},"\u003Cstyle>\n/* 静的なz-index定義を削除 */\n\u003C/style>\n\n\u003Cscript setup>\n// 動的にz-indexを設定\nconst getStepZIndex = (index) => index + 1;\n\u003C/script>\n\n\u003Ctemplate>\n\u003Cdiv class=\"step-content\" :style=\"{ zIndex: getStepZIndex(index) }\">\n  ...\n\u003C/div>\n\u003C/template>\n",[33,979,980,989,994,1002,1008,1020,1025,1055,1063,1067,1076,1107,1113,1122],{"__ignoreMap":93},[97,981,982,984,987],{"class":99,"line":100},[97,983,545],{"class":111},[97,985,986],{"class":128},"style",[97,988,551],{"class":111},[97,990,991],{"class":99,"line":125},[97,992,993],{"class":936},"/* 静的なz-index定義を削除 */\n",[97,995,996,998,1000],{"class":99,"line":172},[97,997,619],{"class":111},[97,999,986],{"class":128},[97,1001,551],{"class":111},[97,1003,1004],{"class":99,"line":186},[97,1005,1007],{"emptyLinePlaceholder":1006},true,"\n",[97,1009,1010,1012,1015,1018],{"class":99,"line":194},[97,1011,545],{"class":111},[97,1013,1014],{"class":128},"script",[97,1016,1017],{"class":115}," setup",[97,1019,551],{"class":111},[97,1021,1022],{"class":99,"line":235},[97,1023,1024],{"class":936},"// 動的にz-indexを設定\n",[97,1026,1027,1030,1033,1035,1037,1040,1042,1045,1048,1051,1053],{"class":99,"line":246},[97,1028,1029],{"class":103},"const",[97,1031,1032],{"class":107}," getStepZIndex",[97,1034,873],{"class":111},[97,1036,132],{"class":111},[97,1038,1039],{"class":115},"index",[97,1041,119],{"class":111},[97,1043,1044],{"class":111}," =>",[97,1046,1047],{"class":115}," index",[97,1049,1050],{"class":103}," +",[97,1052,695],{"class":378},[97,1054,385],{"class":111},[97,1056,1057,1059,1061],{"class":99,"line":254},[97,1058,619],{"class":111},[97,1060,1014],{"class":128},[97,1062,551],{"class":111},[97,1064,1065],{"class":99,"line":260},[97,1066,1007],{"emptyLinePlaceholder":1006},[97,1068,1070,1072,1074],{"class":99,"line":1069},10,[97,1071,545],{"class":111},[97,1073,548],{"class":128},[97,1075,551],{"class":111},[97,1077,1079,1081,1083,1085,1087,1089,1091,1093,1096,1098,1100,1103,1105],{"class":99,"line":1078},11,[97,1080,545],{"class":111},[97,1082,569],{"class":128},[97,1084,572],{"class":115},[97,1086,575],{"class":111},[97,1088,578],{"class":157},[97,1090,684],{"class":161},[97,1092,578],{"class":157},[97,1094,1095],{"class":115}," :style",[97,1097,575],{"class":111},[97,1099,578],{"class":157},[97,1101,1102],{"class":161},"{ zIndex: getStepZIndex(index) }",[97,1104,578],{"class":157},[97,1106,551],{"class":111},[97,1108,1110],{"class":99,"line":1109},12,[97,1111,1112],{"class":590},"  ...\n",[97,1114,1116,1118,1120],{"class":99,"line":1115},13,[97,1117,619],{"class":111},[97,1119,569],{"class":128},[97,1121,551],{"class":111},[97,1123,1125,1127,1129],{"class":99,"line":1124},14,[97,1126,619],{"class":111},[97,1128,548],{"class":128},[97,1130,551],{"class":111},[81,1132,1133],{},[28,1134,1135],{},"方法B: CSSカスタムプロパティを使用",[88,1137,1139],{"className":536,"code":1138,"language":538,"meta":93,"style":93},"\u003Ctemplate>\n\u003Cdiv class=\"step-content\" :style=\"{ '--step-index': index }\">\n  ...\n\u003C/div>\n\u003C/template>\n\n\u003Cstyle>\n.step-content {\n  z-index: calc(var(--step-index) + 1);\n}\n\u003C/style>\n",[33,1140,1141,1149,1178,1182,1190,1198,1202,1210,1218,1246,1250],{"__ignoreMap":93},[97,1142,1143,1145,1147],{"class":99,"line":100},[97,1144,545],{"class":111},[97,1146,548],{"class":128},[97,1148,551],{"class":111},[97,1150,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1174,1176],{"class":99,"line":125},[97,1152,545],{"class":111},[97,1154,569],{"class":128},[97,1156,572],{"class":115},[97,1158,575],{"class":111},[97,1160,578],{"class":157},[97,1162,684],{"class":161},[97,1164,578],{"class":157},[97,1166,1095],{"class":115},[97,1168,575],{"class":111},[97,1170,578],{"class":157},[97,1172,1173],{"class":161},"{ '--step-index': index }",[97,1175,578],{"class":157},[97,1177,551],{"class":111},[97,1179,1180],{"class":99,"line":172},[97,1181,1112],{"class":590},[97,1183,1184,1186,1188],{"class":99,"line":186},[97,1185,619],{"class":111},[97,1187,569],{"class":128},[97,1189,551],{"class":111},[97,1191,1192,1194,1196],{"class":99,"line":194},[97,1193,619],{"class":111},[97,1195,548],{"class":128},[97,1197,551],{"class":111},[97,1199,1200],{"class":99,"line":235},[97,1201,1007],{"emptyLinePlaceholder":1006},[97,1203,1204,1206,1208],{"class":99,"line":246},[97,1205,545],{"class":111},[97,1207,986],{"class":128},[97,1209,551],{"class":111},[97,1211,1212,1214,1216],{"class":99,"line":254},[97,1213,137],{"class":111},[97,1215,684],{"class":115},[97,1217,122],{"class":111},[97,1219,1220,1223,1225,1228,1230,1233,1235,1238,1240,1242,1244],{"class":99,"line":260},[97,1221,1222],{"class":371},"  z-index",[97,1224,375],{"class":111},[97,1226,1227],{"class":371}," calc",[97,1229,112],{"class":111},[97,1231,1232],{"class":371},"var",[97,1234,112],{"class":111},[97,1236,1237],{"class":115},"--step-index",[97,1239,119],{"class":111},[97,1241,1050],{"class":103},[97,1243,695],{"class":378},[97,1245,301],{"class":111},[97,1247,1248],{"class":99,"line":1069},[97,1249,263],{"class":111},[97,1251,1252,1254,1256],{"class":99,"line":1078},[97,1253,619],{"class":111},[97,1255,986],{"class":128},[97,1257,551],{"class":111},[81,1259,1260,1263],{},[28,1261,1262],{},"推奨",": 方法B（CSSカスタムプロパティ）- よりパフォーマンスが良い",[77,1265,1267],{"id":1266},"_1-2-イベントリスナーの確実な登録","1-2. イベントリスナーの確実な登録",[88,1269,1271],{"className":90,"code":1270,"language":92,"meta":93,"style":93},"onMounted(async () => {\n  await loadSteps();\n\n  // 他の初期化処理...\n\n  await nextTick();\n\n  // イベントリスナーを最後に登録（確実に要素がレンダリングされた後）\n  await nextTick(); // 2回目のnextTickで確実に\n  window.addEventListener('keydown', handleKeydown);\n\n  console.log('Keydown listener registered'); // デバッグ用\n});\n",[33,1272,1273,1290,1300,1304,1309,1313,1322,1326,1331,1343,1366,1370,1395],{"__ignoreMap":93},[97,1274,1275,1278,1280,1283,1286,1288],{"class":99,"line":100},[97,1276,1277],{"class":107},"onMounted",[97,1279,112],{"class":111},[97,1281,1282],{"class":103},"async",[97,1284,1285],{"class":111}," ()",[97,1287,1044],{"class":111},[97,1289,122],{"class":111},[97,1291,1292,1295,1298],{"class":99,"line":125},[97,1293,1294],{"class":128},"  await",[97,1296,1297],{"class":107}," loadSteps",[97,1299,183],{"class":111},[97,1301,1302],{"class":99,"line":172},[97,1303,1007],{"emptyLinePlaceholder":1006},[97,1305,1306],{"class":99,"line":186},[97,1307,1308],{"class":936},"  // 他の初期化処理...\n",[97,1310,1311],{"class":99,"line":194},[97,1312,1007],{"emptyLinePlaceholder":1006},[97,1314,1315,1317,1320],{"class":99,"line":235},[97,1316,1294],{"class":128},[97,1318,1319],{"class":107}," nextTick",[97,1321,183],{"class":111},[97,1323,1324],{"class":99,"line":246},[97,1325,1007],{"emptyLinePlaceholder":1006},[97,1327,1328],{"class":99,"line":254},[97,1329,1330],{"class":936},"  // イベントリスナーを最後に登録（確実に要素がレンダリングされた後）\n",[97,1332,1333,1335,1337,1340],{"class":99,"line":260},[97,1334,1294],{"class":128},[97,1336,1319],{"class":107},[97,1338,1339],{"class":111},"();",[97,1341,1342],{"class":936}," // 2回目のnextTickで確実に\n",[97,1344,1345,1348,1350,1352,1354,1356,1358,1360,1362,1364],{"class":99,"line":1069},[97,1346,1347],{"class":115},"  window",[97,1349,137],{"class":111},[97,1351,284],{"class":107},[97,1353,112],{"class":111},[97,1355,165],{"class":157},[97,1357,291],{"class":161},[97,1359,165],{"class":157},[97,1361,296],{"class":111},[97,1363,108],{"class":115},[97,1365,301],{"class":111},[97,1367,1368],{"class":99,"line":1078},[97,1369,1007],{"emptyLinePlaceholder":1006},[97,1371,1372,1375,1377,1380,1382,1384,1387,1389,1392],{"class":99,"line":1109},[97,1373,1374],{"class":115},"  console",[97,1376,137],{"class":111},[97,1378,1379],{"class":107},"log",[97,1381,112],{"class":111},[97,1383,165],{"class":157},[97,1385,1386],{"class":161},"Keydown listener registered",[97,1388,165],{"class":157},[97,1390,1391],{"class":111},");",[97,1393,1394],{"class":936}," // デバッグ用\n",[97,1396,1397],{"class":99,"line":1115},[97,1398,1399],{"class":111},"});\n",[17,1401,1403],{"id":1402},"phase-2-根本原因の調査chrome-devtoolsで確認","Phase 2: 根本原因の調査（Chrome DevToolsで確認）",[77,1405,1407],{"id":1406},"_2-1-イベントリスナーの確認","2-1. イベントリスナーの確認",[81,1409,1410],{},"Chrome DevToolsで以下を確認:",[1412,1413,1414,1420],"ol",{},[25,1415,1416,1417,1419],{},"Elements > Event Listeners タブで",[33,1418,291],{},"イベントが登録されているか",[25,1421,1422,1423],{},"Console で以下を実行:\n",[88,1424,1426],{"className":90,"code":1425,"language":92,"meta":93,"style":93},"getEventListeners(window).keydown\n",[33,1427,1428],{"__ignoreMap":93},[97,1429,1430,1433,1435,1437,1440],{"class":99,"line":100},[97,1431,1432],{"class":107},"getEventListeners",[97,1434,112],{"class":111},[97,1436,279],{"class":115},[97,1438,1439],{"class":111},").",[97,1441,1442],{"class":115},"keydown\n",[77,1444,1446],{"id":1445},"_2-2-dom要素の状態確認","2-2. DOM要素の状態確認",[1412,1448,1449,1455,1458],{},[25,1450,1451,1454],{},[33,1452,1453],{},".step","要素のz-indexが正しく適用されているか",[25,1456,1457],{},"スクロール可能な高さが十分にあるか",[25,1459,1460,1463],{},[33,1461,1462],{},"overflow","プロパティが正しく設定されているか",[77,1465,1467],{"id":1466},"_2-3-ハイドレーションエラーの確認","2-3. ハイドレーションエラーの確認",[81,1469,1470],{},"Console で以下のエラーをチェック:",[22,1472,1473,1476],{},[25,1474,1475],{},"\"Hydration node mismatch\"",[25,1477,1478],{},"\"Hydration completed but contains mismatches\"",[17,1480,1482],{"id":1481},"phase-3-構造的な改善長期対応","Phase 3: 構造的な改善（長期対応）",[77,1484,1486],{"id":1485},"_3-1-clientonlyの削除検討","3-1. ClientOnlyの削除検討",[88,1488,1490],{"className":536,"code":1489,"language":538,"meta":93,"style":93},"\u003Ctemplate>\n  \u003C!-- ClientOnlyを削除 -->\n  \u003Cdiv class=\"breadcrumb-nav\">\n    ...\n  \u003C/div>\n  ...\n\u003C/template>\n\n\u003Cscript setup>\n// onMountedの処理を調整\nonMounted(() => {\n  // ブラウザ環境でのみ実行される処理\n  if (process.client) {\n    // ...\n  }\n});\n\u003C/script>\n",[33,1491,1492,1500,1505,1523,1527,1535,1539,1547,1551,1561,1566,1577,1582,1600,1605,1610,1615],{"__ignoreMap":93},[97,1493,1494,1496,1498],{"class":99,"line":100},[97,1495,545],{"class":111},[97,1497,548],{"class":128},[97,1499,551],{"class":111},[97,1501,1502],{"class":99,"line":125},[97,1503,1504],{"class":936},"  \u003C!-- ClientOnlyを削除 -->\n",[97,1506,1507,1509,1511,1513,1515,1517,1519,1521],{"class":99,"line":172},[97,1508,556],{"class":111},[97,1510,569],{"class":128},[97,1512,572],{"class":115},[97,1514,575],{"class":111},[97,1516,578],{"class":157},[97,1518,581],{"class":161},[97,1520,578],{"class":157},[97,1522,551],{"class":111},[97,1524,1525],{"class":99,"line":186},[97,1526,605],{"class":590},[97,1528,1529,1531,1533],{"class":99,"line":194},[97,1530,610],{"class":111},[97,1532,569],{"class":128},[97,1534,551],{"class":111},[97,1536,1537],{"class":99,"line":235},[97,1538,1112],{"class":590},[97,1540,1541,1543,1545],{"class":99,"line":246},[97,1542,619],{"class":111},[97,1544,548],{"class":128},[97,1546,551],{"class":111},[97,1548,1549],{"class":99,"line":254},[97,1550,1007],{"emptyLinePlaceholder":1006},[97,1552,1553,1555,1557,1559],{"class":99,"line":260},[97,1554,545],{"class":111},[97,1556,1014],{"class":128},[97,1558,1017],{"class":115},[97,1560,551],{"class":111},[97,1562,1563],{"class":99,"line":1069},[97,1564,1565],{"class":936},"// onMountedの処理を調整\n",[97,1567,1568,1570,1573,1575],{"class":99,"line":1078},[97,1569,1277],{"class":107},[97,1571,1572],{"class":111},"(()",[97,1574,1044],{"class":111},[97,1576,122],{"class":111},[97,1578,1579],{"class":99,"line":1109},[97,1580,1581],{"class":936},"  // ブラウザ環境でのみ実行される処理\n",[97,1583,1584,1586,1588,1591,1593,1596,1598],{"class":99,"line":1115},[97,1585,129],{"class":128},[97,1587,132],{"class":111},[97,1589,1590],{"class":115},"process",[97,1592,137],{"class":111},[97,1594,1595],{"class":115},"client",[97,1597,119],{"class":111},[97,1599,122],{"class":111},[97,1601,1602],{"class":99,"line":1124},[97,1603,1604],{"class":936},"    // ...\n",[97,1606,1608],{"class":99,"line":1607},15,[97,1609,257],{"class":111},[97,1611,1613],{"class":99,"line":1612},16,[97,1614,1399],{"class":111},[97,1616,1618,1620,1622],{"class":99,"line":1617},17,[97,1619,619],{"class":111},[97,1621,1014],{"class":128},[97,1623,551],{"class":111},[77,1625,1627],{"id":1626},"_3-2-スクロール処理の最適化","3-2. スクロール処理の最適化",[88,1629,1631],{"className":90,"code":1630,"language":92,"meta":93,"style":93},"// Passive scrollイベントの活用\nwindow.addEventListener('scroll', updateProgress, {\n  passive: true,\n  capture: false\n});\n\n// IntersectionObserverのオプション最適化\nio = new IntersectionObserver(\n  (entries) => {\n    // ...\n  },\n  {\n    root: null,\n    threshold: [0, 0.25, 0.5, 0.75, 1], // より細かいしきい値\n    rootMargin: '0px'\n  }\n);\n",[33,1632,1633,1638,1664,1677,1687,1691,1695,1700,1716,1730,1734,1739,1744,1756,1793,1808,1812],{"__ignoreMap":93},[97,1634,1635],{"class":99,"line":100},[97,1636,1637],{"class":936},"// Passive scrollイベントの活用\n",[97,1639,1640,1642,1644,1646,1648,1650,1653,1655,1657,1660,1662],{"class":99,"line":125},[97,1641,279],{"class":115},[97,1643,137],{"class":111},[97,1645,284],{"class":107},[97,1647,112],{"class":111},[97,1649,165],{"class":157},[97,1651,1652],{"class":161},"scroll",[97,1654,165],{"class":157},[97,1656,296],{"class":111},[97,1658,1659],{"class":115}," updateProgress",[97,1661,296],{"class":111},[97,1663,122],{"class":111},[97,1665,1666,1669,1671,1674],{"class":99,"line":172},[97,1667,1668],{"class":371},"  passive",[97,1670,375],{"class":111},[97,1672,1673],{"class":128}," true",[97,1675,1676],{"class":111},",\n",[97,1678,1679,1682,1684],{"class":99,"line":186},[97,1680,1681],{"class":371},"  capture",[97,1683,375],{"class":111},[97,1685,1686],{"class":128}," false\n",[97,1688,1689],{"class":99,"line":194},[97,1690,1399],{"class":111},[97,1692,1693],{"class":99,"line":235},[97,1694,1007],{"emptyLinePlaceholder":1006},[97,1696,1697],{"class":99,"line":246},[97,1698,1699],{"class":936},"// IntersectionObserverのオプション最適化\n",[97,1701,1702,1705,1707,1710,1713],{"class":99,"line":254},[97,1703,1704],{"class":115},"io",[97,1706,873],{"class":111},[97,1708,1709],{"class":103}," new",[97,1711,1712],{"class":107}," IntersectionObserver",[97,1714,1715],{"class":111},"(\n",[97,1717,1718,1721,1724,1726,1728],{"class":99,"line":260},[97,1719,1720],{"class":111},"  (",[97,1722,1723],{"class":115},"entries",[97,1725,119],{"class":111},[97,1727,1044],{"class":111},[97,1729,122],{"class":111},[97,1731,1732],{"class":99,"line":1069},[97,1733,1604],{"class":936},[97,1735,1736],{"class":99,"line":1078},[97,1737,1738],{"class":111},"  },\n",[97,1740,1741],{"class":99,"line":1109},[97,1742,1743],{"class":111},"  {\n",[97,1745,1746,1749,1751,1754],{"class":99,"line":1115},[97,1747,1748],{"class":371},"    root",[97,1750,375],{"class":111},[97,1752,1753],{"class":103}," null",[97,1755,1676],{"class":111},[97,1757,1758,1761,1763,1766,1768,1770,1773,1775,1778,1780,1783,1785,1787,1790],{"class":99,"line":1124},[97,1759,1760],{"class":371},"    threshold",[97,1762,375],{"class":111},[97,1764,1765],{"class":111}," [",[97,1767,674],{"class":378},[97,1769,296],{"class":111},[97,1771,1772],{"class":378}," 0.25",[97,1774,296],{"class":111},[97,1776,1777],{"class":378}," 0.5",[97,1779,296],{"class":111},[97,1781,1782],{"class":378}," 0.75",[97,1784,296],{"class":111},[97,1786,695],{"class":378},[97,1788,1789],{"class":111},"],",[97,1791,1792],{"class":936}," // より細かいしきい値\n",[97,1794,1795,1798,1800,1802,1805],{"class":99,"line":1607},[97,1796,1797],{"class":371},"    rootMargin",[97,1799,375],{"class":111},[97,1801,158],{"class":157},[97,1803,1804],{"class":161},"0px",[97,1806,1807],{"class":157},"'\n",[97,1809,1810],{"class":99,"line":1612},[97,1811,257],{"class":111},[97,1813,1814],{"class":99,"line":1617},[97,1815,301],{"class":111},[77,1817,1819],{"id":1818},"_3-3-composableへの分離","3-3. Composableへの分離",[88,1821,1825],{"className":1822,"code":1823,"language":1824,"meta":93,"style":93},"language-typescript shiki shiki-themes vitesse-light vitesse-light","// composables/useCodingStandardsViewer.ts\nexport function useCodingStandardsViewer() {\n  const steps = ref([]);\n  const activeIndex = ref(0);\n\n  function handleKeydown(e: KeyboardEvent) {\n    // ...\n  }\n\n  onMounted(() => {\n    window.addEventListener('keydown', handleKeydown);\n  });\n\n  onBeforeUnmount(() => {\n    window.removeEventListener('keydown', handleKeydown);\n  });\n\n  return {\n    steps,\n    activeIndex,\n    // ...\n  };\n}\n","typescript",[33,1826,1827,1832,1848,1864,1881,1885,1906,1910,1914,1918,1929,1952,1957,1961,1972,1994,1998,2002,2010,2018,2026,2031,2037],{"__ignoreMap":93},[97,1828,1829],{"class":99,"line":100},[97,1830,1831],{"class":936},"// composables/useCodingStandardsViewer.ts\n",[97,1833,1834,1837,1840,1843,1846],{"class":99,"line":125},[97,1835,1836],{"class":128},"export",[97,1838,1839],{"class":103}," function",[97,1841,1842],{"class":107}," useCodingStandardsViewer",[97,1844,1845],{"class":111},"()",[97,1847,122],{"class":111},[97,1849,1850,1853,1856,1858,1861],{"class":99,"line":172},[97,1851,1852],{"class":103},"  const ",[97,1854,1855],{"class":115},"steps",[97,1857,873],{"class":111},[97,1859,1860],{"class":107}," ref",[97,1862,1863],{"class":111},"([]);\n",[97,1865,1866,1868,1871,1873,1875,1877,1879],{"class":99,"line":186},[97,1867,1852],{"class":103},[97,1869,1870],{"class":115},"activeIndex",[97,1872,873],{"class":111},[97,1874,1860],{"class":107},[97,1876,112],{"class":111},[97,1878,674],{"class":378},[97,1880,301],{"class":111},[97,1882,1883],{"class":99,"line":194},[97,1884,1007],{"emptyLinePlaceholder":1006},[97,1886,1887,1890,1892,1894,1896,1898,1902,1904],{"class":99,"line":235},[97,1888,1889],{"class":103},"  function",[97,1891,108],{"class":107},[97,1893,112],{"class":111},[97,1895,116],{"class":115},[97,1897,31],{"class":111},[97,1899,1901],{"class":1900},"sSkh3","KeyboardEvent",[97,1903,119],{"class":111},[97,1905,122],{"class":111},[97,1907,1908],{"class":99,"line":246},[97,1909,1604],{"class":936},[97,1911,1912],{"class":99,"line":254},[97,1913,257],{"class":111},[97,1915,1916],{"class":99,"line":260},[97,1917,1007],{"emptyLinePlaceholder":1006},[97,1919,1920,1923,1925,1927],{"class":99,"line":1069},[97,1921,1922],{"class":107},"  onMounted",[97,1924,1572],{"class":111},[97,1926,1044],{"class":111},[97,1928,122],{"class":111},[97,1930,1931,1934,1936,1938,1940,1942,1944,1946,1948,1950],{"class":99,"line":1078},[97,1932,1933],{"class":115},"    window",[97,1935,137],{"class":111},[97,1937,284],{"class":107},[97,1939,112],{"class":111},[97,1941,165],{"class":157},[97,1943,291],{"class":161},[97,1945,165],{"class":157},[97,1947,296],{"class":111},[97,1949,108],{"class":115},[97,1951,301],{"class":111},[97,1953,1954],{"class":99,"line":1109},[97,1955,1956],{"class":111},"  });\n",[97,1958,1959],{"class":99,"line":1115},[97,1960,1007],{"emptyLinePlaceholder":1006},[97,1962,1963,1966,1968,1970],{"class":99,"line":1124},[97,1964,1965],{"class":107},"  onBeforeUnmount",[97,1967,1572],{"class":111},[97,1969,1044],{"class":111},[97,1971,122],{"class":111},[97,1973,1974,1976,1978,1980,1982,1984,1986,1988,1990,1992],{"class":99,"line":1607},[97,1975,1933],{"class":115},[97,1977,137],{"class":111},[97,1979,321],{"class":107},[97,1981,112],{"class":111},[97,1983,165],{"class":157},[97,1985,291],{"class":161},[97,1987,165],{"class":157},[97,1989,296],{"class":111},[97,1991,108],{"class":115},[97,1993,301],{"class":111},[97,1995,1996],{"class":99,"line":1612},[97,1997,1956],{"class":111},[97,1999,2000],{"class":99,"line":1617},[97,2001,1007],{"emptyLinePlaceholder":1006},[97,2003,2005,2008],{"class":99,"line":2004},18,[97,2006,2007],{"class":128},"  return",[97,2009,122],{"class":111},[97,2011,2013,2016],{"class":99,"line":2012},19,[97,2014,2015],{"class":115},"    steps",[97,2017,1676],{"class":111},[97,2019,2021,2024],{"class":99,"line":2020},20,[97,2022,2023],{"class":115},"    activeIndex",[97,2025,1676],{"class":111},[97,2027,2029],{"class":99,"line":2028},21,[97,2030,1604],{"class":936},[97,2032,2034],{"class":99,"line":2033},22,[97,2035,2036],{"class":111},"  };\n",[97,2038,2040],{"class":99,"line":2039},23,[97,2041,263],{"class":111},[13,2043,2044],{"id":2044},"実装優先順位",[17,2046,2048],{"id":2047},"最優先今すぐ実施","最優先（今すぐ実施）",[1412,2050,2051,2057,2063],{},[25,2052,2053,2056],{},[28,2054,2055],{},"z-indexの動的生成"," - 方法Bを採用",[25,2058,2059,2062],{},[28,2060,2061],{},"イベントリスナー登録の確実化"," - nextTick を2回使用",[25,2064,2065,2068],{},[28,2066,2067],{},"デバッグログの追加"," - 問題箇所の特定",[17,2070,2072],{"id":2071},"次に実施動作確認後","次に実施（動作確認後）",[1412,2074,2075,2081],{"start":186},[25,2076,2077,2080],{},[28,2078,2079],{},"Chrome DevToolsでの詳細調査"," - イベントリスナー、DOM状態、エラーの確認",[25,2082,2083,2086],{},[28,2084,2085],{},"スクロール処理の最適化"," - passiveオプション、IntersectionObserverの調整",[17,2088,2089],{"id":2089},"長期的に検討",[1412,2091,2092,2098],{"start":235},[25,2093,2094,2097],{},[28,2095,2096],{},"ClientOnlyの削除"," - SSR/CSRの切り替えを適切に処理",[25,2099,2100,2103],{},[28,2101,2102],{},"Composableへの分離"," - コードの可読性と保守性向上",[13,2105,2106],{"id":2106},"期待される結果",[17,2108,2109],{"id":2109},"修正後の動作",[1412,2111,2112,2129,2145],{},[25,2113,2114,375,2117],{},[28,2115,2116],{},"キーボードショートカット",[22,2118,2119,2124],{},[25,2120,2121,2123],{},[33,2122,35],{},": 次のルールにスムーズに移動",[25,2125,2126,2128],{},[33,2127,39],{},": 前のルールにスムーズに移動",[25,2130,2131,375,2134],{},[28,2132,2133],{},"スクロール",[22,2135,2136,2139,2142],{},[25,2137,2138],{},"マウスホイールでのスクロールが正常に動作",[25,2140,2141],{},"タッチパッドでのスクロールが正常に動作",[25,2143,2144],{},"スクロールバーが表示され操作可能",[25,2146,2147,375,2150],{},[28,2148,2149],{},"全体的な改善",[22,2151,2152,2155,2158],{},[25,2153,2154],{},"すべてのルール（100以上）で正しくz-indexが適用される",[25,2156,2157],{},"ハイドレーションエラーが発生しない",[25,2159,2160],{},"パフォーマンスが向上する",[13,2162,2163],{"id":2163},"次のステップ",[1412,2165,2166,2169,2172,2175,2178],{},[25,2167,2168],{},"Phase 1の修正を実装",[25,2170,2171],{},"動作確認（ローカル環境）",[25,2173,2174],{},"Phase 2のデバッグ実施",[25,2176,2177],{},"必要に応じてPhase 3の改善を実施",[25,2179,2180],{},"本ドキュメントを更新（修正結果を記録）",[13,2182,2183],{"id":2183},"関連ファイル",[22,2185,2186,2191,2197,2203],{},[25,2187,2188,2190],{},[33,2189,75],{}," - ビューアページ（全体）",[25,2192,2193,2196],{},[33,2194,2195],{},"apps/web/app/pages/coding-standards/viewer/[ruleId].vue"," - 個別ルールページ",[25,2198,2199,2202],{},[33,2200,2201],{},"apps/web/app/pages/coding-standards/index.vue"," - 一覧ページ",[25,2204,2205,2208],{},[33,2206,2207],{},"apps/web/public/data/coding-standards.json"," - ルールデータ",[986,2210,2211],{},"html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .sHkkW, html code.shiki .sHkkW{--shiki-default:#1E754F;--shiki-dark:#1E754F}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}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 .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}html pre.shiki code .sM54T, html code.shiki .sM54T{--shiki-default:#2F798A;--shiki-dark:#2F798A}html pre.shiki code .snbK4, html code.shiki .snbK4{--shiki-default:#A65E2B;--shiki-dark:#A65E2B}html pre.shiki code .sG7-3, html code.shiki .sG7-3{--shiki-default:#393A34;--shiki-dark:#393A34}html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .sSkh3, html code.shiki .sSkh3{--shiki-default:#2E8F82;--shiki-dark:#2E8F82}",{"title":93,"searchDepth":125,"depth":125,"links":2213},[2214,2218,2222,2228,2233,2238,2241,2242],{"id":15,"depth":125,"text":15,"children":2215},[2216,2217],{"id":19,"depth":172,"text":20},{"id":52,"depth":172,"text":53},{"id":68,"depth":125,"text":68,"children":2219},[2220],{"id":71,"depth":172,"text":2221},"ファイル: apps/web/app/pages/coding-standards/viewer/index.vue",{"id":519,"depth":125,"text":519,"children":2223},[2224,2225,2226,2227],{"id":522,"depth":172,"text":523},{"id":644,"depth":172,"text":645},{"id":804,"depth":172,"text":805},{"id":827,"depth":172,"text":828},{"id":961,"depth":125,"text":961,"children":2229},[2230,2231,2232],{"id":964,"depth":172,"text":965},{"id":1402,"depth":172,"text":1403},{"id":1481,"depth":172,"text":1482},{"id":2044,"depth":125,"text":2044,"children":2234},[2235,2236,2237],{"id":2047,"depth":172,"text":2048},{"id":2071,"depth":172,"text":2072},{"id":2089,"depth":172,"text":2089},{"id":2106,"depth":125,"text":2106,"children":2239},[2240],{"id":2109,"depth":172,"text":2109},{"id":2163,"depth":125,"text":2163},{"id":2183,"depth":125,"text":2183},null,"Ctrl+キーボードショートカットとスクロール機能が動作しない問題の原因と解決策","md",{},"/coding-standards-viewer-bugs-analysis",false,"2025-11-18T00:00:00.000Z",{"title":5,"description":2244},"2025-11/2025-11-18/coding-standards-viewer-bugs-analysis",[538,2253,2254,2255],"nuxt","debugging","bug-fix","VAJVrzT686tTb6tq6RzeMmTI77kr_nE_LWEH6SevQD8",[],[2259,2263,2266,2270,2273],{"title":2260,"path":2261,"publishedAt":2262},"useOgMetaヘルパーのビルドエラー調査","/useogmeta-build-failure-analysis","2025-12-31T00:00:00.000Z",{"title":2264,"path":2265,"publishedAt":2249},"コーディング規約ビューアのTOC開閉バグ修正","/coding-standards-viewer-toc-reactivity-fix",{"title":2267,"path":2268,"publishedAt":2269},"全18講に触って動くシミュレーターを入れた日 — PR12本のレビューから講座導線の作り直しまで","/code-course-interactive-rollout","2026-07-26T00:00:00.000Z",{"title":2271,"path":2272,"publishedAt":2269},"インタラクティブ教材を1枚に集約し、本文の線を減らした日","/interactive-content-consolidation",{"title":2274,"path":2275,"publishedAt":2276},"Webサービスの技術構成 2026年版 — Vue.js/Nuxt/Astroの使い分けとその理由","/web-tech-stack-2026","2026-07-22T00:00:00.000Z","https://log.eurekapu.com/og/blog/coding-standards-viewer-bugs-analysis.png?v=2025-11-18T00%3A00%3A00.000Z&title=%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A6%8F%E7%B4%84%E3%83%93%E3%83%A5%E3%83%BC%E3%82%A2%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E3%83%90%E3%82%B0%E5%88%86%E6%9E%90%E3%81%A8%E4%BF%AE%E6%AD%A3%E8%A8%88%E7%94%BB&author=Kei%20Komatsu&sig=d03d6bd0a51eed23",1785654660675]