Astro技術解説座談会 前編 Astroの特徴を知る

AstroというWebフレームワークをざっくり知りたい、また、Astroの特徴や機能について、技術選定に役立つ知識を持っておきたい人のために、エンジニアが座談会形式で解説します。

発行

  • 中村 享介
  • 宇野 陽太
  • 中野 祐人
  • 渡辺 由
  • 丸山 陽子
Astro技術解説座談会 シリーズの記事一覧

はじめに

AstroというWebフレームワーク。CodeGridでも頻繁に取り上げるWebフレームワークです。最近、言葉としてはよく聞くけど、特徴などはよくわからない、知っていたほうがいいとは思うけれど、触ったり、情報収集したりする時間がない……という方に向けて、Astroを使った案件や、個人プロジェクトをこなすエンジニアが集結しました。

AstroがどのようなWebフレームワークか、どんなサイト制作に向いているか、また、これらの新機能は? など気になるトピックについて、エンジニアの知見や意見を出し合いました。

これを読むことで、ざっくりとAstroがわかるはず!

参加したエンジニアは以下のとおりです。エンジニアが執筆したAstroやその周辺知識に関するシリーズをそれぞれ併記したので、より深く知りたいという方は参考にしてください。

そもそも、Astroって?

💡この節のポイント💡

  • AstroはWebフレームワークのひとつ
  • 高速に表示されるWebサイトを作るための機能が充実
  • ReactやSvelteなど、好きなUIフレームワークのコンポーネントを追加できる
  • ブログやニュースメディアなど、コンテンツを持つサイトに向く

――ピクセルグリッドではAstroを実際に案件に使うことも多いですよね。まずはAstroはどんなものなのか、そしてどんなことに使えるのか、ということから話していきたいと思います。

宇野:Astroとは、いわゆるWebフレームワークの一つですね。デフォルトでは、ビルド時にJavaScriptを取り除いた「構築済みのHTMLを吐き出す」というコンセプトです。ブラウザ側では、その構築済みのHTMLを読み込んで表示するので、表示が速いというメリットがあります。

中野:向いているサイトは、WebメディアとかECサイトとかですね。Webアプリのような、ユーザーがログインしてユーザー側からいろいろ入力して、みたいなのではなくて。ユーザーがそこに訪れていろんな情報を読むようなサイトを作るのには、やはりいいフレームワークかなと僕は思っています。

――WebメディアであるCodeGridも、Astroで作られていますよね。

中村:そうですね。Astro公式サイトのトップに「The web framework for content-driven websites」、つまり、「コンテンツドリブンなWebサイトのためのWebフレームワーク」ってコピーが書いてありますよね。ブログとかニュースメディアとか、コンテンツを持っているサイトのことです。

逆に、コンテンツじゃなくて、たとえばデータを扱うような、管理画面とかそういうもののためのフレームワークではないという感じですね。ユーザーが入力した状態を保持して、この状態だったらこうなるとか、そういったところはあんまりサポートしてくれていないのがAstroかなと思っています。

ほかのフレームワークとの違い

――最近、人気のWebフレームワークとしてAstroの名前もよく聞くようになってきましたよね。

中村:そうですね。特に、Web制作界隈の人の中で、話題になっているように感じます。でも、「Next.jsの次に流行っている、新しいやつがAstro」というような考えは違うかなと。そもそも、Next.jsとAstroでは使う用途が違うというか。

――Astroを念頭に置いたときに、Next.jsはどう捉えればいいですか。

宇野:Next.jsだったり、Solid Startだったり、SvelteKitだったりっていうのは、やっぱりデータフローっていうのをしっかりと作れるように設計されていると思います。データが主体になっているっていうことですね。

DBにあるデータを受け取って、いい感じにアプリ内で取り回して描画する。あとはユーザーからの入力を受け取って、それを逆にサーバー側に送り返す。双方向なプリケーションを作るのに向いてるかなとは思います。

そういうところを作りやすいインターフェースが揃ってるのが、Next.jsという感じじゃないかな。

中村:ただ、Astroにもいろいろと機能がついてWebアプリの制作ができないわけではないし、Next.jsだってAstroが得意とするようなWebサイトを作れないわけじゃない。機能は被ってるところもあるから、きっちりした線引は難しいところだよなと思いますね。

宇野:そうですよね。とはいえ、やっぱりクライアントサイドでのリアルタイムな変更っていうのはAstroのサポート外だとは思うし、そのためのインターフェースっていうのはいまだに提供されてないですよね。

たとえば、クライアントのレンダリングに合わせて何かをフックして処理を実行しましょうっていうものはAstroは持っていない。そういうのはUIフレームワークのコンポーネントでやってねっていうのがAstroの基本かな。

――コンポーネントとしてほかのUIフレームワークを、Astro内で使えるわけですね。

