@ryoppippi

Vim-jp ラジオ オフィシャルサイトの目に見えないアプデ履歴

25 May 2025 ・ 6 min read


Note

この​記事はVim 駅伝の​ 5/23 の​記事です。 遅れました。

はじめに

2024年7月8日月曜12時、​ポッドキャストラジオ番組​「エンジニアの​楽園vim-jpラジオ」が​AuDee​(TOKYO FM)​公式番組と​して​配信開始されています。

https://vim-jp-radio.com/

毎週​月曜12時に​配信され、​毎回​ゲストを​交えて​とても​面白い​内容に​なっています。 ぜひ聞いてみてください​!

(感想ブログ等々👇) https://blog.tomoya.dev/posts/vim-jp-radio/ https://zenn.dev/takeokunn/articles/20250126133908 https://zenn.dev/vim_jp/articles/vimjpradio22-guest-car https://blog.atusy.net/2024/12/23/vim-jp-radioa-24/ https://blog.atusy.net/2025/05/21/vim-jp-radio-giginet/ https://sizu.me/daiki48/posts/6xf2w79omuef

Note

自分、​ryoppippiも​ゲストと​して​出演させていただきました。 https://audee.jp/voice/show/95400 https://audee.jp/voice/show/95783

オフィシャルページの​アプデに​ついて

約​1年前、​以下の​記事で、​Vim-jpラジオの​オフィシャルサイトを​SvelteKitで​作成した​ことを​紹介しました。

/blog/2024-07-22-zenn-e1192d17156a2d-ja

当時から​Svelteの​バージョンアップとともに​どのように​内部の​コードが​変化したかを​軽く​振り返ってみたいと​思います。

Svelte5正式版リリース

2024年10月、​Svelte5の​正式版が​リリースされました。 我々も​それに​合わせて​Svelteの​バージョンを​5に​上げました。

https://github.com/vim-jp-radio/LP/pull/324

7月からの​大きな​変更点は​なかったので、​安心して​アップデートできました。

12月の​大型アップデート

SvelteKitの​Reactivity APIの​変更

https://github.com/vim-jp-radio/LP/issues/338

2024年12月、​Advent of Svelteの​期間中に、​SvelteKitの​Reactivity APIが​Storeベースから​Runeベースに​変更されました。 これに​より、​Svelte5の​Syntaxと​相性の​良い​実装が​可能に​なりました。

例えば、prefersReducedMotionと​いう​Runeが​提供され​始めました。​これは​ユーザーの​設定に​基づいて​アニメーションの​動作を​制御する​ための​ものです。 vim-jpラジオの​ページでは、prefersReducedMotionfalseの​場合は、​背景の​アニメーションを​無効に​するように​実装しています。

それまで、prefersReducedMotionは​独自に​実装していましたが、​公式から​提供されるようになったので​採用しました。

https://svelte.dev/docs/svelte/svelte-motion#prefersReducedMotion https://github.com/vim-jp-radio/LP/pull/343

また、innerWidthinnerHeightなどの​ウィンドウサイズを​取得する​ための​Runeも​追加されました。 それまでは​ <svelte:window> に​値を​バインドする​ことで​値を​取得していましたが、​これも​Runeを​使う​ことで​より​簡潔に​書けるようになりました。 https://svelte.dev/docs/svelte/svelte-reactivity-window https://github.com/vim-jp-radio/LP/pull/341

clsx風の​Class API

また、​Svelte5では、class属性の​バインディングが​より​強力に​なりました。 clsxや​Astroのclass:listのように、​オブジェクトや​配列を​使って​クラス名を​動的に​制御できるようになりました。 これに​より​可読性、​記述性が​向上しました。 特に​条件付きで​クラスを​適用する​場合に​便利です。

https://svelte.dev/docs/svelte/class https://github.com/vim-jp-radio/LP/pull/346

Attachments

2025年5月、​Svelteの​Attachments機能が​リリースされました。 これは、​HTMLや​Svelte Componentが​マウント/アンマウントされる​際に、​特定の​処理を​実行できる​機能です。 React19ではrefへ​直接関数を​渡すことができるようになりましたが、​それに​よく​似た​機能です。

<script lang="ts">
	import type { Attachment } from 'svelte/attachments';

	const myAttachment: Attachment = (element) => {
		console.log(element.nodeName); // 'DIV'

		return () => {
			console.log('cleaning up');
		};
	};
</script>

<div {@attach myAttachment}>...</div>

以前から​Svelteにはuse:ディレクティブが​存在していましたが、​Attachmentsは​より​柔軟で​強力な​機能です。

vim-jpラジオの​ページでは、​背景の​アニメーションを​表示する​canvas要素に​対して、​Attachmentsを​使って​アニメーションの​初期化や​クリーンアップを​行っています。 それまでは​ $effect を​使って​コンポーネント全体の​ライフサイクルに​依存していましたが、​canvas要素に​対して​Attachmentsを​使う​ことで、​実装が​より​明確に​なりました。 また、​Attachmentsは​DOMが​マウントされる​タイミングで​実行される​ため、​JSが​読み込まれているか​どうかの​チェックも​不要に​なりました。 実際に​以下の​コードを​見比べてみると、​定義する​変数が​減り、​Component全体の​行数も​減っている​ことが​わかります。

https://github.com/vim-jp-radio/LP/pull/354/files#diff-fd133074abe47babd99d30f37ba97dead318cf5f8f141747cedf1f3c0cedc90b

Before: https://github.com/vim-jp-radio/LP/blob/952ff425cfa098abc5ade08a8b0f2158a0a11be4/src/lib/Background/Background.svelte#L21-L81

After: https://github.com/vim-jp-radio/LP/blob/13f083ac356c93640eb7a122195ce108e928efbf/src/lib/Background/Background.svelte#L22-L68

今後も​積極的に​Attachmentsを​活用していきたいと​思います。

終わりに

この​記事は​vimの​話ではなく、​Svelte5の​話を​中心に​書きました。 見た目は​7月から​一切​変わっていませんが、​内部の​コードは​少しずつ​進化しています。 また、​それに​伴い、​表示速度も​ほんの​少しずつ向上しています。

vim-jpラジオは​毎週月曜12時に​配信されており、​ゲストを​交えた​楽しい​内容に​なっています。 ぜひ聞いてみてください! そして​感想を​ブログや​SNSで​共有していただけると​嬉しいです。

comment on bluesky / twitter
CC BY-NC-SA 4.0 2022-PRESENT © ryoppippi