この記事をおすすめしたい人
- WordPressしか知らないのにNuxt.jsを始めようとしてる人
- Nuxt.jsを始めたけどモジュールは何を使えばいいか分からない人
- つまりオレ
何も知らない超初心者が脱WordPressしたくてNuxt.jsでサイト構築していくシリーズです。
ひとまずNuxt.jsで作ったサイトを公開しました。
その過程でアレやコレやと導入を検討したモジュールを初心者目線でまとめてみたので、紹介したいと思います。
WordPressの上でな!
※ このブログはWordPress製ですが、Nuxt.jsに移行予定です
個人的に必須と思ったモジュール
プロジェクト問わず絶対に入れようと思ったモジュール群です。
個人的な評価なので、自分にとっての価値は自分で判断してください。
@nuxtjs/google-analytics
Nuxt.jsでGoogleアナリティクスが使えるようにするモジュールです。
Webサイト運営しててアナリティクス不要なんて人はおそらくいないでしょうから必須枠へ。
使い方はインストール↓。
$ npm install --save-dev @nuxtjs/google-analytics
nuxt.config.jsに追加↓。
export default {
buildModules: [
['@nuxtjs/google-analytics', { id: 'UA-XXXXXXXXX-X' }],
]
}
設定部分を切り分ける場合はこう↓。
export default {
buildModules: [
'@nuxtjs/google-analytics'
],
googleAnalytics: {
id: 'UA-XXXXXXXXX-X'
}
}
たったこれだけでPVのトラッキングができます。 イベントのトラッキングなどはアナリティクスと同様のやりかたでできます。
@nuxtjs/sitemap
以前「小規模サイトでは別にサイトマップなくてもいいよ」みたいなGoogleの発言を見たような気がするので、いらないのかもしれないですが一応ね…?
使い方はインストール↓。
$ npm install @nuxtjs/sitemap
nuxt.config.jsに追加↓。
export default {
modules: [
'@nuxtjs/sitemap',
]
}
設定部分を追加する場合はこう↓。
export default {
modules: [
'@nuxtjs/sitemap'
],
sitemap: {
// options
},
}
オプションは公式で詳しく解説されています。 個人的に使っているのは次の3つです。
//トップページのURL(末尾スラッシュなし)
hostname: 'https://XXXXXXXXX.com',
//各ページのURL末尾にスラッシュをつけるかどうか
trailingSlash: true,
//除外するURL(以下の例だと/test/以下全て)
exclude: [
'/test/**',
],
@nuxtjs/style-resources
SASS/SCSSなんかを使う時の変数を全ページで流用できるようにするモジュールです。
Nuxt.js(というかVue.js?)はページやコンポーネント、レイアウトなどでCSSを分けて管理することができます。
(分けて、と言っても思った通りには分けれてくれてなかったんですが…)
普通に変数を定義するとそのファイル内でしか変数を参照できないので、テキストやメインの色、レスポンシブのブレイクポイントなど、ファイルごとに定義しないといけません。 これはあまりに非効率……というか、そもそも変数として定義する意味がありません。
そこで、別途変数用のファイルで変数を定義して、全ファイルで使い回せるようにするのがこのモジュールです。
僕はSCSSは必須だと思ってるので、必然的にこのモジュールも必須としました。
使い方はインストール↓。
$ npm install @nuxtjs/style-resources
nuxt.config.jsに追加↓。
buildModules: [
'@nuxtjs/style-resources',
],
styleResources: {
scss: [
'./assets/vars/_var.scss',
],
},
SCSSの部分は自分が必要なものに合わせて、sass/less/stylusが使えるようです。 ファイル名の部分は自分の環境に合わせてください。
これで全ページで変数が使い回せるようになります。
cheerio
Node.js?用のスクレイピングモジュールです。
スクレイピングというのはHTML全体を取得してタグの操作をしたりする機能…で合ってるのかな…。
なんでそんなものを必須にしたかというとですね、Nuxt.jsが追加する「data-n-head」などの属性を削除するためです。
そんなん、放っといたらええやん。
と思いますが、なんとなく気持ち良くないという理由の他に、これがあるとOGPタグがちゃんと認識されていないっぽいんですよね。
OGPはSNSにリンクが貼られた場合の設定なので、せっかくならちゃんと機能してほしいです。 というわけで個人的には必須としました。
使い方はインストール↓。
$ npm install cheerio
cheerioはNuxt.js専用のモジュールではないせいか、nuxt.config.jsに追加はしません。 使う際には以下↓のような格好。
export default {
hooks: {
generate: {
page (page) {
const cheerio = require('cheerio')
const $ = cheerio.load(page.html, { decodeEntities: false })
},
},
}
詳しくは「data-n-head」削除の記事で書いたのでそちらを見てください。
node-sass / sass-loader
Nuxt.jsでSASS/SCSSを使えるようにするモジュールです。
一度SASS/SCSSを経験するとCSSベタ書きなんてやってられないので必須です。
使い方はNuxt.js公式に習ってインストール↓。
$ npm install --save-dev node-sass sass-loader
2つのモジュールが必要らしく、一度に2つともインストールしています。
後はCSSを書く場所で以下のように記述するだけです。
//Vueファイル内
<style lang="scss">
</style>
//nuxt.config.jsのグローバルCSS
css: [
{ src: '~/assets/css/common.scss', lang: 'scss' },
],
postcss-loader
Nuxt.jsでPostCSSを使えるようにするモジュールです。
とは言ったものの僕はPostCSSがなんなのかよく分かっていなくてですね…。 その中の「autoprefixer」という機能目当てで使っています。
autoprefixerというのはベンダープレフィックスを自動追加してくれる機能で、次のようなCSSを書くと、
.flex {
display: flex;
}
この↓ように補完してくれます。
.flex {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
手動ではやってられないかなーと思うので必須にしました。
使い方はインストール↓。
$ npm i --save-dev postcss-loader
nuxt.config.jsでの設定は…なんかめっちゃいろいろ出来そうなんですよね…。 僕はPostCSSの理解が浅いのでNuxt.js公式の説明を見てください。
僕のようにautoprefixerを有効にするだけならこんな↓感じでよさそう。
export default {
build: {
postcss: {
preset: {
autoprefixer: {
grid: true
}
}
}
}
}
ただ、これ、「autoprefixerを有効」にしているんじゃなくて、元々autoprefixerが有効なところに「gridの設定を有効」にしているだけなんじゃないのかと思うんですよね。 僕はgridもautoprefixしてほしいのでこのまま真似ています。
データベース関連のモジュール
Vueファイルに全て直書きしている場合には不要ですが、何らかのデータベースへとアクセスする場合に必要になるモジュールです。 たぶん(あまり理解していない)。
Nuxt.jsでデータベースへアクセスする場合は次の3点セットが必要になると覚えておけばよさそう(たぶん)。
- 目的のデータベースへ接続するモジュール(今回はMySQL)
- express
- axios
PHPでデータベースへアクセスする方法とはだいぶ感じが違っていたので、この辺はまたどっかでまとめようと思います。
mysql
Node.js?でMySQLへ接続するモジュールです。
ネットで検索していると一般にはGoogleのFireBaseを利用するケースが多いようですが、僕はFireBaseを使ったことがないのと、ローカル環境にMySQLがあったので今回はこれを使いました。
インストールするだけ↓でnuxt.config.jsの設定は不要です。
$ npm install mysql
詳しい使い方はAPIのお話をする時に。
express
何をするモジュールなのか、はっきり言って全く理解していません。
expressを組み込むと、サーバミドルウェア?API?を立ててNuxt.jsからデータベースへアクセスできるようになります。 今はこの理解でよしとします…。
インストールするだけ↓でnuxt.config.jsの設定は不要です。
$ npm install express
詳しい使い方はAPIのお話をする時に。
どうでもいいですが、「express」という名前が汎用的過ぎて検索して探すのがけっこう難しいです。
@nuxtjs/axios
これもよく分かってないんですが、expressで立てたサーバ?API?へNuxt.jsからアクセスするためのモジュールです。
axiosはNuxt.jsインストール時に選ぶこともができるので、既にインストールされている場合もあるかと思います。
されていなかった場合はこう↓。
$ npm install @nuxtjs/axios
axiosはサーバ?API?側ではなく、Nuxt.js側から使用するモジュールなのでnuxt.config.jsでの設定が必要です。
export default {
modules: [
'@nuxtjs/axios',
],
}
こちらも詳しい使い方はAPIのお話をする時に。
WordPressのように既にAPIがある場合は、express不要でaxiosだけあればよさそうです。
プロジェクトによって必要になりそうなモジュール
必ず必要なわけでもないけど、サイトの種類によっては必要になりそうなモジュールです。
@nuxtjs/device
よくある「isMobile」みたいな形でクライアントの端末の種類を知るモジュールです。
個人のブログでは不要なことが多いでしょうが、お店とか会社のサイトで「スマホアクセスの場合だけ電話番号をリンクにする」みたいな処理に使えそうです。
使うにはまずインストール↓。
$ npm install @nuxtjs/device
nuxt.config.jsでの設定↓。
export default {
modules: [
'@nuxtjs/device',
],
}
後は各ページ内で次のようにプロパティにアクセスできます。
//<template>内
$device.isMobile
//<script>内
this.$device.isMobile
Vueインスタンス以外にもcontextからアクセスできたり、isMobileの他に「isDesktop」「isAndroid」のようなプロパティがあるみたいなので、詳しくは公式サイトを見てください。
@nuxtjs/google-adsense
今度は逆に、個人サイトなどでGoogleアドセンスを貼るモジュールです。
使うにはまずインストール↓。
$ npm install @nuxtjs/google-adsense
nuxt.config.jsでの設定↓。
export default {
modules: [
['@nuxtjs/google-adsense', {
id: 'ca-pub-###########'
}]
]
}
設定部分を追加する場合はこう↓。
export default {
modules: [
'@nuxtjs/google-adsense',
],
'google-adsense': {
id: 'ca-pub-#########'
}
}
分離した設定部分にシングルクオーテーションが付いてますが、付けないとエラーが出てしまいました。
オプションはけっこう多いので公式サイトの説明を見てもらうとして、僕が使っているオプションは1個だけです。
export default {
modules: [
'@nuxtjs/google-adsense',
],
'google-adsense': {
id: 'ca-pub-#########',
pageLevelAds: true,
}
}
自動広告を有効にするオプションですね。 サイトが出来て間もないせいか広告出てないですが…。
手動で広告を追加する場合は<adsbygoogle />というコンポーネントを使うようです(めんどくさい)。
webpack-obfuscator
JavaScriptを難読化するjavascript-obfuscatorのWebPack版?のようです。
独自性の高いプログラムやデータを扱っていて内容を隠したい場合に使うやつですね。
使うにはまずインストール↓。
$ npm install --save-dev webpack-obfuscator
nuxt.config.jsで以下のように設定。
export default {
build: {
plugins: [
new JavaScriptObfuscator({
//オプション
})
]
},
}
たぶんオプションが一番大事だと思うのでjavascript-obfuscatorの説明を見てください。
個人的に使ってみた感じ、開発モードだと画面内に「x20」が表示されまくってHTMLが破壊されてしまってました。 HTMLソースには「x20」はないし半角スペースがあるわけでもないし、よく分かりません。
オプションによっては「x20」が出ないことがありましたが、クリックに応答しなかったりサーバエラーを返したりと全然うまくいかず…。
なのに静的出力すると上記問題が発生しません(=つまり問題なし)。 分からん…。
ただ、「stringArrayEncoding」というオプションを有効にすると、iOS(iPadとiPhoneで確認)上でクリックに反応しませんでした。 SafariでもChromeでも同様です。 stringArrayEncodingをオフにするとちゃんと機能します。 分からん…。
まとめ
今回は素人なりに、サイト開発に必要そうなモジュールをまとめてみました。
この他にも見た目に関するモジュールや画像の最適化モジュールを試したのでまた機械があれば紹介してみようと思います。
モジュールは「存在を知ってるか知ってないか」で開発効率が大きく変わるので、便利なのは把握しておきたいですねー。
以上、WordPressからお届けしました!
Nuxtサイトリリース編の目次
- 第1回 作ってみての感想
- 第2回 重要そうなモジュール7個(このページ)
- 第3回 <script>の中身をお勉強
- 第4回 ハンバーガーメニューの実装
- 第5回 ユーザ入力を受け取るv-model