「zsh: command not found: symfony」Symfonyチュートリアルつまずきメモ②パスが通っていない

前回のつまずきメモ①では、インストール出来ていたと思っていた(composerコマンドで初手は成功したはず・・)と思っていたSymfonyがまさかのnot found だったので、詳しく調べてみました。

つまずきメモ①に書きましたが、

curl -sS https://get.symfony.com/cli/installer | bash

コマンドを実行しただけでは、Symfony CLIのパスがシステムのPATH環境変数に設定されていないと「symfonyコマンドが見つかりません」というエラーが発生してしまうそうです。

そのため、以下の手順でパスを設定していきます。

  1. .bashrcまたは.bash_profileというファイルを開きます。存在しない場合は、作成してください。
  2. 以下のコマンドを実行して、Symfony CLIのパスをPATH環境変数に追加します。
    echo 'export PATH="$HOME/.symfony/bin:$PATH"' >> ~/.bashrc
    このコマンドで、$HOME/.symfony/binをPATH環境変数に追加します。
  3. .bashrcまたは.bash_profileを再読み込みします。
    source ~/.bashrc
    これで、PATH環境変数にSymfony CLIのパスが追加されました。ターミナルで symfony check:requirements を実行して、正常に動作することを確認してみてください。
  4. また、bash以外のシェルを使っている場合は、上記の手順を適宜読み替えて実行してください。

ここで、私は「bash?」「シェル?」となったので、これについても調べてみることに。。

bash

bash は、Unix系オペレーティングシステム上で動作するシェルの1つであり、Bourne-Again SHellの略称です。bash は、ターミナルやコマンドプロンプトで入力されるコマンドを解釈して、システム上のプログラムを実行するために使用されます。bash は、Linux、macOS、Windows Subsystem for Linux(WSL)などの多くのシステムでデフォルトのシェルとして使用されています。bash には、多くの便利な機能があり、スクリプトの作成やターミナル上での作業を効率的に行うことができます。

そもそもシェルとは?

シェルは、コンピューター上でユーザーとコンピューターの間のインタラクションを可能にするプログラムです。シェルは、コマンドを入力し、それらを実行し、結果を表示するために使用されます。ターミナル(コマンドラインインタフェース)と組み合わせて使用されることが一般的です。

zshは、シェルの1つで、Unixシステムのbashに似た機能を提供するオープンソースのコマンドシェルです。zshには、自動補完、ヒストリー検索、シンタックスハイライト、プロンプト拡張、パイプの途中での出力操作など、多数の高度な機能が備わっています。zshは、bashよりも高速であり、カスタマイズ性が高くなっています。

他にも、bash、sh、ksh、csh、tcshなどのシェルがあります。これらのシェルは、異なる機能、シンタックス、およびプログラミング機能を提供することができます。選択するシェルは、個人の好みや必要性によって異なります。

シェルがzshを使っている環境でbash用のコマンドを使ってしまうとどうなるのか?

  1. コマンドが正常に実行される場合:いくつかのbash用のコマンドは、zshでも同じように動作します。この場合、コマンドは正常に実行されます。
  2. コマンドが見つからない場合:zshは、bashで使用できるコマンドとは異なるコマンドパスを持つことがあります。そのため、zshでbash用のコマンドを実行しようとすると、コマンドが見つからないエラーが発生する可能性があります。
  3. コマンドが動作しない場合:zshとbashの間には構文の違いがあります。そのため、zshでbash用のコマンドを実行すると、構文エラーが発生する場合があります。

したがって、シェルがzshを使用している場合には、できるだけzsh用のコマンドを使用することが望ましいです。また、bash用のコマンドを使用する必要がある場合には、そのシェルで使用可能なコマンドであることを確認する必要があります。

なんだって。

そもそもの間違い。。

記事上段で、symfonyをインストールしたときのコマンドを覚えているだろうか。。

curl -sS https://get.symfony.com/cli/installer | bash

。。。後ろにめちゃくちゃ「bash」ってついてる。。orz
調べた通り、シェルがzshを使用している場合には、できるだけzsh用のコマンドを使用することが望ましいとありますね。泣

かなり初心者的なつまずき、、でも今気づいて良かった、、ということでzsh用のコマンドでインストールし直します。

 curl -sS https://get.symfony.com/cli/installer | zsh

で良いらしいです。そしてその後、ターミナルに

Use it as a local file:
/Users/××××××××××/.symfony5/bin/symfony

Or add the following line to your shell configuration file:
export PATH=”$HOME/.symfony5/bin:$PATH”

Or install it globally on your system:
mv /Users/××××××××××/.symfony5/bin/symfony /usr/local/bin/symfony

Then start a new shell and run ‘symfony’

と表示されたので、ここでは上から3番目の方法を選択することに。そうすると以下のように

mv: rename /Users/××××××××××/.symfony5/bin/symfony to /usr/local/bin/symfony: Permission denied

と表示されてしまいました。。。調べてみると、必要なパーミッションがないことを示しているそうで。「/usr/local/bin/ディレクトリ」に対して書き込み権限がないため、移動またはリネームが出来なかったと考えられます。
解決方法はいくつかあるそうですが、今回はsudoコマンドを使うことに。

sudo mv /Users/××××××××××/.symfony5/bin/symfony /usr/local/bin/

