メインコンテンツまでスキップ
バージョン: master

Laravel Octane

Introduction​

Laravel Octane は、FrankenPHP、Open Swoole、Swoole、RoadRunner などの高性能アプリケーション サーバーを使用してアプリケーションを提供することにより、アプリケーションのパフォーマンスを大幅に向上させます。 Octane はアプリケーションを一度起動してメモリに保持し、超音速でリクエストを送ります。

Installation​

Octane は Composer パッケージ マネージャー経由でインストールできます。

composer require laravel/octane

Octane をインストールした後、octane:install Artisan コマンドを実行すると、Octane の構成ファイルがアプリケーションにインストールされます。

php artisan octane:install

Server Prerequisites​

FrankenPHP​

FrankenPHP は Go で書かれた PHP アプリケーション サーバーで、初期ヒント、Brotli、Zstandard 圧縮などの最新の Web 機能をサポートします。 Octane をインストールし、サーバーとして FrankenPHP を選択すると、Octane は自動的に FrankenPHP バイナリをダウンロードしてインストールします。

FrankenPHP via Laravel Sail​

Laravel Sail を使用してアプリケーションを開発する場合は、次のコマンドを実行して Octane と FrankenPHP をインストールする必要があります。

./vendor/bin/sail up

./vendor/bin/sail composer require laravel/octane

次に、octane:install Artisan コマンドを使用して、FrankenPHP バイナリをインストールする必要があります。

./vendor/bin/sail artisan octane:install --server=frankenphp

最後に、アプリケーションの docker-compose.yml ファイル内の laravel.test サービス定義に SUPERVISOR_PHP_COMMAND 環境変数を追加します。この環境変数には、Sail が PHP 開発サーバーの代わりに Octane を使用してアプリケーションを提供するために使用するコマンドが含まれます。

services:
laravel.test:
environment:
SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=frankenphp --host=0.0.0.0 --admin-port=2019 --port='${APP_PORT:-80}'" # [tl! add]
XDG_CONFIG_HOME: /var/www/html/config # [tl! add]
XDG_DATA_HOME: /var/www/html/data # [tl! add]

HTTPS、HTTP/2、および HTTP/3 を有効にするには、代わりに次の変更を適用します。

services:
laravel.test:
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
- '443:443' # [tl! add]
- '443:443/udp' # [tl! add]
environment:
SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --host=localhost --port=443 --admin-port=2019 --https" # [tl! add]
XDG_CONFIG_HOME: /var/www/html/config # [tl! add]
XDG_DATA_HOME: /var/www/html/data # [tl! add]

通常、https://localhost を使用して FrankenPHP Sail アプリケーションにアクセスする必要があります。https://127.0.0.1 を使用するには追加の構成が必要であり、discouraged であるためです。

FrankenPHP via Docker​

FrankenPHP の公式 Docker イメージを使用すると、パフォーマンスが向上し、FrankenPHP の静的インストールには含まれていない追加の拡張機能を使用できます。さらに、公式の Docker イメージは、Windows など、ネイティブにサポートされていないプラットフォームでの FrankenPHP の実行のサポートを提供します。 FrankenPHP の公式 Docker イメージは、ローカル開発と運用環境の両方に適しています。

FrankenPHP を利用した Laravel アプリケーションをコンテナ化するための開始点として、次の Dockerfile を使用できます。

FROM dunglas/frankenphp

RUN install-php-extensions \
pcntl
# Add other PHP extensions here...

COPY . /app

ENTRYPOINT ["php", "artisan", "octane:frankenphp"]

その後、開発中に次の Docker Compose ファイルを利用してアプリケーションを実行できます。

# compose.yaml
services:
frankenphp:
build:
context: .
entrypoint: php artisan octane:frankenphp --workers=1 --max-requests=1
ports:
- "8000:8000"
volumes:
- .:/app

--log-level オプションが php artisan octane:start コマンドに明示的に渡された場合、Octane は FrankenPHP のネイティブ ロガーを使用し、別の設定がされていない限り、構造化された JSON ログを生成します。

Docker での FrankenPHP の実行の詳細については、the official FrankenPHP documentation を参照してください。

