Reactの続きです。前回はReactのSPA環境で動的OGPを設定したがうまくいかず、Topページのみに静的OGPを設定しました。それで気になったのがNext.js。SSRだとサーバ上にNode環境が必要だがSSGならローカル環境で完結するかもしれない。それではいきましょう!
【目次】
※参考:前回記事
【React】OGPはつらいよ ーSPAでの動的OGP・失敗編ー(Reactアプリスターターキット) - クモのようにコツコツと
※参考:Reactを習得するためにやったことまとめ
qiita.com
前回のおさらい
ReactのSPA環境で動的OGPを設定したがうまくいかず、Topページのみに静的OGPを設定
※参考:【React】OGPはつらいよ ーSPAでの動的OGP・失敗編ー(Reactアプリスターターキット) - クモのようにコツコツと
Next.jsとは
Reactで動的OGPを設定するのは一筋縄ではいかなそう。。
www.slideshare.net
※参考:SPA時代のOGPとの戦い方
SPA(シングルページアプリケーション)にReact-routerでルーティング設定するのではなく、Next.jsで最初からMPA(マルチページアプリケーション)として作る。
なんと、有志によってドキュメントが日本語訳もされていた!
※参考:はじめに | Next.js
SSR(サーバサイドレンダリング)だとサーバ側をNode環境にする必要があるが、SSG(静的サイト生成)だとローカル環境でHTMLがレンダリングされる。これでページごとの動的OGP設定も可能になるのでは。
- SPA: HTMLをブラウザ側でレンダリングする
- SSR: HTMLをサーバ側(Node環境)でレンダリングする
- SSG: HTMLをローカル環境でレンダリングする
SSGは以前作ったメタ言語環境(モジュールをローカル環境で静的なHTMLにコンパイル)と似た使い心地かもしれない。
※参考:【メタ言語】HTMLテンプレートエンジン、AltCSS、AltJSのまとめ(随時更新) - Qiita
Next.jsは学習コストがどのくらいあるのかわからず慎重姿勢だったが、どうやらコアなコンポーネント設定はReactと変わらなそうに見受けられた。それなら内堀(コンポーネント設定)はそのままに外堀(複数ページ設定)のみが変わる、という使い心地になりそうな気がしてきた。
Next.jsをインストールコマンド
実際に触ってみる。まずはインストールから。
※参考:はじめに | Next.js
Next.jsもReactと同じく「Create Next App」というパッケージ環境が用意されている。
$ npx create-next-app
もう一つ、ゼロからマニュアル的に作っていく方法もある。まずはこちらから体験。
「next-test」というフォルダを作り、そこに移動して
$ cd /(パス)/next-test
まずはpackage.jsonを作成
$ npm init -y
次にNext.jsとReactとReact DOMをインストール
$ npm install next react react-dom
package-lock.jsonとnode-modulesフォルダができた!
node-modulesの中にはいろんなモジュールがインストールされている。
package.jsonのscripts
にdev
、build
、start
コマンドを追加(test
は元から入っていた)
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "next", "build": "next build", "start": "next start" },
Next.jsの起動やビルドを実行するコマンドだな。
トップページ(index.js)を作る
Next.jsのページファイルは「pages」フォルダに作る。トップページは「index.js」(.jsxじゃなくていいんだ?)
「index.js」にHomePage
コンポーネントを作成
function HomePage() { return <div>ねくすと・じぇいえす事始め!</div>; } export default HomePage;
普通のReactの関数コンポーネントのようだ。
ローカル環境でNext.jsを起動
$ npm run dev
ブラウザのhttp://localhost:3000/
を開くと
おお、ページが表示された!
Dev-toolsを見ると #__next
というタグの中にレンダリングされている。
それ以外にもいろんなコードが生成されている。
別ページ(other.js)を作る
別ページもつくる。
※参考:Basic Features: Pages | Next.js
「pages」フォルダの中に「other.js」を作り、Other
コンポーネントを作成
function Other() { return <div> <p>ここは別のページだよ〜ん</p> <p><a href="/">戻る</a></p> </div>; } export default Other;
Topページに戻るパスは/
でいいのかな。
ブラウザのhttp://localhost:3000/other
を開く
おお、ページが表示された!
Dev-toolsを見ると、お、これも#__next
とうタグの中にレンダリングされている。
「戻る」を押すとTopページに戻れた!
GitHubにコミットをプッシュ
ここまでのコード(GitHub)
※参考:GitHub - ryo-i/next-test at 728aa80773dbbb81366d2207da5c5f52acca805f
静的HTMLのビルドやGitHub Pagesへのデプロイをやってみたいが、今回はここまで。
GitHubに「node_modules」や「.next」のフォルダを含まないよう「.gitignore」を作成する。
いつも参考にしている「gitignore.io」にはNext.jsの設定がないようだったので
※参考:gitignore.io - Create Useful .gitignore Files For Your Project
こちらの事例を参考にした。
// .gitnignore # next.js build output .next # dotenv environment variables file (build for Zeit Now) .env .env.build # Dependency directories node_modules/ # Logs npm-debug.log* yarn-debug.log* yarn-error.log*
最後に
ということで、Next.jsを事始めました。「pages」フォルダの中にjsファイルを作るとそれがページになりました。コンポーネント自体はReactの関数コンポーネントのようでした。
今後やってみたいこと(コツコツ進めます)
- Next.js + TypeScript
- Next.js + TypeScript + CSS in JS
- Create Next App
- テンプレート設定(ヘッダーフッターなど)
- OGP設定
- 動的ルーティング
それではまた!
※参考:Reactを習得するためにやったことまとめ
qiita.com