今でも覚えています。Laravelを使い始めた時にとても気に入ったのがartisanコマンドであったことを。その当時の他のPHPフレームワークと異なり、Laravelでは最初からコマンドの開発がMVCのUIの開発と肩を並べて上級扱いされていました。Unix系のコマンドに慣れている私には感激でした。しかし、コマンドだけの開発しか必要ないときがあります。つまりブラウザの画面を必要としない開発です。そのようなときにLaravelをインストールすると、ウェブのためのコントローラなどが一緒についてくるので煩わしく思えます。そこで登場するのが、Laravel Zeroです。
Laravel Zeroとは
Laravel Zero(ゼロ)は、Laravelのコアの開発者であるNuno Maduros氏が開発したコマンド開発に特化したフレームワークです。ここでは、以前に記事としたGoogle AnalyticsのデータをAPIで取得(2)コマンドを作成のコマンドを、Laravel Zeroでその説明とともに書き直します。
インストール
Laravelと同様に、Laravel Zeroはcomposerを利用してプロジェクトを作成します。
$ composer create-project --prefer-dist laravel-zero/laravel-zero ga4
現時点では、Laravel 11xをもとにしているのでPHP 8.2が必要ですが、まだその環境が用意されていないなら、例えばLaravel 10xのPHP 8.1なら、以下のようにブランチを指定してインストールも可能です。
$ composer create-project --prefer-dist laravel-zero/laravel-zero:10.x ga4
インストール後に、ディレクトリを見てみましょう。
$ ls -al app/ bootstrap/ config/ tests/ vendor/ application box.json composer.json composer.lock .editorconfig .gitattributes .gitignore phpunit.xml.dist README.md
Laravelがインストールされたディレクトリと似ていますが、database, public, resources, routes, storageなどのディレクトリがありません。また、artisanや.envのファイルもありません。
appのディレクトリの中身を見てみると、
$ tree app app ├── Commands │ └── InspireCommand.php └── Providers └── AppServiceProvider.php
すっきりしてこれだけなのです。しかも、InsupireCommand.phpはデモのコマンドです。
最初のコマンドの作成
早速、Google Analyticsからデータを取得するコマンドを作成しましょう。
コマンドの作成のためのコマンドはLaravelと似ていますが、以下のようにartisanの代わりにapplicationを使います。
$ php application make:command Ga4Command
上で作成されるファイルは、app/Console/Commandsではなくapp/Commandsに置かれます。
これを編集します。
namespace App\Commands; use Google\Analytics\Data\V1beta\Metric; use Google\Analytics\Data\V1beta\OrderBy; use Google\Analytics\Data\V1beta\DateRange; use Google\Analytics\Data\V1beta\Dimension; use Google\Analytics\Data\V1beta\OrderBy\MetricOrderBy; use Google\Analytics\Data\V1beta\BetaAnalyticsDataClient; use Illuminate\Support\Str; use LaravelZero\Framework\Commands\Command; class Ga4Command extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'ga4'; /** * The console command description. * * @var string */ protected $description = 'Get GA4 data'; /** * Execute the console command. */ public function handle() { $client = new BetaAnalyticsDataClient([ 'credentials' => storage_path('ga4.key'), ]); $response = $client->runReport([ 'property' => 'properties/'.config('google.ga4.property_id'), 'dateRanges' => [ new DateRange([ 'start_date' => '28daysAgo', 'end_date' => 'today', ]), ], 'dimensions' => [ new Dimension(['name' => 'pageTitle']), new Dimension(['name' => 'pagePath']), ], 'metrics' => [ new Metric(['name' => 'screenPageViews']), ], 'orderBys' => [ new OrderBy([ 'metric' => new MetricOrderBy([ 'metric_name' => 'screenPageViews', ]), 'desc' => true, ]), ], 'limit' => 100, ]); $rows = []; foreach ($response->getRows() as $row) { $title = $row->getDimensionValues()[0]->getValue() ?? null; $url = $row->getDimensionValues()[1]->getValue() ?? null; $count = $row->getMetricValues()[0]->getValue() ?? null; if ($url === '/') { continue; } $rows[] = (object) [ 'title' => Str::before($title, ' – ララジャパン'), 'url' => $url, 'views' => $count, ]; } $html = view('ranking', compact('rows'))->render(); echo $html; return Command::SUCCESS; } }
Google AnalyticsのデータをAPIで取得(2)コマンドを作成に掲載されているコードと比べると、唯一の違いはnamespaceのパスと継承するCommandのクラスがLaravelZero\Framework\Commands\Commandと変わっただけです。
このコマンドを実行可能とさせるには、インストールすべきライブラリがいくつかあります。
まず、Googleのライブラリです。
$ composer require google/analytics-data
そして、Google AnalyticsのプロパティIDを保存する、.envも必要なのでdotenvのライブラリを以下のようにインストールします。
しかし、composerではなく、ゼロのコマンドのapp:installオプションでインストールします。以下のように、.env, .env.exampleなどのLaravelではお馴染みのファイルがここで初めて作成されます。どうしてこれがプロジェクトを作成したときにインストールされないのはちょいと不思議。
$ php application app:install dotenv Installing dotenv component... Creating .env: ✔ Creating .env.example: ✔ Updating .gitignore: ✔
さらに、Ga4Commandでは、出力にブレードを使うのでview()
のヘルパーも必要です。こちらのインストールはこれもapp:installを使用します。
$ php application app:install view Installing view component... ... Require package via Composer: ✔ Creating resources/views folder: ✔ Creating default view configuration: ✔ Creating cache storage folder: ✔
これで、resources/viewsのディレクトリや、storageのディレクトリも作成されます。だんだんとLaravelらしくなってきましたね。
実行をartisanとする
コマンドが作成されたところで、実行と行きましょう。
実行するには、以下のコマンドラインとなります。
$ php application ga4
このapplicationが気に入らないなら違う名前にもできます。例えば、Laravelに合わせてartisanにしてみましょう。
以下の改名コマンドにおいてartisanを指定します。
$ php application app:rename artisan Renaming the application... Renaming application to "artisan": ✔ Updating config/app.php "name" property: ✔ Updating composer "bin": ✔
実行のコマンドラインは、以下のようになります。
$ php artisan ga4