[{"data":1,"prerenderedAt":804},["ShallowReactive",2],{"content-/2026-05-18-diary":3,"all-pages-for-dir":802,"og-image-/2026-05-18-diary":803},{"id":4,"title":5,"body":6,"category":783,"description":784,"extension":785,"meta":786,"navigation":713,"ogImage":787,"path":788,"project_name":789,"published":790,"publishedAt":791,"seo":792,"stem":793,"tags":794,"todo":787,"unpublished":790,"updatedAt":787,"__hash__":801},"pages/2026-05/2026-05-18/diary-2026-05-18.md","2026年5月18日の開発日記 - サブエージェント並列とCodex反復レビューで一日中AIに走らせ続けた日",{"type":7,"value":8,"toc":765},"minimark",[9,14,18,22,29,32,37,40,46,67,78,81,85,88,92,128,136,138,142,145,149,182,190,192,196,199,203,224,232,234,238,241,245,262,270,272,276,279,283,310,318,320,323,672,674,677,697,699,702,734,736,739],[10,11,13],"h1",{"id":12},"_2026年5月18日の開発日記","2026年5月18日の開発日記",[15,16,17],"p",{},"朝5時台に「コードが散らかってきたから整理したい」と一言投げてからスタートして、夜まで一日中、サブエージェントとCodexを並列で走らせ続けた日。eurekapu-nuxt4 の大掃除（Critical 3件・High 8件・Medium 7件、1788件テスト全通過）、教科書とクイズの2カラム化、Anthropic公式ベストプラクティスの取り込み、田原町の物件探し、決算ウォッチャー仕様の反復、そして beat-monitoring の Markdown → Vue 移行と16銘柄のEPSガイダンス並列取得。判断を自分でして、実装と調査はサブエージェント・Codex・Chrome DevTools MCP・agent-browser に分担させた。",[19,20,21],"h2",{"id":21},"今日のタイムライン",[15,23,24],{},[25,26],"img",{"alt":27,"src":28},"タイムライン","/2026-05/2026-05-18/timeline-2026-05-18.png",[19,30,31],{"id":31},"今日やったこと",[33,34,36],"h3",{"id":35},"_1-eurekapu-nuxt4-をサブエージェント並列レビューcodex-3回ループで大掃除","1. eurekapu-nuxt4 をサブエージェント並列レビュー＋Codex 3回ループで大掃除",[15,38,39],{},"朝イチで「散らかってきたから vitest/playwright/coverage でリファクタしたい」と投げて、構造・セキュリティ・パフォーマンス・SREの4視点でサブエージェントを並列に走らせた。結果を統合レポートにして Codex (gpt-5.5) に投げ、「致命的指摘なし」が出るまで3回ループさせた。",[15,41,42],{},[43,44,45],"strong",{},"主な成果:",[47,48,49,53,56,59],"ul",{},[50,51,52],"li",{},"Critical 3件: Stripe Webhook を D1 batch でアトミック化／purchaseGating 既定値 true 化／rollup 4.57.1 → 4.60.4 で CVE 回避",[50,54,55],{},"High 8件: Stripe checkout/portal origin 解決＋try/catch、admins API 二重認証、better-auth singleton を WeakMap で D1 binding ごと分離、構造化ログ追加、/api/health に Stripe 疎通",[50,57,58],{},"テスト基盤の修復: i18n プラグインが立ち上がらない問題を vitest.config.ts の override で解決。Test Files 8→0 失敗、Tests 1738→1788 全件通過",[50,60,61,62,66],{},"ビルドエラーの最後の障害物: ExcelHtmlViewer.vue のコメント内 ",[63,64,65],"code",{},"\u003C/script>"," を Vue SFC パーサーが script 終端と誤認していた",[15,68,69,72,73],{},[43,70,71],{},"詳細:"," ",[74,75,77],"a",{"href":76},"/code-review-iterative-refactor","コードが散らかってきたのでサブエージェント並列レビュー＋Codex 3回ループで一気に大掃除した",[79,80],"hr",{},[33,82,84],{"id":83},"_2-教科書とクイズを-part-12-の2カラムに整えローカル専用のマークダウンビューアを作った","2. 教科書とクイズを Part 1/2 の2カラムに整え、ローカル専用のマークダウンビューアを作った",[15,86,87],{},"「縦に積まれた Part 1/Part 2 を横並びに」という見た目の話から始めて、積み残し洗い出し → memo ビューア新規実装 → トーンアンドマナー統一 → CHバッジ → パンくず追加まで一気に進めた。",[15,89,90],{},[43,91,45],{},[47,93,94,97,107,118,125],{},[50,95,96],{},"教科書とクイズの index を PC幅2カラム / モバイル1カラムで再構成",[50,98,99,102,103,106],{},[63,100,101],{},"/dev/memo"," でローカルのマークダウンを閲覧できるビューアを実装（marked 依存を流用、",[63,104,105],{},"import.meta.dev"," ガードで本番除外）",[50,108,109,110,113,114,117],{},"HMR が ",[63,111,112],{},"memo/"," と ",[63,115,116],{},"audio-assets/"," の watch でループ再ビルドしていた問題を nuxt.config.ts の ignore で止めた",[50,119,120,121,124],{},"右サイドバー目次にスクロール追従ハイライト。",[63,122,123],{},"await useFetch"," で async setup になっていたのがハイライト不発の真因だった",[50,126,127],{},"クイズ目次の各カードに「📖 対応 CH8 / CH9 / CH12」の対応バッジを表示",[15,129,130,72,132],{},[43,131,71],{},[74,133,135],{"href":134},"/textbook-quiz-twocolumn-memo-viewer","教科書とクイズを Part 1/2 の2カラムに整え、ローカルのマークダウンビューアまで作った",[79,137],{},[33,139,141],{"id":140},"_3-anthropic公式の-claude-code-ベストプラクティスを読んで自環境との差分を埋めた","3. Anthropic公式の Claude Code ベストプラクティスを読んで、自環境との差分を埋めた",[15,143,144],{},"Anthropic 公式ブログ \"How Claude Code works in large codebases\" を WebFetch で取りに行って失敗 → ルール通り agent-browser でフォールバックして取得。読んでから「自分の環境との乖離を洗い出して」と Claude Code に投げて、提案された6項目（A〜F）を判断しながら全部実施した。",[15,146,147],{},[43,148,45],{},[47,150,151,158,169,176,179],{},[50,152,153,154,157],{},"A: CLAUDE.md を階層化（モノレポルート最小化 + apps/web/ に作業用 + ",[63,155,156],{},".claude/rules/"," に詳細）",[50,159,160,161,164,165,168],{},"C: ",[63,162,163],{},"/reflect-session"," スラッシュコマンドを作成して、当日2件の学び候補を ",[63,166,167],{},"memo/claude-md-candidates/"," に蓄積",[50,170,171,172,175],{},"D: モデル固有指示を ",[63,173,174],{},"~/.claude/rules/opus-4.7-tactics.md"," に隔離（モデル更新時に削除しやすく）",[50,177,178],{},"E: プロジェクト Skill に TRIGGER / SKIP のパス制約を追加",[50,180,181],{},"F: AGENTS.md を CLAUDE.md ポインタに集約",[15,183,184,72,186],{},[43,185,71],{},[74,187,189],{"href":188},"/claude-code-best-practices-alignment","Anthropic公式の Claude Code ベストプラクティスを読んで、自分の環境との差分を埋めた",[79,191],{},[33,193,195],{"id":194},"_4-東京のある駅まわりの物件を-agent-browser-経由で-suumo-28件分まとめて学区フィルタと築年経過まで入れた","4. 東京のある駅まわりの物件を agent-browser 経由で SUUMO 28件分まとめて、学区フィルタと築年経過まで入れた",[15,197,198],{},"午前、ふと東京のある駅まわりの物件相場を並べたくなって Claude Code に「3LDK中心、戸建ても」と投げた。LIFULL HOME's はブロックされたので SUUMO 一本に切り替え、中古マンション28件＋新築戸建て5件を取得。レポート + 定点観測用 JSON を作って、子供の小学校の学区フィルタと築年経過を併記する優先順に並べ替えた。",[15,200,201],{},[43,202,45],{},[47,204,205,208,211,214,221],{},[50,206,207],{},"SUUMO の駅から探すで対象駅ページの URL を発見、3LDK絞り込みで 28 件取得",[50,209,210],{},"裸URL → インラインリンク + 物件名を取り直し",[50,212,213],{},"学区を Wikipedia から引いて学区フィルタを優先順位の軸に組み込み",[50,215,216,217,220],{},"築年表記と築年経過（2026年5月時点）の併記、JSONに ",[63,218,219],{},"ageYears"," フィールド追加",[50,222,223],{},"戸建て1物件の SUUMO 詳細から建て替え条件を確認（所有権・商業地域・角地2面接道・建ぺい80%/容積500%）",[15,225,226,72,228],{},[43,227,71],{},[74,229,231],{"href":230},"/tokyo-property-search-2026-05-18","東京のある駅まわりの物件を agent-browser 経由で SUUMO 28件分まとめて、学区フィルタと築年経過まで入れた",[79,233],{},[33,235,237],{"id":236},"_5-アナリスト予想ビート率ウォッチャーの仕様を-v05-まで反復自作判断に着地","5. アナリスト予想ビート率ウォッチャーの仕様を v0.5 まで反復、自作判断に着地",[15,239,240],{},"NVDA や MU の Whisper Beat と次Qガイダンスを毎四半期手で追うのがもう4回目だったので、仕様を起こしてアプリ化することに。Earnings Whispers / Koyfin / fiscal.ai を agent-browser と Chrome DevTools MCP で実画面確認し、最終的に Codex (GPT-5.5) に個人向けサービスを掘らせて自作判断に着地した。",[15,242,243],{},[43,244,45],{},[47,246,247,250,253,256,259],{},[50,248,249],{},"v0.2 で Koyfin に「ガイダンスがある」と思い込んでいたのを公式ヘルプの1行目で訂正",[50,251,252],{},"fiscal.ai はガイダンス専用タブを持たないことを実画面で確認",[50,254,255],{},"Codex に問い合わせて Benzinga / MetricDuck / Trefis / CapyFin / Fintool を発見、前言訂正して仕様書 v0.3 に追加",[50,257,258],{},"5年で $17,100 を手で書き出して「課金キリないから自作」と判断",[50,260,261],{},"Codex SDK + App Server + ChatGPT サブスクで運用する案を v0.5 にまとめ、新規リポジトリ nvidia-guidance-watcher を切り出し",[15,263,264,72,266],{},[43,265,71],{},[74,267,269],{"href":268},"/earnings-beat-watcher-spec","アナリスト予想ビート率ウォッチャーの仕様を v0.5 まで反復、最終的に自作判断に着地した",[79,271],{},[33,273,275],{"id":274},"_6-決算ビートモニタリングをmdvueに移行右軸折れ線と16銘柄のepsガイダンス取得まで1日で巻いた","6. 決算ビートモニタリングをMD→Vueに移行、右軸折れ線と16銘柄のEPSガイダンス取得まで1日で巻いた",[15,277,278],{},"beat-monitoring（決算ビート率モニタリング）の Markdown ベースをやめて、銘柄ごとの JSON + Vue ページ + Chart.js でレンダーする構成に移し替えた。BEパイロット → NVDA で12四半期に拡張 → 右軸折れ線（上振れ率）を試作 → 本番化 → サブエージェント並列で16銘柄のEPSガイダンス取得まで一日で巻いた。",[15,280,281],{},[43,282,45],{},[47,284,285,288,291,294,297,300,307],{},[50,286,287],{},"計画書を Codex 2回レビューで4点の致命的指摘（_redirects上限、SSGプリレンダー、文字列→数値変換、Chart.js SSR）反映",[50,289,290],{},"BeatStockChart / BeatExpectationsChart / TripleBeatTable を新規実装、parseCurrency 純粋関数+テスト10件pass",[50,292,293],{},"NVDA を過去4期 → 8期 → 12期に拡張、株価÷100誤算（実際は分割比10:1なので÷10）を発見して訂正",[50,295,296],{},"ガイダンス上振れ率の右軸折れ線、0中央 symmetric 軸、テーブル凡例の6段階濃淡をテキスト色に流用",[50,298,299],{},"サブエージェント14個並列で16銘柄のEPSガイダンスJSON更新、MU は Codex 版で全面差し替え",[50,301,302,303,306],{},"NVDA は公式IR で EPS を非公表という慣例を発見、",[63,304,305],{},"hasEpsGuidance"," ロジックで表ごと隠してコメント表示",[50,308,309],{},"simplify でレビュー3エージェント並列起動 → parseCurrency バグ、beatBand 重複、テスト残りを片付け",[15,311,312,72,314],{},[43,313,71],{},[74,315,317],{"href":316},"/beat-monitoring-vue-migration","決算ビートモニタリングをMD→Vueに移行、右軸折れ線と16銘柄のEPSガイダンス取得まで1日で巻いた",[79,319],{},[19,321,322],{"id":322},"今日の試行錯誤",[324,325,326,348],"table",{},[327,328,329],"thead",{},[330,331,332,336,339,342,345],"tr",{},[333,334,335],"th",{},"#",[333,337,338],{},"テーマ",[333,340,341],{},"試したこと",[333,343,344],{},"結果",[333,346,347],{},"気づき",[349,350,351,369,386,403,420,443,460,479,496,513,530,547,564,581,601,618,635,655],"tbody",{},[330,352,353,357,360,363,366],{},[354,355,356],"td",{},"1",[354,358,359],{},"コードレビューの優先度判定",[354,361,362],{},"サブエージェントが PERF を Critical 分類していた",[354,364,365],{},"Codex 1回目で「UX 改善は資金損失より下位」と訂正された",[354,367,368],{},"4並列のレビューはバラバラに優先度を付けがち。Codex の俯瞰目線で整える",[330,370,371,374,377,380,383],{},[354,372,373],{},"2",[354,375,376],{},"テスト基盤の i18n 起動失敗",[354,378,379],{},"setup.ts に i18n モックを足してみる",[354,381,382],{},"効かず。vitest.config.ts で nuxt config の override を入れた",[354,384,385],{},"環境変数ではなくモジュール単位で外す方が確実",[330,387,388,391,394,397,400],{},[354,389,390],{},"3",[354,392,393],{},"quizTopicsDisplayNumber 重複バグ",[354,395,396],{},"テスト側が同一 slug で重複検索していた",[354,398,399],{},"section 内で slug が一意なのを忘れて section をハードコードして失敗 → quizTopics 全候補から照合する方式に",[354,401,402],{},"重複検出は実コードを直すかテストを直すか、最初に切り分けるべき",[330,404,405,408,411,414,417],{},[354,406,407],{},"4",[354,409,410],{},"カバレッジが hook timeout で生成失敗",[354,412,413],{},"並列実行で再発",[354,415,416],{},"singleThread に切替えて取得成功",[354,418,419],{},"v8 並列は壊れやすい。安定取得は singleThread",[330,421,422,425,431,434,437],{},[354,423,424],{},"5",[354,426,427,428,430],{},"ビルドエラー（コメント内 ",[63,429,65],{},"）",[354,432,433],{},"Vue SFC パーサーが script 終端と誤認",[354,435,436],{},"文字列リテラル分割して回避",[354,438,439,440,442],{},"コメントでも文字列でも ",[63,441,65],{}," を書くと壊れる",[330,444,445,448,451,454,457],{},[354,446,447],{},"6",[354,449,450],{},"memo ビューアの HMR ループ再ビルド",[354,452,453],{},"dev server が永遠に「Nuxt Nitro server built」を吐く",[354,455,456],{},"nuxt.config.ts の watch ignore に memo/ と audio-assets/ を追加",[354,458,459],{},"コンテンツディレクトリは watch から外すのがデフォルト",[330,461,462,465,468,471,476],{},[354,463,464],{},"7",[354,466,467],{},"目次ハイライトが効かない",[354,469,470],{},"onMounted のログすら出ない",[354,472,473,475],{},[63,474,123],{}," で async setup になっていて client setup が走らない真因を切り分け",[354,477,478],{},"Suspense 警告は無視できないシグナル",[330,480,481,484,487,490,493],{},[354,482,483],{},"8",[354,485,486],{},"WebFetch で Anthropic 公式ブログが取れない",[354,488,489],{},"SSL かボット対策",[354,491,492],{},"agent-browser フォールバックで一発取得",[354,494,495],{},"グローバルルール通り、1秒で諦めて agent-browser に切り替える",[330,497,498,501,504,507,510],{},[354,499,500],{},"9",[354,502,503],{},"LIFULL HOME'S が agent-browser でブロック",[354,505,506],{},"別タブで開いたら403",[354,508,509],{},"SUUMO 一本に切り替え",[354,511,512],{},"ブロック検知は何回試してもダメ。即切り替える",[330,514,515,518,521,524,527],{},[354,516,517],{},"10",[354,519,520],{},"Koyfin にガイダンスがあると思い込み",[354,522,523],{},"公式ヘルプを開く",[354,525,526],{},"1行目に「企業ガイダンスは含まれません」と明記、仕様書を訂正",[354,528,529],{},"一次資料に当たる前に書かない",[330,531,532,535,538,541,544],{},[354,533,534],{},"11",[354,536,537],{},"fiscal.ai のガイダンスタブ探し",[354,539,540],{},"Chrome DevTools MCP で実画面のタブを巡回",[354,542,543],{},"ガイダンス専用ビューがないことを確認",[354,545,546],{},"スクショじゃなくページ構造を直接見る",[330,548,549,552,555,558,561],{},[354,550,551],{},"12",[354,553,554],{},"「個人向けガイダンスサービスはあるか」",[354,556,557],{},"Codex (GPT-5.5) に問い合わせ",[354,559,560],{},"Benzinga / MetricDuck 等を発見、前言訂正",[354,562,563],{},"自分の知らない領域は Codex に詰めてもらう",[330,565,566,569,572,575,578],{},[354,567,568],{},"13",[354,570,571],{},"NVDA の株価が ÷100 で誤算",[354,573,574],{},"サブエージェントが取得したデータが分割考慮で間違っていた",[354,576,577],{},"÷10（実際の分割比 10:1）に訂正",[354,579,580],{},"分割比のメタデータをサブエージェントに渡しておくべき",[330,582,583,586,589,595,598],{},[354,584,585],{},"14",[354,587,588],{},"テスト4つ目チャートの「0中央」配置",[354,590,591,594],{},[63,592,593],{},":test-right-axis=\"true\""," props で削除しやすく作成",[354,596,597],{},"「色分けして」「右軸が見やすい」と評価され本番化、テスト props 削除",[354,599,600],{},"削除しやすい実験は採用される確率も高い",[330,602,603,606,609,612,615],{},[354,604,605],{},"15",[354,607,608],{},"6段階の色濃淡を折れ線に流用",[354,610,611],{},"テーブル凡例の cell-mag-1/2/3 / cell-blue-1/2/3 を点 fill に使用",[354,613,614],{},"テキスト色は薄すぎて見えない → テキストだけ別パレット（1段階濃く）",[354,616,617],{},"背景色とテキスト色は別系統で持つべき",[330,619,620,623,626,629,632],{},[354,621,622],{},"16",[354,624,625],{},"16銘柄並列サブエージェント",[354,627,628],{},"14並列で起動、LLY だけ時間切れ",[354,630,631],{},"手動で最低限の新構造（EPS=null）にラップ",[354,633,634],{},"並列の中で1つ詰まったら手で前進させる",[330,636,637,640,643,646,652],{},[354,638,639],{},"17",[354,641,642],{},"NVDA は EPS ガイダンスを出さない",[354,644,645],{},"全12四半期 NA 表示になっていた",[354,647,648,649,651],{},"公式IR の Outlook を確認、",[63,650,305],{}," で表ごと隠してコメント表示",[354,653,654],{},"NA だらけの表は情報じゃなくノイズ",[330,656,657,660,663,666,669],{},[354,658,659],{},"18",[354,661,662],{},"Grok と Codex の数値比較",[354,664,665],{},"Grok に検証プロンプトを出してもらい比較",[354,667,668],{},"Codex (GPT-5.5) の方が一次資料の指定と整合が良いと判定",[354,670,671],{},"数値検証は複数の AI で並列に取って突き合わせる",[79,673],{},[19,675,676],{"id":676},"今日の学び",[47,678,679,682,685,688,691,694],{},[50,680,681],{},"並列サブエージェント＋Codex 反復レビューの組み合わせは、Critical/High/Medium を一日で一気に潰せる威力がある。判断を自分でして、実装と分類は AI に分担させる構図が回る",[50,683,684],{},"「致命的な指摘なし」が出るまで Codex ループを回す運用が定着してきた。1回目で優先度の歪みを指摘されることが多いので、最初のレポートはサブエージェントに作らせて Codex で整えるのが効率的",[50,686,687],{},"WebFetch が失敗したら 1 秒で agent-browser に切り替える運用は、今日2回助かった（Anthropic公式ブログ、Earnings Whispers）",[50,689,690],{},"「テスト用」と銘打って削除しやすく作った実験は、採用される確率が高い。右軸折れ線の例",[50,692,693],{},"AI が数値を取りに行くときは、分割比のような前提メタデータを最初に渡しておくべき（株価÷100誤算の教訓）",[50,695,696],{},"NA だらけの表示は情報じゃなくノイズ。データが取れないなら表ごと隠してコメントに置換する方が UX が高い",[79,698],{},[19,700,701],{"id":701},"明日やること",[47,703,706,716,722,728],{"className":704},[705],"contains-task-list",[50,707,710,715],{"className":708},[709],"task-list-item",[711,712],"input",{"disabled":713,"type":714},true,"checkbox"," beat-monitoring の simplify Phase 2: 残った Quality 指摘を順次反映",[50,717,719,721],{"className":718},[709],[711,720],{"disabled":713,"type":714}," eurekapu-nuxt4 の本番デプロイ動作確認（scripts/deploy.ps1）",[50,723,725,727],{"className":724},[709],[711,726],{"disabled":713,"type":714}," PERF-C1（@nuxt/image + WebP化）の段階的計画。SVG は対象外と判明したので方針を立て直す",[50,729,731,733],{"className":730},[709],[711,732],{"disabled":713,"type":714}," nvidia-guidance-watcher の最初のスパイク実装（SEC EDGAR Atom フィードから 8-K 検知）",[79,735],{},[19,737,738],{"id":738},"関連記事",[47,740,741,745,749,753,757,761],{},[50,742,743],{},[74,744,77],{"href":76},[50,746,747],{},[74,748,135],{"href":134},[50,750,751],{},[74,752,189],{"href":188},[50,754,755],{},[74,756,231],{"href":230},[50,758,759],{},[74,760,269],{"href":268},[50,762,763],{},[74,764,317],{"href":316},{"title":766,"searchDepth":767,"depth":767,"links":768},"",2,[769,770,779,780,781,782],{"id":21,"depth":767,"text":21},{"id":31,"depth":767,"text":31,"children":771},[772,774,775,776,777,778],{"id":35,"depth":773,"text":36},3,{"id":83,"depth":773,"text":84},{"id":140,"depth":773,"text":141},{"id":194,"depth":773,"text":195},{"id":236,"depth":773,"text":237},{"id":274,"depth":773,"text":275},{"id":322,"depth":767,"text":322},{"id":676,"depth":767,"text":676},{"id":701,"depth":767,"text":701},{"id":738,"depth":767,"text":738},"diary","コードレビューを並列＋反復で巻き、教科書UIを2カラム化し、ベストプラクティスを階層化CLAUDE.mdに落とし、田原町の物件を学区フィルタで並べ替え、決算ウォッチャーの仕様を v0.5 まで反復、ビート率モニタリングを MD→Vue に移して16銘柄のEPSガイダンスを並列取得した一日。","md",{},null,"/2026-05-18-diary","daily-log",false,"2026-05-18T00:00:00.000Z",{"title":5,"description":784},"2026-05/2026-05-18/diary-2026-05-18",[795,796,797,798,799,800],"日記","サブエージェント並列","Codex","agent-browser","Vue移行","Chrome DevTools MCP","IqkWkDeKTHw2cbJZKfCkd9ui8X2cvvMdk9uUEGyG0Jg",[],"https://log.eurekapu.com/og/blog/2026-05-18-diary.png?v=2026-05-18T00%3A00%3A00.000Z&title=2026%E5%B9%B45%E6%9C%8818%E6%97%A5%E3%81%AE%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98%20-%20%E3%82%B5%E3%83%96%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E4%B8%A6%E5%88%97%E3%81%A8Codex%E5%8F%8D%E5%BE%A9%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%A7%E4%B8%80%E6%97%A5%E4%B8%ADAI%E3%81%AB%E8%B5%B0%E3%82%89%E3%81%9B%E7%B6%9A%E3%81%91%E3%81%9F%E6%97%A5&author=Kei%20Komatsu&sig=f49d95305223184d",1782528839121]