SvelteKit + microCMS でブログサイト作ってみた話
個人的アウトプットのために自分のブログサイトが欲しくエンジニアとして折角なので自分で作ってみた。
技術選定
- SvelteKit
- microCMS
フロントエンドは以前から SvelteKitが気になってたので練習がてらに選定。
バックエンドはフリーの範囲でまた管理画面を作ったりするのがめんどくさかったので microCMSを採用。
SvelteKitについて
Svelteが個人的には理解しやすい。
SvelteKitもNextやNuxtを触ったことあれば似たような File System なのでハードルは低く学びやすいと思う。
Svelte 公式: https://svelte.dev/
SvelteKit 公式: https://kit.svelte.dev/
Svelte fileの中に Script, HTML, Style が記入できる
個人的に Svelte は 1つのファイルにロジック、HTML, Style を記入できるので、コンポネントでのスコープ管理が凄く楽に感じた。
特に style は global関数を使用しない限り、そのファイル内にスコープが閉じられる (正確には <header class="s-c1MG4BWNDc59">
というようなIDがふられる) ので他のファイルのスタイルやCSSを気にしないでスタイルかけるのが良い。
<script lang="ts">
export let title: string;
</script>
<header>
{title}
</header>
<style>
/* scope は Header.svelte に絞られるのでグローバルに反映されない */
header {
background: #CCCCCC;
}
</style>
Domの中で "{prop}"でアクセスできる
地味に嬉しかったのが <div class="{propName}">
で props を参照できることだ。
Reactだと <div class={`${propName}`}>
のように ${} で囲う必要があり地味にめんどくさかった。
storeが使いやすい
GlobalなContextは svelte/store があり、別のコンポネントとかからも共有して使用でき、記述も Reduxとか Recoilなどよりも簡単で使いやすい。
import { writable } from 'svelte/store';
const count = writable(0);
count.subscribe((value) => {
console.log(value);
}); // logs '0'
count.set(1); // logs '1'
count.update((n) => n + 1); // logs '2'
const setCount = (value: number) => count.set(1);
// subscribeや関数をexportして使いまわすのが良さそう
export {
count: count.subscribe,
setCount
}
公式: https://svelte.dev/docs/svelte-store
SvelteとSvelteKitについてはまだまだ良い点、悪い点もあるので今後のブログでまとめていく。
microCMS
初めて使ったけど 結論 headless CMS としては使いやすい。
APIを独自で作成できるのでブログ以外にも在庫管理や商品管理とかにも使えそう。
テンプレートからAPI作成が可能
APIを独自に作るのだがすでにいくつかテンプレートも用意されてるのでブログであればすぐに作成が可能。
作成すると Blog と Category のAPIが作成された。
APIのスキーマを自分で簡単にカスタマイズできるのも魅力ポイント。
データの作成も見やすいUIでブログを書くのに支障はないくらい。
提供される API 叩けば簡単に fetch できる。
microCMSとSvelteKitはプロダクトでも使っていきたい
今回個人的に触ってみてかなり好感だった。
最近 React, Next がより複雑化、パッケージが肥大化してきててよりライトなものに変更したかったので SvelteKitはピッタリだった。
会社でもProductとして採用して現在使用しているが使いやすく個人的には Next より好きだ。
microCMSも課金すれば セキュリティー周りやより高度のAPIの作成もできるので、headless CMS 作る際には良い選択肢になると思う。
Wordpress HeadlessCMSよりは全然使いやすいと思う。