Nuxt.js x Firebase事始め
この記事は、Nuxt.js #2 Advent Calendar 2018 の1日目の記事です。
2日目は @amishiro さんの 「nuxt.js(v2)でSEOに必要なmeta(OGP含む)を最低限コントロール」です。
せっかくのアドベントカレンダーが空いていたので、サクッと事始め的なものを書いておきます。
TL;DR
- 完全初心者向け
- Nuxtで作成した静的ウェブページをFirebaseにホスティング。
- 必要なインストール物は
Node
とfirebase-tools
だけ。 - この記事を書くのを含めて、1時間で静的ページをホスティングできた。
環境
こんな感じ。
npx
は npm
が 5.2.0
以降であれば何もせず使えます。
$ node -v v10.5.0
$ npm -v 6.4.1
$ npx -v 6.4.1
create-nuxt-appで雛形を作成
npx create-nuxt-app omiend_nuxt_advent_calendar_2018_2_day_one
と言った感じでコマンドを実行。
$ npx create-nuxt-app omiend_nuxt_advent_calendar_2018_2_day_one npx: 402個のパッケージを12.956秒でインストールしました。 > Generating Nuxt.js project in /Users/omiend/omiend_nuxt_advent_calendar_2018_2_day_one ? Project name omiend_nuxt_advent_calendar_2018_2_day_one ? Project description My glorious Nuxt.js project ? Use a custom server framework none ? Use a custom UI framework none ? Choose rendering mode Universal ? Use axios module no ? Use eslint no ? Use prettier no ? Author name omiend ? Choose a package manager npm Initialized empty Git repository in /Users/omiend/omiend_nuxt_advent_calendar_2018_2_day_one/.git/ > fsevents@1.2.4 install /Users/omiend/omiend_nuxt_advent_calendar_2018_2_day_one/node_modules/fsevents > node install [fsevents] Success: "/Users/omiend/omiend_nuxt_advent_calendar_2018_2_day_one/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node" already installed Pass --update-binary to reinstall or --build-from-source to recompile > nodemon@1.18.7 postinstall /Users/omiend/omiend_nuxt_advent_calendar_2018_2_day_one/node_modules/nodemon > node bin/postinstall || exit 0 > nuxt@2.3.4 postinstall /Users/omiend/omiend_nuxt_advent_calendar_2018_2_day_one/node_modules/nuxt > opencollective || exit 0 :=. -=+=: :- .-=+++=: :++=. .-+++++++=++++=. .=+++++++****++++. :=+++++++******++*+: :=+++++++********++*+: :=+++++++**********++*+- -=+++++++*************+*+-. .-=======+**************++++=. .........::::::::::::::::::::. Thanks for installing nuxtjs 🙏 Please consider donating to our open collective to help us maintain this package. Number of contributors: 156 Number of backers: 134 Annual budget: $31,883 Current balance: $6,225 👉 Donate: https://opencollective.com/nuxtjs/donate npm notice created a lockfile as package-lock.json. You should commit this file. added 1011 packages from 497 contributors and audited 13706 packages in 45.881s found 0 vulnerabilities To get started: cd omiend_nuxt_advent_calendar_2018_2_day_one npm run dev To build & start for production: cd omiend_nuxt_advent_calendar_2018_2_day_one npm run build npm start
何かいろいろ聞かれますが、今回はnuxtで作った静的サイトをサクッとfirebaseにホスティングさせるだけの目的なので、全てそのままエンターで大丈夫です。
ローカルで立ち上げ
$ cd omiend_nuxt_advent_calendar_2018_2_day_one
$ npm run dev > omiend_nuxt_advent_calendar_2018_2_day_one@1.0.0 dev /Users/omiend/omiend_nuxt_advent_calendar_2018_2_day_one > nuxt ℹ Preparing project for development 11:36:53 ℹ Initial build may take a while 11:36:53 ✔ Builder initialized 11:36:53 ✔ Nuxt files generated 11:36:54 ✔ Client Compiled successfully in 9.56s ✔ Server Compiled successfully in 8.37s ℹ Waiting for file changes 11:37:09 ╭─────────────────────────────────────────────╮ │ │ │ Nuxt.js v2.3.4 │ │ Running in development mode (universal) │ │ Memory usage: 142 MB (RSS: 218 MB) │ │ │ │ Listening on: http://localhost:3000 │ │ │ ╰─────────────────────────────────────────────╯
こんな画面が出ればOK!
firebase-toolsのインストール
firebaseの設定やデプロイに利用するのでインストールしていきましょう。
$ npm install -g firebase-tools
Firebaseの設定
下記ページに移動(Googleのアカウントが必要)
https://console.firebase.google.com/u/0/?hl=ja
プロジェクトを追加
プロジェクト名に omiend-nuxt-ac-2-2018-day-1
などと入力(30文字以内、かつ全体で一意な値が必要)
準備中・・・
準備完了!
アプリにfirebaseの設定
アプリのルートディレクトリなんかで。
下記コマンドでfirebaseにログイン。
$ firebase login
firebaseアプリとしての初期化。
とりあえずホスティングするだけなので、Hostingだけチェック。
$ firebase init ######## #### ######## ######## ######## ### ###### ######## ## ## ## ## ## ## ## ## ## ## ## ###### ## ######## ###### ######## ######### ###### ###### ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ######## ######## ## ## ###### ######## You're about to initialize a Firebase project in this directory: /Users/omiend/omiend_nuxt_advent_calendar_2018_2_day_one ? Which Firebase CLI features do you want to setup for this folder? Press Space to select features, then Enter to confirm your choices. ◯ Database: Deploy Firebase Realtime Database Rules ◯ Firestore: Deploy rules and create indexes for Firestore ◯ Functions: Configure and deploy Cloud Functions ❯◉ Hosting: Configure and deploy Firebase Hosting sites ◯ Storage: Deploy Cloud Storage security rules
先程作成したアプリを選択。
(あれ、もしかしてここでプロジェクト作れるっぽいですね・・・)
First, let's associate this project directory with a Firebase project. You can create multiple project aliases by running firebase use --add, but for now we'll just set up a default project. ? Select a default Firebase project for this directory: [don't setup a default project] ❯ omiend-nuxt-ac-2-2018-day-1 (omiend-nuxt-ac-2-2018-day-1) [create a new project]
nuxtの静的ページが成果物として吐き出されるディレクトリがデフォルトで dist
となっているので、ここでは dist
と入力。
Your public directory is the folder (relative to your project directory) that will contain Hosting assets to be uploaded with firebase deploy. If you have a build process for your assets, use your build's output directory. ? What do you want to use as your public directory? (public) dist
こちらはどちらでも。
? Configure as a single-page app (rewrite all urls to /index.html)? (y/N)
すると、firebase標準のファイルが dist/
に書き込まれます。
$ tree dist dist ├── 404.html └── index.html
また、 .firebaserc
と firebase.json
が作成されます。
中身を軽く確認しておきましょう。
{ "hosting": { "public": "dist", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ] } }
nuxtの静的ページを作成する
下記コマンドで、 dist/
に静的ページを吐き出してくれます。
$ npm run generate > omiend_nuxt_advent_calendar_2018_2_day_one@1.0.0 generate /Users/omiend/omiend_nuxt_advent_calendar_2018_2_day_one > nuxt generate ℹ Production build 12:02:39 ✔ Builder initialized 12:02:39 ✔ Nuxt files generated 12:02:39 ✔ Client Compiled successfully in 11.46s ✔ Server Compiled successfully in 1.06s Hash: e0659d0d10dfa2256b37 Version: webpack 4.26.1 Time: 11466ms Built at: 2018/12/01 12:02:57 Asset Size Chunks Chunk Names 14c95cbe138218495c1c.js 134 KiB 1 [emitted] commons.app 49b161f7000b548f9edc.js 3.72 KiB 2 [emitted] pages/index LICENSES 426 bytes [emitted] e32c00ed64980e8a41cb.js 2.18 KiB 3 [emitted] runtime ef7aa52f949e4d319068.js 31.6 KiB 0 [emitted] app + 3 hidden assets Entrypoint app = e32c00ed64980e8a41cb.js 14c95cbe138218495c1c.js ef7aa52f949e4d319068.js Hash: 134f36df68087978ceee Version: webpack 4.26.1 Time: 1061ms Built at: 2018/12/01 12:02:58 Asset Size Chunks Chunk Names server-bundle.json 195 KiB [emitted] Entrypoint app = server-bundle.js ℹ Generating pages 12:02:58 ✔ Generated /
ここで吐き出されたファイル群を、firebaseにホスティングします。
firebaseにデプロイ
下記コマンドで、firebaseにデプロイします。
$ firebase deploy === Deploying to 'omiend-nuxt-ac-2-2018-day-1'... i deploying hosting i hosting[omiend-nuxt-ac-2-2018-day-1]: beginning deploy... i hosting[omiend-nuxt-ac-2-2018-day-1]: found 9 files in dist ✔ hosting[omiend-nuxt-ac-2-2018-day-1]: file upload complete i hosting[omiend-nuxt-ac-2-2018-day-1]: finalizing version... ✔ hosting[omiend-nuxt-ac-2-2018-day-1]: version finalized i hosting[omiend-nuxt-ac-2-2018-day-1]: releasing new version... ✔ hosting[omiend-nuxt-ac-2-2018-day-1]: release complete ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/omiend-nuxt-ac-2-2018-day-1/overview Hosting URL: https://omiend-nuxt-ac-2-2018-day-1.firebaseapp.com
アプリの確認
firebaseのアプリを作成する際に入力した一意な値( omiend-nuxt-ac-2-2018-day-1
)がそのままホスティングのURLに利用されます。
omiend-nuxt-ac-2-2018-day-1.firebaseapp.com
無事にデプロイが終わったら確認してみましょう。
おわり
たった数コマンド打っただけで、簡単に静的サイトを公開出来るとは、まったくもってすごい時代です。
ステキですね。