ランナウェイ

ランナウェイは、Flightアプリケーションを管理するためのCLIアプリケーションです。コントローラーの生成、すべてのルートの表示、AIセットアップヘルパー、マイグレーション(スケルトン内)などを実行できます。優れたadocore/php-cliライブラリを基にしています。

コードを表示するにはこちらをクリックしてください。

スキャフォールディングコマンドはofficial skeletonと意図的に連携されており、AI coding toolsと人間が毎回同じパス、名前空間、コンストラクタインジェクションスタイルを取得できるようにしています。

インストール

composerでインストールします。

composer require flightphp/runway

スケルトンはすでにランナウェイに依存しているため、プロジェクトルートからphp runwayを使用します。

基本設定

ランナウェイを初めて実行すると、app/config/config.php'runway'キーを介してrunway設定を見つけようとします。

<?php
// app/config/config.php
return [
    'runway' => [
        'app_root' => 'app/',
        'public_root' => 'public/',
        // オプション: スケルトンはパブリックエントリのindex_rootも使用します
        'index_root' => 'public/index.php',
    ],
];

注意 - v1.2.0以降、.runway-config.jsonapp/config/config.phpに置き換えられ、非推奨となりました。古いプロジェクトをアップグレードする場合はphp runway config:migrateで移行してください。スケルトンは互換性のため、create-project時に小さな.runway-config.jsonを書き込む場合がありますが、今後はconfig.phprunwayキーを優先してください。

プロジェクトルート検出

ランナウェイはプロジェクトのルートを検出する機能が十分にあり、サブディレクトリから実行しても検出できます。composer.json.gitapp/config/config.phpなどのインジケータを探して、プロジェクトルートを判断します。つまり、プロジェクト内のどこからでもランナウェイコマンドを実行できるということです!

使用方法

ランナウェイには、Flightアプリケーションを管理するために使用できるいくつかのコマンドがあります。ランナウェイを使用するには、2つの簡単な方法があります。

  1. スケルトンプロジェクトを使用している場合は、プロジェクトのルートからphp runway [command]を実行できます。
  2. composer経由でインストールされたパッケージとしてランナウェイを使用している場合は、プロジェクトのルートからvendor/bin/runway [command]を実行できます。

コマンドリスト

php runwayコマンドを実行すると、利用可能なすべてのコマンドのリストを表示できます。

php runway

インストールに実際に表示されるコマンドのみに依存してください(コアランナウェイコマンドと、スケルトンのmigrateのようなプロジェクト固有のコマンド)。

コマンドヘルプ

任意のコマンドで--helpフラグを渡すと、コマンドの使用方法に関する詳細情報を取得できます。

php runway routes --help
php runway make:controller --help

いくつかの例を以下に示します:

コントローラーの生成

make:controllerは公式スケルトンレイアウトに一致するコントローラーをスキャフォールドします:

パス app/Controller/{Name}.php
名前空間 App\Controller
スタイル flight\Engineのコンストラクタインジェクション(クラス本体にFlight::なし)
php runway make:controller MyController
# → app/Controller/MyController.php
#   namespace App\Controller;

期待される形状の例(簡略化):

<?php

declare(strict_types=1);

namespace App\Controller;

use flight\Engine;

class MyController
{
    protected Engine $app;

    public function __construct(Engine $app)
    {
        $this->app = $app;
    }

    public function index(): void
    {
        // 例: $this->app->render('…', […]);
    }
}

Diceがコントローラーを構築できるようにクラス呼び出し可能で登録します:

// app/config/routes.php
use App\Controller\MyController;

$router->get('/mine', [MyController::class, 'index']);

このレイアウトの理由は? フォルダーの大文字小文字は、LinuxでのComposer PSR-4のために名前空間と一致する必要があります(controllersではなくController) - Autoloadingを参照してください。ルートとスコープ付きAGENTS.mdファイルがAIツールに使用するよう指示するパスも同じであり、生成されたコントローラーと手書きのコントローラーが同一に保たれます。

