Nuxt 3、Tailwind、Nuxt content v2によるブログ作成のための基本設定
元々ブログ作成に使っていたNext.jsのシステムを変更したかったので、新しくNuxt 3を使用したシステムに構築し直しました。
新ブログ移行の要件は以下の通りです。
- 既存のURLをそのままにできる
- Markdownで記事が書ける
- 自分である程度ブログデザインをコントロールできる
- Nuxt 3で作れる
Nuxt 3は最近出たばかりで自身の学習のために採用することにしました。以上の要件を踏まえて調べてみると、Nuxtには Nuxt content v2という静的サイト作成用のパッケージがありました。どうやらこれを使えば要件にあったサイトが作れそうです。
ということで、今回はNuxt content v2とどのようにブログを構築したかを説明していきます。長くなるのでいくつかの投稿に分けたいと思います。今回はまず第一弾です。
必要なもの
下記コマンドを利用すると必要最低限のものがセットされたプロジェクトが作成されます。content-app
部分がプロジェクト名です。
npx nuxi@latest init content-app -t content
以下のnuxt
と@nuxt/content
が最低限必要なパッケージです。Nodeは18.13.0のバージョンを利用しています。
{
"private": true,
"type": "module",
"scripts": {
"build": "nuxt build",
"dev": "nuxt dev",
"generate": "nuxt generate",
"preview": "nuxt preview"
},
"devDependencies": {
"@nuxt/content": "^2.8.2",
"nuxt": "^3.7.3"
}
}
(参考:公式サイト)
これらをインストールし、yarn dev
を実行するとlocalhost: 3000
で以下のようにindex.md
に記述されたマークダウンがHTMLに変換されて表示されているはずです。
Nuxt Contentではプロジェクトフォルダにcontent
フォルダを作成し、そこにマークダウンファイルを置いていきます。
vueファイルは一旦pages/[...slug].vue
だけです。中身は以下のようになっています。
<template>
<main>
<ContentDoc />
</main>
</template>
まずは細かいところはおいて置いてそのほかの設定をやっていきます。
TypeScriptの設定
Nuxt 3ではデフォルトでTypeScriptのサポートが提供されています。 したがって特に自分で設定したくなければそのままTypeScriptの記法が使えます。
今回は開発中の型チェックのサポートが欲しかったので以下のような設定を行いました。 (参考:Type-Checking、nuxt-config#typescript)
defaultのnuxt.config.ts
を以下のようにします。
// https://v3.nuxtjs.org/api/configuration/nuxt.config
export default defineNuxtConfig({
modules: ['@nuxt/content'],
typescript: {
shim: false, // VScodeの拡張機能を使うためにfalse
strict: true, // 型チェックの厳格化
typeCheck: true // 開発、build時の型チェックを有効に。vue-tscとtypescriptのインストールが必要
},
})
型チェックを有効にしたい場合はvue-tsc
が必要です。vue-tsc
はTypeScriptのtscのラッパーだそうです。
特徴としてはSingle File Component(シングルファイルコンポーネント)の<template></template>
内部についても型チェックをしてくれることです。
vue-tsc
を使うにはpackage.json
にTypeScriptの記載が必要らしくインストールする必要があります。
yarn add -D typescript vue-tsc
vue-tsc
のコマンドはvue-tsc --noEmit && vite build
です。試してみると、確かに<tempalte>
内のtypeエラーを指摘してくれます。
一方で、VSCodeの拡張機能を有効にしていると開発中に同様の型エラーは気づけます。typecheckが不要な方はインストールの必要はないかもです。
(参考:vue-tsc)
Tailwind CSSの設定
続いてTailwind CSSの設定を行います。Nuxtの場合は@nuxtjs/tailwindcss
をインストールします。
インストール後、npx tailwindcss init
でtailwind.config.js
を作成します。
その後./assets/css/tailwind.css
のようにフォルダとファイルを作成します。tailwind.css
には以下を書きます。
(参考: Config)
@tailwind base;
@tailwind components;
@tailwind utilities;
最後にnuxt.config.ts
にモジュールを追加して以下のようにします。
// https://v3.nuxtjs.org/api/configuration/nuxt.config
export default defineNuxtConfig({
modules: ['@nuxt/content', '@nuxtjs/tailwindcss'],
typescript: {
shim: false,
strict: true,
typeCheck: true
},
})
ここまで来てyarn dev
を走らせると、元のスタイルが失われます。
はい、h1などのスタイルが効かなくなってしまうのです。
こちら公式サイトに記載があり、上記のtailwind.css
を適用すると各種HTMLタグの余白がなくなり見出しのスタイルが通常のテキストと同様のフォントサイズになります。
一応、以下の内容をtailwind.config.js
に記載することで無効化することもできます。ある程度デフォルトのものを使いたい場合は無効にした方が楽かもです。
module.exports = {
corePlugins: {
preflight: false,
}
}
ただ開発を進めてみると結局自分で細かく設定したくなりました。Nuxt Content v2ではh1タグをはじめ各種基本的なHTMLの要素を上書きできるのでその機能を使い上書きしていくことにします。
またtypographyを使う手もあります。候補は@nuxt-themes/typography
と@tailwindcss/typography
でした。前者の方はvue-tsc
で大量のエラーが出たので採用しませんでした。
後者の方は上で紹介したTailwindの設定をした上で、@tailwindcss/typography
をインストールし、tailwind.config.js
に下記のpluginを追加すると使えます。
/** @type {import('tailwindcss').Config} */
export default {
content: [],
theme: {
extend: {},
},
plugins: [require('@tailwindcss/typography')]
}
このようにするとちょっとオシャレなスタイルに変わります。
今回のブログ構築では基本的にはtypographyのデザインを使いつつ自分が変えたいところだけ上書きします。
デプロイ
静的サイトとしてデプロイする際はyarn generate
を実行します。実行すると、プロジェクト直下に.output
フォルダが作成されるので、.output/public
をサイトをホストする場所におけばOKです。
Netlifyであれば先ほどのpublicフォルダ内を手動アップロードすることで簡単に動作確認ができます。
documentDrivenモードについて
documentDrivenモードとはNuxt Contentが推している?.md
を主体としたモードです。この設定をオンにすると記事の Markdownを管理するだけでブログができてしまうというもの(たぶん)。
documentDrivenモードは今回採用しませんでした。
理由は情報が公式サイト含め少なすぎるのと、Nuxtのpages
の仕組みを使った方がブログのユースケースでよくあるページングなどを実現しやすかったからです。
日本語だと以下の情報がわかりやすいです。
まとめ
本記事ではとりあえずNuxt 3、Nuxt Content v2、TypeScript、Tailwindcssを使ったブログ構築の土台を紹介しました。
次以降の記事ではここから一般的なブログに必要な要素をNuxt Contentのお作法に沿って構築していく方法を書いていきます。