SwooleはPHPのパフォーマンスを劇的に向上させる拡張機能です。
この記事では、まずシステム要件を確認します。
次に、インストールプロセスを詳しく説明します。
また、php.iniへの追記方法についても触れます。
最後に、Swooleの動作確認方法をご紹介します。
これらのステップを通じて、Swooleの力を最大限に活用しましょう。
本記事の内容
- Swooleのシステム要件
- Swooleのインストール
- php.iniへの追記
- Swooleの動作確認
それでは、上記に沿って解説していきます。
Swooleのシステム要件
現時点(2023年11月末)でのSwooleの最新バージョンは、5.1.1となります。
この最新バージョンは、2023年11月26日にリリースされています。
Swooleのシステム要件でのポイントは、次の4つです。
- サポートOS
- PHPバージョン
- PECLコマンド
- phpizeコマンド
それぞれを以下で確認していきます。
サポートOS
サポートOSに関しては、以下となります。
- Linux
- mac OS
基本的には、Windowsはサポート外となっています。
WSLや仮想OSを用いれば、Windows上でも検証は可能です。
PHPバージョン
PHP 7.2.0以降と記載されています。
そして、バージョンが高いほどパフォーマンスが向上するということです。
PECLコマンド
PECL(ピクル)コマンドを使って、Swooleのインストールを行います。
PEARをインストールすると、PECLも同時にインストールされます。
Ubuntuの場合は、次のコマンドでPEARをインストールできます。
PHPが未インストールなら、このコマンドで同時にインストールされます。
sudo apt install php-pear
PHPのバージョンに指定したい場合は、事前にインストールしておきましょう。
そして、PECL(PEAR)のバージョンは次のコマンドで確認可能。
$ pecl version PEAR Version: 1.10.12 PHP Version: 8.1.2-1ubuntu2.14 Zend Engine Version: 4.1.2 Running on: Linux ubuntu2204.localdomain 5.15.0-53-generic #59-Ubuntu SMP Mon Oct 17 18:53:30 UTC 2022 x86_64
これでPECLコマンドが、とりあえずは利用可能です。
phpizeコマンド
PECLコマンドとphpizeコマンドは、セットで動きます。
PECLコマンドだけ動くようになっても、phpizeコマンドが動かないと意味がありません。
実際にPECLコマンドだけ実行したら、次のエラーが出ます。
running: phpize sh: 1: phpize: not found ERROR: `phpize' failed
このエラーを出さないためには、phpizeコマンドが動くようにする必要があります。
phpizeコマンドを動かすには、次のコマンドを実行します。
sudo apt install php-dev
では、phpizeコマンドの確認です。
$ phpize -v Configuring for: PHP Api Version: 20210902 Zend Module Api No: 20210902 Zend Extension Api No: 420210902
これで正式にPECLコマンドが利用可能になりました。
Swooleのインストール
まず、PECL (PHP Extension Community Library) のリポジトリ更新を行います。
$ sudo pecl channel-update pecl.php.net Updating channel "pecl.php.net" Update of Channel "pecl.php.net" succeeded
次に、以下のコマンドでSwooleをインストールします。
sudo pecl install swoole
途中で、以下の項目が確認されます。
enable sockets supports? [no] : enable openssl support? [no] : enable mysqlnd support? [no] : enable curl support? [no] : enable cares support? [no] : enable brotli support? [yes] : enable PostgreSQL database support? [no] : enable ODBC database support? [no] : enable Oracle database support? [no] : enable Sqlite database support? [no] :
ここでは、すべてデフォルトで進めています。
各自の環境に合わせて、入力しましょう。
(※yesにした項目については、依存するファイルが必要となります)
入力を済ませると、コンパイルが実行されます。
そこそこ、待つことになります。
Build process completed successfully Installing '/usr/include/php/20210902/ext/swoole/php_swoole.h' Installing '/usr/include/php/20210902/ext/swoole/config.h' Installing '/usr/lib/php/20210902/swoole.so' install ok: channel://pecl.php.net/swoole-5.1.1 configuration option "php_ini" is not set to php.ini location You should add "extension=swoole.so" to php.ini
Swooleのインストールは、上手くいったようです。
ちゃんと最新版がインストールされていることを確認できます。
ただし、php.iniでの作業が必要ということです。
php.iniへの追記
PHPにSwooleの存在を教えましょう。
そのために、php.iniにswoole.soを追記します。
ただし、ここで注意すべきポイントがあります。
基本的には、SwooleはコマンドラインのPHP(CLI)で動くことが想定されています。
したがって、コマンドライン版PHPのphp.iniへの追記となるのです。
この点が、他の拡張機能とは大きく異なるところかもしれません。
では、コマンドライン版PHPのphp.iniはどこにあるのか?となりますよね。
それを知るためには、以下のコマンドを実行します。
php --ini
実行すると、以下のように返答が表示されます。
$ php --ini Configuration File (php.ini) Path: /etc/php/8.1/cli Loaded Configuration File: /etc/php/8.1/cli/php.ini Scan for additional .ini files in: /etc/php/8.1/cli/conf.d Additional .ini files parsed: /etc/php/8.1/cli/conf.d/10-opcache.ini, ・・・
追記方法には、複数のやり方があります。
今回は、最もシンプルに「/etc/php/8.1/cli/php.ini」に「extension=swoole.so」を追記します。
コマンドライン版PHPの場合は、Apacheの再起動は不要です。
次のコマンドを実行して確認してみましょう。
$ php -m | grep swoole swoole
PHPの拡張機能として、インストールされていることを確認できました。
Swooleの動作確認
以下のスクリプトは、基本的なHTTPサーバーを作成し、リクエストに応じて「Hello, Swoole!」というメッセージを返すものです。
<?php // Swoole HTTPサーバーの作成 $http = new Swoole\Http\Server("127.0.0.1", 9501); // リクエストを受け取った際の挙動を定義 $http->on("request", function ($request, $response) { $response->header("Content-Type", "text/plain"); $response->end("Hello, Swoole!"); }); // サーバー起動 $http->start(); ?>
このコードを「swoole_test.php」という名称で保存します。
そして、以下のコマンドでこのファイルを実行します。
php swoole_test.php
実行すると、以下のように処理が継続中となります。
$ php swoole_test.php
別のターミナルを開いて、wgetで「http://localhost:9501」アクセスします。
$ wget http://127.0.0.1:9501 --2023-11-27 19:24:22-- http://127.0.0.1:9501/ 127.0.0.1:9501 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 14 ‘index.html’ に保存中 index.html 100%[=================================================>] 14 --.-KB/s in 0s 2023-11-27 19:24:22 (1013 KB/s) - ‘index.html’ へ保存完了 [14/14]
保存されたファイルを確認しましょう。
Swooleで作成したHTTPサーバーが、ちゃんと機能していることを確認できます。