Custom Caddyfile Configuration​

FrankenPHP を使用する場合、Octane の起動時に --caddyfile オプションを使用してカスタム Caddyfile を指定できます。

php artisan octane:start --server=frankenphp --caddyfile=/path/to/your/Caddyfile

これにより、カスタム ミドルウェアの追加、高度なルーティングの構成、カスタム ディレクティブの設定など、デフォルト設定を超えて FrankenPHP の構成をカスタマイズできます。 Caddyfile の構文と構成オプションの詳細については、official Caddy documentation を参照してください。

RoadRunner​

RoadRunner は、Go を使用して構築された RoadRunner バイナリを利用しています。 RoadRunner ベースの Octane サーバーを初めて起動すると、Octane は RoadRunner バイナリのダウンロードとインストールを提案します。

RoadRunner via Laravel Sail​

Laravel Sail を使用してアプリケーションを開発する場合は、次のコマンドを実行して Octane と RoadRunner をインストールする必要があります。

./vendor/bin/sail up

./vendor/bin/sail composer require laravel/octane spiral/roadrunner-cli spiral/roadrunner-http

次に、Sail シェルを起動し、rr 実行可能ファイルを使用して、RoadRunner バイナリの最新の Linux ベース ビルドを取得する必要があります。

./vendor/bin/sail shell

# Within the Sail shell...
./vendor/bin/rr get-binary

次に、アプリケーションの docker-compose.yml ファイル内の laravel.test サービス定義に SUPERVISOR_PHP_COMMAND 環境変数を追加します。この環境変数には、Sail が PHP 開発サーバーの代わりに Octane を使用してアプリケーションを提供するために使用するコマンドが含まれます。

services:
laravel.test:
environment:
SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=roadrunner --host=0.0.0.0 --rpc-port=6001 --port='${APP_PORT:-80}'" # [tl! add]

最後に、rr バイナリが実行可能であることを確認し、Sail イメージをビルドします。

chmod +x ./rr

./vendor/bin/sail build --no-cache

Swoole​

Swoole アプリケーションサーバーを使用して Laravel Octane アプリケーションを提供する場合は、Swoole PHP 拡張機能をインストールする必要があります。通常、これは PECL 経由で実行できます。

pecl install swoole

Open Swoole​

Open Swoole アプリケーション サーバーを使用して Laravel Octane アプリケーションを提供する場合は、Open Swoole PHP 拡張機能をインストールする必要があります。通常、これは PECL 経由で実行できます。

pecl install openswoole

Open Swoole で Laravel Octane を使用すると、同時タスク、ティック、間隔など、Swoole が提供するのと同じ機能が付与されます。

Swoole via Laravel Sail​

Sail 経由で Octane アプリケーションを提供する前に、Laravel Sail が最新バージョンであることを確認し、アプリケーションのルート ディレクトリ内で ./vendor/bin/sail build --no-cache を実行してください。

あるいは、Laravel の公式 Docker ベース開発環境である Laravel Sail を使用して、Swoole ベースの Octane アプリケーションを開発することもできます。 Laravel Sail にはデフォルトで Swoole 拡張機能が含まれています。ただし、Sail で使用される docker-compose.yml ファイルを調整する必要があります。

まず、アプリケーションの docker-compose.yml ファイル内の laravel.test サービス定義に SUPERVISOR_PHP_COMMAND 環境変数を追加します。この環境変数には、Sail が PHP 開発サーバーの代わりに Octane を使用してアプリケーションを提供するために使用するコマンドが含まれます。

services:
laravel.test:
environment:
SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=swoole --host=0.0.0.0 --port='${APP_PORT:-80}'" # [tl! add]

最後に、Sail イメージを構築します。

./vendor/bin/sail build --no-cache

Swoole Configuration​

Swoole は、必要に応じて octane 構成ファイルに追加できるいくつかの追加構成オプションをサポートしています。これらのオプションはほとんど変更する必要がないため、デフォルトの構成ファイルには含まれていません。

'swoole' => [
'options' => [
'log_file' => storage_path('logs/swoole_http.log'),
'package_max_length' => 10 * 1024 * 1024,
],
],

Serving Your Application​

