mcpField
S
sveltia-cms

sveltia-cms

github.com/jezweb開発1.1k302 回インストール3 週間前に更新
リポジトリ

sveltia-cms について

静的サイトプロジェクトに Sveltia CMS を組み込むためのスキルです。リポジトリ上のコンテンツを管理するチーム向けに、共通の導入手順、設定、認証、移行、問題解決を扱います。

主な機能

  1. 01静的サイト向け CMS 導入ガイド
  2. 02YAML・TOML の設定
  3. 03テキストファイルの raw 編集
  4. 04GitHub OAuth の設定手順
  5. 05設定とエラーのトラブルシューティング

活用シーン

  1. 01静的サイトプロジェクトへの CMS 導入
  2. 02Decap または Netlify CMS からの移行
  3. 03JSON、YAML、CSV、テキストファイルの編集
  4. 04GitHub ベースのコンテンツ編集設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jezweb/claude-skills --skill sveltia-cms

インストール後、Claude Code で/sveltia-cmsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
.claude-plugin/
plugin.json
references/
migration-from-decap.md
scripts/
check-versions.sh
init-sveltia.sh
templates/11ty/
config.yml
index.html
templates/cloudflare-workers/
setup-guide.md
templates/collections/
blog-posts.yml
docs-pages.yml
landing-pages.yml
templates/hugo/
config.yml
index.html
templates/jekyll/
config.yml
index.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


セットアップのパターン(フレームワーク非依存)

すべてのフレームワークで同じパターンを使用します:

  1. public/static フォルダーに admin ディレクトリを作成する:

    • Hugo:static/admin/
    • Jekyll:admin/
    • 11ty:admin/(パススルーコピーを設定)
    • Astro:public/admin/
    • Next.js:public/admin/
  2. 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>
    
  3. 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' }
    
  4. 管理画面にアクセスする: http://localhost:<port>/admin/

フレームワーク固有の詳細:完全な例については templates/ ディレクトリを参照してください。


認証:Cloudflare Workers OAuth(推奨)

Cloudflare Workers を使う理由:高速で、無料プランが利用でき、どのデプロイプラットフォームでも動作します。

手順:

  1. Worker をデプロイする:

    git clone https://github.com/sveltia/sveltia-cms-auth
    cd sveltia-cms-auth
    npm install
    npx wrangler deploy
    
  2. GitHub で OAuth アプリを登録する:

    • https://github.com/settings/developers にアクセスする
    • 「New OAuth App」をクリックする
    • Authorization callback URL:https://your-worker.workers.dev/callback
    • Client ID と Client Secret を保存する
  3. Worker の環境変数を設定する:

    npx wrangler secret put GITHUB_CLIENT_ID
    # Paste your Client ID
    
    npx wrangler secret put GITHUB_CLIENT_SECRET
    # Paste your Client Secret
    
  4. CMS の設定を更新する:

    backend:
      name: github
      repo: owner/repo
      branch: main
      base_url: https://your-worker.workers.dev  # ← Add this line
    
  5. 認証をテストする:

    • /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 を使用する必要がある場合:

  1. CMS の保存後に区切り文字を手動で修正します
  2. pre-commit フックを使用して TOML を検証します
  3. ベータ版の修正を待ちます(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"]

予防策:

  1. 日付形式が混在している場合は format を指定しないでください
  2. format を追加する前に、すべての日付の形式を統一してください
  3. 代わりに 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:セルフホストフォント

  • @fontsource npm パッケージを使用します
  • フォントをアプリケーションにバンドルします
  • 外部へのリクエストはありません

メンテナーの回答:

  • 問題を認識しました
  • システムフォントのオプションを追加する予定です(v1.0 以降)
  • Sveltia 自体はデータを収集しません(懸念点はフォントのみです)

出典:GitHub Issue #443


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 Issue #596


✅ ルートフォルダーのコレクションで 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 日)

出典:GitHub Issue #580


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 のデプロイ
公式ドキュメント

注記: 公式ドキュメントサイトは現在活発に開発されています。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% の防止率):

  1. ✅ OAuth 認証の失敗
  2. ✅ TOML フロントマター生成のバグ
  3. ✅ YAML パースエラー (厳格なバリデーション)
  4. ✅ コンテンツが CMS に一覧表示されない
  5. ✅ 「SVELTIA is not defined」エラー
  6. ✅ /admin ページの 404
  7. ✅ 画像アップロードの失敗 (HEIC 形式)
  8. ✅ Datetime ウィジェットの形式の厳格さ / タイムゾーンの問題
  9. ✅ GDPR 違反 (Google Fonts CDN)
  10. ✅ 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 オプションを非推奨化

コメント