Timeクラス、Dateクラスを作らない – 命名のアンチパターン紹介

  • URLをコピーしました!

Laravelのコマンド実装で、php artisan time というコマンドを作成した事例を見つけました

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Carbon\Carbon;;


class Time extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'time {days=0}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '毎時実行されるバッチです';

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $days = $this->argument('days');

おそらく、この作成者は、「1時間に1回行われる処理を書こう」としてこの名づけになったのだと思います
これはアンチパターンで、できれば避けたいです
理由はいくつかあります

  • 今は1時間に1回だけど、将来的に頻度が減ったり増えたら、名前も変えないといけない
  • コマンドの名前や説明を見ただけでは、どんなことが実行されるかわからない

説明を十分すればいいのではなくて、ソースコードは実行時の役割でもって名づけしていただきたいです
理由は、上の逆で、名前や説明を見て、一発でどんなことが実行されるかわかりたいです
とくに今回はコマンドなので、 php artisan list で見た時に、これはXXを実行するコマンドなんだなとすぐに理解したいです

ですから、例えば1時間に1回のほうではなく、「ユーザーステータスの更新」とか「来店合計時間の集計」とか、実行されたあとにどうなるかっていうことを伝える名づけにしていきましょう!

そして、コマンドをそれぞれの実行時の役割に分類して、上の例でいえば、 UserStatusUpdater クラスとし、コマンドは、 php artisan user-status-update {days=0} のようになれば、コマンド名を見ただけでなんとなーくやりたいことがわかってよいと思います。

ツチノコテクノロジーに開発・保守を発注しませんか?

Laravel・Flutterの開発・保守をツチノコテクノロジーに発注しませんか?

まずはZOOMで打ち合わせ

お申し込みはこちら

ツチノコテクノロジーでは一緒に働く仲間を募集しています!

完全リモートで働きたい方へ!

詳しくは以下をご覧ください。

ツチノコテクノロジー採用サイト

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

yfukudaのアバター yfukuda 取締役・システムエンジニア

ツチノコテックアカデミアの記事は、社内で誰かが質問してくれたことに回答したときに、ついでに記載しています!(^^)/
みんなの悩みを共有すれば、きっと誰かの役に立つと信じて更新しています!

目次