Octane サーバーは、octane:start Artisan コマンドを使用して起動できます。デフォルトでは、このコマンドは、アプリケーションの octane 構成ファイルの server 構成オプションで指定されたサーバーを利用します。

php artisan octane:start

デフォルトでは、Octane はポート 8000 でサーバーを起動するため、http://localhost:8000 を介して Web ブラウザでアプリケーションにアクセスできます。

Keeping Octane Running in Production​

Octane アプリケーションを実稼働環境にデプロイする場合は、Supervisor などのプロセス モニターを使用して、Octane サーバーが確実に実行され続けるようにする必要があります。 Octane のSupervisor構成ファイルのサンプルは次のようになります。

[program:octane]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/example.com/artisan octane:start --server=frankenphp --host=127.0.0.1 --port=8000
autostart=true
autorestart=true
user=forge
redirect_stderr=true
stdout_logfile=/home/forge/example.com/storage/logs/octane.log
stopwaitsecs=3600

Serving Your Application via HTTPS​

デフォルトでは、Octane 経由で実行されるアプリケーションは、http:// というプレフィックスが付いたリンクを生成します。アプリケーションの config/octane.php 構成ファイル内で使用される OCTANE_HTTPS 環境変数は、HTTPS 経由でアプリケーションを提供するときに true に設定できます。この設定値が true に設定されている場合、Octane は、生成されたすべてのリンクに https:// というプレフィックスを付けるように Laravel に指示します。

'https' => env('OCTANE_HTTPS', false),

Serving Your Application via Nginx​

独自のサーバー構成を管理する準備がまだ整っていない場合、または堅牢な Laravel Octane アプリケーションを実行するために必要なさまざまなサービスをすべて構成することに慣れていない場合は、フルマネージド Laravel Octane サポートを提供する Laravel Cloud をチェックしてください。

運用環境では、Nginx や Apache などの従来の Web サーバーの背後で Octane アプリケーションを提供する必要があります。これにより、Web サーバーが画像やスタイルシートなどの静的資産を提供したり、SSL 証明書の終了を管理したりできるようになります。

以下の Nginx 構成例では、Nginx はサイトの静的アセットとプロキシ リクエストをポート 8000 で実行されている Octane サーバーに提供します。

map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}

server {
listen 80;
listen [::]:80;
server_name domain.com;
server_tokens off;
root /home/forge/domain.com/public;

index index.php;

charset utf-8;

location /index.php {
try_files /not_exists @octane;
}

location / {
try_files $uri $uri/ @octane;
}

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }

access_log off;
error_log /var/log/nginx/domain.com-error.log error;

error_page 404 /index.php;

location @octane {
set $suffix "";

if ($uri = /index.php) {
set $suffix ?$query_string;
}

proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Scheme $scheme;
proxy_set_header SERVER_PORT $server_port;
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

proxy_pass http://127.0.0.1:8000$suffix;
}
}

Watching for File Changes​

アプリケーションは Octane サーバーの起動時に一度メモリに読み込まれるため、ブラウザを更新してもアプリケーションのファイルへの変更は反映されません。たとえば、routes/web.php ファイルに追加されたルート定義は、サーバーが再起動されるまで反映されません。便宜上、--watch フラグを使用して、アプリケーション内のファイル変更時にサーバーを自動的に再起動するように Octane に指示できます。

php artisan octane:start --watch

この機能を使用する前に、Node がローカル開発環境にインストールされていることを確認する必要があります。さらに、プロジェクト内に Chokidar ファイル監視ライブラリをインストールする必要があります。

npm install --save-dev chokidar

アプリケーションの config/octane.php 構成ファイル内の watch 構成オプションを使用して、監視する必要があるディレクトリとファイルを構成できます。

Specifying the Worker Count​

デフォルトでは、Octane はマシンが提供する各 CPU コアに対してアプリケーション リクエスト ワーカーを開始します。これらのワーカーは、アプリケーションに入ってくる受信 HTTP リクエストを処理するために使用されます。 octane:start コマンドを呼び出すときに、--workers オプションを使用して、開始するワーカーの数を手動で指定できます。

php artisan octane:start --workers=4

