Skip to main content

Octane とは

Laravel Octane は、高性能なアプリケーションサーバーを使って Laravel アプリケーションのパフォーマンスを劇的に向上させるパッケージです。 通常の PHP-FPM では、リクエストのたびにアプリケーションが起動・終了します。Octane ではアプリケーションを一度だけ起動してメモリに保持し、続くリクエストを高速に処理します。 PHP-FPM との最大の違いは、アプリケーションのブート処理(サービスプロバイダの登録など)がリクエストごとに繰り返されない点です。1 回起動すればあとは超高速でリクエストを処理できます。

対応サーバー

Octane は以下の 3 つのサーバーをサポートしています。
Laravel Cloud では FrankenPHP を使った Octane 運用が推奨されており、フルマネージドでサポートされています。

インストールと設定

パッケージのインストール

Octane の初期設定

実行するとサーバーを選択するプロンプトが表示されます。選択すると config/octane.php が生成されます。

FrankenPHP

FrankenPHP を選択すると Octane が自動でバイナリをダウンロードします。追加の手順は不要です。

RoadRunner

RoadRunner を選択すると Octane が自動でバイナリをダウンロードします。

Swoole

Swoole は PHP 拡張として PECL でインストールします。
Open Swoole を使う場合は以下のコマンドでインストールします。

起動方法

サーバーの起動

デフォルトではポート 8000 で起動します。http://localhost:8000 でアクセスできます。

サーバーの指定

ワーカー数の指定

Swoole でタスクワーカーも指定する場合は以下のとおりです。

ファイル変更の監視

開発中はファイルを変更してもサーバーを再起動しないと反映されません。--watch フラグを使うと自動で再起動します。
--watch を使うには Node.js と Chokidar が必要です。

その他の管理コマンド

依存性注入の注意点

Octane ではアプリケーションがメモリに保持されるため、サービスプロバイダの registerboot はサーバー起動時に 1 回しか実行されません。同じアプリケーションインスタンスがリクエスト間で使い回されるため、コンテナやリクエストをオブジェクトのコンストラクタに注入する場合は注意が必要です。

コンテナのインジェクション

シングルトンのコンストラクタにコンテナを直接注入すると、古いコンテナが使い回されます。
グローバルヘルパー app()Container::getInstance() は常に最新のコンテナを返すため安全です。

リクエストのインジェクション

コントローラーメソッドやルートクロージャで Illuminate\Http\Request をタイプヒントするのは安全です。グローバルヘルパー request() も常に現在のリクエストを返します。

設定リポジトリのインジェクション

グローバルヘルパー config() は常に最新の設定リポジトリを返すため安全です。

メモリリーク対策

Octane はアプリケーションをメモリに保持するため、静的プロパティなどにデータを蓄積するとメモリリークが発生します。

max-requests でワーカーをリサイクル

ワーカーが一定数のリクエストを処理したら自動的に再起動させることでメモリリークを軽減できます。デフォルトは 500 リクエストです。

最大実行時間の設定

config/octane.php でリクエストの最大実行時間を設定できます。デフォルトは 30 秒です。
max_execution_time を変更した場合は Octane サーバーを再起動してください。

並行タスク(Swoole 限定)

Swoole を使用している場合、Octane::concurrently() で複数の処理を並行実行できます。
並行タスクは Swoole の「タスクワーカー」として別プロセスで実行されます。タスクワーカー数は --task-workers で指定します。
concurrently に渡せるタスクは最大 1024 個です(Swoole の制限)。

Tick と Interval(Swoole 限定)

Swoole では指定した間隔で定期実行する処理を登録できます。サービスプロバイダの boot メソッドで登録します。

Octane キャッシュ(Swoole 限定)

Swoole の Swoole テーブル を使った超高速インメモリキャッシュです。毎秒最大 200 万回の読み書きが可能です。

インターバルキャッシュ

指定した間隔で自動更新されるキャッシュです。
Octane キャッシュのデータはサーバーを再起動するとすべて消去されます。

Swoole テーブル(Swoole 限定)

全ワーカーからアクセス可能な任意のインメモリテーブルを定義できます。config/octane.phptables で設定します。
テーブルへのアクセスは Octane::table() メソッドを使います。
Swoole テーブルで使えるカラム型は stringintfloat のみです。データはサーバー再起動で消えます。

本番環境での運用

Nginx + Octane の構成

本番環境では Nginx の背後で Octane を動かすのが一般的です。Nginx が静的ファイルの配信と SSL 終端を担い、動的リクエストを Octane にプロキシします。

Supervisor で常駐させる

本番環境では Supervisor を使って Octane を常時起動しておきます。

HTTPS の有効化

Octane 経由で HTTPS リンクを生成するには .env に以下を設定します。

Laravel Cloud との連携

Laravel Cloud では FrankenPHP を使った Octane をフルマネージドでサポートしています。Nginx や Supervisor の設定は不要で、たった 2 ステップで Octane を有効化できます。
1

パッケージのインストール

Octane をインストールします。octane:install コマンドは実行してもかまいませんが必須ではありません。
2

Laravel Cloud で Octane を有効化

環境の App コンピュートクラスタの設定を開き、「Use Octane as runtime」 をオンにして保存・デプロイします。Laravel Cloud が自動的に FrankenPHP + Octane でアプリケーションをビルド・起動します。
詳細は Laravel Cloud のドキュメント を参照してください。

デプロイ後のワーカーリロード

デプロイ後は新しいコードをメモリに読み込むため、ワーカーをリロードします。
最終更新日 2026年4月15日