🚀

Astro + Biome (+Prettier) で手軽に個人サイトを作っていくぞ!

2024/10/12に公開

ESLint と Prettier の初期セットアップが毎回面倒くさいので、設定が簡単という噂の Biome に手を出してみる。
あまりややこしいプロダクトでいきなり採用するのも難しいので Astro で簡単な個人サイトを作る想定。

Node.js

入ってる

$ node -v
v20.18.0

Astro

入れる

https://docs.astro.build/ja/install-and-setup/

npm create astro@latest

オプションは TypeScript を Strictest にするだけで、あとはデフォルト。

   dir   Where should we create your new project?
         ./

  tmpl   How would you like to start your new project?
         Include sample files

    ts   Do you plan to write TypeScript?
         Yes

   use   How strict should TypeScript be?
         Strictest

  deps   Install dependencies?
         Yes

立ち上げる

npm run dev

動くことを確認

http://localhost:4321/

VSCode 用の設定

.vscode/extensions.jsonastro-build.astro-vscode が自動的に入っている

https://docs.astro.build/ja/editor-setup/

このプラグインにはフォーマッターがついていて Formatting (powered by Prettier and prettier-plugin-astro) と競合しそうな気もするが、とりあえず競合したときに無効化しようと思う。

Biome

入れる

https://biomejs.dev/guides/getting-started/

Even a patch release can result in slightly different behavior. とか書かれているけれども、一人で使うだけなのでバージョン固定はしないで --save-exact なしで

npm install -D @biomejs/biome

設定

Biome 1.6 時点では Astro は partial support とされており完全サポートではない模様。

https://biomejs.dev/internals/language-support/

https://biomejs.dev/blog/biome-v1-6/#partial-support-for-astro-svelte-and-vue-files

部分サポートだったのは意外だったが、とりあえず設定を進めていく。

https://biomejs.dev/guides/getting-started/#configuration

設定の JSON にコメントを書きたいので --jsonc のオプションだけつける。

npx @biomejs/biome init --jsonc

デフォルトではインデントが tab、タブ幅が 2、行幅が 80 となっている。
タブインデントは久しぶりだけれどもせっかくなのでデフォルトを尊重して使ってみる。

https://biomejs.dev/ja/formatter/

Astro 用の設定は .astro ファイルを静的解析する際、誤検知を避けるために javascript.globals に "Astro" を追加する必要があります。 とのことなので追加する。

https://biomejs.dev/ja/internals/language-support/#html拡張言語のサポート

  "javascript": {
    "globals": ["Astro"]
  }

VSCode 用の設定

biomejs.biome をインストールして .vscode/extensions.json にも書いておく。

https://biomejs.dev/guides/editors/first-party-extensions/

保存時の自動フォーマットを有効にしたいので .vscode/settings.json にこんな感じの設定を書く。(なんか設定が重複している気もするけど)

{
	"editor.formatOnSave": true,
	"editor.defaultFormatter": "biomejs.biome",
	"editor.codeActionsOnSave": {
		"quickfix.biome": "explicit",
		"source.organizeImports.biome": "explicit"
	}
}

フォーマット

既存のファイルを一括フォーマットする。

npx @biomejs/biome check --write ./

Biome の部分サポート

  • おそらく Astro ファイルの HTML 部分のフォーマットには未対応で、インデントが tab, space で揺れていたりしても自動で直してくれない
  • TypeScript 部分は自動フォーマットが効く
  • CSS の対応状況は「進行中」とあるが、最低限のフォーマットは効かせてくる

Prettier

Astro ファイルを編集しているとフォーマットが効かないのがきついので Prettier も入れてみる。

npm install --save-dev prettier prettier-plugin-astro

.vscode/settings.json で Astro ファイルだけフォーマッターを変える。

	"[astro]": {
		"editor.defaultFormatter": "astro-build.astro-vscode"
	},

.prettierrc は Biome に寄せる。

{
	"useTabs": true,
	"tabWidth": 2,
	"semi": true,
	"singleQuote": false
}

完了

あとはサイトを作っていくだけ!

Discussion