宇野:そうです。JavaScriptが必要な部分は後からオプトインできるようにしましょうっていうのが、Astroのもう一つのコンセプト。

限りなく静的なWebサイトだったとしても、ユーザーの操作を受け付ける部分っていうのは出てくると思うんですね。たとえば、CodeGridは記事というコンテンツを扱うサイトだけど、購読者として「ログインする」とか、記事を「お気に入りに登録する」という動的な機能があるわけです。

そういう機能を実装する場合に、AstroではReactやVue、Svelteなどの各種UIライブラリで作成したコンポーネントを読み込めます。

JavaScriptが必要な部分で利用するAstroアイランド

💡この節のポイント💡

  • 構築済みのHTMLにJavaScriptの動的な機能を追加することを「ハイドレーション」と呼ぶ
  • Astroでは「Astroアイランド」というコンポーネントごとに独立してハイドレーションできる仕組み(パーシャルハイドレーション)があり、独立してることで表示速度を向上できる
  • Astroアイランドでは好きなUIフレームワークのコンポーネントを利用できる

――AstroでJavaScriptが必要な部分を実装することについて、もう少し詳しくお願いします。

中村:そうですね。ちょっと歴史的な経緯を話してみましょう。

SPA(シングルページアプリケーション)と言われている、作り方があります。1つのHTML表示されたページ上で、ユーザーの操作に対してJavaScriptでデータを取ってきて描画するので、ユーザーが画面を切り替えなくても内容を動的に変化させられます。でも、SPAはとにかく最初の表示が遅い。JavaScriptをブラウザでたくさん実行しないといけないし、HTMLも何もないところから全部構築するので。

「じゃあ、最初のHTMLだけサーバーサイドで生成して、初回の表示を速くしようよ」っていうのがサーバーサイドレンダリング、SSRです。でもこれだと、JavaScriptのイベント部分をつけることができません。

その解決策として、そのすでに生成されたHTMLに対して、JavaScriptの機能を付加するのが「ハイドレーション」です。ただ、ハイドレーションはページ単位で行われるので、たとえば、すごく重いカルーセルが1か所入っていると、それのせいでページ全体の表示が遅れてしまうなんていうケースがあります。

そこで登場したのが「パーシャルハイドレーション」です。たとえば「重いカルーセル」をUIコンポーネントとして「その他の部分」から独立させてあげることによって、カルーセルがハイドレーションされなくても、他の部分は先に表示できるようになる仕組みですね。Astroでは、「アイランド」という機能を提供しています。

――この図でいうと、appと表示されている部分はUIコンポーネントとして独立している、ということですね。そのほかのHTMLの部分は、すでに生成されているものが表示されるので速い、という。

出典:Islands Architecture: Jason Miller

中村:UIコンポーネントはReactやSvelte、Vue、SolidJS、などいろいろなフレームワークが使えるし、そのアイランド単位でフレームワークの混在もできるよ、というのがAstroアイランドです。

宇野:だから、Astroでは、既存のコード資産を流用することができるという利点もあるわけですよね。

補足:ハイドレーションをさらに詳しく

Webフレームワークとハイドレーションの仕組みをさらに知りたい方は、以下のシリーズなども参考にしてください。

Astroアイランドとサーバーアイランド

💡この節のポイント💡

  • サーバーアイランドではAstroだけで遅延するコンポーネントを書ける
  • サーバーアイランドは仕組みがシンプルになり、よりパフォーマンスが向上する可能性がある

中村:同じような機能として、Astro独自の「サーバーアイランド」があります。これはAstro 5からStable(ステーブル:安定版のこと)になる機能ですね。サーバーアイランドも、基本的には同じように、ページの表示速度を改善するためのものだけど、ほかのUIフレームワークを使わずに、Astroのサーバー側の仕組みで用意しようっていうものです。

――サーバーアイランドも、Astroアイランドと同じように、先に全体を表示して、アイランドの部分はあとから表示されるわけですよね。

中村:そうです。サーバーアイランドの公式デモを見ると、わかりやすいかもしれない。

デモにアクセスすると、全体的な静的なHTMLの部分はすぐに表示されるけど、コンテンツであるアイランドの部分はプレースホルダーしか表示されていないですよね。

大きい画像

そして、準備ができると、アイランド部分のコンテンツも表示されます。

大きい画像

この緑色の点が表示されているアイランドの部分は、DBの問い合わせなどで時間のかかる部分という想定で遅延させているのだと思います。しかし、ページ全体としてはすぐに表示され、ユーザーの体験に影響を与えないようになっています。

サーバーアイランドも、似たような構成で作ったAstroアイランドも、非同期処理なのは同じ。だけれど、他のReactやSvelteなどのUIコンポーネントフレームワークを使わずに、サーバーのレンダリングを遅らせることができるのが、このサーバーアイランドですね。

