広告

【Laravel】Vue.js v3導入とComposition API実装【Mix】

JavaScript

当サイトではアフィリエイト広告を利用しています。

広告

はじめに

今回は、LaravelプロジェクトにVue3を導入する手順を解説しました。
私もそうですが、今までフロントエンドはjQueryを利用してきた方は多いのではないでしょうか。

Vueのメリット
  • 学習コストが低い
  • 導入しやすい
  • 開発効率が上がる
  • 人気のJavaScriptフレームワークであり将来性・技術的に習得しておきたい

と、色々ありますが細かいことは気にせず、是非試してみましょう。

Viteを使った構築手順は以下をご覧ください。

【Laravel】Vue.js v3導入とComposition API実装【Vite】
LaravelプロジェクトにVue3を導入し、Composition APIの実装を行いました。

Laravel Sailでの開発環境の構築方法は以下をご覧ください。

Windows
Laravel Sailで開発環境構築【Vite対応】
今回は、Laravel Sailを使って環境の構築を行いました。 SailはDockerですので、開発環境を簡単に用意することもできますし、カスタマイズすることも楽です。
Mac
【M1 Mac】Laravel Sailで開発環境構築【Vite対応】
Laravel Sailを使って環境の構築を行いました。 SailはDockerですので、開発環境を簡単に用意することもできますし、カスタマイズすることも楽です。
使用するバージョン
  • Windows 11 or macOS Monterey (M1)
  • Laravel Framework 8 or 9
  • Vue.js v3

2022/04/20 WindowsとMacを使い、最新バージョンで確認しました。

他にも私のブログで、Laravelについて解説している記事がありますのでご覧ください。

広告

【紹介】個人開発

私の個人開発ですがQuiphaというサービスを開発しました。(Laravel, Vue3など)
良かったら、会員登録して動作を試してみて下さい。

また、Laravel 9 実践入門という書籍を出版しました。
Kindle Unlimitedを契約している方であれば、読み放題で無料でご覧いただくことができます

是非多くの方に読んでいただき、Laravelの開発に少しでもお役に立てたら幸いです。

広告

Vue3の導入

Laravel Sailでの環境として進めます。
「sail up -d」でSailを起動します。

Vue.js v3.0は2020年9月に正式にリリースされました。
詳しい使い方などは、公式サイトを確認しましょう。

Vue.js
Vue.js – The Progressive JavaScript Framework

Laravelプロジェクトを構築した状態で、解説していきます。
カレントディレクトリをプロジェクトフォルダにし、以下のコマンドで、最新安定版のVue3をインストールしましょう。

$ sail npm install vue@next

package.jsonにvueが追加されました。

{
..
    "dependencies": {
        "vue": "^3.2.31"
    }
}

webpack.mix.jsを開き、以下のように修正します。

mix.js('resources/js/app.js', 'public/js')
    .postCss('resources/css/app.css', 'public/css', [
        //
    ])
    // 追加
    .vue();

npmでビルドを行います。開発時なのでdevを指定しました。

$ sail npm run dev

以下のようなメッセージが表示され、vue-loaderのインストールが行われました。

Additional dependencies must be installed. This will only take a moment.
 
Running: npm install vue-loader@^16.2.0 --save-dev --legacy-peer-deps
 
Finished. Please run Mix again.

package.jsonにvue-loaderが追加されました。

...
    "devDependencies": {
...
        "vue-loader": "^16.8.3"
    },
    "dependencies": {
        "vue": "^3.2.21"
    }
}

もう一度ビルドを行いましょう。

$ sail npm run dev

ビルドに成功し、app.jsやapp.cssが無事に作成されました。

✔ Compiled Successfully in 1562ms
┌────────────────────┬─────────┐
│               File │  Size   │
├────────────────────┼─────────┤
│         /js/app.js │ 606 KiB │
│        css/app.css │ 1 bytes │
└────────────────────┴─────────┘
webpack compiled successfully

サンプルコード

それでは簡単なサンプルコードを書いてみましょう。
Laravelのテンプレートファイルを作成します。

resources\views\vue.blade.php

<html>
<body>
    <div id="counter">
        カウントアップ: @{{ counter }}
    </div>

    <script src="{{ mix('js/app.js') }}"></script>
</body>
</html>

bladeの中の{{ xxx }}は、Laravelの変数を扱うことができ、サーバーサイドでレンダリングを行うことができます。
ただし、Vueでも {{ counter }} という文字列をレンダリングに使用するため、先頭にアットマークを追加し、@{{ counter }} のように記述します。
bladeがアットマークを削除し、HTMLソース上ではそのまま {{ counter }} が表示されます。

以下のJavaScriptファイルを修正します。

resources\js\bootstrap.js

一行追加しましょう。これでVueが使用できるようになりました。

window.Vue = require("vue");

次に、以下のファイルを修正します。

resources\js\app.js

以下のようなコードを記述しました。
カウンターを定義し、1秒ごとにカウントアップして数値を表示します。

