TL;DR
- Bun で Vite のプロジェクトを作り、vite-plugin-elm を入れると、Elm の開発環境を作れる。
./Main.elmの import で型エラーになるので、即席の型定義ファイルを置く。
検証
- Bun の公式ドキュメントに沿って、
bun create vite my-app --template vanilla-tsを実行する。vanillaでもよいが、すべて型付きで統一したいので TypeScript を選んだ cd my-app && bun i && bun run devを実行し、サーバが立ち上がることを確かめるbun i -d vite-plugin-elmで Elm 用のプラグインを追加する- vite.config.ts を作る
- src の中の main.ts 以外のファイルをすべて消し、main.ts を書き換える(必要なら取っておいてもよい)
- src/Main.elm を作る
- Node.js の代わりに Bun でコマンドを実行するように明示するため、package.json の scripts にある
viteコマンドをbunx --bun viteに置き換える bun run dev、bun run build、bun run previewがそれぞれ動くかを確かめる
4 の vite.config.ts は次のとおり。
import { defineConfig } from "vite"
import elm from "vite-plugin-elm"
// https://vitejs.dev/config/
export default defineConfig({
plugins: [elm()],
})5 の main.ts は次のとおり。
import { Elm } from "./Main.elm"
Elm.Main.init({
node: document.getElementById("app"),
})このままだと、IDE で from "./Main.elm" が見つからないというエラーになり、ビルドもできない。そこで、即席の型定義ファイル Main.elm.d.ts を用意する。
export var Elm: any6 の Main.elm は必要最低限の内容にした。
module Main exposing (main)
import Html
main = Html.text "Hello, World!"結果
型定義ファイルを置くとビルドできるようになった。ただし、IDE ではエラーが出たままである。
考察
ほかにも、次のような選択肢がある。
- テンプレートの vite-elm-template を使う。
bunx tiged lindsaykwardell/vite-elm-template my-elm-appで取ってこられる。tiged は Git リポジトリの一部だけをコピーするコマンドである - テストランナーには、
elm-testコマンドの node-test-runner と、elm-test-rsコマンドの elm-test-rs がある - 開発用サーバに elm-live を使う
キーワード
参考
- Build a frontend using Vite and Bun
- Vite ガイド
- vite-plugin-elm
- vite-elm-template
- node-test-runner
- elm-test-rs
- elm-live
- https://arc.net/l/quote/dvkmmddy
- https://zenn.dev/y047aka/articles/install-elm-2021
- https://dev.to/lindsaykwardell/setting-up-an-elm-project-in-2022-lj4
- https://zenn.dev/ababup1192/articles/a51c8e2ddcde77#elmが型エラー