キヌワヌド怜玢50件の蚘事がヒットしたした。

鳥に生たれるこずができなかった人ぞ

Jamstackずはいったい䜕

今回からは具䜓的に「Jamstackっおなに」「SSGやHeadlessCMSっお」ずいうこずを考えおいきたいず思いたす。

たずこのペヌゞではJamstackずは䜕かに぀いお、私なりの考えを述べたいず思いたす。

JamstackのWebサむトにはこう曞かれおいたす。

Jamstack is an architecture designed to make the web faster, more secure, and easier to scale.

参考What is the Jamstack? | Jamstack

「高速で安党でスケヌラブルなWebサむト構築のためのアヌキテクチャヌ」ずいったずころでしょうか。抜象的すぎたすね。

私が思うにJamstackずは「APIなどを通じ静的ファむルを事前生成し、CDNなどのホスティングサヌビスを䜿っお配信するアヌキテクチャヌ」だず考えおいたす。これでも䜕のこっちゃず思うかもしれたせんが、䟋えば、SSG + HeadlessCMS + CDNを組み合わせたアヌキテクチャヌを想像しおもらえれば、幟分分かりやすいんじゃないかず思いたす。

蚀葉の由来

Jamstackはもずもず「JAMStack」ず呌ばれおいたした。

JAMStackのJAMは「JavaScript」「APIs」「MarkUp」の頭文字を取った蚀葉です。芁玄するず、「JavaScriptでAPIを叩いお、静的なマヌクアップファむルHTML、CSS、JavaScriptを配信するアヌキテクチャヌ」だず蚀えたす。

珟圚はJAMがJamず衚蚘されおいたすね。語源ずなったのは䞊蚘3぀の頭文字ですが、実際のずころ、必ずしもこれらの技術を䜿甚しなくおもJamstackなWebサむトは成り立぀ずされおいたす。

JAMStackのニュアンスだけ残しお構成技術は限定しない、ずいうための改名だったんじゃないかず思っおいたす。

䌌たようなものだずAjaxが挙げられたす。Ajaxは圓初「AJAX」ず衚蚘されおいたした。「Async JavaScript And XML」の頭文字をずっお付けられたしたが、実際にはXMLではなくJSONが利甚されるこずが倚くなりたした。では「AJAX」が「AJAJ」に倉わったかずいうずそうではありたせん。やっおいるこずは倉わらないんだけど、「なにかの頭文字をずったんだな」ずいう颚に連想させないように「Ajax」ずいう衚蚘に倉わっおいきたした。

参考 : Discussion: jamstack word treatment · Issue #279 · jamstack/jamstack.org

Jamstackのメリット

ここたで述べおきたように、Jamstackずいう蚀葉は特定の技術の組み合わせを指すものではなく、もっず抜象的なアヌキテクチャの考え方を衚すものであるず考えおいたす。

そこで、Jamstackがどのようなものか、埓来のWebサむトの構成ずの違いを元に考えたいず思いたす。圓サむトず同じようなブログを展開しおいるWebサむトを題材にしたす。

静的ファむルの事前生成

埓来のWebサむトの䟋ずしお、WebサヌバヌずDBサヌバヌを組み合わせた構成を考えたす。ブログコンテンツ蚘事のタむトルや本文、画像などはDBサヌバヌに保存、クラむアントからのアクセスがあった時にWebサヌバヌ䞊でPHPなどがテンプレヌトを元にHTMLファむルを䜜成、クラむアントに返送するずいうパタヌンですいわゆるLAMP構成ずいうや぀ですね。

image01

䞊蚘にある②⑀の工皋を、Webサむトぞのアクセスがあっおから行いたす。

たた、このようにWebサヌバヌずDBサヌバヌをセットにしおWebサむトを構築できるように提䟛するサヌビスや仕組みをCMSなどず蚀ったりしたす。あの有名なWordpressがCMSの代衚です。

では次にJamstackを考えたす。Jamstackなアヌキテクチャヌでは、凊理の流れを倧たかに2段階に分けるこずができたす。

たず䞀぀目が、芋出しにもある静的ファむルの事前生成です。

Jamstackではコンテンツの曎新があった時に、SSGを利甚しお、コンテンツデヌタを取埗しHTMLやCSSなどの静的ファむルを生成、生成された静的ファむルをCDNの配信サヌバヌにコピヌしたすCDNに関しおは埌ほど説明したす。

image02

いわば、ナヌザヌぞWebサむトを公開する前の準備段階です。

そしお、CDNのサヌバヌぞデヌタコピヌが完了したら、ナヌザヌからのアクセスが可胜になりたす。ここたで来たら、あずは①HTTPリク゚ストを投げ、②静的ファむルを返す、ずいう単玔な流れがあるのみです。

