Next.jsでマークダウンを使ってコンテンツを分離する


Next.js + Material UI でコンテンツ部分にマークダウンを使うことを考えます。

メタデータ(Front-matter)を含むやつは今回は対象外です。

経緯

GLSLサンプルのように形式が決まった複数の内容を書くときに、コンテンツ部分を分離するためにマークダウンを使っていました。

 

ドレミだけで作る音ツール」を作ったときに説明文の説明だけでごちゃついたので、数行以上の文章は全部マークダウンにしたくなりました。

マークダウンによる置き換え

今回使うライブラリは react-markdown です。

 

元の JSX の説明文章を見てみます。

Material-UI を使っているのでこんな感じになっています。

HTML と独自コンポーネントが混ざり合って違和感があるし長い。

 

文書を全部マークダウンにもっていって、require で文字列として読み込みます

コンテンツ部分が非常に見やすくなります。

 

 

デフォルトだと普通の HTML として作られるので見た目がかわってしまうのでレンダラを設定して Material-UI 対応します。

具体的には <p><li> の中身を <Typography> に変更します。

複数行の改行も Markdown のみだと出来ないので escapeHtml をオフにして <br> タグを使います。

 

これで元と同じ表示になります。

結局コード量自体は大きく変わりませんが管理のしやすさが大幅に上がります。

 

注釈

今回みたいに直接読み込むには webpackmd ファイルに対して raw-loader を使う設定にする必要があります。

メタデータ解析付きの gray-matter を使ったサンプルですが fs.readFileSync使った例のようにするのもいいかと思います(@blog-starter)。


コメントを残す

メールアドレスが公開されることはありません。