【ざっくり解説】モダンなWeb開発を実現する「JAMstack」とは？



:::note info
以下の悩みを持つ読者におすすめ
・「JAMstackって何？」
・「そもそも一般的なWebサイトの構成とはどう違うの？」
:::


# 1. 新たなWebのスタイル「JAMstack」とは何か
JAMstack（ジャムスタック）とは新たなWebアプリケーションアーキテクチャで、「JAM」は各用語の先頭アルファベットを取った略語です。

**J**avaScript × **A**PI × **M**arkup

簡単に言えば、JavaScriptフレームワークを動かしてAPIを叩き、サイト閲覧者には静的コンテンツのみを配信します。
[（参考）JAMスタック公式](https://jamstack.org/)

サイト閲覧者から見たらデータベースを介さずにWebサイトにアクセスできるため、表示速度やセキュリティの面から大変パフォーマンスが良いです。

余談ですが、「JAM」という名前は従来のWebアーキテクチャの一つ「LAMP」に対抗するために名付けられました。

# 2. なぜ近年JAMstackが注目を浴びているのか
JAMstackはなぜ昨今、注目を浴びているのでしょうか。

現在のフロントエンド界隈では、UI/UXを高めるためにシームレスな画面遷移を実現したSPA（エスピーエー）でのサイト構築が主流となりつつあります。

:::note info
SPAとは？
*Single Page Application*の略。
単一ページで構成されたアプリケーション。
静的なHTML + JavaScriptで実現したもので、各ページをJavaScriptがレンダリングする。
アプリのような滑らかな画面遷移が実現されるため、サイト閲覧者にとっては**極力ストレスを感じさせない**動きになる。
:::

SPAの流行にあわせて、Googleも2021年6月に「Core Web Vitals」というWebパフォーマンス指標を検索アルゴリズムに反映しています。

「Core Web Vitals」には、UX(より良いユーザー体験）を追求しているサイトを評価するということが書かれています。
[(参考)Core Web Vitals の指標のしきい値の定義](https://web.dev/i18n/ja/defining-core-web-vitals-thresholds/)

しかし、SPAはJavaScriptを実行してから画面を作るので、SEOの観点からGoogleのクローラーがHTMLを読み込むのに時間がかかり正確にSEO評価してくれなかったり、OGPタグが読み込めなかったりと不安要素が残っています。

Webサイト管理者にとっては、SEOとサイトパフォーマンスの両立は是非実現したいです。

そんな中で登場したのがJAMstackです。

JAMstackで開発したWebサイトは「静的サイトジェネレーター（SSG）」というものが全ページ分の静的ファイル（HTMLやCSS）を事前に配信するため、サイト閲覧者側ではページ遷移したときにあらかじめ配信されたファイルを読み込むだけです。

あらかじめ配信されたHTMLを読み込むだけなのでSEOやOGPタグの懸念はなく、むしろ高速かつセキュリティ性が高いWebサイト構築が実現できます。


[(参考) Jamstack | 2022 | The Web Almanac by HTTP Archive](https://almanac.httparchive.org/en/2022/jamstack)
![Jamstacksites.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/2d641940-c934-451d-aef4-d05874e676e4.png)
上記グラフからも分かる通り、年々JAMstackを採用するサイトが増えています。


[（参考）国内でJAMstackを使ったサイト事例| microCMS （ページ下部）](https://microcms.io/service/produce)

# 3. JAMstackの基本構成とは？
## 従来サイト（LAMP等使用の場合）
![lampアーキテクチャ図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/0ce2cb44-d2af-fc64-c8bb-5098923b8dd3.png)




リクエストごとにサーバー側でDBにアクセスしてコンテンツを表示させるため、パフォーマンスや表示速度にムラが出てしまいます。
一般的なWebサイトはこれにあたります。

 
## SPAなサイト
![spaアーキテクチャ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/0978a1db-c520-c920-0a69-cadee2a4a23c.png)




あらかじめ静的なHTMLとCSSファイルを読み込み、APIを通じて動的にコンテンツを取得するためパフォーマンスは上がりますが、Googleクローラーが正確に読み取ってくれないのでSEOの観点で懸念が残ります。

 
## JAMstackなサイト

![JAMstack_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/f8bf12a2-a140-51d0-0660-6b62e7324d83.png)


「え・・？これだけ・・？」と思うかもしれませんが、これだけです。静的ファイルを読み込んで終わりです。

動的コンテンツの表示も上記で対応しています。

実は裏側でごちゃごちゃ動いていて、APIからデータを事前に読み込み、それを埋め込んだ静的ファイルを作成しています。


![JAMstack_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/fda4cf4a-9569-7dfa-2ccc-811034e7b687.png)


つまりJAMstackの決定的な特徴は、

サイト閲覧者はあらかじめ設置されたファイルをただ読み込むだけとなるので、表示速度やセキュリティで常に高いパフォーマンスを保つことができます。

# 4. 導入を手軽に可能にするツール
JAMstackの基本的な構成はイメージできましたか？

- 「パフォーマンスが良いのは分かったけど、結局ビルドとかSSGとかよく分からないし導入のハードルが高いんじゃないの？」
- 「運用が面倒くさそうだから今のままでいいや・・」
- 「でも、お高いんでしょう〜？」
といったことを気にしている方も多数いらっしゃると思います。

ですが、**JAMstackはハードルの高いものではありません。**

**「ヘッドレスCMS」「静的サイトジェネレーター」「ホスティングサービス」** 
これらを使えば、全て手軽に解決できます。

今回は数多くある中からおすすめなサービスをピックアップします。


## ヘッドレスCMS
簡単に言えば、管理画面とAPIだけを提供してくれるCMSです。

管理画面からコンテンツを投稿すると、json形式でAPIを配信してくれます。

自由にAPIパラメータも設定できるので、柔軟な設計が可能かつ管理画面からAPIの追加削除が出来るため管理もしやすいのが特徴的です。

基本的には会員登録さえすれば、無料で使用できます。（有料プランも勿論あります）



### ■ [microCMS](https://microcms.io/)
![microcms.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/580ad9a8-ed36-2d64-1581-209686e3cb85.png)


- 初心者向け
- 純国産のためドキュメントが日本語対応
- UIが分かりやすく非ITの方にも操作しやすい
- 小規模なサイトの場合無料プランで事足りるが、大規模だとスペックが物足りない
- UIテンプレートあり [microCMSテンプレート](https://templates.microcms.io/)

https://microcms.io/

### ■ [Contentfull](https://www.contentful.com/)
![contentfull.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/26c70b01-e20b-f545-60b5-76332807b234.png)

- とにかく自由にカスタマイズしたい人向け
- 無料枠で出来ることが多い
- 最も知られているヘッドレスCMSのため有志のモジュールなんかもある
- 他と比べ有料枠のコスパ最強

https://www.contentful.com/

## 静的サイトジェネレーター（SSG）
ヘッドレスCMS等で配信されたAPIをJavascriptベースのテンプレートに埋め込み、静的なHTMLを作成するライブラリです。

これのおかげで静的なHTMLにも関わらず動的なコンテンツを配信することが可能になります。

Javascriptのフレームワークが用いられており、ReactやVueがベースとなるものがほとんどです。


近年ではNext.js、Gatsbyの使用率が高いようです。
![ssggraph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/42c6b2fe-18e3-88c0-877e-57c1a7f81f5c.png)
[(参考) Jamstack | 2022 | The Web Almanac by HTTP Archive](https://almanac.httparchive.org/en/2022/jamstack)
 
### ■ [Gatsby](https://www.gatsbyjs.com/)
![gatsby.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/1006bedb-7660-1922-8310-890aec76cae5.png)


- Reactベースのフレームワーク
- GraphQLを使用しており、プラグインも豊富


https://www.gatsbyjs.com/

### ■ [Next.js](https://nextjs.org/)
![nextjs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/9a5a0313-fee1-b213-02b8-f4ad944744ca.png)

- Reactベースのフレームワーク
- 静的サイト以外にもSPAやサーバーサイドレンダリングも使用可能
- 後述する「Vercel」との親和性が高い

https://nextjs.org/

### ■ [Astro.js](https://astro.build/)
![Astrojs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/3c6b881f-bea1-0dcd-bab8-c78e91d1127f.png)

- `No JavaScript` を謳っており必要最低限のモジュールのみをビルドすることにより、軽量かつ高速化を実現
- ReactやVue.jsなどのJSフレームワークを使用して開発もできる

https://astro.build/

### ■ [Nuxt.js](https://nuxtjs.org/)
![nuxtjs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/27100164-8bc1-6216-9c49-9856bcbb05b2.png)

- Vueベースのフレームワーク
- 名前から分かる通り、Next.js を意識して作られた。

https://nuxtjs.org/

## ホスティングサービス
静的なHTMLをCDNを通して配信してくれるサービスです。

中には、GitHub 等と連携することでソースをプッシュしたタイミングで自動的にSSGを動かしてビルドまでしてくれるものもあります。

![paasgraph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/47e19965-fd97-45f6-9c35-12d5b2c65215.png)
[(参考) Jamstack | 2022 | The Web Almanac by HTTP Archive](https://almanac.httparchive.org/en/2022/jamstack)

### ■ [GithubPages](https://docs.github.com/ja/pages/getting-started-with-github-pages/about-github-pages)
- 言わずもがなGithub製のホスティングサービスのため、リポジトリがあれば導入ハードルは低い
- Githubリポジトリから「[Jekyll](https://jekyllrb.com/)」を利用してビルド・公開する
- 「Jekyll」以外のSSGを使用している場合は「GitHub Actions」 を作成して、サイトをビルドして公開することができる
- 商用利用には注意が必要
>GitHub Pages は、オンライン ビジネス、eコマース サイト、主に商取引の円滑化またはサービスとしての商用ソフトウェア (SaaS) の提供のどちらかを目的とする、その他の Web サイトを運営するための無料の Web ホスティング サービスとしての使用を意図したものではなく、またそのような使用を許可するものでもありません。 GitHub Pages サイトは、パスワードやクレジットカード番号といった機密情報のやりとりに使うべきではありません。

https://docs.github.com/ja/pages/getting-started-with-github-pages/about-github-pages#prohibited-uses

### ■ [Netlify](https://www.netlify.com/)
![netlify.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/f479d430-010d-dfc2-9b90-c16cd69213a4.png)
- **無料プランで商用利用が可能**
- 日本にも拠点があるため、高速なコンテンツ配信を実現
- お問い合わせ周りの機能も提供してくれる
- GitHubと連携するとソースをプッシュしたタイミングでビルドからホスティングまで行ってくれる

https://www.netlify.com/

### ■ [Vercel](https://vercel.com/)
![vercel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527256/f72cea8d-4133-7c76-4f4a-4328140f0469.png)

- 無料プランが豊富だが、商用利用するには有料プランが必要
- Netlifyと同様にGitHubやGitLabとの連携が可能
- Next.jsとの親和性が高い

https://vercel.com/

## 5. JAMstackを導入しないほうが良いケース
ここまでJAMstackの魅力をお伝えしてきましたが、導入するべきかの判断は状況によって変わります。

### 開発体制が必要
WordPressのようにあらかじめテンプレートを読み込んで管理画面を使ってレイアウトを組み替えることが出来ないので、画面を自前で用意する必要があります。

ただ、開発者側にとっては画面のみを作成するだけなので、通常のWebサイトを構築するより格段に作業工数の圧縮が可能です。

よって開発者は必要ですが、もし開発体制が整っているならばJAMstack導入はおすすめです。



### 動的なサイトを開発したい時
JAMstackはあくまでも静的なHTMLを配信するのみです。

そのためユーザーによって動的に画面を変えるWebサイトには不向きです。

ただ、ページごとに導入することは可能です。

例えば、LPはJAMstackで構築して、他はSPAやSSRを使用するなど柔軟な導入も可能です。


### プラグインの物足りなさ
ヘッドレスCMSには、WordPressのような細かなSEO対策設定が出来るプラグインやプレビュー機能を持つサービスが限られています。

Contentfullのように有志がプラグインを提供しているものもありますが、まだ歴史が浅いためプラグインの物足りなさは否めません。

ただ、JAMstack構成が増えている近年の現状を見るに、これらに対応するプラグインがリリースされたり、新たなヘッドレスCMSが登場する可能性は大いにあります。

# 6. 最後に
メリットもデメリットもあるJAMstackですが、Webサイトを作成する時の選択肢として有力なのは変わりありません。
近年ではmicroCMSのように国内産のCMSサービスも登場しており、国内外Web開発の主流になっています。
私個人としても、Next.jsを使用した開発やVercelを利用したデプロイは、一昔前のHTML/CSSをレンタルサーバーにFTPでアップロードすることに比べるとだいぶ楽に関してます。また、インフラのことをあまり考えずに開発に専念できるのも大きなメリットと感じております。

是非、この機会に皆様も普段の開発手法にJamstackを取り入れてみてください。

# 参考
https://almanac.httparchive.org/en/2022/jamstack

https://microcms.io/projects