はじめに (対象読者・この記事でわかること)

このブログは、Linux/macOS のターミナルで zsh を日常的に利用しているエンジニアや開発者、特に「コマンドが全く効かなくなった」「zsh: command not found が毎回出る」などの症状に遭遇した方を対象としています。
この記事を読むと、以下のことができるようになります。

  • zsh がフリーズしたりコマンドが通らなくなる原因を特定できる
  • .zshrc や環境変数の破損をリセットし、シェルを復旧させる手順が分かる
  • 再発防止のためのベストプラクティスを理解し、安心して zsh を使い続けられる

執筆のきっかけは、私自身が作業中に突然 zsh が全く反応しなくなり、復旧に時間を取られた経験です。同じ悩みを抱える方の助けになれば幸いです。

前提知識

この記事をスムーズに読み進めるために、以下の知識があると望ましいです。

  • 基本的な UNIX/Linux のシェル操作(cd、ls、echo など)
  • zsh のインストールと .zshrc の編集経験
  • テキストエディタ(vim、nano、VS Code など)の基本操作

zsh が全く動かなくなる原因と概要

zsh が「全くコマンドが通らない」状態になる原因は大きく分けて 3 種類あります。

  1. PATH 環境変数の破損
    .zshrc で PATH を上書きした結果、標準的なコマンドが検索対象から外れてしまうケースです。たとえば export PATH=/my/custom/bin だけを書いてしまうと、/usr/bin/bin が除外され、lsgit が見つからなくなります。

  2. シンタックスエラーや不正なコマンド
    .zshrc に書いたスクリプトがシンタックスエラーを起こすと、zsh の起動時にエラーが発生し、以降のプロンプトが使えなくなることがあります。特に source で読み込んだ外部ファイルが壊れていると、全体に影響します。

  3. プラグインやフレームワークの競合
    Oh My Zshzplugantigen などのプラグインマネージャを導入していると、プラグイン同士やテーマとの競合でシェルが正常に初期化できなくなる場合があります。特に更新時にバージョン不整合が起こると、意図しない挙動が出やすいです。

上記を踏まえて、まずは 環境変数と設定ファイルの状態を確認し、次に 安全な最小構成で zsh を立ち上げ、問題の切り分けを行います。

実際の復旧手順と詳細解説

以下の手順は、システム全体に影響を与えずに安全に問題を切り分け、復旧することを目的としています。順番に実行してください。

ステップ 1:安全モードで zsh を起動

Bash
zsh -f

-f オプションは「フラグなし」で起動し、.zshrc などの設定ファイルを読み込みません。これにより、純粋な zsh が起動できるか確認します。もしこの状態で echo $SHELLls が動作すれば、設定ファイルに問題があることが確定します。

確認ポイント

  • プロンプトが表示され、echo testtest と出力されるか
  • which ls/bin/ls など正しいパスを返すか

ステップ 2:PATH の状態を検証

安全モードで以下を実行し、PATH が期待通りか確認します。

Bash
print -l $PATH | nl

リストに /usr/bin/bin が含まれていない場合、PATH が壊れています。次に、デフォルトの PATH を一時的に設定します。

Bash
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

この状態で lsgit が動くか再度確認してください。動作すれば、問題は PATH の書き換えに起因していると判断できます。

ステップ 3:.zshrc のバックアップとリセット

現在の設定ファイルをバックアップします。

Bash
cp ~/.zshrc ~/.zshrc.backup

次に、最小構成の .zshrc を作成します。

Bash
cat > ~/.zshrc <<'EOF' # Minimal .zshrc for troubleshooting export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # Uncomment the following line to enable Oh My Zsh (if needed) # source $HOME/.oh-my-zsh/oh-my-zsh.sh EOF

設定を反映させるため、zsh を再起動します。

Bash
exec zsh

ここまででシェルが正常に動作すれば、.zshrc のどこかに問題があったことが分かります。

ステップ 4:段階的に設定を復元

バックアップした .zshrc.backup をテキストエディタで開き、以下の順序で 設定を一行ずつ(またはブロックごとに)復元し、都度シェルを再起動して問題が再発しないか確認します。

  1. PATH の設定:正しい形で再度追加
  2. エイリアスalias ll='ls -la' など簡単なものから
  3. 関数:自作関数が原因になることもある
  4. プラグイン/テーマsource $ZSH/oh-my-zsh.sh など
  5. 外部スクリプトsource ~/.zshenv など

この手順で問題の箇所を特定できれば、該当部分を修正または削除すれば復旧完了です。

ハマった点やエラー解決

  • エラー例 1zsh: command not found: source
    原因source が組み込みコマンドとしてロードできない状態(シェルが sh にフォールバックしている)
    対策zsh -f で起動し、source が利用可能か確認。bash から source を呼んでいないかもチェック。

  • エラー例 2zsh: no such file or directory: /usr/local/bin/custom.sh
    原因.zshrc で読み込んでいる外部スクリプトが削除またはパスが変わっている
    対策:該当行をコメントアウトし、ファイルの存在を ls -l /usr/local/bin/custom.sh で確認。

  • エラー例 3zsh: segmentation fault (core dumped)
    原因:Oh My Zsh のプラグインが古い Ruby バージョンと衝突
    対策:プラグインのバージョンを更新、または plugins=() で全プラグインを無効化し、徐々に追加。

解決策のまとめ

  1. 安全モードで起動し、設定ファイルの有無を確認
  2. PATH が正しく設定されているかを検証し、必要なら一時的にリセット
  3. .zshrc を最小構成に書き換えてシェルを復帰
  4. 段階的に設定を戻し、問題箇所を特定
  5. プラグインや外部スクリプトのバージョンを最新に保ち、互換性を確保

この手順を踏めば、ほとんどの「zsh が全くコマンドを受け付けない」ケースを自力で復旧できるはずです。

まとめ

本記事では、zsh が全くコマンドを受け付けなくなる典型的な原因と、安全モードでの起動 → PATH のリセット → .zshrc の最小化 → 段階的復元 という一連のトラブルシューティング手順を解説しました。

  • 原因特定:PATH の破損・設定ファイルのシンタックスエラー・プラグイン競合
  • 復旧手順zsh -f、PATH 再設定、.zshrc バックアップとリセット、段階的復元
  • 再発防止:設定変更は小さくテストし、プラグインは定期的に更新

この流れを身につければ、今後同様のトラブルに遭遇しても迅速に復旧でき、安心して zsh を活用できるようになります。次回は「Oh My Zsh の安全なカスタマイズ方法」に焦点を当てた記事を予定しています。

参考資料