Swoole アプリケーション サーバーを使用している場合は、起動する "task workers" の数を指定することもできます。

php artisan octane:start --workers=4 --task-workers=6

Specifying the Max Request Count​

漂遊メモリ リークを防ぐために、Octane は 500 件のリクエストを処理した後、ワーカーを正常に再起動します。この数値を調整するには、--max-requests オプションを使用できます。

php artisan octane:start --max-requests=250

Specifying the Max Execution Time​

デフォルトでは、Laravel Octaneは、アプリケーションのconfig/octane.php設定ファイルのmax_execution_timeオプションを介して、受信リクエストの最大実行時間を30秒に設定します。

'max_execution_time' => 30,

この設定は、受信リクエストが終了するまでに実行を許可される最大秒数を定義します。この値を 0 に設定すると、実行時間制限が完全に無効になります。この構成オプションは、ファイルのアップロード、データ処理、外部サービスへの API 呼び出しなど、長時間実行されるリクエストを処理するアプリケーションに特に役立ちます。

max_execution_time 構成を変更する場合、変更を有効にするために Octane サーバーを再起動する必要があります。

Reloading the Workers​

octane:reload コマンドを使用して、Octane サーバーのアプリケーション ワーカーを正常に再起動できます。通常、これは、新しくデプロイされたコードがメモリにロードされ、後続のリクエストに対応するために使用されるように、デプロイ後に実行する必要があります。

php artisan octane:reload

Stopping the Server​

octane:stop Artisan コマンドを使用して、Octane サーバーを停止できます。

php artisan octane:stop

Checking the Server Status​

octane:status Artisan コマンドを使用して、Octane サーバーの現在のステータスを確認できます。

php artisan octane:status

Dependency Injection and Octane​

Octane はアプリケーションを一度起動し、リクエストを処理する間メモリ内に保持するため、アプリケーションを構築する際に考慮すべき注意事項がいくつかあります。たとえば、アプリケーションのサービスプロバイダの register メソッドと boot メソッドは、リクエスト ワーカーが最初に起動するときに 1 回だけ実行されます。後続のリクエストでは、同じアプリケーション インスタンスが再利用されます。

これを考慮して、アプリケーション サービスコンテナまたはリクエストをオブジェクトのコンストラクターに挿入するときは、特別な注意を払う必要があります。そうすると、そのオブジェクトには、後続のリクエストでコンテナまたはリクエストの古いバージョンが含まれる可能性があります。

Octane は、リクエスト間のファーストパーティ フレームワークの状態のリセットを自動的に処理します。ただし、Octane は、アプリケーションによって作成されたグローバル状態をリセットする方法を常に知っているわけではありません。したがって、Octane に適した方法でアプリケーションを構築する方法を認識する必要があります。以下では、Octane の使用中に問題が発生する可能性のある最も一般的な状況について説明します。

Container Injection​

一般に、アプリケーション サービスコンテナまたは HTTP リクエスト インスタンスを他のオブジェクトのコンストラクターに挿入することは避けてください。たとえば、次のバインディングは、アプリケーション サービスコンテナ全体をシングルトンとしてバインドされたオブジェクトに挿入します。

use App\Service;
use Illuminate\Contracts\Foundation\Application;

/**
* Register any application services.
*/
public function register(): void
{
$this->app->singleton(Service::class, function (Application $app) {
return new Service($app);
});
}

この例では、アプリケーションの起動プロセス中に Service インスタンスが解決されると、コンテナーがサービスに挿入され、その同じコンテナーが後続のリクエストで Service インスタンスによって保持されます。これは、特定のアプリケーションでは問題にならない可能性があります。ただし、ブート サイクルの後半または後続のリクエストによって追加されたバインディングがコンテナーで予期せず失われる可能性があります。

回避策として、バインディングをシングルトンとして登録するのを停止するか、現在のコンテナ インスタンスを常に解決するサービスにコンテナ リゾルバ クロージャを挿入することができます。

use App\Service;
use Illuminate\Container\Container;
use Illuminate\Contracts\Foundation\Application;

$this->app->bind(Service::class, function (Application $app) {
return new Service($app);
});

