web: Next.jsやNuxt.js がなぜ静的サイトの作成に使われるのか?

C++とかそういった所謂レガシー言語ばっかり触ってきた人が静的Webサイトを作ろうとして Next.js / Nuxt.js の存在にぶつかった。

なぜ静的サイト作成にWebアプリで利用するようなJavaScriptフレームワークが?

結論

  • Next.js / Nuxt.js などのJavaScript フレームワークは静的サイト(HTML)をビルドする機能があるのでそれを使っているだけ。
  • JSを利用して書くことで、そのページに応じた処理などが記述しやすい(おすすめの記事とか?)。

背景

なんでこういう記事を書いたかの背景で、読む必要はない。

前提

自分の知識前提:

  • 静的サイトとは HTML + CSS + JS で作られたサイトで、 Nodeとかは出てこない
  • NodeとかnpmはAPIを介してバックエンドと通信して表示を行うようなWebアプリのフロントエンドを作成するのに使うものだと思っている

始まりは静的サイトを作ろうとしたところ

とある用事で静的サイトを作ってみようと思っていた。

BloggerやWordpressなどのサービスだとおんぶにだっこではあるが、デザインの細かいところに手が届かないし、妙なところでサイトの速度が遅くなることもあり、なおかつ動的なコンテンツを作るつもりは一切なかったので静的サイトを作ろうとしていた。

静的サイトのホスティングサービスを調べてみると、2022年の時点では以下がよくリストアップされていた。

  • Netlify
  • Firebase
  • Heroku
  • GitHub Pages

なんとなく知っている Firebase や Heroku はWebアプリを作るものだと思っていたのでリストされている理由がわからなかった。 GitHub Pagesは知っているがGitHubアカウントに紐づいて公開されてしまう気がしたのでちょっと嫌だった。

というわけで Netlify を選んだ。

Netlify のテンプレートでよくわからなくなる

Netlifyにはメールアドレスで登録ができたので、メールで登録実施。

そのあとテンプレートを選ぶ画面が出てくるのだが、自分が想定していないものばかり出てきた。

enter image description here

  • Next.js
  • Nuxt.js
  • Astro

これらは「前提」で書いていた通り、動的なサイトを作成するために必要なものであると思っていた。ここでよくわからなくなった。「静的サイトを作るサービスではなかったのか…?」

どうも静的サイトの作成にも利用されるようだった

Nuxt.jsのドキュメントにdeployのターゲットに関する記述があり、

Nuxt also works as a static site generator.

なるほど。

これらのJSフレームワークを静的サイトに利用する理由は?

元々自分がやろうとした方法

実は元々は自分が知っているドキュメント生成ツールの1つである SphinxAsciiDoctor のいずれかを利用しようと思っていた。これらは

  • テンプレートを設定して
  • 記事を書き
  • ビルドすると
  • 静的サイトが出来上がる (テンプレートにあればサイドバーとかもつく)

といった代物。大きな違いは記述言語がSphinx特有のものであるか、Markdownであるか、といった程度だった。

例えば Nuxt.js で何ができるか?

代表して Nuxt.js のことだけ述べる。

Nuxt.js は Vue.js というUI表示をMVCモデルで作成するためのJSフレームワークを基礎としており、Vue.jsの機能を拡張したような形で利用できる。それも含めて以下のようなことができると記載されていた1

  • UI部品のコンポーネント化ができる (Vue.jsの恩恵)
  • コンポーネント化した部品でページ間で一定の画面レイアウトを維持しやすい
  • 自動的にルーティングしてくれる
  • Metaタグを生成する機能がついている
  • CSSアニメーションなどが簡単らしい
  • 様々なNuxtのモジュールが利用できる例えば以下
    • i18n対応 (多言語対応)
    • Markdown対応
    • Sitemap生成
    • Google Analytics対応

UIに強いJSフレームワークと、JSによる機能拡張によってWebサイトが簡単に作れるようになっているといったところなのかな。

まとめ

Sphinxよりも、RailsやDjangoなどに近い雰囲気でUIが作れるようになると思うので、確かにNuxt.jsなどの方が現代的な開発ができるのかな。あくまでSphinxなどはテンプレートを埋め込むツールなので、思想がそもそも違うといえばそうかもしれない。

学習コストだけは気になるが。


  1. 参考: https://www.vuemastery.com/blog/why-nuxtjs-is-the-perfect-framework-for-building-static-websites/ ↩︎

コメント

このブログの人気の投稿

gnuplot: グラフの色を変更する

[Linux] rsyncで進捗を確認する

gnuplotで縦線を引きたい