webawesome-design エージェントスキルの追加と <wa-page> ナビゲーショントグル修正

shoelace-style/webawesome

Web Awesome に webawesome‑design エージェントスキルが新規追加され、レイアウト・テーマ・ビジュアル構成のガイドが機械可読ドキュメントとして提供されました。同時に <wa-page> コンポーネントのナビゲーショントグル検出ロジックが修正され、カスタムトグルが期待通りに動作するようになりました。

背景

webawesome エージェントスキルはコンポーネント API のみを対象としており、デザイン指示には応答できませんでした。AI ツールがページ全体のレイアウトやテーマ設定まで支援できるように、webawesome‑design スキルが作成されました。

また、<wa-page> のナビゲーショントグルはスロット名のミスによりカスタムボタンが検出できず、モバイルメニューが開かないバグが報告されていました。この問題は実装上の単一文字列置換で解決可能でした。

結果として、AI ドキュメントの充実と開発者体験の向上という二つの課題が同時に解決されました。

技術的な変更

webawesome‑design エージェントスキルの導入

新規スクリプト packages/webawesome/scripts/design-skill.js が追加され、ビルド時に design-skill/ ディレクトリ全体を dist/skills/webawesome-design/dist-cdn/skills/webawesome-design/ にコピーします。コピー後に SKILL.md の front‑matter にパッケージバージョンが自動注入され、スキルとリリースのバージョンが常に一致します。

export async function generateDesignSkill(options = {}) {
  const {
    sourceDir = SOURCE_DIR,
    outDirs = [
      path.join(getDistDir(), 'skills/webawesome-design'),
      path.join(getCdnDir(), 'skills/webawesome-design')
    ],
    // ...
  } = options;
  // コピーとバージョン注入が実装されています
}

Markdown ソースは scripts/design-skill/ 配下に配置され、SKILL.md と多数の references/ ファイル(例: layouts-page.md, theming.md)が手書きで管理されます。これにより AI が「ページレイアウト」や「テーマ設定」などの問い合わせに対し、構造化された情報を取得できます。

<wa-page> ナビゲーショントグルバグの修正

packages/webawesome/src/components/page/page.ts では、カスタムトグル検出用のセレクタが誤って toggle‑navigation を参照していました。正しいスロット名 navigation‑toggle に置き換えるだけで、data-toggle-nav を持つ要素が正しく認識されます。

@@
-    const hasCustomToggle = Boolean(this.querySelector(":not([slot='toggle-navigation']) [data-toggle-nav]"));
+    const hasCustomToggle = Boolean(this.querySelector(":not([slot='navigation-toggle']) [data-toggle-nav]"));

この変更は API の追加や既存 CSS の改変を伴わず、既存のカスタムトグル実装はそのまま動作します。

ドキュメントスタイルの改善

packages/webawesome/docs/assets/styles/docs.css では、テーブル内の <code> 要素と依存リストの背景色を透明化し、white-space: nowrap に変更しました。また、パンくずリスト直後の見出し上部余白を 0 にリセットし、ページタイトルとコンテキストの間隔を統一しています。

@@
-  table code,
-  .dependency-list code {
-    background-color: var(--wa-color-neutral-10);
-    white-space: normal;
-  }
+  table code,
+  .dependency-list code {
+    background-color: transparent;
+    white-space: nowrap;
+  }
@@
-  .page-breadcrumbs + h1 {
-    margin-block-start: var(--wa-space-l);
-  }
+  .page-breadcrumbs + h1 {
+    margin-block-start: 0;
+  }

検証スクリプトの追加

packages/webawesome/scripts/verify-skills.js が新規追加され、エージェントスキルの手書きコンテンツがコンポーネントカタログと整合しているか、相対リンクが実在ファイルに解決できるかを CI でチェックします。これにより choosing-components.md のようなドリフトがリリース前に検出されます。

// ...省略された実装例
// 1. <wa-*> タグの存在検証
// 2. (Pro) フラグの正当性検証
// 3. 相対リンク解決検証

設計判断

スキルの分離戦略webawesomewebawesome‑design を別スキルとして提供することで、AI が「コンポーネント API」か「デザインガイド」かを判別しやすくなります。新たな設定キーを導入せず、単なる Markdown コピーとバージョン注入だけの実装にすることで保守コストを最小限に抑えました。

最小侵入のバグ修正:スロット名置換は唯一のコード変更であり、公開 API や CSS に影響しません。既存利用者はマイグレーション不要で、カスタムトグルが即座に機能します。

バージョン同期と検証generateDesignSkill がビルド時にバージョンを書き込み、verify-skills.js がコンテンツと実装の整合性を CI で保証します。これによりリリースとスキルの内容が常に一致し、リグレッションが防止されます。

まとめ

本 PR は webawesome‑design エージェントスキルを新規追加し、AI がデザイン指示まで支援できるようにした点と、<wa-page> のナビゲーショントグル検出バグを最小侵入で修正した点が主な成果です。スキル分離と自動検証により保守性と拡張性が確保され、同時にドキュメントの可読性も向上しました。

記事メタデータ

Generated by:
gpt-oss-120b for DiffDaily
LLM Trace:
6c5deb1a

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

品質レビュー結果

Review Status:
リトライ後承認
Review Count:
3回 (改善を経て承認)
Reviewed by:
gpt-oss-120b for DiffDaily

Review Criteria:

記事構成 ✓ PASS

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

リード文、背景、技術的変更、まとめがすべて揃っており、総論→各論→結論の流れが明確です。

カスタムMarkdown構文 ✓ PASS

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

コードブロックは `言語:ファイルパス` 形式で正しく記述され、GitHubリンクは PR 番号が正しくリンク化されています。

対象読者への適合性 ✓ PASS

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

対象は Web Awesome に詳しいエンジニアであり、専門用語や実装詳細が中心です。初心者向けの過度な説明はありません。

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

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

各セクションは総論・各論・結論のパラグラフで構成され、トピックセンテンスが先頭にあり、段落は適切な長さで空行で区切られています。

Diff内容との照合 ✓ PASS

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

記事中のコードブロックは提供された Diff と一致しており、ファイル名・変更内容ともに正確です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

用語は PR 情報と一致し、誤用や不適切な表現はありません。

説明の技術的正確性 ✓ PASS

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

技術的説明は PR の内容と合致しており、根拠が示されています。

事実の突合 ✓ PASS

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

全ての主張は PR タイトル・説明・Diff で裏付けられており、推測や捏造はありません。

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

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

PR 番号やファイル名、コード行の変更は正確です。

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

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

記事タイトルは PR の内容(デザインスキル追加とナビゲーションバグ修正)を正確に表現しています。

外部知識の正確性 ✓ PASS

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

記事内に PR に記載されていない外部知識(LTS、リリース日程等)は含まれていません。

時間表現の正確性 ✓ PASS

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

時間表現は使用されておらず、PR の時制と矛盾する記述はありません。