Next.jsのSSGでポートフォリオを作成してみる
Next.jsのSSGでポートフォリオを作成しているので、そのメモです
create-next-appで雛形を作成
npm create-next-app yamachoo.github.io
今の所、GitHub Pagesを使おうかと想定しているので、<username>.github.ioで作成
参考:GitHub Pages について
※このままだとyarnでインストールされる
個人的にyarnよりnpmに慣れているので、いったん.gitを削除してnpmでインストールし直した
TypeScriptの導入
最近は勉強のためにも個人のプロジェクトにはTypeScriptを導入している
Next.jsの公式を参考に導入した
参考:Basic Features: TypeScript | Next.js
1つ気づいたこととして、普通にコマンドラインに従うと@types/nodeのインストールを促されない
気になったので、package-lock.jsonを検索してみたらjest-workerの依存関係でインストールが既にされていた
あまり良くない状態な気もするけど、現在の自分の運用方法ではインストールしなくても問題はないので、無駄なインストールを今回はしない方針でいくことにする
正直、この部分は他の人がどうしているのか気になる…
SSGのみで使う準備
今回はGitHub Pagesを使うため、SSRは使えない
そこでSSGのみを使う構成に変更していく
page/apiの削除
Next.jsのAPIはSSRになるので、今回は削除しておく
npm-scriptsの編集
- "build": "next build",
+ "build": "next build && next export",
- "start": "next start"
SSRで使うコマンドを削除し、next export
を追加する
参考:Advanced Features: Static HTML Export | Next.js
eslintとprettierの導入
いつも通りの流れだけど簡単にメモ
eslintを導入する
npm i -D eslint
あとはinitで作成
npx eslint --init
prettierを導入する
npm i -D prettier eslint-config-prettier
今回はStandard JSを使っているので、.prettierrc.jsonを作成して設定を合わせる
1つ気づいたこととして、eslint-config-prettierがv8から細かく設定を追加しなくても良くなっていたのが良かった
参考:prettier/eslint-config-prettier
huskyとlint-stagedの導入
npx mrm lint-staged
今回はじめてmrmを使った導入をした
感想としてはメチャクチャ便利!(ただブラックボックス感は半端ない笑)
個人的にhuskyがv5で仕様がガッツリ変わって、手動で導入するのに手間取り結局v4を使い続けた時があった
そのため様子見をしていたけど、これでちゃんと動くなら体感的には良い
Tailwind CSSの導入
npm i -D tailwindcss@latest postcss@latest autoprefixer@latest
npx tailwindcss init -p
./styles/globals.css
でTailwind CSSを読み込み
/* ./styles/globals.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
ページの整え
ポートフォリオっぽくなるように雛形を整える
iconを入れたくなったので@heroicons/react
を導入してみた
またSSGをデプロイ前に確認するためにserve
も導入した
GitHub Actionsの設定
.github/workflows/gh-pages.yml
を作成
name: github pages
on:
push:
branches:
- main
jobs:
build-deploy:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: '14.x'
- name: Cache Node.js modules
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./out
※何故か上手く行かないので調べていると、途中でtypoに気づく…
動かないときは、まず自分のミスから疑うべきと反省
GitHub Pagesの設定
完成
一応、これで表示までは完成した
今後、暇があれば修正をかけて、もう少しリッチにしていきたい
サイト(※今はただのプロフィール)
リポジトリ
PWA対応
next-pwa
を用いてPWA対応を行った
ライブラリ自体は公式から提供されているわけでは無いが、公式のFAQで紹介されているので安心かも?
正直、この規模のアプリでPWA対応は不要な気もするが学習のため笑
SEO部分の最適化
next-seo
というライブラリを使い、SEO部分を最適化した
今まではデフォルトの設定を_app.tsx
で管理していたのが気持ち悪かったが、next-seo.config.ts
という設定ファイルに分離できたので良かった