――全部Astroで処理を書けるということの利点は、どんなことですか?

宇野:たとえばAstroアイランドで「Reactコンポーネントでクライアントからデータを取るようにします」っていう実装になると、そこでサーバーと通信するためのインターフェースが必要になる。つまり、APIを実装してFetchして取ってきて、みたいなことをやる必要があったんですけど、サーバーアイランドを使えば「インターフェースは一切実装せずに、Astroがよしなにしてくれますよ」っていうお話です。

中村:そうですね、複雑な構成にならないっていうことですね。シンプルに作れるし、場合によってはより速く表示できる可能性がある感じです。

ブラウザに処理をさせないことのメリット

ブラウザからAPIを介してデータをやり取りするなど、ブラウザ側いろいろな処理させると、コンテンツ配信者側では、ブラウザで何が起きているかを、把握しにくいという状況があります。ブラウザ側のことを配信者がなんでも把握できてしまうというのは、プライバシー的にも大きな問題になりますので、制限がかかっているわけです。ですので、エラー収集ツールなどを活用したとしても、ブラウザで起きていることをすべて把握するのは困難です。

でも、サーバーアイランドのように、サーバー側で処理するのであれば、もうちょっとわかりやすくなります。サーバーのログなりなんなり、確認する手段もあるわけです。このように、開発者が把握できる範囲内で、処理をやってくれているというのも、サーバーアイランドのメリットのように感じます。ユーザーに届ける時は、さまざまな処理が終わって、極力シンプルになってるっていうのは、開発者としてはやりやすい気がしますね。(渡辺)

――WebフレームワークとしてのAstroの特徴がわかってきました。次回はもう少しAstroの特徴を見た後、実務での技術選択に役立つように、Astroで制作するのに向いているサイト、向いていないサイトなどのお話をお願いしたいと思います。

(続く)

中村 享介
PixelGrid Inc.
Jamstackエンジニア

2009年、JavaScriptの会社として株式会社ピクセルグリッドを設立。 多数のWebリニューアル、新規立ち上げを取り仕切った経験を持ち、情報設計、フロントエンド、クラウド活用、開発フローの効率化を得意とする。 Webをより発展させるため、新しくブラウザに実装された機能の活用事例を数多く生み出しつつ、日々、クラウドサービスを利用した効率のよい制作・開発手法の試行錯誤を続けている。現在の興味はWeb Componentsを使ったマークアップの改善とJamstack。 著書に『WebクリエイティブのためのDOM Scripting』(単著:毎日コミュニケーションズ、2007年)など。ここ数年は書籍の執筆をせず、フロントエンド技術情報メディア「CodeGrid」で精力的に執筆活動を行っている。

宇野 陽太
PixelGrid Inc.
フロントエンド・エンジニア

大手ソフトウェアダウンロード販売会社、ソーシャルアプリケーションプロバイダーなどで、デザイナー、マークアップ・エンジニア、フロントエンド・エンジニアとして、主にスマートフォン向けゲームの開発に携わる。2015年1月に株式会社ピクセルグリッドに入社。 JavaScriptフレームワークを用いたアプリケーション設計・実装を得意とする。 著書に『Angularデベロッパーズガイド 高速にかつ堅牢に動作するフロントエンドフレームワーク』(共著:インプレスジャパン、2017年12月15日)などがある。

中野 祐人
PixelGrid Inc.
Jamstackエンジニア

大学在学中にWeb制作に興味を持ち、アルバイトとしてWeb制作会社で勤務するほか、趣味でいくつかのWebサイトを制作する。最近ではJamstackでの開発に関心があり、Nuxt.jsやGridsomeなどのフレームワークを使ったWebサイトの制作を始める。2020年にピクセルグリッドに入社。

渡辺 由
PixelGrid Inc.
フロントエンド・エンジニア

Web制作会社、ECサイト運営会社にてマークアップや社内システム構築を担当したのち、大学の研究室のエンジニアとしてデータベースや解析ツールなどのWebアプリケーション開発に従事。インフラやサーバーサイドを含め、Web技術全般を幅広く経験したが、いま最も興味があるのはJavaSciptやCSSやUIの設計。2021年にピクセルグリッドに入社。

丸山 陽子
PixelGrid Inc.
編集

Mac雑誌の編集者を経験後、フリーランスのエディター/ライターとして独立。パソコン系雑誌やデジタルカメラ雑誌、iPhone/iPadの初心者向け書籍などの編集や執筆に携わる。2015年にピクセルグリッドへ入社し、「CodeGrid」の編集を担当する。

Xにポストする Blueskyにポストする この記事の内容についての意見・感想を送る

全記事アクセス+月4回配信、月額880円(税込)

CodeGridを購読する

初めてお申し込みの方には、30日間無料でお使いいただけます