[{"data":1,"prerenderedAt":200},["ShallowReactive",2],{"content-/deploy-and-dev-process-cleanup":3,"all-pages-for-dir":177,"related-/deploy-and-dev-process-cleanup":178,"og-image-/deploy-and-dev-process-cleanup":199},{"id":4,"title":5,"body":6,"category":157,"concepts":158,"description":159,"extension":160,"meta":161,"navigation":162,"ogImage":158,"path":163,"project_name":164,"published":165,"publishedAt":166,"seo":167,"source":168,"stem":169,"tags":170,"todo":158,"unpublished":165,"updatedAt":158,"__hash__":176},"pages/2026-09/2026-09-03/deploy-and-dev-process-cleanup.md","止まったセッションを履歴から復元し、デプロイと dev サーバーの掃除まで通した日",{"type":7,"value":8,"toc":147},"minimark",[9,13,16,19,23,26,29,32,35,44,47,50,53,56,59,62,65,73,79,82,89,92,96,99,102,109,112,116,119,126,129,132,135,138,141,144],[10,11,12],"p",{},"図解を2枚作らせている途中で、画面が動かなくなった。\n「ごめん、これ進んでますか？」と打ったが、返事は来ない。",[10,14,15],{},"その少し前に、セッションの上限に達したという表示が出ていた。\nそのあと続きを頼み、図解の作成には入っていた。\nそこから先が動かない。",[10,17,18],{},"手元から見えるのは止まった画面だけで、記事がどこまで書けているのかは分からない。\n書き上がっているのか、見出しだけなのか。",[20,21,22],"h2",{"id":22},"昼に追いかけていたもの",[10,24,25],{},"課税事業者届出書は消費税法57条1項が提出を義務づけている。\n義務だと条文に書いてあるなら、破ったときの罰則もどこかにあるはずだ。\nそれを探すところから始めた。",[10,27,28],{},"条文の確認、実務論点の整理、X検索を並行で回させた。\nX検索は最初、要約の前置きだけを返して本文を出さなかった。\nそこで投げ直させた。",[10,30,31],{},"手が止まったのは、以前ChatGPTと話した内容を確認させたときだった。\n出典が国土交通省になっている箇所がある。\n消費税の話で国交省が出てくる道理がない。\nそこから主張を1つずつ一次資料に当て直させた。\n核心の論点であるインボイス登録事業者の届出要否は、国税庁のQ&Aと通達まで戻って確定させた。",[10,33,34],{},"記事に載せる数値も、書き始める前に全部裏を取らせた。\nそこまで進んだところで止まった。",[10,36,37,38,43],{},"条文と通達をどう追ったかは、",[39,40,42],"a",{"href":41},"/kazei-jigyosha-todokedesho-penalty","課税事業者届出書を出さないと何が起きるか"," に書いた。",[20,45,46],{"id":46},"コミットではなく履歴を見せた",[10,48,49],{},"新しいセッションを開いて、まず今どういう状況なのかを教えてほしいと頼んだ。",[10,51,52],{},"このときgitを見せても意味がない。\n記事の分をまだコミットしていないので、履歴には前日までの姿しか残っていない。\nどこまで進んだかを持っているのは、止まったセッションのログのほうだ。",[10,54,55],{},"そこで「さっきのセッション履歴を見て、途中からやって。ただ、まず計画書と進捗を比べて」と指示した。\nどこまで終わったかを自己申告させるのではなく、記録と計画を突き合わせさせたかった。",[10,57,58],{},"返ってきた答えは拍子抜けするものだった。\n記事本体は止まる前に完成していて、残っていたのは図解2枚が記事に貼られていないことだけだった。\n図解を埋め込ませ、lintを通し、表示を確認して終わった。",[10,60,61],{},"コミットを3本に分けて押し、origin/master と同期させた。",[20,63,64],{"id":64},"デプロイの時間はどこで食われたか",[10,66,67,68,72],{},"デプロイの前に ",[69,70,71],"code",{},"/procs"," を回させた。\n空きメモリが5.6GB、走っているプロセスが9個だった。\n余裕があるので、掃除せずそのまま進めた。",[10,74,75,78],{},[69,76,77],{},"/deploy"," はローカルでビルドしてCloudflare Pagesへ直接上げる。\n15時25分に開始した。",[10,80,81],{},"内訳を追っていくと、時間の食い方がはっきり分かれていた。\n1,881記事のコンテンツ解析が42.3秒。\nクライアントビルドが6,761モジュールで約1分40秒、サーバービルドが5,130モジュール。\nプリレンダーは7,953ルートを379秒で、ここだけで6分を超える。\n仕上げの postgenerate は10ステップで57.1秒。",[10,83,84,85,88],{},"サーバービルドのところだけは、通過を確かめさせた。\nここは ",[69,86,87],{},"tsconfig"," を dev サーバーと共有する唯一の場所で、走りっぱなしの dev サーバーがあると競合する。\n今回は出なかった。",[10,90,91],{},"R2に置いた画像は2,139件をHEADで全件当てさせた。\n本番側では buildId を照合し、JavaScriptのチャンク1,354個を検査させた。\n最後にR2を同期し直し、cache-bust を付けてもう一度2,139件を検証させて終わった。",[20,93,95],{"id":94},"直したらしいを自分で確かめた","「直したらしい」を自分で確かめた",[10,97,98],{},"デプロイの最中に通知が出た。\n中身を読むと、こちらの変更への指摘ではなく、セキュリティレビュー用フックのスクリプト自体が壊れているというエラーだった。",[10,100,101],{},"このフックは別のところで直したと聞いていた。\nただ、聞いただけだ。\nデプロイが終わってから、実際にPythonが起動するところまで確認させた。",[10,103,104,105,108],{},"エラーが指していた括弧は88行目で、",[69,106,107],{},"is_sdk_compatible()"," の case 文だった。\n修正はすでに入っていて、起動も通った。\n同じエラーは再現しない。",[10,110,111],{},"「直っているらしい」で止めると、次にこのフックが黙って死んでいても気づけない。\nまして壊れていたのはセキュリティレビュー用のフックだ。\n黙って死なれると困る。",[20,113,115],{"id":114},"走りっぱなしの-dev-サーバー3本","走りっぱなしの dev サーバー3本",[10,117,118],{},"セッションを閉じる前に、余っているプロセスを掃除させた。",[10,120,121,122,125],{},"数えさせたら dev サーバーが3本立っていた。\n3本ともポートを掴んでいる。\n掃除ツールの ",[69,123,124],{},"list-dev-procs.py"," は一部を「ポートなし」と報告していたが、実際には掴んでいた。\n検出漏れだ。",[10,127,128],{},"止めてよさそうな3件を落としたところ、9プロセス3,869MBが6プロセス1,278MBまで下がった。\n空きメモリは5.4GBから8.0GBに戻った。",[10,130,131],{},"残した2本のうち、3100は蔵書ナレッジベース、3200は別リポジトリのサイトだった。\nどちらもChromeにタブを開いたままだったので、一度は残させた。\nただ、3100はもう使わないので落とすことにした。\n3200は使うので残す。\n応答が返ることを確認させてから終わった。",[10,133,134],{},"最後に残ったのは dev サーバー1本と chrome-devtools MCP 4件だった。",[20,136,137],{"id":137},"残っている引っかかり",[10,139,140],{},"後から引っかかったのは、掃除ツールの報告が実態とずれていたことだ。\n「ポートなし」と出ていたプロセスが、ポートを掴んでいた。",[10,142,143],{},"今回は3本しかなく目視で追えたから気づいた。\nこれが10本あったら、気づかずに、使っているサーバーまで巻き込んで落としていたかもしれない。",[10,145,146],{},"検出のロジックは、まだ見ていない。",{"title":148,"searchDepth":149,"depth":149,"links":150},"",2,[151,152,153,154,155,156],{"id":22,"depth":149,"text":22},{"id":46,"depth":149,"text":46},{"id":64,"depth":149,"text":64},{"id":94,"depth":149,"text":95},{"id":114,"depth":149,"text":115},{"id":137,"depth":149,"text":137},"dev",null,"消費税法の条文を追った記事を書いている途中でセッションが止まった。コミットではなくセッション履歴から状況を復元させ、記事の仕上げからCloudflare Pagesへのデプロイ、走りっぱなしの開発プロセスの掃除までを通した一日の記録。","md",{},true,"/deploy-and-dev-process-cleanup","mdx-playground",false,"2026-09-03T00:00:00.000Z",{"title":5,"description":159},"make-diary","2026-09/2026-09-03/deploy-and-dev-process-cleanup",[171,172,173,174,175],"Claude Code","デプロイ","Cloudflare Pages","開発環境","セッション復元","2tSdOplsHvulEplNDVsOteLBMvqRihEp7vKRhEa7MUE",[],[179,183,187,191,195],{"title":180,"path":181,"publishedAt":182},"dev サーバーを止めずにデプロイできるよう、Nuxt のビルド出力先と Content DB を分けた","/deploy-while-dev-running","2026-07-31T00:00:00.000Z",{"title":184,"path":185,"publishedAt":186},"ウィンドウを閉じても消えないターミナルをtmuxで用意する","/tmux-persistent-terminal-sessions","2026-08-19T00:00:00.000Z",{"title":188,"path":189,"publishedAt":190},"ブラウザ経由をやめて2台のPCのClaude Codeをつないだ日と、TTSナレーションのテンポ設計","/cross-machine-bridge-and-tts-rhythm","2026-08-18T00:00:00.000Z",{"title":192,"path":193,"publishedAt":194},"デプロイ25分の内訳を計測して、削れる場所と削れない場所を分けた","/deploy-time-breakdown-measurement","2026-08-14T00:00:00.000Z",{"title":196,"path":197,"publishedAt":198},"Windows で Codex CLI が動かなくなった原因を切り分けて復旧した記録","/codex-cli-windows-fix","2026-08-13T00:00:00.000Z","https://log.eurekapu.com/og/blog/deploy-and-dev-process-cleanup.png?v=2026-09-03T00%3A00%3A00.000Z&title=%E6%AD%A2%E3%81%BE%E3%81%A3%E3%81%9F%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%B1%A5%E6%AD%B4%E3%81%8B%E3%82%89%E5%BE%A9%E5%85%83%E3%81%97%E3%80%81%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%A8%20dev%20%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E6%8E%83%E9%99%A4%E3%81%BE%E3%81%A7%E9%80%9A%E3%81%97%E3%81%9F%E6%97%A5&author=Kei%20Komatsu&sig=49c7f98eb3237ef5",1788821551118]