require("./bootstrap");

const Counter = {
    data() {
        return {
            counter: 0,
        };
    },
    mounted() {
        setInterval(() => {
            this.counter++;
        }, 1000);
    },
};

Vue.createApp(Counter).mount("#counter");

最後にLaravelのルーティングを定義しましょう。

routes\web.php

以下を追加します。

Route::get('/vue', function () {
    return view('vue');
});

npmでビルドを行います。開発時なのでdevを指定しました。

$ sail npm run dev

以下のURLにアクセスします。

http://localhost/vue

画面が表示され、自動的にカウントアップされる数値が表示されました。

counterという変数が変わると同時に、画面の表示が変わっています。
これがリアクティブになっているということであり、Vueの特長の一つです。

Composition APIで実装

折角ですので、Vue3の目玉機能である、Composition APIを試してみましょう。
bootstrap.jsに追記した以下の行はコメントアウトします。

//window.Vue = require("vue");

カウンターの処理を行う関数を用意します。
書き方が先程と違い、戸惑うかも知れませんが、動作は同じになります。

resources\js\vueCounter.js

import { ref, onMounted } from "vue";

export default function vueCounter() {

    // リアクティブな参照
    let counter = ref(0);

    onMounted(() => {
        setInterval(() => {
            // valueを更新。画面も更新される
            counter.value++;
        }, 1000);
    });

    return {
        counter,
    };
}

次に、app.jsを以下のように修正します。(先程追加したサンプルコードは消してください)

require("./bootstrap");
import vueCounter from "./vueCounter";
import { createApp } from "vue";

createApp({
    setup() {

        // カウンターを更新する
        const { counter } = vueCounter();

        return {
            counter,
        };
    },
}).mount("#counter");

npmでビルドを行います。開発時なのでdevを指定しました。

$ sail npm run dev

この状態で、先程と同じ画面を開くと、カウントアップされた画面が表示されます。

メインの処理は肥大化させないようにしましょう。
このように役割ごとに関数を定義し、再利用(共通化)をしていくと保守性が高くなります。

Composition APIについてさらに詳しく知りたい場合は、以下の記事を参考にしてください。

Vue.js
Vue.js – The Progressive JavaScript Framework

その他

初学者へ

Laravelを初めて触る方へ向け、手順やアドバイスをまとめました。

外部サーバーへ公開

作成したアプリは公開して使ってもらいましょう!
Laravelアプリケーションを外部公開する方法をまとめました。

脆弱性対策

脆弱性を抱えたアプリケーションの場合、攻撃を受ける可能性があり大変危険です。
作成したアプリケーションは、脆弱性対策も意識しましょう。

GitHubと連携

GitHubと連携する方法を解説しました。
プロジェクトの管理はGitHubを活用しましょう。

GitHub Copilot

GitHub Copilotを導入し、AIにコーディングをサポートしてもらうこともできます。

さいごに

今回は、LaravelプロジェクトでVue3を使用できるように解説しました。
是非、試してみてください。

他にも私のブログで、Laravelについて解説している記事がありますのでご覧ください。

JavaScriptLaravelMacOSPHPWindowsプログラミング
広告

個人開発

千草 @chigusaweb

現役のITエンジニア。 気ままにコードを書いたり技術情報を発信しています。 Webアプリ/Windows・Macアプリ/モバイルアプリなど。 (Java, PHP, Javascript, Swift, Python, C#, 他) 個人開発:Clibor, Quipha, TXT-Crypter, 符計算特訓, チグサツール Kindle本: Laravel9 実践入門, 他

クリップボード履歴

Clibor

Windows

Cliborはシンプルで高機能なクリップボード履歴ソフトです。
また普段よく使うワードを定型文として登録し、いつでもクリップボードに保存することができます。高度なテキスト整形・FIFOモード・ホットキーに対応。

クリップボード履歴

Windows版Cliborの利便性を、そのままMacでも。
定型文登録、高度なテキスト整形、FIFOモードなど、便利なクリップボード履歴機能を利用できます。macOS最新のTahoeにも対応。

テキスト暗号化

テキストを暗号化してURLで共有・保存できる無料サービスです。
パスフレーズを知る人だけが復号できます。登録不要、データはサーバーに保存されません。
Notionでも利用できます。

学習

Quipha

Web / iOS

自分だけの問題集や問題を作成し、クイズを行い、学習に活用することができるアプリです。
例えば、学校の授業、語学学習、IT資格やその他の資格など多彩な分野での学習を支援します。
いつでも、どこでも、あなたの学習をサポート。

ツール

日常の「ちょっとした効率化」をサポートするWeb便利ツール集。
テキスト・データ処理から最新のAI連携まで、日々のちょっとした手間でググりがちなユーティリティを1つの場所に集約。

麻雀

麻雀の符計算をひたすら特訓しマスターしましょう。
初心者の方はもちろん、もっと速く計算したい方にも役立ちます。
5万対局以上の実践から問題を収録。

コメント

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