$this->app->singleton(Service::class, function () {
return new Service(fn () => Container::getInstance());
});

グローバル app ヘルパと Container::getInstance() メソッドは、常にアプリケーション コンテナーの最新バージョンを返します。

Request Injection​

一般に、アプリケーション サービスコンテナまたは HTTP リクエスト インスタンスを他のオブジェクトのコンストラクターに挿入することは避けてください。たとえば、次のバインディングは、リクエスト インスタンス全体をシングルトンとしてバインドされたオブジェクトに挿入します。

use App\Service;
use Illuminate\Contracts\Foundation\Application;

/**
* Register any application services.
*/
public function register(): void
{
$this->app->singleton(Service::class, function (Application $app) {
return new Service($app['request']);
});
}

この例では、アプリケーションの起動プロセス中に Service インスタンスが解決されると、HTTP リクエストがサービスに挿入され、その同じリクエストは後続のリクエストで Service インスタンスによって保持されます。したがって、すべてのヘッダー、入力、およびクエリ文字列データは、他のすべてのリクエスト データと同様に不正になります。

回避策として、バインディングをシングルトンとして登録するのを停止するか、現在のリクエスト インスタンスを常に解決するリクエスト リゾルバー クロージャをサービスに挿入することができます。または、最も推奨されるアプローチは、オブジェクトが必要とする特定のリクエスト情報を実行時にオブジェクトのメソッドの 1 つに単純に渡すことです。

use App\Service;
use Illuminate\Contracts\Foundation\Application;

$this->app->bind(Service::class, function (Application $app) {
return new Service($app['request']);
});

$this->app->singleton(Service::class, function (Application $app) {
return new Service(fn () => $app['request']);
});

// Or...

$service->method($request->input('name'));

グローバル request ヘルパは、アプリケーションが現在処理しているリクエストを常に返すため、アプリケーション内で安全に使用できます。

コントローラのメソッドとルート クロージャで Illuminate\Http\Request インスタンスをタイプヒントすることは許容されます。

Configuration Repository Injection​

一般に、構成リポジトリ インスタンスを他のオブジェクトのコンストラクターに挿入することは避けてください。たとえば、次のバインディングは、シングルトンとしてバインドされているオブジェクトに構成リポジトリを挿入します。

use App\Service;
use Illuminate\Contracts\Foundation\Application;

/**
* Register any application services.
*/
public function register(): void
{
$this->app->singleton(Service::class, function (Application $app) {
return new Service($app->make('config'));
});
}

この例では、リクエスト間で構成値が変更された場合、そのサービスは元のリポジトリ インスタンスに依存しているため、新しい値にアクセスできなくなります。

回避策として、バインディングをシングルトンとして登録するのを停止するか、構成リポジトリ リゾルバー クロージャをクラスに挿入することができます。

use App\Service;
use Illuminate\Container\Container;
use Illuminate\Contracts\Foundation\Application;

$this->app->bind(Service::class, function (Application $app) {
return new Service($app->make('config'));
});

$this->app->singleton(Service::class, function () {
return new Service(fn () => Container::getInstance()->make('config'));
});

グローバル config は常に最新バージョンの構成リポジトリを返すため、アプリケーション内で安全に使用できます。

Managing Memory Leaks​

Octane はリクエスト間でアプリケーションをメモリに保持することに注意してください。したがって、静的に維持される配列にデータを追加すると、メモリ リークが発生します。たとえば、次のコントローラでは、アプリケーションへの各リクエストが静的 $data 配列にデータを追加し続けるため、メモリ リークが発生します。

use App\Service;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

/**
* Handle an incoming request.
*/
public function index(Request $request): array
{
Service::$data[] = Str::random(10);

return [
// ...
];
}

アプリケーションを構築するときは、このような種類のメモリ リークが発生しないように特別な注意を払う必要があります。ローカル開発中にアプリケーションのメモリ使用量を監視し、アプリケーションに新たなメモリ リークが発生していないことを確認することをお勧めします。

Concurrent Tasks​

この機能には Swoole が必要です。

Swoole を使用する場合、軽量のバックグラウンド タスクを介して操作を同時に実行できます。これは、Octane の concurrently メソッドを使用して実現できます。このメソッドと PHP 配列の構造化を組み合わせて、各操作の結果を取得できます。

