11
5

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 3 years have passed since last update.

PWAAdvent Calendar 2019

Day 4

レンタルサーバーで無理くりLaravel + Nuxt + PWAをやってみた

Last updated at Posted at 2019-12-04

PWA Advent Calendar 2019 4日目の記事です。
PWAチックなのはNuxt.jsのNuxt PWAを使っているところのみです。
レンタルサーバーで無理くりLaravel + Nuxt + PWAをやってみました。

試してみたものの概要

  • レンタルサーバー (XREA)
  • Laravel 6.x
  • Nuxt.js 2.10 (Nuxt PWA)

結論

そもそもレンタルサーバーでLaravelを動かすべきではないし、
Nuxt.jsとLaravelを同一サーバーで管理するのが面倒臭すぎました。

前提条件

  • レンタルサーバーでSSLを設定済み
  • Laravel 6.xをローカル環境で構築済み
  • ローカル環境のNode.jsをインストール済

事前準備

npx @vue/cliをインストールする

$ npm i -g npx @vue/cli

LaravelのプロジェクトディレクトリにNuxtを入れる

$ npx create-nuxt-app nuxt

選択肢は適当に。

Nuxtのインストールが完了したら、Nuxtの設定関連ファイル群をLaravelのルートディレクトリに移動させる。

$ cd nuxt
$ mv .babelrc jest.config.js nuxt.config.js package-lock.json package.json ../

Nuxtに必要なモジュール(nuxt-laravel)を入れ直す

$ cd -
$ npm i --D nuxt-laravel@next @nuxtjs/axios @nuxtjs/proxy @nuxtjs/pwa

nuxt.config.jsを編集

nuxt.config.js
module.exports = {
  srcDir: 'nuxt', //追加
  mode: 'spa', //追加
  modules: [
    'nuxt-laravel'
    '@nuxtjs/pwa', //追加
  ],
  router: {
    base: '/app/' //追加 任意のディレクトリ名
  },
}

package.jsonを編集

Laravelベースの設定になっているため、scriptsの箇所をごっそり編集する

package.json



  "scripts": {
    "dev": "nuxt",
    "build": "nuxt build",
    "start": "nuxt start",
    "generate": "nuxt generate",
    "test": "jest",
    "postinstall": "npm run build"
  },

pallares/laravel-nuxtをComposerからインストール

$ composer require pallares/laravel-nuxt

Nuxtの開発環境サーバーを動かす

npm run dev実行後、localhost:3000/app/にアクセス

$ npm run dev

Nuxtのデフォルトが見えればおk。

Laravel Nuxt用のトップページを作成する

とりあえず動かすだけなら./nuxt/pages/index.vueのコピーでOK。

nuxt
├── pages
│   ├── README.md
│   ├──  top.vue #新規作成
│   └──  index.vue

Laravelのルーティングの設定

/app/topのURLでNuxtのtop.vueを表示するように設定する。

routes
├── api.php
├── channels.php
├── console.php
└── web.php #編集
    Route::get('/', function () {
        return redirect('/app/top');
    });

    Route::get('/app', function () {
        return redirect('/app/top');
    });

    Route::get(
      '/app/top',
      '\\'.Pallares\LaravelNuxt\Controllers\NuxtController::class
    );

本番環境のコンパイル

$ npm run build

でNuxt.jsのビルドを実行する

ローカルでLaravel Nuxt用のトップページを確認する

PHPのBuiltinサーバーでなら

$ php artisan serve

を実行して、localhost:8000/app/topにアクセスして、Laravel Nuxt用のトップページ(Nuxtのデフォルト画面)を確認する。

レンタルサーバー用の.htaccessを作成

.htaccessプロジェクトのルートディレクトリに置いて、publicデフォルトを無理やりドキュメントルートに変更します。
そうしないとLaravelがレンタルサーバーで基本的には動作しません。
**ドキュメントルートを直接弄れるレンタルサーバーであれば別です**

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC] #追加
    RewriteRule ^(.*)$ public/$1 #追加

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

    RewriteRule ^(.*)/+$ $1 [R=301,L]
</IfModule>

レンタルサーバーにファイルアップロード

レンタルサーバーはたぶんFTPかSFTPですので、FileZillaなどを使用して、レンタルサーバーの公開ディレクトリにnode_modulesを除く全ファイルをアップロードします。メチャクチャ時間かかります。

.envvendorも必ずアップロードしてください。
でないと動きません。

アップロードしたレンタルサーバーのURLにアクセス

「https://${domain}/app/top」にアクセスしてください。

スクリーンショット 2019-12-04 09.57.34.png

インストールのボタンが出ており、PWAとしてインストールが可能なはずです。

最後に

レンタルサーバーで無理くりLaravel + Nuxt + PWAを試してみて、一旦は動くものの、まず実運用には耐えられないと思います。
Laravelのマイグレーションは基本SQLを発行して、SQLをphpmyadminか何かでimportし、デプロイはvendorから何から何までアップロードするため、アップロードミスや漏れも発生しやすいです。

もし実運用を目指すのであれば、Laravelは使わずにNuxtで静的に生成したファイル群をレンタルサーバーで設置するのであれば、お手軽にNuxt + PWAを試せると思います。

追記

明日はセルフバトン渡します。
何も考えずに始める意識低い系のPWAの予定です。

11
5
1

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
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?