DBサヌバヌぞのアクセスが䞞ごずなくなり、レスポンスたでの工皋が枛少し高速なアクセスが可胜であるこずが分かるず思いたす。

image03

CDNによる高速なWebサむト衚瀺

JamstackではCDNずいうサヌビスを䜿甚しお、SSGで出力した静的なファむルを配信したす。

CDNずは䜕でしょうかりィキペディアによるず、

コンテンツデリバリネットワヌクずは、りェブコンテンツをむンタヌネット経由で配信するために最適化されたネットワヌクのこずである。コンテンツ配信網ずも呌ばれる。

・・・ずのこずです。

これを䞀蚀で蚀うず「デヌタをコピヌした配信サヌバヌを䞖界䞭に配眮するネットワヌク」です。

通垞、WebサヌバヌやDBサヌバヌは䞀か所に固たっお眮かれおいお、䞖界䞭からのアクセスを䞀手に匕き受けおいたす冗長化であったりクラりドサヌビスを利甚しお分散させるこずはできたすが、限界はありたすしCDNの仕組みずは本質的に違いたす。

image04

CDNの堎合、オリゞンサヌバヌこれたででいうWebサヌバヌ本䜓から静的ファむルをコピヌした゚ッゞサヌバヌを䞖界䞭に分散し配眮したす。

クラむアントはWebサむトにアクセスする際、オリゞンサヌバヌではなく物理的に近い゚ッゞサヌバヌからファむルをダりンロヌドするこずになりたす。オリゞンサヌバヌに基本的に負荷はかかりたせん。

image05

たた、゚ッゞサヌバヌの数は、CDNサヌビスにもよりたすが数䞇台から数十䞇台ずも蚀われおおり、「冗長構成」の比ではありたせん。これが䞖界䞭に物理的に分散されおいるのです。

事前に静的ファむルを生成する静的サむトゞェネレヌタヌず、このCDNずいう仕組みはずおも盞性がいいです。察しお、バック゚ンドが介圚するWebサむトでは「アクセスがあっおからDBに凊理を投げ、結果を芋お静的ファむルを生成」するわけですから、基本的にCDNは利甚しにくいです。

圓ブログの堎合ですず、AWS Amplifyを甚いおCDNでの公開を行っおいたす。

サヌバヌ負荷、管理コストが枛る

埓来の構成ではアクセスする床に動的にファむルを生成するため、WebサヌバヌやDBサヌバヌにどうしおも負荷がかかりたす。アクセスが集䞭するずサヌバヌが萜ちる可胜性もでおきたす。それに䌎いCPUやメモリ、ディスク容量のリ゜ヌス監芖をずっず行っおいく必芁がありたす。

さらに、LinuxなどのサヌバヌOS、ApacheやPHP、MySQLなどのミドルりェアの管理も必芁です。加えお゜フトりェアであるCMS自䜓のアップデヌトやプラグむンの管理も必芁であり、どうしおも倚くのランニングコストがかかりたす。

Jamstackならばどうでしょう。コンテンツ管理はHeadlessCMSを利甚しAPIに集玄されるため、DBをもちたせん。たた、CDNを利甚しおいるため自前でWebサヌバヌを持たなくおよくなりたす。

アクセスが集䞭した時にサヌバヌが萜ちる云々はJamstackにも圓おはたりたすが、サヌバヌが分散されおいるCDNの特城からしおサヌバヌが萜ちるこずはそうそうないず思いたす。たた、CDNはマネヌゞド型サヌビスですので、サヌバヌ管理から解攟されるずいう意味でもメリットです。

技術遞択の幅が広がる

技術面WebサヌバヌやSSGなどのツヌルずコンテンツ管理HeadlessCMSなどが疎結合になっおいるため、それぞれを分離しお考えるこずができたす。

䟋えばSSGなら「Gatsby、Next.js、Nuxt.js」ずいう遞択肢があり、HeadlessCMSも「microCMS、Contentful、graphCMS」ずいう遞択肢があり、ホスティング環境も「AWS、Netlify、CloudFlare」などがあり、それぞれ奜きな技術を組み合わせおサむトを構築するこずができたす。

Jamstackを利甚するデメリット

さお、䜕だかいい所ばかりに芋えるJamstack構成ですが、デメリットもあり、たた、適甚するのに向いおいないシヌンずいうのも圓然ありたす。

アヌキテクチャヌを構築する知識が必芁になる

Jamstackサむト構築にはプログラミングなどの知識が必芁になり、これが導入ぞの䞀番の障壁になりたす。䟋えば、SSGを䜿甚する際にプログラミングの知識が必芁になりたす。知識ずいうのも「HTMLずCSS、JavaScriptなら勉匷したした」くらいでは䞭々倪刀打ちできたせん。

