Open4

Next.jsとmicroCMSを連携して個人ブログを作成する

ちびまろちびまろ

Next.jsとmicroCMSを連携して個人ブログを作成する

このサイトを参考に進める
https://blog.microcms.io/nextjs13-microcms-rsc/

こちらのセクションでコードをコピペしてサンプルらしきものを作成した

ディレクトリ階層はこちら(余計なものは省く)

├── app
│   ├── layout.tsx
│   ├── page.tsx
│   └── static
│       ├── [postId]
│       │   └── page.tsx
│       └── page.tsx
└── libs
    └── microcms.ts

一旦コードをコピペして動かそうとしたが、理解のためにhttp://localhost:3000/static/page.tsxにアクセスしてもエラーで動かない。

error
Unhandled Runtime Error
Error: fetch API response status: 404

そりゃそーだ。
ディレクトリの中のpage.tsxはURLで指定すべきじゃないんだ

こっちでアクセス
http://localhost:3000/static/

なんやかんやあったが無事アクセスできた

ちびまろちびまろ

サンプルコードを見てて気になった部分

↓のarray.map()postはどんな名前でもOK

return (
    <div>
        <h1>{time}</h1>
        <ul>
            {contents.map((post) => {
                return (
                    <li key={post.id}>
                        <Link href={`/static/${post.id}`} style={{color: 'red'}}>{post.title}</Link>
                    </li>
                );
            })}
        </ul>
    </div>
);

testでも試したがうまく動いたため任意であるはず

<ul>
    {contents.map((test) => {
        return (
            <li key={test.id}>
                <Link href={`/static/${test.id}`}>{test.title}</Link>
            </li>
        );
    })}
</ul>
ちびまろちびまろ

Static Rendering

静的ページの構築に向いたレンダリング手法。

主に以下のメリットがある

  • Webサイトの高速化
  • サーバー負担の軽減
  • SEO

Webサイトの高速化
事前にレンダリングされたコンテンツをキャッシュに保管することにより、ユーザーが迅速かつ確実にWebサイトのコンテンツにアクセスすることができる。

サーバー負担の軽減
コンテンツがキャッシュされることにより、ユーザーのリクエストごとにコンテンツを動的に生成する必要がなくなる

SEO
事前にコンテンツがレンダリングされ、ページの読み込み時には既に利用可能となる。
そのため、検索エンジンのクローラーにとってインデックス付けが容易となる。
これにより、ランキングが向上する可能性があるらしい。

結論
定期的に更新されるページには向かない。
逆に言えば今回作るブログには向いている

ちびまろちびまろ

接続完了

接続できたからブログ用にカスタムしていく

ESLint入れたら何故かjsxファイルの1行目でエラーが表示される

原因
根本原因は分からず。。。
とりあえず無駄に入れてた以下をnpm uninstall @babel/eslint-parserコマンド実行することで解決した

"@babel/eslint-parser": "^7.12.1",

使えそうなコンポーネント
https://mui.com/material-ui/react-app-bar/#app-bar-with-responsive-menu
https://react.semantic-ui.com/views/card/#types-card

globals.cssの解説
https://aichi.blog/?p=3346

Rect Hooks
https://udemy.benesse.co.jp/development/react-hooks.html