Astro メモ
2022年夏にVersion 1.0を迎えた、イマドキでイケテル静的サイトジェネレーターだけどSSRもできるよっていう、サイト制作の鉄板(じゃないかと思われる)ツール「Astro」について、気づいたことをメモしていきます。
Astroのアイランドとか、React/Vue/Angularなどとのintegration機能は、公式サイトや他の方のブログ等でよく見かけるので、ここでは実際に使っていて気になった細かいことベースで記載していきます。
技術的なスタック
Node.jsがベースです。
古式ゆかしい静的サイトジェネレーターみたく、Markdownファイル(.md)群からページを量産することもできれば、Node.jsのバックエンドからDBに接続し、記事をDBから引っ張ってくる的なこともできます。
というか、Node.jsで出来てるだけあって、Node.jsで出来ることは大概できます。
Astroの自由度について
筆者はかつてHexoという静的サイトジェネレーターを好んで使っていましたが、Node.jsの自由度はあれど、Hexo流の組み方みたいなのがあって(ちょうどWordPressの関数群のようなイメージです)、あんまり自由が効かなかった覚えがあります。
それと比べると、Astroは比較的自由度が高いのですが、とはいえAstroにもお作法的な細かいことが多いので注意は必要です。
Astroの世界
基本は.astroというファイルで作っていきます。
Astroの世界
古式ゆかしい静的サイトジェネレーターを使っていた方にはお馴染みのFrontmatterと言う書式に似た感じで書きます。
サンプルファイル
---
const myDream = 'I wanna be a rich man.'
---
<p>{myDream}</p>
必要最低限の.astroファイルの構成です。このように、ファイル上部に---
を2行書き、その間にJavaScriptを記載します。
終わりの---
から下の部分は基本的にHTMLを記載しますが、{}
で括った部分は、ファイル上部で記載したJavaScriptを展開することができます。
サンプルファイルの結果
<p>I wanna be a rich man.</p>
となります。
普通にHTMLの中でJavaScript書くのとどう違うの?
例えば、こういう疑問もあるかと思います。
<script>
const target = document.getElementById('target')
target.textContent = 'I wanna be a rich man.'
</script>
<p id="target"></p>
実は、Astroでは、---
で挟んだセクションは必須要素ではなく、いきなりHTMLを書いてもOKです。上記のようなHTMLの中でJavaScriptを書く.astroファイルがあっても問題ありません。
ただ、この場合はクライアントサイドでJavaScriptを実行することになります。
---
の中はNode.jsの世界、---
の下はブラウザ側の世界
端的に言えばこれに尽きます。
---
の中はJavaScriptといってもNode.jsが実行されます。そこはサーバーサイドの世界です。一方、---
の下側は、HTML/CSS/JavaScriptが実行されるフロントエンドの世界です。
つまり、---
で二つの世界は隔絶されているように見えますが、前述のように{}
を使って変数を渡したり、一時的に{}
の中でNode.jsを実行する、といった使い方もできます。