[{"data":1,"prerenderedAt":455},["ShallowReactive",2],{"content-/2026-08-07-diary":3,"all-pages-for-dir":432,"related-/2026-08-07-diary":433,"og-image-/2026-08-07-diary":454},{"id":4,"title":5,"body":6,"category":413,"concepts":414,"description":415,"extension":416,"meta":417,"navigation":365,"ogImage":414,"path":418,"project_name":419,"published":420,"publishedAt":421,"seo":422,"source":423,"stem":424,"tags":425,"todo":414,"unpublished":420,"updatedAt":414,"__hash__":431},"pages/2026-08/2026-08-07/diary-2026-08-07.md","2026年8月7日の開発日記 - 緩めたルールを、元に戻した日",{"type":7,"value":8,"toc":397},"minimark",[9,14,18,21,24,28,35,38,43,46,49,55,68,79,82,86,89,92,96,107,115,117,121,124,127,131,142,150,152,156,159,163,174,182,184,187,330,332,335,349,351,354,374,376,379],[10,11,13],"h1",{"id":12},"_2026年8月7日の開発日記","2026年8月7日の開発日記",[15,16,17],"p",{},"朝、Mac で PDF をクリックするとブラウザで開いてしまうのが面倒で、簡易的な閲覧アプリを自分で作ろうと思い立った。計画書ができて画面に出てきたところで、レビューを通していないことに気づいた。",[15,19,20],{},"調べると、ルール自体が「大規模な計画のみレビュー必須」に緩めてあった。緩めた本人は自分である。小さいから省いてよいという判断が、まさにその条件に当てはまってしまっていた。ルールを元に戻した。",[15,22,23],{},"この日は他にも、溜まった写真の一括処理、事業サイトの検索流入の点検、教材ページの構造の見直しが並んだ。",[25,26,27],"h2",{"id":27},"今日のタイムライン",[15,29,30],{},[31,32],"img",{"alt":33,"src":34},"タイムライン","/2026-08/2026-08-07/timeline-2026-08-07.png",[25,36,37],{"id":37},"今日やったこと",[39,40,42],"h3",{"id":41},"_1-pdfビューアーの計画づくりとレビュー運用の巻き戻し","1. PDFビューアーの計画づくりと、レビュー運用の巻き戻し",[15,44,45],{},"技術スタックの候補を実測で確かめてから計画書を書かせ、判断が必要な箇所は決裁フォームにまとめて表示させた。そこでレビュー漏れに気づき、レビューを通してから読み直した。",[15,47,48],{},"指摘を受けて計画は変わった。配布を前提にすると、相手が有償ソフトを契約していない場合まで考える必要が出てくる。",[15,50,51],{},[52,53,54],"strong",{},"主な成果:",[56,57,58,62,65],"ul",{},[59,60,61],"li",{},"環境を実測してから技術選定に入り、候補を絞った",[59,63,64],{},"計画書のレビューを「規模を問わず必須」に戻した",[59,66,67],{},"判断が要る点を決裁フォームにまとめ、読みながら選べる形にした",[15,69,70,73,74],{},[52,71,72],{},"詳細:"," ",[75,76,78],"a",{"href":77},"/mac-pdf-viewer-plan-and-review-rule","MacのPDFビューアーを自作する計画と、計画書レビューを必ず通す運用に戻した記録",[80,81],"hr",{},[39,83,85],{"id":84},"_2-写真42枚をまとめてocrした","2. 写真42枚をまとめてOCRした",[15,87,88],{},"ダウンロードに溜まった写真をまとめて読み取らせた。サブエージェントを並列で走らせ、前処理は途中で作り直した。読み取りを検算する手立てが他に無かったので、同じ画像を独立に2回読ませて一致を見る方針にした。",[15,90,91],{},"ただし突き合わせは終わっていない。2回目を待つ間に照合スクリプトまで用意させたところで、月の利用上限に当たってセッションが切れた。",[15,93,94],{},[52,95,54],{},[56,97,98,101,104],{},[59,99,100],{},"42枚を並列で処理し、待ち時間を圧縮した",[59,102,103],{},"前処理を作り直し、読み取りやすい状態に整えた",[59,105,106],{},"独立2回読みで検算する方針を決め、照合スクリプトまで用意した（突き合わせ自体は未了）",[15,108,109,73,111],{},[52,110,72],{},[75,112,114],{"href":113},"/bulk-photo-ocr-subagents","写真42枚をサブエージェント並列でOCR。前処理の作り直しと独立2回読みで精度を担保する",[80,116],{},[39,118,120],{"id":119},"_3-事業サイトの検索流入を点検した","3. 事業サイトの検索流入を点検した",[15,122,123],{},"ブラウザの開発者ツール越しに検索コンソールを開き、どのページがインデックスされているかを見た。種別ごとのページを新設するかどうかも検討した。",[15,125,126],{},"夜には防犯まわりの調べものをして、既存の解説コンテンツに反映できる場所を探して入れさせた。",[15,128,129],{},[52,130,54],{},[56,132,133,136,139],{},[59,134,135],{},"インデックス状況を確認し、拾えていないページを把握した",[59,137,138],{},"検索順位の実測値をとって、基準の状態を記録した",[59,140,141],{},"調べた内容を既存記事の該当箇所に差し込んだ",[15,143,144,73,146],{},[52,145,72],{},[75,147,149],{"href":148},"/search-console-index-check-and-ranking-baseline","検索コンソールのインデックス確認から検索順位の実測まで、事業サイトのSEOを一日で点検する",[80,151],{},[39,153,155],{"id":154},"_4-引き継ぎ書から再開して教材ページを分割した","4. 引き継ぎ書から再開して、教材ページを分割した",[15,157,158],{},"前のセッションの引き継ぎ書を読ませてから続きに入った。組み合わせの考え方が分かりにくかったので、仕組みを確かめてから、既存の教材と相互リンクする独立ページを作る方針に決めた。",[15,160,161],{},[52,162,54],{},[56,164,165,168,171],{},[59,166,167],{},"引き継ぎ書を起点に、前提の説明なしで作業を再開した",[59,169,170],{},"分かりにくかった仕組みを、数えさせて確認した",[59,172,173],{},"1枚に詰め込まず、相互リンクで分ける構成に切り替えた",[15,175,176,73,178],{},[52,177,72],{},[75,179,181],{"href":180},"/handoff-doc-and-cross-linked-lesson-pages","Claude Codeの引き継ぎ書で作業を再開し、教材HTMLを相互リンクで分割する",[80,183],{},[25,185,186],{"id":186},"今日の試行錯誤",[188,189,190,212],"table",{},[191,192,193],"thead",{},[194,195,196,200,203,206,209],"tr",{},[197,198,199],"th",{},"#",[197,201,202],{},"テーマ",[197,204,205],{},"試したこと",[197,207,208],{},"結果",[197,210,211],{},"気づき",[213,214,215,233,249,265,282,298,315],"tbody",{},[194,216,217,221,224,227,230],{},[218,219,220],"td",{},"1",[218,222,223],{},"計画書の品質",[218,225,226],{},"小規模だからとレビューを省いた",[218,228,229],{},"失敗",[218,231,232],{},"省く判断の根拠が、自分で緩めたルールだった",[194,234,235,238,240,243,246],{},[218,236,237],{},"2",[218,239,223],{},[218,241,242],{},"レビューを通し、指摘を反映してから読み直した",[218,244,245],{},"成功",[218,247,248],{},"配布前提という論点が計画に足りていなかった",[194,250,251,254,257,260,262],{},[218,252,253],{},"3",[218,255,256],{},"計画書の運用",[218,258,259],{},"ルールの条件を読み返した",[218,261,245],{},[218,263,264],{},"「規模を問わず必須」に戻した",[194,266,267,270,273,276,279],{},[218,268,269],{},"4",[218,271,272],{},"写真のOCR",[218,274,275],{},"そのまま読み取らせた",[218,277,278],{},"不十分",[218,280,281],{},"読み取りが安定しない",[194,283,284,287,289,292,295],{},[218,285,286],{},"5",[218,288,272],{},[218,290,291],{},"前処理を作り直し、独立2回読みで検算する方針にした",[218,293,294],{},"途中",[218,296,297],{},"照合スクリプトまで用意したが、利用上限で突き合わせは翌日へ持ち越した",[194,299,300,303,306,309,312],{},[218,301,302],{},"6",[218,304,305],{},"教材の構成",[218,307,308],{},"1ページに詰め込む形を検討した",[218,310,311],{},"却下",[218,313,314],{},"組み合わせが増えると読めない",[194,316,317,320,322,325,327],{},[218,318,319],{},"7",[218,321,305],{},[218,323,324],{},"相互リンクで独立ページに分けた",[218,326,245],{},[218,328,329],{},"入口を複数にしたほうが辿りやすい",[80,331],{},[25,333,334],{"id":334},"今日の学び",[56,336,337,340,343,346],{},[59,338,339],{},"自分で緩めたルールは、緩めたことを忘れたころに効いてくる。「例外にあたるから省く」と判断したとき、その例外を作ったのが誰かを思い出したほうがいい",[59,341,342],{},"レビューは品質を上げる工程というより、前提の抜けを見つける工程だった。今回は配布という前提が抜けていた",[59,344,345],{},"読み取りに検算の手立てが無いとき、二度読んで一致を見る以外に確かめようがなかった。手間は増えるが、これしか残らない場面がある",[59,347,348],{},"引き継ぎ書があると、再開のときに前提説明をやり直さずに済む",[80,350],{},[25,352,353],{"id":353},"明日やること",[56,355,358,368],{"className":356},[357],"contains-task-list",[59,359,362,367],{"className":360},[361],"task-list-item",[363,364],"input",{"disabled":365,"type":366},true,"checkbox"," PDFビューアーの実装に着手する",[59,369,371,373],{"className":370},[361],[363,372],{"disabled":365,"type":366}," 検索順位の実測値を、次回と比べられる形で残す",[80,375],{},[25,377,378],{"id":378},"関連記事",[56,380,381,385,389,393],{},[59,382,383],{},[75,384,78],{"href":77},[59,386,387],{},[75,388,114],{"href":113},[59,390,391],{},[75,392,149],{"href":148},[59,394,395],{},[75,396,181],{"href":180},{"title":398,"searchDepth":399,"depth":399,"links":400},"",2,[401,402,409,410,411,412],{"id":27,"depth":399,"text":27},{"id":37,"depth":399,"text":37,"children":403},[404,406,407,408],{"id":41,"depth":405,"text":42},3,{"id":84,"depth":405,"text":85},{"id":119,"depth":405,"text":120},{"id":154,"depth":405,"text":155},{"id":186,"depth":399,"text":186},{"id":334,"depth":399,"text":334},{"id":353,"depth":399,"text":353},{"id":378,"depth":399,"text":378},"diary",null,"PDFビューアーの計画づくりでレビュー漏れに気づき、計画書のレビューを規模を問わず必須に戻した一日。写真42枚のOCR、検索流入の点検、教材ページの分割も進めた。","md",{},"/2026-08-07-diary","daily-log",false,"2026-08-07T00:00:00.000Z",{"title":5,"description":415},"make-diary","2026-08/2026-08-07/diary-2026-08-07",[426,427,428,429,430],"日記","計画書","OCR","SEO","Claude Code","NAxnX4qYhXHFESCJUnoF60Q5dSv4Lu-u0Aecp9eCMQ8",[],[434,438,442,446,450],{"title":435,"path":436,"publishedAt":437},"2026年8月6日の開発日記 - 「取り込み済み」が使えるとは限らなかった","/2026-08-06-diary","2026-08-06T00:00:00.000Z",{"title":439,"path":440,"publishedAt":441},"2026年8月3日の開発日記 - 壊れていたのは、思い込みのほうだった","/2026-08-03-diary","2026-08-03T00:00:00.000Z",{"title":443,"path":444,"publishedAt":445},"2026年8月2日の開発日記 - WindowsからMacへ環境を移した一日","/2026-08-02-diary","2026-08-02T00:00:00.000Z",{"title":447,"path":448,"publishedAt":449},"2026年5月27日の開発日記 - 残骸9222リスナーを片付け、過去問と参考書をDBに流し込んだ一日","/2026-05-27-diary","2026-05-27T00:00:00.000Z",{"title":451,"path":452,"publishedAt":453},"2026年4月23日の開発日記 - 会計教育コンテンツのUI刷新と基準データベース整備、開発環境の大掃除","/2026-04-23-diary","2026-04-23T00:00:00.000Z","https://log.eurekapu.com/og/blog/2026-08-07-diary.png?v=2026-08-07T00%3A00%3A00.000Z&title=2026%E5%B9%B48%E6%9C%887%E6%97%A5%E3%81%AE%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98%20-%20%E7%B7%A9%E3%82%81%E3%81%9F%E3%83%AB%E3%83%BC%E3%83%AB%E3%82%92%E3%80%81%E5%85%83%E3%81%AB%E6%88%BB%E3%81%97%E3%81%9F%E6%97%A5&author=Kei%20Komatsu&sig=1d593edeea584cdd",1786233112394]