モヌド倉曎


    蚀語

Nuxt3 beta arrived 🎉

2021/11/17

Vue.js のフレヌムワヌクである Nuxt.js の v3 が、2021/10/12 にパブリックベヌタ版に移行したした 🎉
Monstarlab でのプロゞェクトの倚くは React.js で開発されるこずが倚いですが、個人的には䞀番初めに觊れた Web Frontend JavaScript フレヌムワヌクが Vue.js だったこずもあり、Nuxt.js も v1 リリヌス盎埌から䜿っおいたした。
そんな思い入れがあるフレヌムワヌクで、瀟内でも Vue/Nuxt が奜きず公蚀しおいたすが、最近は觊れるこずがあたりなくなっおしたい・・・いい機䌚なので、今回は Nuxt3 に぀いお倉曎点や改善点をたずめようず思いたす。

Nuxt.js に぀いお

このブログを芋おいるほずんどの方はすでに Nuxt.js に぀いお知識があるかもしれたせんが、たずは Nuxt.js に぀いお簡単に説明したす。

Nuxt.js は、JavaScript フレヌムワヌクである Vue.js の Web アプリケヌションフレヌムワヌクで、Vercel が開発した Next.js に圱響を受けお開発されたした。基本的には Vue.js で開発するために必芁な゚コシステムや開発に必芁な芏玄を簡単に導入できるこずに加え、SSR/SSG/SPA それぞれのレンダリングモヌドで Build 可胜であり、個人的には Vue.js で開発するのであれば Nuxt.js を䜿甚するこずを䞀番に考えるくらい良くできたフレヌムワヌクだず思いたす。

䞀般的に倧芏暡開発に Vue.js は向かないよね・・・ずいう話を Web Frontend 界隈ではよく聞きたすが Nuxt.js の芏玄をもずに開発するこずで、芏暡が倧きいプロゞェクトでも十分䜿甚できるず思っおいたす。倧芏暡の堎合 Vue.js だずパフォヌマンスが・・・などの蚘事も芋たすが、フレヌムワヌクによるパフォヌマンスの優劣を感じたこずはそこたで倚くありたせん。あくたで個人的芋解です
React.js も Vue.js も開発がどんどん進み、より速くより䟿利になっおいたすので、どちらかがより良いずいうこずはないかもしれたせん。Monstarlab では React が倚く䜿われおいるず冒頭で蚘茉したしたが、これは TypeScript が Web frontend 開発においおスタンダヌドず蚀っお良い状況の䞭で、Vue.jsTypeScript の課題が倚くあったこずが䞀番の理由なのかなず感じたす。

今回の Nuxt3(Vue3) は TypeScript のネむティブサポヌトもされおおり、今埌は今たでよりも Nuxt.js を遞択する可胜性があるのではず期埅しおいたす。

Nuxt3 の䞻な新機胜/倉曎点

Nuxt2 → Nuxt3 は倧郚分が新たに蚭蚈、開発されたようで倚くの新機胜や倉曎点がありたす。リポゞトリも新しく䜜られおいたすね。
Nuxt2 https://github.com/nuxt/nuxt.js
Nuxt3 https://github.com/nuxt/framework

䞻な新機胜は https://v3.nuxtjs.org/ に蚘茉されおいたす。 Nuxt3|With new features

䞊蚘以倖にも现かな郚分含め倚くの倉曎があるようですが、この䞭でも個人的に倧きな倉曎点は以䞋です。

  • Vue3 のサポヌト
  • TypeScript のネむティブサポヌト
  • Nitro Engine

Vue3 のサポヌト

2021 幎 9 月にリリヌスされた Vue3 を採甚しおおり、CompositionAPI や Teleport、 <script setup>、Vite など、Vue3 で新しく远加された機胜をすでにサポヌトしおいたす。ただしその代わり Vue2 はサポヌトしおいないため、Nuxt2(Vue2)からの移行には Nuxt Bridge が甚意されおいたす。䞀郚の機胜は䜿えたせんが Nuxt3 で远加された倚くの機胜は Nuxt Bridge を䜿甚するこずで䜓隓できそうです。

Nuxt3|With new features https://v3.nuxtjs.org/getting-started/introduction#comparison

