Symfonyチュートリアル:Controllerの加工はできず、再度一からやり直すことを決める(作業環境の準備)

Qiitaの記事と公式サイトをみながらチュートリアルを進めていましたが、Controllの加工まで進んだ時に、エラーがたくさん出ました。。残念ながら、かなり時間をかけても進めることができなかったため、ここは一旦、初めに戻ることにし、かつ参考にするのを公式サイトのみに絞ることにしました。

Qiitaの記事は補助的に使わせていただきながら、メインのコマンドやインストールなどは公式サイトをメインで。
Qiitaの記事はデプロイなどはしていないので、大枠の流れはそちらを参考にします。

、ということで一から新しく取り組むことに。
使うのは公式サイトのBookにあるバージョン5の日本語用のものです。

作業環境を整えていきます。
基本的にはこちらのぺーじをみながら、ひとつずつ進めていきます。

Git,PHP,Composer,NodeJS,Docker and Docker Compose, Symfony CLI

ちなみにSymfony5系のチュートリアルでは、PHPのバージョンは8.1を使うと明記されていたにもかかわらず、ちゃんとバージョンを合わせることができていませんでした。。。
なので、こちらもやり直し。以下の手順を踏んでやり直しました。

  1. Homebrewを最新バージョンに更新する
brew update
  1. PHP 8.1をインストールする
brew install php@8.1
  1. PHPのバージョンを変更する
brew unlink php
brew link --overwrite --force php@8.1
  1. ターミナルを再起動する

これで、PHPのバージョンが8.1に変更されます。試しに、以下のコマンドでバージョンを確認してみてください。

php -v

もし、バージョンが8.1になっていなければ、ターミナルを再起動してから再度確認してください。

また、PHPに関しては

