[{"data":1,"prerenderedAt":175},["ShallowReactive",2],{"content-/dev-environment-cleanup":3,"all-pages-for-dir":153,"related-/dev-environment-cleanup":154,"og-image-/dev-environment-cleanup":174},{"id":4,"title":5,"body":6,"category":134,"concepts":135,"description":136,"extension":137,"meta":138,"navigation":139,"ogImage":135,"path":140,"project_name":141,"published":142,"publishedAt":143,"seo":144,"source":145,"stem":146,"tags":147,"todo":135,"unpublished":142,"updatedAt":135,"__hash__":152},"pages/2026-08/2026-08-13/dev-environment-cleanup.md","開発環境に溜まった4つの不具合を一日で片付けた記録",{"type":7,"value":8,"toc":126},"minimark",[9,12,16,21,24,27,30,33,36,40,48,51,54,57,61,68,71,74,85,88,91,95,106,109,112,123],[10,11,5],"h1",{"id":5},[13,14,15],"p",{},"今日は、種類も原因もまったく違う「動かない」を4つ、順番に片付ける一日になった。\nノートPCのスクロール、記事のプレビュー、Chrome拡張機能、開発環境のプロセスそのもの。\n関連はなく、ただ順に潰していくしかなかった。",[17,18,20],"h2",{"id":19},"thinkpadの横スクロールをめぐる残タスク","ThinkPadの横スクロールをめぐる残タスク",[13,22,23],{},"8月11日から追いかけていたThinkPadのトラックポイントの横スクロール不具合の計画書には、残タスクが4件残っていた。\n次にやることとして書かれていたのは「再起動を1回はさみ、HScrollFun.exeが自動常駐するかwatchdog.logで確認する」という一文だった。",[13,25,26],{},"朝、その計画書を見て、まず確かめたいことがあった。\n残っている実験は自分がやるべきものだったか。\n数日前、モニタの電源が落ちて、電源ボタンを押し直す機会があった。\nそのあとスクロールは普通に効いていた。\nだとすれば、もう全部終わっているのではないか。",[13,28,29],{},"ログを確認させると、残タスク4件のうち3件はその場で確定できた。\n見張りタスク(タスクスケジューラ)が06:08:00に発火し、HScrollFun.exe(PID 23412)がSessionId 1で起動していた。\nwatchdog.logには「STARTED」と記録されていた。\nすでに動いていたことを示す「ALIVE」ではなく「STARTED」という記録だった。\nこれは、ログオン直後の時点ではまだ起動していなかった、ということになる。\n前日2026-08-12の再起動でも同じ挙動だった。",[13,31,32],{},"つまり、Lenovo純正の自動起動経路は第1世代ドライバを削除したあとも現れておらず、見張りタスクが唯一の起動経路として機能し続けている。\n恒久対策は効いている、と結論が出た。\n残タスクをすべて完了とし、計画書のcarryoverをstatus: doneに更新させた。",[13,34,35],{},"自分が実験したのは電源ボタンを押した一度きりで、あとの確認作業はログを読むだけで済むものだった、と念を押された。\n「それ以外はもう終わりってことですか」と聞くと、記事への追記が残っていた。\ndescriptionから直させ、devサーバーでlintを走らせ、実際の描画を確認させてから、学習ゲートをスキップしてコミットさせた。",[17,37,39],{"id":38},"記事プレビューがconnection-refusedで止まる","記事プレビューがConnection refusedで止まる",[13,41,42,43,47],{},"新しく書いた記事をローカルで確認しようとしたら、ブラウザが「Connection refused」を繰り返した。\n開こうとしていたのはPiのコーディングエージェントについての記事で、URLは",[44,45,46],"code",{},"http://localhost:3001/pi-coding-agent-local-llm","だった。",[13,49,50],{},"「これ進んでますか?」「なんで止まるか教えてくれませんか? このFirewallProxyMaybeBlockedって。」と聞いた。\n返ってきたエラーは「Connection refused — a firewall or proxy may be blocking it」で、リトライを10回繰り返してもつながらなかった。",[13,52,53],{},"調べさせると、原因はファイアウォールでもプロキシでもなかった。\nブラウザには以前開いたlocalhost:3001のタブが残っていたが、開発サーバー自体はすでに停止していた。\nしかもこの作業のルール上、そこから新しく開発サーバーを起動することはできない。\nその場でのプレビューはできない、という結論になった。",[13,55,56],{},"代わりに、Markdown構文とfrontmatterのスキーマ、公開パスの重複だけを静的に検証させた。\n実際の見た目の確認は、次に開発サーバーが動いている状態のときに持ち越しになった。",[17,58,60],{"id":59},"chrome拡張のダウンロードボタンが動かない","Chrome拡張のダウンロードボタンが動かない",[13,62,63,64,67],{},"Twitter動画のダウンロード用に自作したChrome拡張で、投稿のダウンロードボタンを押したら「Error when communicating with the native messaging host」というエラーが出た。\nログの場所(",[44,65,66],{},"%LOCALAPPDATA%\\Temp\\x-video-downloader.log",")まで書いてあるエラー画面をスクリーンショットに撮って渡し、原因を探らせた。",[13,69,70],{},"Python、yt-dlp、保存先ドライブ、レジストリといった環境自体は揃っていた。\nbatファイル経由で直接通信を試させると応答は正常に返ってきて、実URLでダウンロードさせると本当に保存先ドライブに保存された。\nつまりネイティブホスト自体は健全で、Chromeからの接続だけが失敗していることになる。",[13,72,73],{},"ログを見ると、その日記録されていたのはテスト分の1行だけで、ボタンを押した瞬間(09:18頃)の記録がどこにもなかった。\nPythonが起動すらしていない、ということだ。\nbat→PowerShell→pythonという3段構えの呼び出しを疑わせた。\nPATHにpythonが見つからない場合は標準出力が空のまま終わってしまい、Chrome側からは通信失敗としか見えない、という仮説にたどり着いた。",[13,75,76,77,80,81,84],{},"拡張機能のボタン配置(返信、リツイート、いいね、ダウンロード、ブックマーク、共有)を確認させたあと、実際にダウンロードボタンを押させると、同じエラーが即座に再現した。\nChromeが拡張を起動する環境をそのままダンプさせ、決定的な一行(",[44,78,79],{},"where python","の結果)を確認させると、ChromeのPATHにPythonが入っていないことが確定した。\n",[44,82,83],{},"where powershell","は通っていたので、Chrome自身は動いているのに、その先のPythonにだけたどり着けていなかった。",[13,86,87],{},"同じ理由でyt-dlpもPATH頼みで見つからなくなる作りだったので、あわせて修正させた。\n修正後、Chromeと同じ痩せたPATHを再現して検証させると、一度はstderrに別のバグが出た。\nbatに書き足した日本語コメントがcp932として誤解釈され、コマンドの一部として実行されてしまっていた。\nASCIIだけの表記に直させると、その問題も消えた。",[13,89,90],{},"最後にChromeから実際にダウンロードボタンを押させて確認した。\nPythonが起動し、保存先ドライブに35MBのファイルが届いた。\n原因はChromeのPATHにPythonが入っていなかったこと、それだけだった。",[17,92,94],{"id":93},"走りっぱなしのdevプロセスとmcpサーバー","走りっぱなしのdevプロセスとMCPサーバー",[13,96,97,98,101,102,105],{},"複数のClaude Codeセッションを開いていると、devサーバーやMCPサーバーが二重三重に立つ。\n",[44,99,100],{},"/procs","コマンドで一覧を出させると、ちょうどそのタイミングで本番ビルド(nuxt generate)が14:00:56から走っていた。\nメモリは4.6GBまで膨らんでおり、10分ほどかかる処理だった。\nこのビルドは過去に空きメモリ不足で",[44,103,104],{},"0xC0000142","として落ちたことがある。\n今のうちにMCPを掃除しておくのは理にかなっている、という判断だった。",[13,107,108],{},"22個を止めさせた。\n結果は24個から2個(このセッション分のみ)に減り、2,521MB解放された。\nビルドは生きたまま6.5GBまで膨らんでいった。",[13,110,111],{},"数字だけ見ると引っかかる部分があった。\n空きメモリは7.7GBから6.0GBへ「減って」いた。\n掃除したのに減っている、というのは一見矛盾に見える。\n実際には、ビルドが4.6GBから6.5GBへ1.9GB膨らんだ分がそのまま反映されているだけで、掃除していなければ3.5GB程度まで落ちていた計算になる。\n過去にクラッシュしたときの空きは3.9GBだったから、掃除しなければ危ない水準に入っていた。",[13,113,114,115,118,119,122],{},"「どうやればいいんですか、コマンドは。これはexitであればいいんですか?」と尋ねた。\n",[44,116,117],{},"/exit","で合っている、という答えとあわせて、それでMCPが本当に落ちるのかを実測させた。\n途中、「親不在のプロセスは9個ともClaude本体が終了済み」という説明が一度出たが、これは訂正された。\n",[44,120,121],{},"ParentProcessId","が指していたのはClaude本体ではなく、間にはさまるcmd.exeやnpxのシムだった。\nシムはexec後に抜けるのが普通なので、親が不在なだけでは孤児プロセスの証拠にならない。\n正常終了させて数えると、MCPプロセスの数は10のまま増減しなかった。\n「Windowsだから残る」という以前の説明も、この実測で覆った。",[13,124,125],{},"そのあと、画面に出ていた「node×10」という数字が気になった。\n「このセッションで10も立ち上がってるんですか。無駄なやつ立ってないんですか。」と聞き直した。\n調べさせると、10個のうちこのセッションの分は4個だけだった。\n現在のセッションはPID 34312で、残る6個の内訳を一つずつ洗い出させた。\n仕分けはそこで一区切りになった。",{"title":127,"searchDepth":128,"depth":128,"links":129},"",2,[130,131,132,133],{"id":19,"depth":128,"text":20},{"id":38,"depth":128,"text":39},{"id":59,"depth":128,"text":60},{"id":93,"depth":128,"text":94},"dev",null,"ThinkPadの横スクロール調査の決着、記事プレビューのConnection refused、Chrome拡張のネイティブメッセージング不通、走りっぱなしdevプロセスの掃除。独立した4つの詰まりを順番に処理した一日の記録。","md",{},true,"/dev-environment-cleanup","misc-dev",false,"2026-08-13T00:00:00.000Z",{"title":5,"description":136},"make-diary","2026-08/2026-08-13/dev-environment-cleanup",[148,149,150,151],"開発環境","トラブルシューティング","Chrome拡張機能","プロセス管理","8cRmEu5HQ7ORgxlEtOlFdNhpUgkBKQOUGsnSP30bpW4",[],[155,158,162,166,170],{"title":156,"path":157,"publishedAt":143},"Windows で Codex CLI が動かなくなった原因を切り分けて復旧した記録","/codex-cli-windows-fix",{"title":159,"path":160,"publishedAt":161},"2026年3月22日の開発日記 - 環境修正からChrome拡張のSheets連携まで","/2026-03-22-diary","2026-03-22T00:00:00.000Z",{"title":163,"path":164,"publishedAt":165},"Windows で nul ファイルが勝手に作成される問題","/windows-nul-file-issue","2025-12-04T00:00:00.000Z",{"title":167,"path":168,"publishedAt":169},"電源を切ると直るバグを追う — ThinkPadキーボードのスクロールだけが死ぬ理由","/thinkpad-trackpoint-scroll-dies-after-sleep","2026-08-11T00:00:00.000Z",{"title":171,"path":172,"publishedAt":173},"Macへの移行でバックアップを作り直したら、削除ガードが動いていなかった","/mac-migration-backup-and-delete-guard","2026-08-04T00:00:00.000Z","https://log.eurekapu.com/og/blog/dev-environment-cleanup.png?v=2026-08-13T00%3A00%3A00.000Z&title=%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AB%E6%BA%9C%E3%81%BE%E3%81%A3%E3%81%9F4%E3%81%A4%E3%81%AE%E4%B8%8D%E5%85%B7%E5%90%88%E3%82%92%E4%B8%80%E6%97%A5%E3%81%A7%E7%89%87%E4%BB%98%E3%81%91%E3%81%9F%E8%A8%98%E9%8C%B2&author=Kei%20Komatsu&sig=1cfb808da3e63524",1786703897830]