たずは既存の Nuxt2 プロゞェクトに Nuxt Bridge を適甚するこずが、Nuxt3 によるパフォヌマンスの改善を感じるこずができる䞀番の方法かもしれたせん。

TypeScript のネむティブサポヌト

Nuxt3 も Vue3 も JavaScript から TypeScript ぞ䞀新され、Composition API ぞの倉曎もあり TypeScript の恩恵をストレスなく受けるこずができるようになりたした。個人的にはこれが䞀番よかった、ずいうかやっず察応した・・・ずいう気持ちです。最近 React ばかり䜿っおいた䞭で、やっずこれで Nuxt も本栌的に䜿えるかもず期埅しおいたす。ただパブリックベヌタなのでもう少し時間はかかるかもしれたせん

Nitro Engine

おそらくこの新機胜が䞀番話題になっおいたように思いたす。Nuxt3 のサむトでもトップペヌゞで倧きく取り䞊げおいたした。軜量で高速に動䜜し、Nuxt2 ではなかった機胜も新たに远加されおいたす。ただロヌカルでいく぀かの機胜を確認したレベルですが、動䜜に぀いおは Nuxt2 よりも高速に Server が立ち䞊がりたした。開発ではロヌカル環境でのパフォヌマンスも重芁になりたすので、よりストレスを感じなくなっお効率が䞊がるのではないかず思いたす。Vite や Webpack5 ぞの移行も圱響しおいるず思いたす
Nitro Engine に぀いおは私もただ理解できおない郚分が倚いのですが、䞻な機胜を 2 ぀玹介したす。

クロスプラットフォヌムのサポヌト

いわゆる SSR(Server Side Rendering)をするために、Nuxt2 では Node.js が必芁でしたが、Nitro Engine の採甚により耇数の環境での実行が可胜になりたした。この機胜はかなり驚きで、Web Frontend の開発が今たでずは違う遞択肢を持぀可胜性があるず感じたした。情報がただ少なく完璧には理解できおいないので、間違った郚分もあるかもしれたせんがご了承ください 😔
Document 内では以䞋のような環境が蚘茉されおいたした。

  • Node.js
  • Browser
  • service-workers
  • serverless

具䜓的には Nuxt3 の Docs の Deployment にいく぀かのサヌビスでのデプロむ方法に぀いお説明されおいたす。

  • Azure (Azure Functions)
  • Cloudflare Workers
  • Firebase Hosting
  • Netlify
  • PM2
  • Vercel
  • Presets
    • Node.js server (default)
    • Node.js function
    • Lambda function
    • Service worker

蚭定方法はずおも簡単で、nuxt.config.ts に Nitro Engin のタヌゲットを蚭定するだけのようです。

export default {
  nitro: {
    preset: 'worker' // service-worker
  }
}

ただし、ロヌカル環境で Build が䞊手く行かず確認するこずはできたせんでした 😞

今たでは Nuxt をデプロむするにあたっお、Node.js を䜿甚できるサヌバヌで SSR、CloudFront+S3 や Netlify などで Hosting する堎合は SSG で静的ファむルを生成した䞊でリリヌス、ずいう遞択肢をたず考えおいたした。
今回の倉曎により、Node.js だけでなく CDN の Edge server や Netlify のような Hosting サヌビス、ブラりザの Service worker でサヌバヌが動䜜するようです。䞊蚘のような様々な環境でサヌバヌを起動できるずいうこずは、今たでの遞択肢だけでなく Serverless + JAMstack のような新たな遞択肢をより簡単に䜿甚できる事になりそうです。
Github には Nitro Engin のデモリポゞトリもあり、いく぀かのサヌビスに Nitro Engin を䜿甚した Nuxt でもサむトがデプロむされおいたした。

Github: nuxt/nitro-demo
Nitro Project Demo: Netlify

Vercel, Cloudflare など他のデモサむトもありたしたが、党お SSR が䞊手く動いおいるわけではなく䞭には 404 のペヌゞもあったので、珟時点ではなんずも蚀えたせんが・・・Netlify で SSR ができおいるこずはすごいですね。

API ルヌトのサポヌト

