Next.jsを使った個人ブログ作成のまとめ
はじめに
新卒エンジニアのyajium(@yajium_)といいます。
今は社会人1年目で、プログラミングも今年の4月から始めました。業務ではC#を使っているので、今回のNext.jsやReactは本当に全く知らないところから勉強しました。
React+Next.js+Tailwind CSSを使った個人ブログ作成をしたので、同じく全く知らないところから始めるよ~みたいな人の参考になればうれしいです!
筆者はNext.jsのチュートリアルをやってからブログ作成を始めたので、段階としてはまずチュートリアルから始めるのがおすすめです。
↓Github
環境構築
blog-starterのセットアップ
私のブログではNext.jsのチュートリアルと同じ普通のcreate next-appでやってしまったのですが、こっちのblog-starterのほうが良さそうでした。
今回はこのblog-starterで話を進めます。
- yarnのインストール
そのままnpmで進めてもよいのですが、yarnのほうが速度的にも早いらしいので(npmの上位互換)yarnを使います
※nodeはインストールされている前提です。yarnがすでにある場合はスキップしてください。
npm install --global yarn
- blog-starterのリポジトリを作成
// 自分がリポジトリを作りたい場所に移動した後
yarn create next-app --example blog-starter 好きなプロジェクト名
- 2で作った[好きなプロジェクト名]ディレクトリに移動してyarn devを実行
cd 好きなプロジェクト名
yarn dev
-
http://localhost:3000/ にアクセスして下のページが表示出来たらOK
あるといい設定
🌟Prettierのインストール
Prettierとはコードフォーマッターのことで、設定したコーディングスタイルに沿ったソースコードにすることができるものです。
-
VSCodeの拡張機能をインストールすることでリアルタイムでPrettierを実行できます。
以下の拡張機能をVSCodeでインストールします。
https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode -
上の環境構築で作ったプロジェクトをVSCodeで開いて、そのプロジェクトディレクトリ直下に
.vscode
ディレクトリとsetting.json
という設定ファイルを作成します -
setting.json
内で以下のコードを追加します。
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
-
Format On Saveを有効にする
VS Codeの設定を開き、検索欄にonsave
と入力する。そして、Format On Save
にチェックを入れる。
-
Default FormatterをPrettierに設定する
4と同じ設定画面の検索欄にformat
と入力し、Default Formatter
という項目でPrettierを選択して、右上のボタンで設定の同期をオンにする。
-
これで保存したときにフォーマットされるようになりました!
🌟ESLintのインストール
※今回は個人ブログの作成であり必須ではないので飛ばしてOK
ESLintとはリンターと言われるもので、プログラムを静的に解析し、バグや問題点を発見するツールのことです。例えば、ソースコードにconsole.logがある状態でESlintを実行すると、「console.logが残ってますよ!修正してください。」みたいなエラーを出すことが出来ます。チーム開発で書き方を統一したい時などの手助けになります。
↓詳しく知りたい人
Prittierと同様にVSCodeの拡張機能を利用できます。
setting.json
内に以下のコードを追記します。
{
"editor.codeActionsOnSave": {
"source.fixAll": true
},
"eslint.alwaysShowStatus": true,
}
Tailwind CSSのインストール
めちゃ簡単です。
TailwindCSSとはCSSのフレームワークのことで、CSSフレームワークといえばBootStrapが有名かもしれません。
基本的なTailwindCssの使い方は、例えばfont-sizeのcssを書きたいときにclassName="text-xl"
のように記述することでcssを簡単に適用できます。
- 今回作ったリポジトリに移動した状態で、以下のコマンドを実行
yarn add -D tailwindcss postcss autoprefixer
yarn tailwindcss init -p
-
tailwind.config.js
内のcontent配列にTailwindCSSを適用する予定のディレクトリやファイルパスを指定する
module.exports = {
content: [
+ "./pages/**/*.{js,ts,jsx,tsx}",
+ "./src/components/**/*.{js,ts,jsx,tsx}",
],
...
}
デフォでpagesやcomponentsは追加されていたので、これらが既にある場合はこの項目は不要です。
- index.css(globals.css)にTailwindCSSのインポートを追加する
このblog-starterではglobals.css
ではなくてindex.css
になっているため、これに下記のインポートを追加します。(既にある場合は不要)
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
globals.cssやindex.cssが何かというと、どのページにも適用されるcssのことです。例えば、このファイル内でpタグに対するcssを書いたとすると、このcssファイルが_app.tsx
でインポートされているのでどのページのpタグにもそのCSSが適用されます。
- 実際に使ってみる
下記のような形で記述すれば使えるようになっています。
<h1 className="text-3xl font-bold underline">
Hello world!
</h1>
🌟番外編
使いまわしが多くなるもの(liタグとか)に対するクラスを毎度<li className="text-3xl font-bold underline"></li>
などで書いていたら大変なので、普通のcssを書くみたいにTailwind CSSを使う方法があります。
下記のようにして@apply
を使うことでTailwind CSSの書き方ができます。
import styles from "../styles/yyy.module.css";
<div className={styles["profile-detail"]}>・・・</div>
.profile-detail {
@apply mx-10 my-16 grid grid-cols-1 gap-14 text-left;
}
.profile-detail h2 {
@apply border-b border-b-gray-300 pb-3 text-center text-lg font-semibold;
}
VS Code上だと@applyでエラーになる可能性があります。その時はPostCSS Language Supportという拡張機能で解決できるので導入してみてください。
フォント設定
Tailwind CSSで好きなフォントを使えるようにします。
- Google Fontsなどで好きなフォントの
@import
とfont-family
をコピーする
-
index.css
(またはgobals.css
)に@importを追加する
-
tailwind.config.js
にfont-familyを追加する
theme: {
extend: {
+ fontFamily: {
+ fancy: ["Kiwi Maru"],
+ },
},
},
fancy
部分は好きな名前でOK。[]の中にfont-familyの名前を入力する。
- 実際に使う
下記のように、font-3で設定した名前
のような形で使う
<div className="font-fancy">
<main>{children}</main>
</div>
☃小技集☃
ここまでくると開発は基本出来るようになったので、個人ブログ作成で使ったライブラリや躓いたところなどを載せます。
マークダウンをZenn風にする
ブログ記事をマークダウン形式にするときなど、そのままで出力したり独自にcss作るとかなり手間だと思うので、私は今回Zennのライブラリを使ってZenn風になるようにしました。
すごく簡単に適用できたのでとてもおすすめです!アイコンの設定
下記画像のようなアイコンを出したいときに便利なのがReact Icons
です。
ここにまとまっているので良かったら見てみてください。
SNSのシェアボタン
例えば投稿ページをSNSでシェアする用のTwitterボタンとかのことです(↓の画像みたいなもの)。これもreact-share
という便利なライブラリがあります。
Readmeに使い方は書いてあります。
OG画像の自動生成
↑のSNSシェアボタンなどを作るとOGPの設定も絶対あったほうがいいので紹介します。
私は@vercel/og
を使いました。下記を参考にすれば大体できると思います。
しかし、私はこのOG画像の設定で沢山沼ったので注意点としてここに残しておきます。
- 日本語フォントを適用する
投稿のタイトルを使って動的にOG画像を変えたいときなど、そのタイトルが日本語の場合、初めのデプロイをする前に日本語フォントを入れといた方がいいです。
なぜデプロイする前かというと、日本語や全角記号があるとvercel/og側がうまく対応できず、真っ白な状態の画像が生成されてしまい、その状態でデプロイするとTwitter側にキャッシュが残って修正した後のコードをあげてもキャッシュされた真っ白画像が1年間で続けてしまうからです。
キャッシュを短くすることもできるみたいなのですが、そこまで出来ませんでしたので、有識者いたらぜひコメントで教えていただきたいです。
mdファイル内の画像
mdファイル内で画像を挿入するときにその画像があるパスが必要になるのですが、localhostやデプロイした後、その画像を拾ってこれず、Not Foundになってしまいました。
どうやらマークダウンをHTMLにした後に、Reactコンポーネントの<Image>
に変換する必要があるみたいです。
下記手順に従えば良さそうなのですが、zenn-markdownと合わせたりすると訳が分からなくなったので私はGoogle Driveから読み込むことにしました。
ただ、今のままだと画像表示がかなり遅いので↑のやり方にしたり、何かしら変えたいなという気持ちがあります。
他にいい方法知ってたらコメントで教えていただけると喜びます😃
最後に
以上、Next.jsを使って個人ブログを作成したときにやったことをまとめました。
参考にして頂けると嬉しいです!
参考記事
Discussion