PHPは8.1バージョンを使い、下記の PHP 拡張` がインストール済みになっていることを確認してください。もし入っていなければ今インストールしてください: intlpdo_pgsqlxslamqpgdopensslsodium 。オプションで下記をインストールしてください: rediscurl , zip 。

作業環境を確認する (Symfony 5.4 Docs)

とありました。インストールされているPHPの拡張機能を調べるために、以下コマンドをうちます。

php -m

これで拡張機能の一覧が表示されたので、ターミナル上をワンクリックした後、command +「F」で、一つずつ拡張機能を確認していきます。すると、「amqp」と「redis」が入っていませんでした。

PHPの拡張機能「amqp」をインストールする

こちらの拡張機能のインストールは単純にコマンドを一つ打つだけではクリアできなかったので、やったことをメモにまとめておきます。

このAMQP拡張は、librabbitmqライブラリを使用してRabbitMQとの通信を行うために必要。
そのため、librabbitmqライブラリがインストールされている必要があるそうです。そのため、

brew install rabbitmq-c

というコマンドを打って、先にlibrabbitmqライブラリをインストールします。その後で

pecl install amqp

というコマンドを打ちます。すると、しばらくした後に

Set the path to librabbitmq install prefix [autodetect] : 

となってターミナルの動きが一旦止まります。

Set the path to librabbitmq install prefix [autodetect]というメッセージは、librabbitmqがインストールされたパスを手動で設定するか、自動検出するかを選択するためのものです。

[autodetect]が表示されている場合、一般的にはそのままEnterキーを押すことができます。自動検出が機能しない場合は、手動でパスを指定する必要があります。

librabbitmqがデフォルトの場所にインストールされている場合は、自動検出が機能するはずです。しかし、手動でインストールした場合は、そのパスを入力する必要があります。たとえば、/usr/local/libなどのパスを入力することができます。

そのため、エンターキーを押してそのまま進めていくと「Build process completed successfully」の文字が!!
念の為の確認で、以下コマンドを打ちます。

php -m | grep amqp

このコマンドを実行すると、「amqp」という名前のモジュールが表示される。これにより、amqp拡張が正常にインストールされ、PHPにロードされていることがわかるそうです。

ここまでOKです。ただ、もう少しだけやることがあって、amqp拡張をインストールすると、「php.ini」ファイルに以下の行を追加する必要があるそうです。

extension=amqp.so

これを追加して、保存。ここまでで完了です。

PHPの拡張機能「redis」をインストールする

次に、「redis」という拡張機能をインストールしていきます。
今度は一気にやってみましょう。

brew install redis
pecl install redis

一旦、入力を求められるところは全てエンターを押していきます。

そうするとターミナルに

Build process completed successfully
Installing ‘/opt/homebrew/Cellar/php@8.1/8.1.16/pecl/20210902/redis.so’
install ok: channel://pecl.php.net/redis-5.3.7
Extension redis enabled in php.ini

と表示されました。RedisのPECL拡張機能が正常にビルドおよびインストールされ、PHPの設定ファイル(php.ini)に有効にするための手順が実行されたようです。
これで、Redis拡張機能がPHPで利用できるようになりました。

ちなみに上の2行目からは
redis.soというファイルが、指定されたパス/opt/homebrew/Cellar/php@8.1/8.1.16/pecl/20210902/にインストールされた」ことが分かります。
3行目からは
「PECLを使用してredis-5.3.7というバージョンのRedisが正常にインストールされた」ことがわかります。
最後の行は
「PHP設定ファイル(php.ini)にRedis拡張機能が有効になったこと」を示しています。
つまり、PHPからRedisを使用するために必要な構成が完了しました。

(もしかしたらこの工程はいらないかもしれないけど)上の「amqp」でもそうしたようにphp.iniファイルに以下のコードを追加しておきます。

extension=redis.so

DockerとDocker Component

DockerとDocker Composeをインストールして起動しておくのも、事前準備として必要。
これもできていませんでした。

以前にLarabelを少し触った時に、Dockerをインストールしていたことがあったので、ここでは念の為インストールされているかどうか、確認から始めてみることにします。

docker --version

「Docker version 20.10.22, build 3a2c30b」とバージョンが返ってきました。

docker-compose --version

「Docker Compose version v2.15.1」と、こちらもバージョンが返ってきました。
どちらもインストールは問題ないようですね。

では、Dockerを起動してみます。以下コマンドを入力します。

docker run hello-world

そうすると、以下のようにターミナルに表示されました。

Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
7050e35b49f5: Pull complete
Digest: sha256:ffb13da98453e0f04d33a6eee5bb8e46ee50d08ebe17735fc0779d0349e889e9
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:

  1. The Docker client contacted the Docker daemon.
  2. The Docker daemon pulled the “hello-world” image from the Docker Hub.
    (arm64v8)
  3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
  4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

ちょっとプロセスがまだちゃんとわかっていないですが。。。

これは、Dockerが正常に動作していることを示すメッセージです。 hello-worldという名前のイメージをpullし、そのイメージから新しいコンテナを作成し、そのコンテナを起動しました。そして、それが正常に動作していることを示しています。このメッセージは、Dockerが次のような手順を実行していることを説明しています。

  1. DockerクライアントがDockerデーモンに接続します。
  2. DockerデーモンがDocker Hubから「hello-world」イメージをpullします。
  3. Dockerデーモンは、そのイメージから新しいコンテナを作成し、現在読み取っている出力を生成する実行可能ファイルを実行します。
  4. Dockerデーモンは、その出力をストリームにして、Dockerクライアントに送信し、あなたのターミナルに表示します。

これ以外にも、このメッセージはDockerを使用するためのリソースやアイデアを提供するリンクを提供しています。

という手順でDockerが実行しているようですね。
「Dockerデーモン」って何?コンテナって??となりましたが、ここでは一旦スルーします。

最後に確認

次のコマンドを実行して、コンピューターに必要なすべての要件が満たされていることを確認します。

symfony book:check-requirements

[OK] Congrats! You are ready to start reading the book.

表示されました!
これで、作業環境の準備は終了です!!

この記事を書いた人