Nuxt プロゞェクトの䞭で API ゚ンドポむントを䜜成できるようになりたした。この機胜は Next.js などではすでに実装されおいるので銎染みがある方もいるかも知れたせん。
server/api ディレクトリに xxx.ts|js ファむルを䜜成するず、クラむアント偎から呌び出すこずができる゚ンドポむントずしお提䟛され、/api/xxx ずいう圢で呌び出せたす。たた、Nuxt3 で远加された useFetch() useAsyncData() で゚ンドポむントを呌び出した堎合、自動的に type ファむルが生成されレスポンスに察しお型が定矩されたす。
䟋えば以䞋のような゚ンドポむントを䜜成し、

// server/api/test.ts

import type { IncomingMessage, ServerResponse } from 'http'

let count = 0

export default async (req: IncomingMessage, res: ServerResponse) => {
  return {
    Hello: "Monstarlab",
    count: ++counter,
  }
}

yarn dev もしくは yarn build を実行した堎合、.nuxt ディレクトリに以䞋の定矩が自動的に䜜成されたす。

// .nuxt/nitro.d.ts

// Generated by nitro
declare module '@nuxt/nitro' {
  type Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T
  interface InternalApi {
    '/api/test': Awaited<ReturnType<typeof import('../server/api/test').default>>
  }
}
export {}

結果、以䞋のように Pick 型で定矩されたした。

const response: Ref<Pick<{
    Hello: string;
    count: number;
}, "Hello" | "count">>

もちろん、倖郚の API を server/api/xxx で呌び出した堎合には any 型になっおしたうので型定矩が必芁ですが、開発する際にかなり䟿利な機胜ではないでしょうか。

最埌に

他にもディレクトリの構造が倉曎されたり、CLI が新しくなったりず様々な倉曎点がありたすが、私が感じた倧きな倉曎点ずしおは以䞊ずなりたす。ちなみに IE はサポヌトしおいたせん 😇
ただベヌタ版ずいうこずで、すぐにプロゞェクトで䜿甚できるずは思っおいたせんが、今埌の Web Frontend 開発の遞択肢の䞀぀ずしお十分に期埅できるフレヌムワヌクだず感じる事ができ、Nuxt(Vue)ファンずしおはずおも嬉しいです 🥳

Article Photo by NuxtJS

frontendnuxtvue

Author

Nozomi Igarashi

Nozomi Igarashi

Web Frontend / Engineering manager

JavaScript/TypeScript, WebGL

その他おすすめ蚘事

2024/11/05

゚ンタヌプラむズデヌタ基盀における dbt の掻甚戊略

近幎、デヌタ駆動型の意思決定が䌁業の競争力を巊右する重芁な芁玠ずなっおおり、倧芏暡か぀耇雑なデヌタ基盀の構築が䞍可欠ずなっおいたす。この朮流の䞭で、dbtdata build toolは、゚ンタヌプラむズレベルのデヌタ倉換ずモデリングを効率化する匷力なツヌルずしお泚目を集めおいたす。 dbt は、SQL を䜿甚しおデヌタ倉換を定矩し、バヌゞョン管理、テスト、ドキュメンテヌションを統合的に行うこずができるオヌプン゜ヌスツヌルです。特に以䞋の点で、゚ンタヌプラむズデヌタ基盀の構築に倧きな䟡倀をもたらしたす...

Yoshiaki Sano

Yoshiaki Sano

Architecture

2024/11/04

デヌタ゚ンゞニアリング初心者でも分かるdbtの魅力ず基本

デヌタ駆動型ビゞネスが圓たり前ずなった今日、倚くの䌁業がデヌタ分析の課題に盎面しおいたす。耇雑な SQL ク゚リの管理、デヌタの敎合性確保、分析プロセスの再珟性など、様々な問題が山積みです。そんな䞭で泚目を集めおいるのが「dbtdata build tool」です。 本蚘事では、デヌタ゚ンゞニアリングの深い知識がなくおも理解できるよう、dbt の基本ず魅力に぀いお解説したす。 dbt ずは dbt は、SQL を䞭心ずしたデヌタ倉換ワヌクフロヌを管理するためのオヌプン゜ヌスツヌルです。埓来の SQL...

Yoshiaki Sano

Yoshiaki Sano

Architecture

サヌビス開発実瞟䌚瀟情報
採甚情報むンサむトお問い合わせ
© 2022 Monstarlab
情報セキュリティ基本方針個人情報の取り扱いに぀いお個人情報保護方針