はじめに
Laravelで管理画面を作成していると、似たようなフォームのコード を何度も書くことになりますよね。特に、select
や input
などのフォーム要素は、Bootstrapと組み合わせるとコードが長くなりがち です。
例えば、以下のような select
ボックスのコードを複数の画面で使う場合、コピー&ペーストを繰り返すとViewファイルがどんどん肥大化 してしまいます。
冗長な select
ボックスのコード
<div class="col-3">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">カテゴリ</span>
</div>
<select class="form-control" id="category_id" name="category_id">
@foreach ($category_ids as $k => $v)
<option value="{{ $k }}" @if ($k==$category_id) selected @endif>@if ($k == '') {{ $v }} @else {{ $k }}:{{ $v }} @endif</option>
@endforeach
</select>
</div>
</div>
このコードを何回も書くのは、メンテナンス性が低下するだけでなく、修正時の工数も増える ので非効率です。
@include
を使ってスッキリ整理!
Laravelの @include
を活用すると、共通のフォーム部品を別ファイルにまとめて管理 でき、記述量を大幅に削減できます!
① 共通の select
コンポーネントを作成
まず、resources/views/common/form/select.blade.php
を作成し、先ほどのコードを共通化します。
{{-- resources/views/common/form/select.blade.php --}}
<div class="col-md-{{$formSize}}">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">{{$caption}}</span>
</div>
<select class="form-control" id="{{$name}}" name="{{$name}}">
@if ($flag===true)
<option value="" @if ($value===null) selected @endif>指定なし</option>
@endif
@foreach ($keyValueMap as $k => $v)
<option value="{{ $k }}" @if ($k==$value) selected @endif>
@if ($k == '') {{ $v }} @else {{ $k }}:{{ $v }} @endif
</option>
@endforeach
</select>
</div>
</div>
② @include
を使って簡潔に記述
次に、Viewファイルでは以下のように @include
を使って select
を呼び出します。
@include('common.form.select', ['formSize' => 2, 'name' => 'category', 'caption' => 'カテゴリ', 'keyValueMap' => $categories, 'value' => $category ?? '', 'flag' => true])
メリット
この方法を使うことで、以下のようなメリットがあります。
✅ コードの重複を排除できる
select
を使うたびに12行書いていたものが、たった1行の @include
で済む ようになります!
例えば、同じ select
を3回使う場合:
リファクタリング前
// 12行 × 3 = 36行
リファクタリング後
// 1行 × 3 = 3行
驚異の約90%削減!
✅ メンテナンスがしやすくなる
-
select
のデザインや仕様を変更する際、1ファイルの修正だけでOK! - コードの見通しが良くなり、開発チーム全体の生産性も向上 します。
✅ 他のフォーム要素にも応用可能!
この方法は input
、checkbox
、date
、submit
などにも適用可能!
たとえば input
フィールドを @include('common.form.input')
にまとめることで、管理画面全体のリファクタリングが劇的に進む でしょう。
対応バージョン
Laravelの @include
は Laravel 5.0 以降 で利用可能です。
Laravel 5 以降のBladeテンプレートでは、@include
を使って別のBladeファイルを簡単に組み込むことができる ので、現在のLaravel 10 でも問題なく使えます!
⚠️ 注意点
-
Laravel 4以前 では
@include
は利用できません。 -
Laravel 5.8以降 では
@includeIf
や@includeWhen
などの便利なディレクティブも追加され、より柔軟な条件分岐が可能になっています。
まとめ
Laravelの @include
を活用すると、管理画面のフォームコードを共通化 でき、開発効率と保守性が大幅に向上 します!
特に、Bootstrapを使ったフォームの作成 ではコードが冗長になりがちなので、積極的にコンポーネント化してスッキリ整理 していきましょう!
「同じようなコードを書いてるな…」と思ったら、すぐに @include
でリファクタリング!
ぜひ試してみてください!