古いドキュメントやコミュニティプロジェクトでは、app/controllers/app\controllersが使用されることがありました。あなたのツリーがまだ小文字のフォルダーを使用している場合は、そのまま有効です。新しいスケルトンプロジェクトと現在のmake:controller出力は、app/Controller/ + App\Controllerを使用します。

アクティブレコードモデルの生成

まず、Active Recordプラグインをインストールしていることを確認してください。

php runway make:record users

公式スケルトンでは、モデルは名前空間App\Modelapp/Model/の下に配置され、DB接続はSimplePdo(ActiveRecordコンストラクタに注入または渡す)です。生成されるファイル名と名前空間はランナウェイの現在のデフォルトとrunway設定に従います。新しいモデルをApp\Modelに合わせることで、autoloadingAGENTS.mdに一致するようにしてください。

スケルトンの投稿デモと一致するモデルの例:

<?php

declare(strict_types=1);

namespace App\Model;

use flight\ActiveRecord;

/**
 * @property int $id
 * @property string $title
 * // …
 */
class Post extends ActiveRecord
{
    protected array $relations = [];

    public function __construct($databaseConnection)
    {
        parent::__construct($databaseConnection, 'posts');
    }
}

古いジェネレータがまだapp/records / app\recordsを出力する場合は、レガシーアプリでその規約を維持するか、ファイルをapp/Model/に移動して名前空間をフォルダーケースに合わせて更新できます。

マイグレーション(スケルトン)

公式スケルトンには、app/commands/から検出されたプロジェクトコマンド(以下のようなもの)が付属しています:

php runway migrate

マイグレーションはmigrations/の下にあるSQLファイル(SQLiteの場合はYYYYMMDDHHMMSS_description.sql、MySQLの場合は…_description.mysql.sqlなど)で、データベースドライバ設定/環境から選択されます。正確なフラグと動作はそのプロジェクトコマンドによって定義されています - アプリでphp runway migrate --helpを実行してください。

AIヘルパー

ランナウェイはAI & developer experienceで使用されるAI指向のコマンドを公開しています:

php runway ai:init
php runway ai:generate-instructions

これらはLLM認証情報を保存し、プロジェクトの指示(主にAGENTS.md)を生成します。スケルトンでは、AGENTS.md(およびapp/の下のスコープ付きコピー)とSECURITY.mdをエージェントの真実のソースとして扱ってください。

すべてのルートの表示

現在Flightに登録されているすべてのルートを表示します。

php runway routes

特定のルートのみを表示したい場合は、フラグを渡してルートをフィルタリングできます。

# GETルートのみを表示
php runway routes --get

# POSTルートのみを表示
php runway routes --post

# など

ランナウェイへのカスタムコマンドの追加

Flight用のパッケージを作成する場合、またはプロジェクトに独自のカスタムコマンドを追加したい場合は、プロジェクト/パッケージのsrc/commands/flight/commands/app/commands/、またはcommands/ディレクトリを作成することで実行できます。さらなるカスタマイズが必要な場合は、以下の設定セクションを参照してください。

スケルトンでは、プロジェクトコマンドは名前空間App\Commandapp/commands/に配置されます。ランナウェイはパスでそれらを検出します。そのフォルダーは、プロジェクトがすでにComposer classmap/PSR-4と同期しているようにしてください。

コマンドを作成するには、AbstractBaseCommandクラスを拡張し、最低限__constructメソッドとexecuteメソッドを実装します。

<?php

declare(strict_types=1);

namespace App\Command;

use flight\commands\AbstractBaseCommand;

class ExampleCommand extends AbstractBaseCommand
{
    /**
     * コンストラクタ
     *
     * @param array<string,mixed> $config app/config/config.phpからの設定
     */
    public function __construct(array $config)
    {
        parent::__construct('make:example', 'ドキュメントの例を作成します', $config);
        $this->argument('<funny-gif>', '面白いgifの名前');
    }

