PaPoo
cover

ENOTFOUND が出るときに、まず切り分けたいこと

ENOTFOUND は、少なくとも今回の issue 群では「DNS が引けていない」系の失敗として現れています。ただし、同じ見え方でも原因は 1 つではありません。今回確認できた範囲では、claude update で失敗するケースと、macOS のスリープ復帰後に OAuth の更新がこけるケースが並んでいます。

症状の入口としては、claude update や Web 系の操作で ENOTFOUND / ETIMEDOUT が出て、その後にログイン状態が崩れるか、アップデートだけ失敗するかを見ます。参照できる issue は #71699#85149 です。

まず、自分の環境で Claude Code がどう入っているかは確認しておいたほうがよさそうです。手元の出力では、claude doctor が複数インストールを検出しています。

$ claude doctor
Claude Code doctor

Running: native (2.1.207)
Commit: bc512d563325
Platform: darwin-arm64
Path: ~/.local/share/claude/versions/2.1.207
Config install method: native
Search: OK (bundled)
Auto-updates: enabled
Auto-update channel: latest
Last update attempt: none recorded

Multiple installations found
- npm-global at /usr/local/bin/claude
- native at ~/.local/bin/claude

Remote Control
Control this session from claude.ai/code or the Claude mobile app

1 warning found
- Leftover npm global installation at /usr/local/bin/claude
  Fix: Run: npm -g uninstall @anthropic-ai/claude-code

For a full setup checkup that can also fix issues, run /doctor in a Claude Code session.

この出力だけから言えるのは、少なくとも検証環境では native 版が動いていて、npm global 版が残っていることです。ENOTFOUND の直接原因かどうかは、このログだけでは分かりません。

もう 1 つ、手元のバージョンは 2.1.207 でした。

$ claude --version
2.1.207 (Claude Code)

issue #71699 では、Linux + systemd-resolved + split-tunnel VPN で claude update が失敗し、同じ Node runtime でも fetch()dns.lookup() は通るのに updater だけが落ちる、と報告されています。報告本文では、updater が c-ares 経由で DNS を引いているため、systemd-resolved の経路ではなく /etc/resolv.conf 側の名前解決に乗る、という説明でした。ここで出ているエラーは EREFUSED ですが、issue の説明としては DNS 経路の違いが焦点です。

一方、#85149 は macOS の DarkWake 中に OAuth refresh が走り、DNS がまだ使えないタイミングで ENOTFOUNDETIMEDOUT が出て、そのあと loggedIn: false になり、Claude Code-credentials の Keychain 項目が消える、という話です。こちらは updater ではなく、スリープ復帰まわりの一時的な DNS 失敗がログイン喪失に繋がるケースです。

この 2 件を並べると、ENOTFOUND が出たからといって、すぐに「ネットが完全に死んでいる」とは言えません。少なくとも issue の報告では、更新処理だけ失敗している場合と、復帰直後の一時的な DNS 不可用状態で認証更新が失敗している場合が分かれています。

実際に何を見ればいいかは、次の順が現実的だと思われます。まず claude doctor で、今使っている実体とインストール状態を確認する。次に、ENOTFOUND が出る場面が claude update なのか、起動後のログイン維持なのか、WebFetch など他の機能でも再現するのかを見る。issue #71699 のコメントでは、/etc/hosts ではこの経路には効かないという指摘も出ていますが、これは c-ares 経由で名前解決している場合の話として述べられていました。今回の手元出力だけではそこまで確認できていません。

現時点で確実に言えるのは、ENOTFOUND はこの症状クラスタの中で DNS 側の失敗として出ており、しかも更新処理とログイン維持で別の経路が絡んでいる可能性がある、ということです。少なくとも、手元の claude doctor では複数インストールが見えているので、まずは実体の整理をしてから再現条件を詰めるのがよさそうです。


検証環境

claude --version : 2.1.207 (Claude Code)
OS          : Darwin 25.3.0 (arm64)
Python      : 3.14.2
検証日時    : 2026-08-12T01:50:21+09:00

参照した Issue(anthropics/claude-code): #71699, #85149

同じ著者の記事