みなさんフレームワークは何を使っていますか?
弊社ではReact
とNext.js
がほとんどです。
SvelteKit
+ Svelte
Astro
+ Svelte
リアクティブ、コンパイラ、etc…
色々特徴はありますがざっくりまとめると
いろんなライブラリのいいところどり
<script> // JavaScript let count = $state(0);
function increment() { count += 1; }</script>
<!-- HTMLっぽい独自テンプレート --><div class="counter"> <h1>カウンター</h1> <p>現在のカウント: {count}</p>
<div class="buttons"> <button onclick={increment}>+</button> </div></div>
<!-- CSS --><style> /* ... */</style>
<!-- スタイリングの簡略化 --><div class={isCool ? "cool" : ""}>...</div><div class:cool={isCool}>...</div>
<div style:color="red">...</div><div style="color: red">...</div>
<!-- CSS変数ネイティブな記法 --><Slider bind:value min={0} max={100} --track-color="black" --thumb-color="rgb({r} {g} {b})"/>
<!-- 便利なアニメーションヘルパー --><script>import { fade } from "svelte/transition";
let visible = $state(false);</script>
<button onclick={() => visible = !visible}>toggle</button>
{#if visible} <div transition:fade>fades in and out</div>{/if}
<!-- 依存配列の指定が不要 --><script>let size = $state(50);let color = $state("#ff3e00");
let canvas;
$effect(() => { const context = canvas.getContext("2d"); context.clearRect(0, 0, canvas.width, canvas.height);
// this will re-run whenever `color` or `size` change context.fillStyle = color; context.fillRect(0, 0, size, size);});</script>
<canvas bind:this={canvas} width="100" height="100" />
<!-- 非同期処理が楽 -->{#await promise} <!-- promise is pending --> <p>waiting for the promise to resolve...</p>{:then value} <!-- promise was fulfilled or not a Promise --> <p>The value is {value}</p>{:catch error} <!-- promise was rejected --> <p>Something went wrong: {error.message}</p>{/await}
自分たちもコミットするという強い意志が必要(多分)
国際化のサーバサイド対応
next-intl
ではリクエスト単位でスコープを分けて管理しているReactのように複数の有力な選択肢があるとは限らない
ライブラリの事前調査が重要
Svelteの基本機能ベースで開発をする
逆に基本機能で収まらないことがわかってるなら
採用するメリット薄いかも?
例)Tanstack Queryによるキャッシュ管理
今日は紹介できなかったですが、Svelte以外にもAstroも長く触っていました。
Astro
+ Svelte
やAstro
+ React
などの構成が
気になる方はぜひお気軽にご質問ください!
現状は以下の二つが有力候補