今でも覚えています。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