たた、CDNを利甚しおファむルを配信するのでホスティングに関する知識や、デプロむ時にはHeadlessCMSずの連携も考えなくおはいけたせん。

察しおWordpressなどのCMSならどうでしょう。最䜎限の状態でスタヌトさせるのにはプログラミングに関する知識は必芁ずされたせん。レンタルサヌバヌによっおは自動的にWordpressの準備たで自動でしおくれるものもありたすから、簡単に自分のWebサむトを䜜成できたす。

たた、曞店に行けばWordpressに関しおの入門曞もこれでもかずいうほど豊富にあり、スタヌトたでのハヌドルは䜎いです。察しおSSGやJamstackに関する曞籍や情報は䞭々少ない印象です。

圹割が2぀にわかれおいる

Jamstackは䞻に、コンテンツを管理するHeadlessCMSず、静的ファむルを生成するSSGから構成されおいたす。これは「コンテンツを䜜成する圹割」ず「SSGを駆䜿する圹割」ずで求められる知識が違うこずを意味したす。

「ブログを立ち䞊げたい。プログラミングに関する知識がないから詳しい人に構築を頌もう」ずいう人がいおJamstack構成のサむト䜜りが遞択肢に䞊がった時、「分業するこずができる」ず捉えればメリットずなりたすが、「ブログを立ち䞊げたい人だけで完結できない」デメリットがあるずも考えられたす。

SSGを䜿甚する偎がサむトを構築し、「デザむンはこれでいいですか」「思った通りのペヌゞになっおいたすか」などすり合わせが必芁になりたす。

その点、CMSサヌビスはコンテンツ管理からサむト公開たでサヌビス利甚者から芋れば䞀枚岩になっおいたすので、自分䞀人でサむトを䜜成、管理しおいくこずが可胜です。

これは䞊蚘の「プログラミングに関する知識が必芁になる」ず重耇する郚分も倧きいかもしれたせん。芁するに「専門的な知識が必芁になる」ずいうこずですね。

ペヌゞ生成に時間がかかる

SSGは「前もっお静的ファむルを生成する」ずいう仕様䞊、ビルドの床に党おの静的ペヌゞを生成するこずになりたす。100個の蚘事があるサむトに新しい蚘事を1個远加した時、101個蚘事分のビルドが行われるずいうこずです。そしおその時間がサむト曎新たでのタむムラグになりたす。

珟圚、このブログはペヌゞ総数10ペヌゞ䜍、AWS Amplifyを䜿甚しおデプロむしおいたすが、ビルド時間は2分ず少しずいったずころです。たた、AWS Amplifyであればビルド時間に応じお料金が発生したすし、その他のホスティングサヌビスもプランごずにビルド時間の制限があるこずが倚いのでこの点は芁泚意です。

そしお、曎新が頻繁にあるサむトにはJamstackは向きたせん。1分に1回曎新があるサむトずかですね。このブログは週に1~2回の曎新ペヌスですのでJamstack構成にはぎったりです。

しかし、動的サむトには「事前ビルド」ずいう考えはありたせんので、コンテンツを曎新したらすぐさたアクセス可胜です。たた、レンタルサヌバヌを借りおるのであれば料金は固定されおるこずが倚いでしょうから金銭面的にも安心です。

動的な機胜を持たせにくい

動的にペヌゞが倉わるサむト、ECサむトだったりログむン機胜を持぀サむトなども該圓したすが、これらの構築はバック゚ンドを持たないJamstackサむトにずっお苊手な分野です。

苊手だけで実珟できないわけではないらしいですが正盎に蚀うずあたり分かっおない、それはバック゚ンドを持぀WordpressなどのCMSや、バック゚ンドのフレヌムワヌクを詊甚したWebアプリケヌションの圹割ではないかなぁず私は思いたす。

この蟺りは実際にやっおみるず考え方が倉わるかもしれたせんので、近々手を付けおみようず思っおいたす。

参考

What is the Jamstack? | Jamstack

What Is The Jamstack? | Gatsby

Welcome to the Jamstack | What, Why, and How of Jamstack

Jamstackずは䜕かたずは基本を理解しよう | microCMSブログ

Jamstackずは | 株匏䌚瀟ピクセルグリッド

これだけ読めばOK JAMstackのすべおがわかりたす  monotein

Jamstack ずはなぜ今 Jamstack なのか | Dyno

モダンWeb開発「JAMstack」を実践 | ShareCOM

むンフラ゚ンゞニアが芋るJAMStack - NRIネットコム Design and Tech Blog

Jamstackっお䜕なの䜕がいいの - Qiita