拡張性のないLaravel…ComandをWeb APIに転用するにはどうすればいいのか?

徒然草2.0

Laravelにはartisanを使ってコマンドを作成することができます。Commandを継承して処理を作成できるということです…でも、例えばこのコマンドは…コマンドやバッチとして作成したけれど…Web APIとして叩きたいよね?ていう話になったらどうすればいいのでしょうか?

…Laravelフレームワークを使わずにフルスクラッチで作っていたら、共通化モジュールにするけど…Laravelの場合はそのWebAPIパラメータの受け取り口を$requestにすればいいだけだから、端的にCommandを継承して作った処理を一般的なControllerのクラスにコピペしちゃえばいいか?…いや、たぶんこれはおかしいだろう。同じ処理が2つ別のクラスにかかれていることになってしまいますよ…であれば共通処理クラスA(仮)を作ってあげて、そこに処理を書いてあげて、commandやWebAPIから各々そのクラスAを呼び出せばいいということになるでしょうか…でもそれだとCommandはCommandのクラスに書きましょうというフレームワークのスタイルから外れることになり、逆の面倒臭さが生じる気がするのは気の所為でしょうか?まあでも、前者よりは後者のほうが一般的には「正しい」方向性のはず…その手のサンプルみたいなものは世に無いので、最善がどちらか取捨選択することになると思います。Commandのクラスを継承しているのだから、Commandのクラスを使用しないというのが違和感で、ただのインターフェース的な立ち位置になるけどこれいいの?て感じです…そのへんのさじ加減について論じている情報がなくて厳しいというのがLaravelに対する現在の印象。それはLaravelうんぬんではなくて、もっとオブジェクト指向プログラミングとはなんぞや?という観点で考える部分だと言われればそれまでですが…なんとなくフレームワーク機能によってできることなのか?そうじゃないのか?の判別ができるほどFrameWorkにせよOOPにせよわかってないよ…という…はい。

ただの愚痴ではなくて、ただの無知である、というお話でした。

あと、気がつけばLaravel5系がいつのまにか最新版が8になってしまっている。まあMySQLも5.7の次が8になっているので3段飛びくらい今の時代は「あたりまえ体操」ならぬ「あたりまえ現象」と割り切るしかないのかもしれませんが。

ちなみに現在のプロダクトではLaravelは7を使っていてMysqlは5.7を使っている。Laravelもバージョンによって推奨されるモジュールが違ってcomposerがwarningを吐いたりした(auth系の鉄板モジュールを変更せざるを得ず別のモジュールを使用した?)

コメント

タイトルとURLをコピーしました