SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

LivewireとInertiaによるLaravelのフロントエンド的画面作成入門

LaravelのInertia+Vueの組み合わせでフロントエンド的な画面を作成する【基本編】

LivewireとInertiaによるLaravelのフロントエンド的画面作成入門 第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

Inertia利用の基本

 Inertiaを利用するプロジェクトができたところで、第1回の図4と同じ画面を題材に、Inertiaのコーディング方法を紹介します。

Inertia利用手順

 Inertiaを利用する場合の手順は、以下の通りです。

  1. コントローラクラスとそのメソッドを用意する
  2. コントローラクラス内のアクションメソッドで画面に渡すデータを用意する
  3. Inertiaを利用してフロントエンドコンポーネントに処理を移管する
  4. フロントエンドコンポーネントでコントローラからのデータを受け取る
  5. コントローラクラスのアクションメソッドをルーティング登録する

 このうち、実は、1と2、および5は、従来のBladeを利用したLaravelプロジェクトのコーディングとなんら変わりません。また、4はほぼフロントエンドフレームワークのコーディングといえます。ということは、ここで新しいのは3の手順だけと言えます。

 具体的に見ていきましょう。

コントローラクラスのコード

 手順1~3のコードサンプルをまとめて見ると、リスト1のようになります。

[リスト1]first-inertia/app/Http/Controllers/TopController.php
use Inertia\Inertia;  // (1)

class TopController extends Controller  // (2)
{
  public function index() {  // (3)
    $data["name"] = "しんちゃん";  // (4)
    return Inertia::render("top/Index", $data);  // (5)
  }
}

 リスト1の(2)と(3)が手順1のコードです。そして(4)が手順2のコードです。

 この(2)~(4)のコードを見る限りは、Bladeによる従来のLaravelプロジェクトのコントローラコードと差はありません。(2)でコントローラクラスを定義し、(3)でアクションメソッドを定義します。そのメソッド内の(4)で画面表示に必要なデータ、Bladeならばテンプレート変数を連想配列として用意しています。

 異なるのは、画面を表示させるコードです。Bladeを利用する場合は、view()関数の実行結果をリターンするコードでした。

 一方、Inertiaを利用する場合は(5)のように、Inertia::render()メソッドの実行結果をリターンします。これが、手順3にあたります。もちろん、そのためには(1)のようにあらかじめInertiaクラスをuseしておく必要があります。

 Inertia::render()メソッドの引数は2個であり、第1引数が表示させる画面のコンポーネント、第2引数が画面に渡すデータの連想配列を指定します。

 なお、リスト1では、説明のために(4)で画面に渡すデータの連想配列を変数として用意して、(5)で引数として渡すコードパターンとしていますが、もちろん、次のように引数内で直接連想配列を定義しても問題ありません。

return Inertia::render("top/Index", ["name" => "しんちゃん"]);

 また、Inertia::render()メソッドと同等のヘルパー関数としてinertia()も用意されているので、次のような記述も可能です。

return inertia("top/Index", $data);

フロントエンドコンポーネントの用意

 1~3の手順が済んだので、次に手順4です。そのためには、フロントエンドコンポーネントを用意しておく必要があります。

 これは、resources/js/pagesフォルダ内に作成することになっています。そして、pagesフォルダ以下のファイルパスが、Inertia::render()メソッドの第1引数と一致している必要があります。リスト1の(5)ではtop/Indexとしており、また、本プロジェクトでは、VueをInertiaと連携するフレームワークとして利用するため、実際のコンポーネントファイルは、resources/js/pages/top/Index.vueとなります。これは、リスト2のコードです。

[リスト2]first-inertia/resources/js/pages/top/Index.vue
<script setup lang="ts">
interface Props {  // (1)
  name: string;  // (1)
}  // (1)

defineProps<Props>();  // (2)
</script>

<template>
  <main>
    <h1>Welcome</h1>
    <p>
      {{name}}さん、こんにちは!
    </p>
  </main>
</template>

 リスト2の内容は、基本的にはVueのコンポーネントコードそのままなので問題はないと思います。ただ、一点だけ、Propsに注目してください。

 (1)でPropsインターフェースを定義し、defineProps()マクロにそのインターフェースを渡すことで、Propsを定義しています。そして、その定義が、リスト1の(4)の$data、すなわち、コンポーネントに渡すデータと一致します。つまり、コントローラから渡されるデータは、Propsとして受け取って利用する、というのが手順4になります。

ルーティング登録

 最後の手順である手順5です。とはいえ、これは従来のLaravelプロジェクトとまったく変わらず、web.phpへのコントローラクラスのメソッド登録であり、リスト3のコードとなります。これで、ルートパスである/にアクセスすると、第1回の図4と同じ画面である図3が表示されます。

[リスト3]first-inertia/routes/web.php
Route::get("/", [TopController::class, "index"]);
図3:Inertia+Vueを利用したTOP画面
図3:Inertia+Vueを利用したTOP画面

[NOTE]CSSの無効化

 リスト1~3のコーディングを行うと、確かに第1回の図4と同じ画面が表示されます。ただし、デフォルトでCSSが適用されてしまい、第1回の図4とは見え方が違います。このデフォルトで適用されるCSSを無効化する場合は、resources/js/app.tsの先頭行の次のコードを削除(あるいはコメントアウト)します。

import '../css/app.css';

次のページ
フロントエンド的な画面の作成方法

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
LivewireとInertiaによるLaravelのフロントエンド的画面作成入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/21930 2025/07/28 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング