2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

こんにちは!

前回、フレームワークを改修した話(Ethna)を書きました。

今回は、laravel-adminを改修(カスタマイズ)した経験について書こうと思います。

はじめに

サービス開発を行なう際、ユーザー画面だけでなく、管理画面も必要ですね。
要件定義で様々なご要望をいただくのですが、利用するフレームワークによって、以下のパターンに分かれます。

  • すぐに実現できる機能
  • カスタマイズしないと実現できない機能

フレームワークは便利ですが、万能ではありません。
そこで、どのようにカスタマイズできるか、というのが大事になります。

今回は、お客さまのご要望を実現するために奮闘したお話です。

どのような要件だったか

たとえば、このような画面。
よくある検索画面です。
aaa.png

ここで、エンジニアとユーザーで検索機能に対するイメージに違いが生じることがあります。

エンジニア:
項目間(会社名と担当者名など)はANDで検索すればOK!
絞り込んだ方が効率がいいので、問題なし。

ユーザー:
できるだけ広く検索したいから、AND/ORを選びたい。
ANDだけだと、見つからない可能性があるかも。

この検索画面では、これですね。
bbb.png

なぜ??と思う方もいらっしゃるかもしれませんが、要望されるお客様は、とても多いです。
お客さまの運用に合わせて作るべきなので、ここはお客様のご要望が正となります。

普通にできるのでは?

そうですね、たいていの場合は、オーバーライドしてうまいことやれば、実現は可能です。
しかし、今回使ったライブラリでは、それができなかったんです。

利用したライブラリ

laravel-adminのGridを使いました。

Gridとは

Gridは検索フォームや一覧画面の表示、フィルタリングを行うライブラリです。以下のように使用します。

$query->where(.......)

OrとかOrWhereを使ったらいいのでは?

そうなんです。あれば使えばいいんです。
ところが、無かったんです。。
Filterクラスを確認してみましたが、ありませんでした。(私の見落としだったらすみません)
スクリーンショット 2023-12-06 2.54.12.png

では、どうするか

そうなると、選択肢は2つあります。

  • 他のフレームワークやライブラリを使う
  • 思い切ってカスタマイズする

前者だと理想的ですが、私は後者を選択しました。
理由は単純で、前者を選択すると、絶対に納期に間に合わなかったんです:innocent:

どのようにカスタマイズしたのか

  • src/Grid/Filter.phpにorWhere、orWhereBetween、orWhereInを追加
    スクリーンショット 2023-12-06 2.55.26.png

  • where、between、inを複製し、orが使えるように修正
    スクリーンショット 2023-12-06 2.56.13.png

これによって、無事にorWhereが使えるようになりました:slight_smile:

バージョンアップしたときが心配ですが、そこはドキュメントに明記してあります。

まとめ

ライブラリを選択する際は、カスタマイズのしやすさを前提で選択した方がいいです。
しかし、要件の変更などで当初の想定と異なることもしばしば。
まずは要件を最優先で、どんなご要望にも応えられるカスタマイズ力を身につけましょう!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?