そうすると、コマンドを打った後に、「password: 」という表示がされるので、Macに設定しているパスワードを打ち込みます。このとき、画面には出力されませんが、ちゃんとターミナル上では認識されているので、そのまま打ち込みます。

これで終わりです。
正常にsymfonyコマンドが動作するか確かめてみましょう。

 symfony

と打って、エンター。
Symfony CLI version 5.5.1と表示され、今までみたことない表示が出ました!!
エラー文も見当たらず、どうやら成功したようです!

ここで念の為、公式サイトにもあったコマンドを打ってみることに

symfony check:requirements

【補足】「symfony check:requirements」というコマンドは、Symfonyアプリケーションの実行に必要な要件をチェックするために使用されるコマンドです。このコマンドを実行すると、Symfonyアプリケーションが正常に実行されるために必要なすべての依存関係がインストールされているかどうかを確認します。

具体的には、このコマンドは以下のことをチェックします。

  1. PHPのバージョンがアプリケーションで必要なバージョンと一致しているかどうか。
  2. 必要なPHPの拡張機能がインストールされているかどうか。
  3. Composerのバージョンがアプリケーションで必要なバージョンと一致しているかどうか。
  4. Symfonyアプリケーションで必要なPHPの設定が正しく行われているかどうか。
  5. アプリケーションが必要とするシステムリソースが利用可能かどうか。

このコマンドを実行することで、Symfonyアプリケーションを正常に実行するために必要な要件が満たされているかどうかを確認できます。エラーがある場合は、それらを解決するための手順が表示されます。

Symfony Requirements Checker
~~~~~~~~

PHP is using the following php.ini file:
/opt/homebrew/etc/php/8.2/php.ini

Checking Symfony requirements:

………………………..

[OK]
Your system is ready to run Symfony projects

Note The command console can use a different php.ini file
~~~~ than the one used by your web server.
Please check that both the console and the web server
are using the same PHP version and configuration.

となって、 Stmfonyプロジェクトのための準備が出来ているようですね!
最後のNoteについてですが

PHPが使用するphp.iniファイルが指定されています。この場合、ファイルは”/opt/homebrew/etc/php/8.2/php.ini”にあります。次に、コンソールとWebサーバーが同じPHPバージョンと構成を使用していることを確認するように指示されています。コンソールとWebサーバーが異なる設定で実行されている場合、予期しない動作が発生する可能性があります。このメッセージに従って、両方の設定が同じであることを確認してください。

とな。。では具体的にどう確認すれば良いのでしょうか?

「コンソール」と「Webサーバー」とは、Symfonyアプリケーションを実行するために使用される2つの異なる方法です。

「コンソール」とは、ターミナル(コマンドラインインターフェース)でSymfonyアプリケーションを実行する方法です。コマンドは、アプリケーションの設定や操作を実行するために使用されます。

「Webサーバー」とは、WebブラウザでSymfonyアプリケーションを実行する方法です。HTTPプロトコルを介して通信し、アプリケーションを表示します。

これらの2つの方法で、同じPHPバージョンと構成を使用していることを確認する必要があります。これは、異なる設定で実行されると、予期しない動作が発生する可能性があるためです。具体的には、以下の手順で確認できます。

  1. ターミナルで「php -v」というコマンドを実行し、PHPバージョンを確認します。
  2. WebサーバーのPHP設定を確認します。これは、Webサーバーの設定ファイル(例:Apacheの場合はhttpd.conf)を確認することで行えます。
  3. もしバージョンや設定が異なる場合は、Webサーバーの設定を変更して、コンソールと同じPHPバージョンと構成を使用するようにします。

また、PHPの設定を変更した場合は、Webサーバーを再起動する必要があることに注意してください。

ふむむ。では、ローカル環境で開発している段階ではどこを確認すれば良いのでしょう?

ローカル環境でSymfonyアプリケーションを開発している場合、通常はWebサーバーとして統合開発環境(IDE)の中にあるビルトインWebサーバーを使用することが多いです。その場合は、Webサーバーの設定ファイルを確認する必要はありません。

ただし、ビルトインWebサーバーを使用していても、PHPの設定を確認する必要があります。特に、コマンドラインでPHPを実行する場合には、php.iniファイルのパスを確認する必要があります。この情報は、Symfonyの要件チェッカーによって表示されています。

また、ローカル環境で複数のPHPバージョンをインストールしている場合は、使用するPHPバージョンを切り替える必要があるかもしれません。例えば、macOSではHomebrewを使って複数のPHPバージョンを管理することができます。その場合は、ターミナルで「brew info php」コマンドを実行することで、インストールされているPHPバージョンを確認できます。また、使用するバージョンを切り替えるには、ターミナルで「brew link php@8.1」などのコマンドを実行することで切り替えることができます。

なるほど!ということで、ターミナルに

php -v

と打つと「PHP 8.2.3 (cli)…(略)…」が

brew info php

と打つと「php: stable 8.2.3 (bottled)…(略)…」が返ってきたので、とりあえず大丈夫そうですね!

特に複数のPHPバージョンをインストールしていない場合は、Symfonyの要件チェッカーによってOKが出れば、ここまで調べなくてもよさそうですね。。

長くなってしまいましたが、これでやっとsymfonyコマンドが使えるようになりました。

この記事を書いた人