use App\Models\User;
use App\Models\Server;
use Laravel\Octane\Facades\Octane;

[$users, $servers] = Octane::concurrently([
fn () => User::all(),
fn () => Server::all(),
]);

Octane によって処理される同時タスクは Swoole の「タスク ワーカー」を利用し、受信リクエストとはまったく異なるプロセス内で実行されます。同時タスクの処理に使用できるワーカーの数は、octane:start コマンドの --task-workers ディレクティブによって決まります。

php artisan octane:start --workers=4 --task-workers=6

concurrently メソッドを呼び出すときは、Swoole のタスク システムによる制限のため、1024 を超えるタスクを指定しないでください。

Ticks and Intervals​

この機能には Swoole が必要です。

Swooleを使用する場合、指定した秒数ごとに実行される「ティック」操作を登録できます。 tick メソッドを介して「ティック」コールバックを登録できます。 tick メソッドに指定される最初の引数は、ティッカーの名前を表す文字列である必要があります。 2 番目の引数は、指定された間隔で呼び出される呼び出し可能引数である必要があります。

この例では、10 秒ごとに呼び出されるクロージャを登録します。通常、tick メソッドは、アプリケーションのサービスプロバイダの 1 つの boot メソッド内で呼び出す必要があります。

Octane::tick('simple-ticker', fn () => ray('Ticking...'))
->seconds(10);

immediate メソッドを使用すると、Octane サーバーの最初の起動時とその後の N 秒ごとにティック コールバックをすぐに呼び出すように Octane に指示できます。

Octane::tick('simple-ticker', fn () => ray('Ticking...'))
->seconds(10)
->immediate();

The Octane Cache​

この機能には Swoole が必要です。

Swoole を使用する場合は、1 秒あたり最大 200 万回の読み取りおよび書き込み速度を提供する Octane キャッシュ ドライバを利用できます。したがって、このキャッシュ ドライバは、キャッシュ層から​​の非常に高い読み取り/書き込み速度を必要とするアプリケーションにとって優れた選択肢です。

このキャッシュ ドライバは Swoole tables によって動作します。キャッシュに保存されているすべてのデータは、サーバー上のすべてのワーカーが利用できます。ただし、キャッシュされたデータはサーバーが再起動されるとフラッシュされます。

Cache::store('octane')->put('framework', 'Laravel', 30);

Octane キャッシュで許可されるエントリの最大数は、アプリケーションの octane 構成ファイルで定義できます。

Cache Intervals​

Laravel のキャッシュ システムによって提供される一般的なメソッドに加えて、Octane キャッシュ ドライバは間隔ベースのキャッシュを備えています。これらのキャッシュは指定された間隔で自動的に更新され、アプリケーションのサービスプロバイダの 1 つの boot メソッド内に登録する必要があります。たとえば、次のキャッシュは 5 秒ごとに更新されます。

use Illuminate\Support\Str;

Cache::store('octane')->interval('random', function () {
return Str::random(10);
}, seconds: 5);

Tables​

この機能には Swoole が必要です。

Swoole を使用する場合、独自の任意の Swoole tables を定義して操作できます。 Swoole テーブルは優れたパフォーマンス スループットを提供し、これらのテーブル内のデータにはサーバー上のすべてのワーカーがアクセスできます。ただし、サーバーを再起動すると、その中のデータは失われます。

テーブルは、アプリケーションの octane 構成ファイルの tables 構成配列内で定義する必要があります。最大 1000 行を許可するテーブルの例は、すでに構成されています。文字列列の最大サイズは、以下に示すように列タイプの後に列サイズを指定することで構成できます。

'tables' => [
'example:1000' => [
'name' => 'string:1000',
'votes' => 'int',
],
],

テーブルにアクセスするには、Octane::table メソッドを使用できます。

use Laravel\Octane\Facades\Octane;

Octane::table('example')->set('uuid', [
'name' => 'Nuno Maduro',
'votes' => 1000,
]);

return Octane::table('example')->get('uuid');

Swoole テーブルでサポートされている列タイプは、string、int、および float です。