    /**
     * 関数を実行します
     *
     * @return void
     */
    public function execute()
    {
        $io = $this->app()->io();

        $io->info('例を作成中...');

        // ここで何かを実行

        $io->ok('例が作成されました!');
    }
}

Flightアプリケーションに独自のカスタムコマンドを構築する方法の詳細については、adhocore/php-cli Documentationを参照してください!

設定管理

設定はv1.2.0以降、app/config/config.phpに移動したため、設定を管理するためのヘルパーコマンドがいくつかあります。

スケルトンのヒント: config.phpリテラルなPHP値として保持してください。シークレットは.envに属します。config.php内に$_ENV[...]式を使用しないでください - config:setはファイルを静的データとして書き換えるため、シークレットがファイルに焼き付けられる可能性があります。Configurationを参照してください。

古い設定の移行

古い.runway-config.jsonファイルがある場合は、次のコマンドでapp/config/config.phpに簡単に移行できます:

php runway config:migrate

設定値の設定

config:setコマンドを使用して設定値を設定できます。これはファイルを開かずに設定値を更新したい場合に便利です。

php runway config:set app_root "app/"

設定値の取得

config:getコマンドを使用して設定値を取得できます。

php runway config:get app_root

すべてのランナウェイ設定

ランナウェイの設定をカスタマイズする必要がある場合は、app/config/config.phpにこれらの値を設定できます。以下に設定できる追加の設定をいくつか示します:

<?php
// app/config/config.php
return [
    // ... 他の設定値 ...

    'runway' => [
        // アプリケーションのディレクトリが配置されている場所
        'app_root' => 'app/',

        // ルートインデックスファイルが配置されているディレクトリ
        'index_root' => 'public/',

        // 他のプロジェクトのルートへのパス
        'root_paths' => [
            '/home/user/different-project',
            '/var/www/another-project'
        ],

        // ベースパスはほとんどの場合設定する必要はありませんが、必要であればここにあります
        'base_paths' => [
            '/includes/libs/vendor', // ベンダーディレクトリや何かに対して本当にユニークなパスがある場合
        ],

        // ファイナルパスはコマンドファイルを検索するためのプロジェクト内の場所です
        'final_paths' => [
            'src/diff-path/commands',
            'app/module/admin/commands',
        ],

        // フルパスを追加したい場合は、すぐに追加してください(プロジェクトルートからの絶対パスまたは相対パス)
        'paths' => [
            '/home/user/different-project/src/diff-path/commands',
            '/var/www/another-project/app/module/admin/commands',
            'app/my-unique-commands'
        ]
    ]
];

設定へのアクセス

設定値に効果的にアクセスする必要がある場合は、__constructメソッドまたはapp()メソッドを通じてアクセスできます。app/config/services.phpファイルがある場合、それらのサービスもコマンドで利用できることも重要です。

public function execute()
{
    $io = $this->app()->io();

    // 設定へのアクセス
    $app_root = $this->config['runway']['app_root'];

    // データベース接続などのサービスへのアクセス
    $database = $this->config['database']

    // ...
}

AIヘルパーラッパー

ランナウェイには、AIがコマンドを生成しやすくするためのヘルパーラッパーがいくつかあります。Symfony Consoleに似た方法でaddOptionaddArgumentを使用できます。これはAIツールを使用してコマンドを生成する場合に役立ちます。

public function __construct(array $config)
{
    parent::__construct('make:example', 'ドキュメントの例を作成します', $config);

    // モード引数はnull可能で、完全にオプションがデフォルトです
    $this->addOption('name', '例の名前', null);
}

関連項目

  • Installation - スケルトンツリーとcreate-projectのデフォルト
  • Autoloading - App\とフォルダーケース
  • Dependency Injection - 生成されたコントローラーのDice + Engineインジェクション
  • AI & Developer Experience - ai:initai:generate-instructionsAGENTS.md
  • Active Record - make:record / スケルトンApp\Modelで使用されるモデル
  • SimplePdo - スケルトンのマイグレーションとモデルで使用されるDB接続