Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nuxt 3でJamstackテンプレートを作るときの考え方

Avatar for Chinen Chinen
October 28, 2023

Nuxt 3でJamstackテンプレートを作るときの考え方

Vue Fes Japan 2023の登壇資料です。

Avatar for Chinen

Chinen

October 28, 2023
Tweet

More Decks by Chinen

Other Decks in Programming

Transcript

  1. 株式会社TAM/TAMTO:フロントエンドエンジニア 兼 個人事業主 知念 昌史 / まぁし X(Twitter)@chocodogmagic • 職歴:大学新卒

    → 美容師 → エンジニア12年くらい • 2019年に東京 → 沖縄へ帰省してフルリモート • Vue.js/Nuxt/Jamstack/セマンティックなHTML/PWA/ アクセシビリティ/SEO/パフォーマンス改善/Movable Type
  2. 個人的な活動 • 平日9:00〜朝活:おはようエンジニア #ohayo_engineer ◦ X(旧Twitter)SpacesでWeb関連の情報発信中、フォローしてね ◦ 540回継続しているがいまだに早起きは苦手、一緒にがんばろ? • コミュニティ運営

    ◦ PWA Night(東京) / v-okinawa(沖縄) / CSS福笑い(東京) • 好き ◦ スプラトゥーン3(トライストリンガー XP1980) ◦ ポケモンSV スカーレット
  3. WebサイトとWebサービス(Webアプリ)で二極化 • HTML/CSS/jQuery → 運用はある ------------------------------ • Pug/EJS、Sass(Gulp) • JavaScript(ES6〜)

    • WordPress等の従来のCMS ------------------------------ • Next.js/Nuxt • Jamstack • React / Vue • Next.js / Nuxt • コンポーネント開発 • デザインシステム → 素のHTMLで作っていない → TypeScriptが基本 → CSS設計の概念が不要 → マイクロサービス化 Webサイト Webサービス/Webアプリ 制作パターンが 複雑化 制作パターンが 固定化
  4. WebサイトとWebサービス(Webアプリ)で二極化 • HTML/CSS/jQuery → 運用はある ------------------------------ • Pug/EJS、Sass(Gulp) • JavaScript(ES6〜)

    • WordPress等のCoupled CMS ------------------------------ • Next.js/Nuxt • Jamstack • React / Vue • Next.js / Nuxt • コンポーネント開発 • デザインシステム → 素のHTMLで作っていない → TypeScriptが基本 → CSS設計の概念が不要 → マイクロサービス化 Webサイト Webサービス/Webアプリ 制作パターンが 複雑化 制作パターンが 固定化 ← 今回はここに注目
  5. 1. Jamstackテンプレートとは(まとめ) • Webサイト・コーポートサイトのような静的サイトをHeadless CMS等のAPI 経由で更新できる仕組みで構築するためのテンプレート • コンポーネント開発の知見が増えている今の潮流に乗るために、Nuxtで開発 する •

    Webサイトでは状態管理ライブラリをがっつり活用するケースは多くない ※Nextはすでに事例がたくさんあるがNuxtの事例は少ない ※App Router登場でカオスみがある(Server ActionsもStableに)
  6. どのプロジェクトでもだいたい使いそうなもの • Googleアナリティクス等の解析タグ、タグマネージャー • sitemap.xml • CMSでの更新 • ページネーション •

    テスト • Storybookのようなスタイルガイド管理ツール もっとあるかも、ご意見募集中 (ただし機能を盛りすぎると逆に扱いが難しくなるので注意、Nextさん)
  7. 注意するポイント • Googleアナリティクス等の解析タグ、タグマネージャー ◦ NuxtLinkを使用する場合はSPAのようにコンテンツが切り替わるため、画面の遷移を解析タ グに伝える必要がある • sitemap.xml ◦ 大抵はプラグインがやってくれるが、不要なファイルまで載ってしまう

    ◦ 特定のページを追加・除外したい状況が発生するので、設定できるようにしておく • Headless CMSとの連携 ◦ どのサービスとも組み合わせやすいように、CMS特有の処理はフェッチの ロジック内でまとめる ◦ 下書きプレビューの実装
  8. Jamstackでは考慮する範囲が増える • 開発 → デプロイ環境 ◦ レンタルサーバー?オンプレミス? ◦ クラウド? ▪

    AWS:S3、Netlify、Vercel、Cloudflareなどなど ◦ GitHub?GitLab? • Headless CMSとbuildコマンドの連携 ◦ 日時指定の公開、非公開 ◦ 下書きプレビューはリアルタイムで確認したい
  9. コンポーネント名・ファイル名の決め方 • コンポーネントは大文字から始める ◦ 🙆 <Button /> ◦ 🙅 <button

    /> • layoutに関わるような一度しか使わないcomponentはTheをつけていたが公 式ドキュメントからなくなった? ◦ 例)<TheHeader /> • ディレクトリ構造がコンポーネントを呼び出すときの名前になる ◦ components/Parts/Button.vue → <PartsButton /> Nuxt公式ドキュメントより参照 https://nuxt.com/docs/guide/directory-structure/components
  10. Nuxt 3で複数のBuildに対応 • Static Site Generate(SSG) • Server Side Rendering(SSR)

    • Client Side Rendering(CSR) • Incremental Static Regeneration(ISR) • Stale While Revalidate(SWR) WebサイトではSSGで足りることも多いが、 ページ数が大量になると比例してGenerate時間 も膨大になるため、SSR等の検討も必要 nuxt.config.tsでディレクトリごとに設定可能 参照 https://nuxt.com/docs/guide/concepts/rendering
  11. 3. 汎用的にするための工夫(まとめ) • 引き継ぎしやすいように複雑化を避ける、独自ルールを作らない • 公式ドキュメントを参考にしよう • ディレクトリ構造はNuxtのデフォルトをベースにしつつ、コンポーネント分 割は参考文献をあたろう •

    WebサービスやWebアプリの設計も参考になる(ただし同じにするのは難し いので良いところを取り入れる) • 運用フェーズの更新頻度や体制に合わせてBuild方法を検討する