Web AwesomeにAgent Skillsサポートを追加

shoelace-style/webawesome

Web Awesome 4.3.0で、AI開発支援ツール向けのAgent Skills仕様に準拠したドキュメントセットが追加されました。これにより、Claude CodeやCursorなどのAI支援ツールが、Web Awesomeのコンポーネントとその使用方法をより正確に理解できるようになります。

背景

これまでWeb Awesomeは、AI支援ツール向けに単一ファイルの llms.txt を提供していました。しかし、単一ファイル形式では、AIツールが必要な情報だけを効率的に取得することが困難でした。すべてのコンテキストを一度に読み込む必要があるため、複雑なタスクでのコンテキスト管理が非効率的でした。

Agent Skills仕様は、複数のMarkdownファイルに分割された構造化ドキュメントを通じて、AIツールが必要な情報を段階的に取得できる仕組みを提供します。#1998 は、この仕様に準拠したドキュメントセットの生成機能を実装しています。

技術的な変更

Agent Skillの生成は、Eleventyのビルド後に実行される新しいスクリプト scripts/agent-skill.js によって行われます。このスクリプトは、以下の処理を実行します。

ドキュメントの生成プロセス

EleventyがレンダリングしたHTMLファイルから情報を抽出し、Markdownに変換する方式が採用されています。これは、Web AwesomeのドキュメントソースがNunjucksテンプレートを多用しているためです。

function createTurndownService(baseUrl) {
  const turndown = new TurndownService({
    headingStyle: 'atx',
    codeBlockStyle: 'fenced',
    bulletListMarker: '-',
  });

  // Custom rule for code examples - extract clean code from syntax-highlighted blocks
  turndown.addRule('codeExample', {
    filter: node => {
      return node.nodeName === 'DIV' && node.classList?.contains('code-example');
    },
    replacement: (_content, node) => {
      const sourceDiv = node.querySelector('.code-example-source');
      const codeElement = sourceDiv?.querySelector('pre code');
      const code = codeElement?.textContent.trim();
      // ...
      return `\n\n\`\`\`${lang}\n${code}\n\`\`\`\n\n`;
    },
  });
}

turndownライブラリを使用してHTMLからMarkdownへの変換を行い、シンタックスハイライト済みのコードブロックから元のコードを抽出するカスタムルールを実装しています。

生成されるファイル構造

Agent Skillは以下のディレクトリ構造で生成されます:

webawesome/
├── SKILL.md              # メインスキルファイル
└── references/
    ├── components/       # 各コンポーネントの個別ドキュメント
    ├── frameworks/       # React、Vue、Angular、Svelteのガイド
    ├── utilities/        # レイアウトとスタイリングユーティリティ
    ├── installation.md   # インストールガイド
    ├── usage.md          # 使用パターン
    ├── form-controls.md  # フォーム統合
    ├── themes.md         # テーマとカラーパレット
    └── ...

このファイル群は dist/skills/webawesome/dist-cdn/skills/webawesome/ に出力され、npmインストール時は node_modules/@awesome.me/webawesome/dist/skills/webawesome/ からアクセスできます。

ビルドプロセスへの統合

scripts/build.js に、Agent Skill生成ステップが追加されました:

// Generate llms.txt (needs CEM, runs before docs)
spinner.start('Generating llms.txt');
await generateLlmsTxtFile();
spinner.succeed();

// Generate Agent Skill (must run after Eleventy generates _site)
spinner.start('Generating Agent Skill');
await generateAgentSkill();
spinner.succeed();

llms.txtの生成は、Custom Elements Manifest(CEM)が必要なためドキュメント生成前に実行されます。一方、Agent Skillの生成は、EleventyがHTMLを生成した後に実行される必要があります。この実行順序の依存関係が、コメントで明示的に記述されています。

llms.txt生成の再実装

llms.txt生成がCEMプラグインから独立した関数に変更されました:

変更前:

import { llmsTxtPlugin } from './scripts/llms.js';

// ...
llmsTxtPlugin({
  outdir,
  docsDir: path.join(__dirname, 'docs'),
  baseUrl: 'https://webawesome.com',
}),

変更後:

