Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
MDX with Next.js
Search
kazuhiro hara
April 24, 2019
Programming
1
400
MDX with Next.js
新進気鋭のドキュメントフォーマット MDX をためす
kazuhiro hara
April 24, 2019
Tweet
Share
More Decks by kazuhiro hara
See All by kazuhiro hara
Vapor を使って VisionPro とWebSocket 通信をしてみる
karad
0
220
slow types ってなんだろう?
karad
1
690
ほぼ日のハッカソン Team 1 発表資料
karad
0
420
Dist.43.英語仕事で地味につかうChatGPT 配布版
karad
0
750
VisionOS 向けアプリをつくってみる - よりひろいフロントエンド
karad
0
150
スマートコントラクト入門
karad
0
120
Servo Embed 入門
karad
1
1.1k
PWA checklist app
karad
0
310
Design Trends of Japanese Local Government Websites
karad
0
190
Other Decks in Programming
See All in Programming
FindyにおけるTakumi活用と脆弱性管理のこれから
rvirus0817
0
510
「手軽で便利」に潜む罠。 Popover API を WCAG 2.2の視点で安全に使うには
taitotnk
0
850
Ruby Parser progress report 2025
yui_knk
1
440
時間軸から考えるTerraformを使う理由と留意点
fufuhu
16
4.8k
AIを活用し、今後に備えるための技術知識 / Basic Knowledge to Utilize AI
kishida
22
5.7k
AIでLINEスタンプを作ってみた
eycjur
1
230
私の後悔をAWS DMSで解決した話
hiramax
4
210
GitHubとGitLabとAWS CodePipelineでCI/CDを組み比べてみた
satoshi256kbyte
4
230
[FEConf 2025] 모노레포 절망편, 14개 레포로 부활하기까지 걸린 1년
mmmaxkim
0
1.6k
Ruby×iOSアプリ開発 ~共に歩んだエコシステムの物語~
temoki
0
270
速いWebフレームワークを作る
yusukebe
5
1.7k
MCPでVibe Working。そして、結局はContext Eng(略)/ Working with Vibe on MCP And Context Eng
rkaga
5
2.3k
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
How to train your dragon (web standard)
notwaldorf
96
6.2k
What's in a price? How to price your products and services
michaelherold
246
12k
The Language of Interfaces
destraynor
161
25k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
Making Projects Easy
brettharned
117
6.4k
Transcript
MDX with Next.js MDX を本番環境に導入するまで 2019/04/24 React LT 会
KAZUHIRO HARA @kara_d
https://kansock.industries KAZUHIRO HARA 原 一浩 (@kara_d) ビッグデータの観測・ビジュアライズ および、複雑な
UI デザインがメイン領域
もくじ 1. MDX とは何ですか ? 2. MDX を使うには ?
3. Next.js における導入事例 4. demo : KANSOCK.INDUSTRIES 5. MDX に移行する場合ハマりそうなところ a. front matter を使う b. レイアウトの適用 c. Syntax highlight の適用 d. React コンポーネントをどう書く? 6. MDX は何が変換されるのか ?
MDX とは何ですか ? • MDX ◦ https://mdxjs.com/ ◦ Markdown
for the component era • Markdown 文書に、JSX をシームレスに記述することができるフォーマット形式 ◦ 公開されている React コンポーネントや独自コンポーネントを使うことができる ◦ グラフやリッチコンテンツなど可能性は無限 ! • 拡張子は .mdx ( 設定次第で .md 形式でも使える ) • React やるマンにとっては至福のドキュメント形式 ◦ React やらないマンでも、コンポーネントを使うだけならそこまで専門的な知識は不要
MDX を使うには ? • 公式サイトにて、それぞれのプロダクトへの導入方法が掲載されている ◦ Next.js ◦ Gatsby ◦
Create React App ◦ React static ◦ Webpack ◦ Parcel ◦ X0 • VS Code のプラグインもあるよ ◦ https://marketplace.visualstudio.com/items?itemName=silvenon.mdx
Next.js における導入事例 https://kansock.industries/ では、Next.js を Siatic Site Generator として使っていて、そ の中で
MDX による記述を可能にしている --- title: "全面的に MDX に移行しました" ... --- import { MdxArticle } from '../../../components/layouts/mdxArticle' export default ({ children }) => <MdxArticle>{children}</MdxArticle> # タイトル MDX 表示テストです
demo https://kansock.industries/
MDX に移行する場合ハマりそうなところ • Front matter を使う • レイアウトの適用 • Syntax
highlight の適用 • React コンポーネントをどう書く?
Front matter について Front matter は、ページ固有の情報を記載する変数 next-mdx-frontmatter が便利
--- title: "Example Page" ogp_url: "/ogp_url" --- module.exports = withTypescript( withMdxFm( withSass({ ... })));
レイアウトについて Front matter 的な情報を定義した上で、レイアウトを指定することもできる Markdown は子コンポーネントになる 例えば title や ogp_url
という変数を使える import { MdxArticle } from '../../../components/layouts/mdxArticle' export default ({ children }) => <MdxArticle title={title} date={date} ogp_url={path} ogp_image={ogpImage} ogp_description={ogpDescription} model={this.props.model}>{children}</MdxArticle>
Syntax highlighting について Bulma と Prism が相性悪いので、 highlight.js (rehype-highlight) を使っている
(next.config.js) const rehypeHighlight = require('rehype-highlight'); const withMDX = require('@next/mdx')() const withMdxFm = require('next-mdx-frontmatter')({ MDXOptions: { hastPlugins: [ rehypeHighlight ] } })
MDX で使えるコンポーネント形式 いろいろなスタイルで書ける ( React パッケージは import 済み )
export const TestComponent = function (props) { return (<h1>{props.name} COMPONENT 1</h1>) } export const TestComponent2 = (props) => <h1>{props.name} COMPONENT 2</h1> export class TestComponent3 extends React.Component { render() { return (<h1>{this.props.name} COMPONENT TEST 3</h1>) } }
MDX は何が変換されるのか ? https://mdxjs.com/advanced/ast によれば、以下が AST の Node Type になっている
• jsx (instead of html) • comment (instead of html comments) • import • export
まとめ • MDX を使うと、Markdown に React コンポーネントを書いたり、 定義したりできる • 柔軟なレイアウト、Front
matter、Syntax highlighting もバッチリ • UI スケッチや UI ドキュメントにぜひ!
END KAZUHIRO HARA @kara_d React / React Native /
React 360 / Next.js / MDX でお困りの方、お気軽にご相談ください https://kansock.industries