sveltia-cms について
静的サイトプロジェクトに Sveltia CMS を組み込むためのスキルです。リポジトリ上のコンテンツを管理するチーム向けに、共通の導入手順、設定、認証、移行、問題解決を扱います。
主な機能
- 01静的サイト向け CMS 導入ガイド
- 02YAML・TOML の設定
- 03テキストファイルの raw 編集
- 04GitHub OAuth の設定手順
- 05設定とエラーのトラブルシューティング
活用シーン
- 01静的サイトプロジェクトへの CMS 導入
- 02Decap または Netlify CMS からの移行
- 03JSON、YAML、CSV、テキストファイルの編集
- 04GitHub ベースのコンテンツ編集設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jezweb/ claude-skills --skill sveltia-cmsインストール後、Claude Code で/sveltia-cmsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.md.claude-plugin/plugin.jsonreferences/migration-from-decap.mdscripts/check-versions.shinit-sveltia.shtemplates/11ty/config.ymlindex.htmltemplates/cloudflare-workers/setup-guide.mdtemplates/collections/blog-posts.ymldocs-pages.ymllanding-pages.ymltemplates/hugo/config.ymlindex.htmltemplates/jekyll/config.ymlindex.html詳細
Sveltia CMS スキル
静的サイトプロジェクトに Sveltia CMS を統合するための包括的なスキルです。
現在のバージョン
- @sveltia/cms:0.128.5(2026年1月確認)
- ステータス:パブリックベータ(v1.0 は2026年初頭にリリース予定)
- 成熟度:本番環境で使用可能(前身から270件以上の問題を解決済み)
このスキルを使う場面
✅ 次の場合は Sveltia CMS を使います:
- Git ベースのワークフローを希望する場合(コンテンツをリポジトリ内の Markdown/YAML/TOML/JSON として管理)
- 軽量なソリューションが必要な場合(競合製品の1.5~2.6 MBに対して500 KB未満)
- Decap/Netlify CMS から移行する場合(そのまま置き換え可能で、変更は1行)
- 技術に詳しくない編集者が Git の知識なしでアクセスする必要がある場合
❌ 次の場合は Sveltia CMS を使わないでください:
- リアルタイムの共同編集が必要な場合(複数のユーザーが同時に編集)—代わりに Sanity、Contentful、または TinaCMS を使います
- ビジュアルなページ作成が必要な場合(ドラッグ&ドロップ)—代わりに Webflow、Builder.io を使います
- React 専用のビジュアル編集が必要な場合—代わりに TinaCMS を使います
破壊的変更と更新(v0.105.0+)
v0.127.0(2025年12月29日)- slug_length の非推奨化
非推奨:コレクションオプションの slug_length は非推奨となり、v1.0 で削除されます。
移行:
# ❌ Deprecated (pre-v0.127.0)
collections:
- name: posts
slug_length: 50
# ✅ New (v0.127.0+)
slug:
maxlength: 50
予定:Sveltia CMS 1.0 で削除されます(2026年初頭を予定)。
ソース:リリース v0.127.0
v0.120.0(2025年11月24日)- 作成者テンプレートタグ
新機能:非表示ウィジェットが作成者テンプレートタグに対応しました:
{{author-email}}- サインイン中のユーザーのメールアドレス{{author-login}}- サインイン中のユーザーのログイン名{{author-name}}- サインイン中のユーザーの表示名
使用方法:
fields:
- label: Author Email
name: author_email
widget: hidden
default: '{{author-email}}'
コミットメッセージテンプレートでも {{author-email}} タグを使用できます。
v0.119.0(2025年11月16日)- TOML 設定のサポート
新機能:設定ファイルを TOML 形式で記述できるようになりました(従来は YAML のみ)。
移行:
# admin/config.toml (NEW)
[backend]
name = "github"
repo = "owner/repo"
branch = "main"
media_folder = "static/images/uploads"
public_folder = "/images/uploads"
推奨:ツールのサポートがより充実しているため、引き続き YAML を推奨します。
v0.118.0(2025年11月15日)- TypeScript の破壊的変更
破壊的変更:Netlify/Decap CMS との互換性のため、SiteConfig エクスポートの名前が CmsConfig に変更されました。
移行:
// ❌ Old (v0.117.x)
import type { SiteConfig } from '@sveltia/cms';
// ✅ New (v0.118.0+)
import type { CmsConfig } from '@sveltia/cms';
const config: CmsConfig = {
backend: { name: 'github', repo: 'owner/repo' },
collections: [/* ... */],
};
影響:TypeScript ユーザーのみ。型のインポートに破壊的変更があります。
v0.117.0(2025年11月14日)- バリデーションの強化
新機能:
- TypeScript から直接インポートできる
CmsConfig型をエクスポート - コレクション名、フィールド型、リレーション参照の設定バリデーションを強化
- 無効な設定に対するエラーメッセージを改善
v0.115.0(2025年11月5日)- フィールドごとのメディアフォルダー
新機能:コレクション単位だけでなく、フィールド単位で media_folder を上書きできます。
使用方法:
collections:
- name: posts
label: Blog Posts
folder: content/posts
media_folder: static/images/posts # Collection-level default
fields:
- label: Featured Image
name: image
widget: image
media_folder: static/images/featured # ← Field-level override
public_folder: /images/featured
- label: Author Avatar
name: avatar
widget: image
media_folder: static/images/avatars # ← Another override
public_folder: /images/avatars
用途:同じコレクション内で、画像の種類ごとに異なるメディアフォルダーを使用します。
v0.113.5(2025年10月27日)- ロゴ設定の非推奨化
非推奨:logo_url オプションは非推奨になりました。logo.src に移行してください。
移行:
# ❌ Deprecated
logo_url: https://yourdomain.com/logo.svg
# ✅ New (v0.113.5+)
logo:
src: https://yourdomain.com/logo.svg
v0.105.0(2024年9月15日)- セキュリティに関する破壊的変更
破壊的変更:Markdown ウィジェットの sanitize_preview のデフォルト値が true に変更されました(XSS 防止)。
影響:
- v0.105.0 より前:
sanitize_preview: false(Netlify/Decap CMS との互換性はありますが、XSS に対して脆弱) - v0.105.0 以降:
sanitize_preview: true(デフォルトで安全)
移行:
collections:
- name: posts
fields:
- label: Body
name: body
widget: markdown
sanitize_preview: false # ← Add ONLY if you trust all CMS users
推奨:プレビューの不具合が解消され、かつすべての CMS ユーザーを完全に信頼できる場合を除き、デフォルト(true)のままにしてください。
設定オプション
グローバルなスラッグオプション(v0.128.0+)
スラッグの生成動作をグローバルに設定します:
slug:
encoding: unicode-normalized
clean_accents: false
sanitize_replacement: '-'
lowercase: true # Default: convert to lowercase (v0.128.0+)
maxlength: 50 # Default: unlimited (v0.127.0+)
lowercase(v0.128.0+):スラッグの大文字・小文字を元のまま保持するには、false に設定します(例:「myblogpost」ではなく「MyBlogPost」)。
用途:大文字・小文字が区別される、大文字・小文字混在の URL またはファイル名。
ソース:リリース v0.128.0、GitHub Issue #594
テキストファイルの raw 形式(v0.126.0+)
新しい raw 形式を使うと、フロントマターなしでファイル(CSV、JSON、YAML、プレーンテキスト)を編集できます。ウィジェットタイプが code、markdown、richtext、または text の body フィールドを1つだけ指定する必要があります。
ユースケース:
- 設定ファイル(JSON、YAML)を編集する
- CSV データを管理する
- プレーンテキストファイルを編集する
設定:
collections:
- name: config
label: Configuration Files
files:
- label: Site Config
name: site_config
file: config.json
format: raw # ← NEW format type
fields:
- label: Config
name: body
widget: code
default_language: json
制限事項:
- フィールドは1つだけ指定できます(名前は
bodyにする必要があります) - ウィジェットは
code、markdown、richtext、またはtextにする必要があります - フロントマターの解析は行われません
ソース:リリース v0.126.0
Number フィールドの文字列エンコーディング(v0.125.0+)
Number フィールドに新しい value_type オプションが追加され、int/string と float/string を指定すると、フロントマターで数値ではなく文字列として保存できます。
ユースケース:静的サイトジェネレーターやスキーマによっては、数値を文字列として保存する必要があります(例:age: 25 ではなく age: "25")。
設定:
fields:
- label: Age
name: age
widget: number
value_type: int/string # Saves as "25" not 25
- label: Price
name: price
widget: number
value_type: float/string # Saves as "19.99" not 19.99
ソース:リリース v0.125.0、GitHub Issue #574
URL クエリによるエディターペインのロケール指定(v0.126.0+)
URL クエリパラメーター ?_locale=fr を使ってエディターのロケールを上書きし、特定のロケール用の編集リンクを取得できます。
ユースケース:翻訳者やコンテンツ編集者向けに、特定の言語の直接編集リンクを生成します。
例:
https://yourdomain.com/admin/#/collections/posts/entries/my-post?_locale=fr
ソース:リリース v0.126.0、GitHub Issue #585
Richtext フィールドタイプのエイリアス(v0.124.0+)
Decap CMS の用語に合わせるため、markdown ウィジェットのエイリアスとして richtext が追加されました。どちらも同じように動作します。
設定:
fields:
- label: Body
name: body
widget: richtext # ← NEW alias for markdown
今後の予定:richtext フィールドタイプでの HTML 出力に対応する予定です。
ソース:リリース v0.124.0
セットアップのパターン(フレームワーク非依存)
すべてのフレームワークで同じパターンを使用します:
-
public/static フォルダーに admin ディレクトリを作成する:
- Hugo:
static/admin/ - Jekyll:
admin/ - 11ty:
admin/(パススルーコピーを設定) - Astro:
public/admin/ - Next.js:
public/admin/
- Hugo:
-
admin/index.html を作成する:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Content Manager</title> </head> <body> <script src="https://unpkg.com/@sveltia/[email protected]/dist/sveltia-cms.js" type="module"></script> </body> </html> -
admin/config.yml を作成する:
backend: name: github repo: owner/repo branch: main base_url: https://your-worker.workers.dev # OAuth proxy (required) media_folder: static/images/uploads # Framework-specific path public_folder: /images/uploads collections: - name: posts label: Blog Posts folder: content/posts create: true fields: - { label: 'Title', name: 'title', widget: 'string' } - { label: 'Date', name: 'date', widget: 'datetime' } - { label: 'Body', name: 'body', widget: 'markdown' } -
管理画面にアクセスする:
http://localhost:<port>/admin/
フレームワーク固有の詳細:完全な例については templates/ ディレクトリを参照してください。
認証:Cloudflare Workers OAuth(推奨)
Cloudflare Workers を使う理由:高速で、無料プランが利用でき、どのデプロイプラットフォームでも動作します。
手順:
-
Worker をデプロイする:
git clone https://github.com/sveltia/sveltia-cms-auth cd sveltia-cms-auth npm install npx wrangler deploy -
GitHub で OAuth アプリを登録する:
- https://github.com/settings/developers にアクセスする
- 「New OAuth App」をクリックする
- Authorization callback URL:
https://your-worker.workers.dev/callback - Client ID と Client Secret を保存する
-
Worker の環境変数を設定する:
npx wrangler secret put GITHUB_CLIENT_ID # Paste your Client ID npx wrangler secret put GITHUB_CLIENT_SECRET # Paste your Client Secret -
CMS の設定を更新する:
backend: name: github repo: owner/repo branch: main base_url: https://your-worker.workers.dev # ← Add this line -
認証をテストする:
/admin/を開く- 「Login with GitHub」をクリックする
- GitHub にリダイレクトされ、認証後に CMS に戻ることを確認する
代替手段:Vercel サーバーレス関数については templates/vercel-serverless/ を参照してください。
よくあるエラーと解決策
このスキルにより、Sveltia CMS のセットアップ時によく発生する10個のエラーを防げます。
1. ❌ OAuth 認証の失敗
エラーメッセージ:
- 「Error: Failed to authenticate」
- GitHub ログインではなく
https://api.netlify.com/authにリダイレクトされる
症状:
- ログインボタンをクリックしても何も起きない
- 認証ポップアップがすぐに閉じる
原因:
- バックエンド設定に
base_urlがない - OAuth プロキシ URL が正しくない
- GitHub OAuth のコールバック URL が間違っている
解決策:
手順1:config.yml に base_url があることを確認する:
backend:
name: github
repo: owner/repo
branch: main
base_url: https://your-worker.workers.dev # ← Must be present
手順2:GitHub OAuth アプリのコールバックを確認する:
- 次のように設定する:
https://your-worker.workers.dev/callback - 次のようには設定しない:
https://yourdomain.com/callback
手順3:Worker に直接アクセスしてテストする:
curl https://your-worker.workers.dev/health
# Should return: {"status": "ok"}
2. ❌ TOML フロントマターのエラー
エラーメッセージ:
- 「Parse error: Invalid TOML」
+++区切り文字がないファイル
症状:
- CMS で作成した新しいファイルを Hugo が解析できない
- 本文の区切りより上にコンテンツが表示される
原因:
- ベータ版では Sveltia の TOML 生成に不具合があります
- 同じコレクション内で TOML と YAML が混在しています
解決策:
TOML ではなく YAML を使用してください(推奨):
collections:
- name: posts
folder: content/posts
format: yaml # or md (Markdown with YAML frontmatter)
# NOT: format: toml
TOML を使用する必要がある場合:
- CMS の保存後に区切り文字を手動で修正します
- pre-commit フックを使用して TOML を検証します
- ベータ版の修正を待ちます(GitHub の issue を確認してください)
3. ❌ YAML 解析エラー
エラーメッセージ:
- 「YAML parse error: Invalid YAML」
- 「Error: Duplicate key 'field_name'」
症状:
- 既存の投稿を CMS で読み込めない
- CMS に空のフィールドが表示される
原因:
- Sveltia は YAML の書式に関して Hugo/Jekyll より厳格です
- インデントが正しくない、またはスマート引用符が使われています
解決策:
ステップ 1: YAML を検証する:
pip install yamllint
find content -name "*.md" -exec yamllint {} \;
ステップ 2: よくある修正方法:
問題: スマート引用符
# ❌ Bad - smart quotes from copy-paste
title: "Hello World" # Curly quotes
# ✅ Good - straight quotes
title: "Hello World" # Straight quotes
ステップ 3: yamlfmt で自動修正する:
go install github.com/google/yamlfmt/cmd/yamlfmt@latest
find content -name "*.md" -exec yamlfmt {} \;
4. ❌ CMS にコンテンツが一覧表示されない
エラーメッセージ:
- 「No entries found」
- 「Failed to load entries」
症状:
- 管理画面は読み込まれるが、コンテンツが表示されない
- リポジトリにファイルが存在するのに、CMS から見えない
原因:
- フォーマットが一致していません(設定では TOML を想定しているが、ファイルは YAML)
- フォルダーパスが正しくありません
解決策:
ステップ 1: フォルダーパスを確認する:
# Config says:
collections:
- name: posts
folder: content/posts # Expects files here
# Check actual location:
ls -la content/posts # Files must exist here
ステップ 2: 実際のファイルに合わせてフォーマットを設定する:
# If files are: content/posts/hello.md with YAML frontmatter
collections:
- name: posts
folder: content/posts
format: yaml # or md (same as yaml for .md files)
5. ❌ 「SVELTIA is not defined」エラー
エラーメッセージ:
- コンソールエラー:
Uncaught ReferenceError: SVELTIA is not defined
症状:
- 管理ページが白い画面になる
原因:
type="module"属性がありません
解決策:
正しい script タグを使用する:
<script src="https://unpkg.com/@sveltia/cms/dist/sveltia-cms.js" type="module"></script>
<script src="https://unpkg.com/@sveltia/cms/dist/sveltia-cms.js"></script>
バージョンを固定する(推奨):
<script src="https://unpkg.com/@sveltia/[email protected]/dist/sveltia-cms.js" type="module"></script>
6. ❌ /admin が 404 になる
エラーメッセージ:
/admin/にアクセスすると「404 Not Found」
症状:
- ローカルでは動作するが、本番環境では動作しない
原因:
- フレームワークに適した場所に Admin ディレクトリがありません
解決策:
フレームワーク別の修正方法:
Hugo: static/ 内のファイルは自動的にコピーされます
Jekyll: _config.yml に追加します:
include:
- admin
11ty: .eleventy.js に追加します:
module.exports = function(eleventyConfig) {
eleventyConfig.addPassthroughCopy('admin');
};
Astro: public/ 内のファイルは自動的にコピーされます
7. ❌ 画像をアップロードできない(HEIC 形式)
エラーメッセージ:
- 「Unsupported file format」
症状:
- iPhone の写真をアップロードできない
原因:
- HEIC 形式はブラウザーでサポートされていません
解決策:
iPhone の場合:
- 「設定」>「カメラ」>「フォーマット」>「互換性優先」
- これにより写真は HEIC ではなく JPEG で保存されます
または、画像最適化を有効にします:
media_libraries:
default:
config:
max_file_size: 10485760 # 10 MB
transformations:
raster_image:
format: webp # Auto-converts to WebP
quality: 85
8. ❌ 日時ウィジェットのフォーマットが厳格
エラーメッセージ:
- データがひそかに失われる(エラーは表示されない)
- CMS で日付フィールドが空白になる
症状:
- 既存の日付がある投稿を編集すると、日付が空白で表示される
- 保存すると日付が空の値で上書きされる
- Hugo が投稿を「未来」と判定し、ビルドをスキップする
原因:
- デフォルトの日時ウィジェットは、タイムゾーンサフィックスのないタイムスタンプを出力します
formatを指定すると、Sveltia は厳格になり、異なる形式の既存エントリーは空白で表示されます- タイムゾーンがない場合、Hugo は UTC と推定するため、タイムゾーンの問題が発生します
⚠️ 重要: フォーマットの厳格性に関する警告(v0.124.1 以降)
format オプションを指定すると、Sveltia は厳格になります:
- 異なる形式の既存エントリーは空白で表示されます
- 保存すると空の値で上書きされます(データがひそかに失われます)
- エラーメッセージは表示されません
解決策:
オプション 1: picker_utc を使用する(推奨)
fields:
- label: Date
name: date
widget: datetime
picker_utc: true # Most flexible - outputs with timezone
オプション 2: タイムゾーンを含む format を指定する(リスクあり。上記の警告を参照)
fields:
- label: Date
name: date
widget: datetime
format: "YYYY-MM-DDTHH:mm:ss.SSSZ" # Only if ALL existing dates match this format
オプション 3: Hugo がタイムゾーンなしの値を受け入れるよう設定する
# config.toml
[frontmatter]
date = [":default", ":fileModTime"]
予防策:
- 日付形式が混在している場合は
formatを指定しないでください formatを追加する前に、すべての日付の形式を統一してください- 代わりに
picker_utc: trueを使用してください(より柔軟です)
出典: GitHub Issue #565。v0.126.0 で修正済み(日付パーサーは改善されましたが、フォーマットの厳格性は残っています)
9. ❌ GDPR 違反:Google Fonts CDN
エラーメッセージ:
- エラーは表示されません(プライバシーコンプライアンスの問題)
症状:
- プライバシーを重視するサイトで Sveltia を使用できません
- EU の公共部門で採用できません
- GDPR に準拠していません
原因:
- Sveltia はユーザーの同意なしに、Google CDN から Google Fonts と Material Symbols を読み込みます
- Google はフォントの使用状況を追跡し、IP アドレスを収集します
- EU のデータ保護法に違反します
⚠️ 影響:EU の公共部門およびプライバシーを重視するサイトにとって、導入を妨げる問題です
解決策(Vite プラグイン — 推奨):
// vite.config.ts
import { defineConfig, type Plugin } from 'vite'
function ensureGDPRCompliantFonts(): Plugin {
const fontsURLRegex = /fonts\.googleapis\.com\/css2/g
const replacement = 'fonts.bunny.net/css'
return {
name: 'gdpr-compliant-fonts',
enforce: 'post',
transform(code) {
if (fontsURLRegex.test(code)) {
return code.replaceAll(fontsURLRegex, replacement)
}
},
}
}
export default defineConfig({
plugins: [ensureGDPRCompliantFonts()],
})
代替案:
オプション 2:Bunny Fonts(Google Fonts の 1:1 置き換え)
- fonts.googleapis.com の代わりに https://fonts.bunny.net を使用します
- EU ベースで、GDPR に準拠しています
- Google Fonts と同じ API です
オプション 3:セルフホストフォント
@fontsourcenpm パッケージを使用します- フォントをアプリケーションにバンドルします
- 外部へのリクエストはありません
メンテナーの回答:
- 問題を認識しました
- システムフォントのオプションを追加する予定です(v1.0 以降)
- Sveltia 自体はデータを収集しません(懸念点はフォントのみです)
10. ❌ CORS / COOP ポリシーエラー
エラーメッセージ:
- "Authentication Aborted"
- "Cross-Origin-Opener-Policy blocked"
症状:
- OAuth ポップアップが開いた後、閉じます
原因:
- 厳格な
Cross-Origin-Opener-Policyヘッダーが OAuth をブロックします
解決策:
Cloudflare Pages(_headers ファイル):
/*
Cross-Origin-Opener-Policy: same-origin-allow-popups
# NOT: same-origin (this breaks OAuth)
Netlify(_headers ファイル):
/*
Cross-Origin-Opener-Policy: same-origin-allow-popups
Vercel(vercel.json):
{
"headers": [
{
"source": "/(.*)",
"headers": [
{
"key": "Cross-Origin-Opener-Policy",
"value": "same-origin-allow-popups"
}
]
}
]
}
修正済みの問題(過去の参考情報)
これらの問題は以前のバージョンに存在していましたが、現在は修正済みです。参考情報として記載しています。
✅ 括弧を含むパスでエントリーの読み込みに失敗する(v0.128.1 で修正)
問題:path オプションに括弧 () が含まれていると、Sveltia CMS が既存のエントリーを読み込めませんでした。これは、app/(content)/(writing)/ のようなルートグループを使用する Next.js/Nextra ユーザーに影響しました。
症状(v0.128.1 より前):
- 新しいエントリーの作成は機能します
- 既存のエントリーの読み込み/一覧表示は、エラーなしで失敗します
- ファイルが存在するにもかかわらず、CMS に「エントリーが見つかりません」と表示されます
失敗する例:
collections:
- name: pages
folder: app/(pages)
path: "{{slug}}/page" # ← Failed to load existing entries
extension: mdx
状況:v0.128.1 で修正済み(2026 年 1 月 13 日)
✅ ルートフォルダーのコレクションで GitHub バックエンドに問題が発生する(v0.125.0 で修正)
問題:folder: ""、folder: "."、または folder: "/" を指定したコレクションで、GitHub バックエンド経由で新しいエントリーを作成できませんでした。GraphQL クエリが相対パスではなく、/ で始まる絶対パスを誤って構築していました。
症状(v0.125.0 より前):
- ブラウザーの File API 経由でローカルに実行すると機能します
- GitHub バックエンドでは失敗します(GraphQL エラー)
- 先頭のスラッシュによって GraphQL のミューテーションが失敗します
失敗する例:
collections:
- name: root-pages
folder: "" # or "." or "/"
# ← Broke when creating entries via GitHub backend
ユースケース:リポジトリーのルートにコンテンツを保存する VitePress などのフレームワーク。
状況:v0.125.0 で修正済み(2025 年 12 月 20 日)
Decap CMS からの移行
Sveltia CMS は Decap CMS のそのまま置き換え可能な製品です。
ステップ 1:script タグを更新します(1 行だけ変更):
<script src="https://unpkg.com/decap-cms@^3.0.0/dist/decap-cms.js"></script>
<script src="https://unpkg.com/@sveltia/[email protected]/dist/sveltia-cms.js" type="module"></script>
ステップ 2:既存の config.yml をそのまま使用します(変更は不要です)
ステップ 3:ローカルでテストします(ログイン、コンテンツ一覧表示、編集、保存を確認します)
**これだけです!**コンテンツ、コレクション、ワークフローは変更されません。
サポート対象外:
- Git Gateway バックエンド(パフォーマンス上の理由による)
- Azure バックエンド(今後追加される可能性があります)
回避策:代わりに Cloudflare Workers または Vercel OAuth プロキシを使用してください。
バンドルされたリソース
テンプレート
- hugo/ - Hugo ブログの完全なセットアップ
- jekyll/ - Jekyll サイトの設定
- 11ty/ - Eleventy ブログのセットアップ
- astro/ - Astro コンテンツコレクション
- cloudflare-workers/ - OAuth プロキシの実装
- vercel-serverless/ - Vercel 認証関数
- collections/ - すぐに使えるコレクションのパターン
参考資料
- common-errors.md - 拡張エラートラブルシューティング
- migration-from-decap.md - 完全な移行ガイド
- cloudflare-auth-setup.md - ステップバイステップの OAuth セットアップ
- config-reference.md - config.yml の完全なドキュメント
スクリプト
- init-sveltia.sh - 新規プロジェクト向けの自動セットアップ
- deploy-cf-auth.sh - Cloudflare Workers OAuth のデプロイ
公式ドキュメント
- ドキュメントサイト: https://sveltiacms.app/en/docs (活発に開発中 - 一部のセクションは不完全な場合があります)
- GitHub: https://github.com/sveltia/sveltia-cms
- OAuth Worker: https://github.com/sveltia/sveltia-cms-auth
- npm パッケージ: https://www.npmjs.com/package/@sveltia/cms
- ディスカッション: https://github.com/sveltia/sveltia-cms/discussions
注記: 公式ドキュメントサイトは現在活発に開発されています。GitHub README は一部のトピックにおいて依然として有用な代替手段です。
トークン効率
推定削減量: 65~70% (約 6,300 トークン削減)
スキルなしの場合 (約 9,500 トークン):
- フレームワークのセットアップ試行錯誤: 2,500 トークン
- OAuth 設定の試行: 2,500 トークン
- エラートラブルシューティング: 2,500 トークン
- デプロイ設定: 2,000 トークン
スキルありの場合 (約 3,200 トークン):
- スキルの読み込み (SKILL.md): 2,000 トークン
- テンプレートの選択: 400 トークン
- プロジェクト固有の調整: 800 トークン
防止されるエラー
このスキルは 10 件の一般的なエラー を防止します (100% の防止率):
- ✅ OAuth 認証の失敗
- ✅ TOML フロントマター生成のバグ
- ✅ YAML パースエラー (厳格なバリデーション)
- ✅ コンテンツが CMS に一覧表示されない
- ✅ 「SVELTIA is not defined」エラー
- ✅ /admin ページの 404
- ✅ 画像アップロードの失敗 (HEIC 形式)
- ✅ Datetime ウィジェットの形式の厳格さ / タイムゾーンの問題
- ✅ GDPR 違反 (Google Fonts CDN)
- ✅ CORS / COOP ポリシーエラー
最終更新: 2026-01-21 スキルバージョン: 2.1.0 Sveltia CMS バージョン: 0.128.5 (Beta) ステータス: 本番環境対応済み、v1.0 GA は 2026 年初頭に予定 変更点: 6 つの新しい設定オプション (slug の小文字化、raw 形式、数値文字列エンコーディング、ロケール URL パラメータ、richtext エイリアス、Gemini 2.5 Flash-Lite サポート) を追加、datetime エラーに形式の厳格さに関する警告を追加、GDPR 向け Google Fonts の回避策を追加、修正済みの過去の 2 件の問題を文書化、slug_length オプションを非推奨化