export async function generateLlmsTxtFile(options = {}) {
  const {
    outdir = path.resolve(__dirname, '../dist-cdn'),
    copyTo = [path.resolve(__dirname, '../dist')],
    docsDir = path.resolve(__dirname, '../docs'),
    cemPath = path.resolve(__dirname, '../dist-cdn/custom-elements.json'),
    baseUrl = 'https://webawesome.com',
  } = options;

  const customElementsManifest = JSON.parse(fs.readFileSync(cemPath, 'utf-8'));
  // ...
}

この変更により、llms.txt生成とAgent Skills生成が同じビルドステージで実行され、一貫性が保たれます。

設計判断

PRの説明では、静的コンテンツの重複を最小限に抑えつつ、リファレンスファイルを相対的に小さく保つこと が目標として挙げられています。

Eleventyのビルド出力から変換する方式を選択した理由は、ドキュメントソースがNunjucksテンプレートを多用しており、Markdownソースから直接情報を抽出することが困難だったためです。この方式により、レンダリング済みのHTMLから正確な情報を取得できます。

生成されたファイルは「LLM向けに最適化されており、人間向けではない」と明記されています。これは、AIツールが効率的に情報を取得できるよう、構造と内容が調整されていることを意味します。

また、llms.txtとAgent Skillsの比較表が新たに追加され、ユーザーが適切な方式を選択できるようになりました:

Feature llms.txt Agent Skill
Format Single text file Directory with multiple markdown files
Best for Quick context, simple queries Deep integration, complex tasks
Context usage Loads everything at once Progressive disclosure (loads as needed)
Supported by Most AI tools Tools supporting agentskills.io spec

この比較により、Agent Skillsをサポートするツールでは新しい方式を、そうでないツールでは既存のllms.txtを使用するという選択が可能になっています。

まとめ

本PRは、Web AwesomeにAgent Skills仕様準拠のドキュメント生成機能を追加し、AI開発支援ツールがより効率的にコンポーネント情報を取得できるようにしました。Eleventyのビルド出力から変換する方式により、Nunjucksテンプレートベースのドキュメントソースに対応しつつ、段階的な情報開示によるコンテキスト効率の向上を実現しています。この機能は実験的なものとして導入され、フィードバックに基づいて今後調整される予定です。

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

リード文(総論)→背景・技術詳細・設計判断(各論)→まとめ(結論)という「総論→各論→結論」の3部構成が明確に守られています。各セクションの役割がはっきりしており、非常に分かりやすい構成です。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きのシンタックスハイライト(```言語:ファイルパス)およびPR番号のリンク記法([#1998](URL))が正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

Eleventy、Nunjucks、CEM(Custom Elements Manifest)といった技術用語が適切に使用されており、専門知識を持つエンジニアという対象読者に合致した内容です。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションが総論から始まる構成、各段落がトピックセンテンスで始まる構成、1段落1トピックの原則が守られており、非常に高い可読性を実現しています。段落の長さも適切です。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事内で引用されている`scripts/agent-skill.js`、`scripts/build.js`、`custom-elements-manifest.js`、`scripts/llms.js`のコードスニペットは、提供されたDiff情報と完全に一致しています。ファイル名も正確です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「Agent Skills」「Eleventy」「turndown」「CEM」などの技術用語は、PR DescriptionやDiff内で使用されているものと一致しており、文脈上も正しく使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

「Eleventyのビルド後に実行される」「llms.txt生成がCEMプラグインから独立した」といった技術的な説明は、`build.js`の変更や`custom-elements-manifest.js`の削除といったDiffの内容によって裏付けられており、技術的に正確です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内のすべての主張(「実験的な機能である」こと、「LLM向けに最適化されている」という言及など)は、PR Description内の記述と一致しており、ハルシネーションは検出されませんでした。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#1998)やバージョン番号(4.3.0、changelog.mdの差分から確認)など、記事に含まれる数値や固有名詞はすべて正確です。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事タイトル「Web AwesomeにAgent Skillsサポートを追加」は、PRのタイトル「Add Agent Skill for WA」の内容を的確に反映しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

記事内の情報はすべてPR情報(Description、Diff)から導出可能な範囲に収まっています。バージョン番号「4.3.0」も`changelog.md`の差分に含まれており、外部からの不正確な知識の追加はありません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

PRで追加された新機能について、「追加されました」といった過去形・完了形の表現が適切に使用されており、時間表現の歪曲はありません。