angular-material-developer について
Angular Material Developer Guidelines は、Angular Material を扱うコーディングエージェント向けのスキルです。Angular の基礎を補い、バージョンに応じたコンポーネント、CDK、テーマ、フォーム、アクセシビリティの指針を示します。
主な機能
- 01バージョン別の Angular Material 指針
- 02M3 テーマと M2 移行
- 03コンポーネントと CDK の利用パターン
- 04フォームとアクセシビリティの指針
活用シーン
- 01プロジェクトの Material バージョンに沿ったコンポーネント生成
- 02M3 テーマ API の選択や M2 からの移行
- 03Material コンポーネントと Angular フォームの連携
- 04アクセシビリティと CDK の使い方の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mofirojean/ angular-ui-skills --skill angular-material-developerインストール後、Claude Code で/angular-material-developerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/accessibility.mdbuttons-indicators.mdcdk.mddata-table.mdform-controls.mdforms.mdlayout.mdmigration.mdnavigation.mdoverlays.mdsetup.mdtheming.md詳細
Angular Material 開発者向けガイドライン
angular-developerと併用します。このスキルでは Angular の基礎(シグナル、DI、ルーティング、フォーム、SSR、アクセシビリティ)を扱います。このスキルでは Angular Material 固有の内容に焦点を当てます。最適な環境にするには、両方をインストールしてください。
互換性
- 対象:
@angular/[email protected](Angular v22)。@angular/[email protected]と組み合わせてください(Material は 完全一致する cdk バージョンをピア依存関係として要求するため、両方を同じバージョンに固定してください)。v21 に対応する系列は、レガシープロジェクト向けに21.2.xのままです。 - アニメーションのピア依存関係を削除(v21.2 以降): Material は
@angular/animationsをピア依存関係として宣言しなくなり、ネイティブ CSS でアニメーションを実行します。21.2 以降または 22 でng add @angular/materialを実行しても、provideAnimationsAsync()は設定されず、@angular/animationsも不要です。新規の Material 22 アプリには、どちらも追加しないでください。(以前の v21.x とすべての v18~20 アプリでは引き続きプロバイダーが必要です。setup.md を参照してください。) - 対応対象: Material v19~v22 のプロジェクト(M3 テーマシステムは v19 で導入されました。それ以前のメジャーバージョンでは、現在レガシーとなっている
mat.define-light-theme/mat.define-dark-themeAPI を使った M2 が使用されていました)。 - Angular: v19 以降が必要です。v22 には Node 22 または 26 と TypeScript 6 が必要です。このスキルでは、スタンドアロンコンポーネント、制御フロー(
@if/@for)、シグナルベースの API を前提としています。 - Sass: テーマ設定に必要です。ビルドパイプラインが
.scssに対応している必要があります(Angular CLI はデフォルトで対応しています)。Material のテーマエンジンでは、スタンドアロンの CSS のみを使ったテーマ設定はサポートされていません。 - サポート対象外: Material v18 以前(M2 のみで、
mat.define-*-theme()API を使用)、Angular v18 以前(NgModule パターンと古いアニメーション API を使用)。
v22.2 の主な変更点(22.1 から)
追加機能のみのマイナーバージョンで、破壊的変更はありません。ピア依存関係に変更はありません(@angular/core、forms、common、platform-browser は ^22.0.0 || ^23.0.0)。
MatIconの Material Symbols クラス自動設定(22.2.0): Material Symbols フォントのみが読み込まれている場合、<mat-icon>がmaterial-symbols-*クラスを自動的に追加するため、単一フォントの場合はsetDefaultFontSetClass(...)が不要になりました。従来の Material Icons と Symbols の両方が読み込まれている場合は、以前の動作が適用されます。MatMenuItemのdisabledInteractive(22.2.0): フォーカス可能かつホバー可能な状態を維持したまま、無効時のスタイルを適用します。これにより、項目が無効な理由をツールチップで説明できます。- **
MatFormFieldControlが Signal Forms に対応(22.2.0)**し、datepicker は Signal Forms で解析エラーを報告します(22.2.4)。 - CDK オーバーレイの
disposeOnNavigation: 'url-change'(22.2.1): 戻る/進む操作だけでなく、URL が変更されるたびに閉じる設定を有効にできます。 - 知っておくとよいパッチ修正: CDK a11y が
inert要素をフォーカス不可として扱うようになりました(22.2.3)。chips にタッチターゲットが追加されました(22.2.3)。mat-iconがイベント属性をコピーしなくなりました(22.2.2)。
v22 の破壊的変更(v21 から)
v21 から v22 への移行では、Angular のバージョン更新だけでなく、実際に API が変更されています。次の点に注意してください。
- Combobox: レガシーの combobox と autocomplete が昇格または削除されました。
SimpleComboboxはComboboxに昇格し、すべてのsimpleCombobox*シンボルがcombobox*に名前変更されました。 - List:
MatListOption.checkboxPositionが削除されました。代わりにtogglePositionを使用してください。MatListOptionCheckboxPositionはMatListOptionTogglePositionに名前変更されました。 - CDK:
ConfigurableFocusTrapとFocusTrapのコンストラクターで、injectorパラメーターが必須になりました。ConfigurableFocusTrapFactory.createのブール値パラメーターは設定オブジェクトに置き換えられました。DropListRef.dropイベントのパラメーターが必須になりました。ContextMenuTrackerはMenuTrackerに名前変更されました。次の項目が削除されました:CDK_DESCRIBEDBY_HOST_ATTRIBUTE、CDK_DESCRIBEDBY_ID_PREFIX、MESSAGES_CONTAINER_ID。 - 複数のコンポーネント: Combobox、Listbox、Tree、Menu、Toolbar、Select で、input/model の名前が
valuesからvalueに変更されました。可変長引数を取るコンストラクターが削除されました(Material または CDK のコンポーネントを拡張するコードに影響します)。 - Dialog/Overlay:
ArrowViewStateとArrowViewStateTransitionの型が削除されました。
これらの大半には、自動適用される ng update のマイグレーションがあります。判断に迷った場合は、手動で編集する前に ng update @angular/material を実行し、schematic に処理させてください。
v22 の知っておきたい新機能
- Signal Forms が安定版に(v21 では実験的機能でした)。Angular のシグナルベースのフォーム API が、本番環境で安心して使えるようになりました。
mat-form-fieldはReactiveFormsModuleと Signal Forms のどちらとも組み合わせられます。 - Angular Aria が安定版に(プレビュー版でした)。新しいアクセシビリティのプリミティブがフレームワークに組み込まれ、一部のパターンでは CDK の a11y モジュールを利用する必要性が減ります。
<button>コンポーネント内でボタンの進行状況インジケーターをサポート。ComponentPortalでポータルディレクティブをサポート。- タブごとに個別のアニメーション時間を設定可能(タブごとの入場/退場タイミング)。
-
回答する前に、プロジェクトの Material のバージョンを確認してください。 Material の M3 テーマエンジンは v19 で導入されました(
mat.define-light-themeとmat.define-dark-themeを置き換えるmat.theme()ミックスイン)。M3 向けに生成されたコードは、M2 プロジェクトではエラーを出さずに動作しなくなります。正しい情報源はpackage.jsonです。 -
styles.scssでテーマの世代を判別してください。@include mat.theme((...))がある場合 → M3(v19 以降、デフォルト)。mat.theme()、Material の組み込みパレット、CSS 変数のオーバーライドを使用します。mat.define-light-theme(...)またはmat.define-dark-theme(...)に加えて@include mat.all-component-themes($theme)がある場合 → M2(レガシー)。移行を推奨します。詳しくは migration.md を参照してください。- 2 つのシステムはコンパイル方法も動作も大きく異なります。theming.md を参照してください。
-
コンポーネントは v15 以降スタンドアロンです。 レガシーの
MatButtonModuleではなく、スタンドアロンクラス(例:'@angular/material/button'のMatButton)を必ずインポートしてください。モジュールは後方互換性のため引き続きすべてを再エクスポートしますが、新しいコードには追加しないでください。 -
Material のコードを生成した後は、
ng buildを実行してください。 AI によるよくあるミスは次のとおりです。(a)v19 以降のプロジェクトで v17 時代のmat.define-light-theme構文を使う(コンパイルは通りますが、CSS 変数が何も出力されません)。(b)v18〜v21.1 でprovideAnimationsAsync()を忘れる(リップル、メニューの開閉、ダイアログの背景アニメーションが動作しなくなります。v21.2 以降/v22 では Material がネイティブ CSS でアニメーションするため、追加しないでください)。(c)@angular/cdkのピア依存関係が不足している(Material のインポートは CDK を経由します)。(d)MatSort/MatPaginatorとの連携なしにMatTableを使う(列ヘッダーにソート UI は表示されますが、機能しません)。
Material のアーキテクチャ:コンポーネント、CDK、テーマ設定
Angular Material には次の 3 つのレイヤーがあります。
- コンポーネント(
@angular/material/*):スタイル設定済みのmat-*コンポーネント本体です。MatButton、MatFormField、MatTable、MatDialogなどがあります。それぞれに専用のインポートパスがあります。 - CDK(
@angular/cdk/*):Material がその上に構築する、スタイル設定のないプリミティブです。Overlay、Portal、A11y(FocusTrap、LiveAnnouncer、ListKeyManager)、DragDrop、VirtualScroll、Stepperがあります。Material と併せてピア依存関係として必ずインストールします。 Material のスタイル設定は不要で、プリミティブだけが必要な場合に単独で便利です。cdk.md を参照してください。 - テーマエンジン(
@angular/material/_index.scss):各コンポーネントが使用する CSS 変数を出力する Sass ミックスイン(mat.theme()、mat.theme-overrides())です。Sass が必須で、CSS のみでテーマを設定する方法はありません。
通常は @angular/material/<component> からインポートしてください(例:'@angular/material/button' の MatButton)。ヘッドレスのプリミティブが必要な場合や、Material の動作を組み合わせた独自スタイルのコンポーネントを作成する場合に限り、@angular/cdk/<primitive> を使用してください。
インストールとテーマ設定
- セットアップ:
ng add @angular/materialを実行します(インストールを行い、デフォルトのテーマを設定します。v18〜v21.1 ではprovideAnimationsAsync()も設定しますが、21.2 以降/22 では設定しません。Material はネイティブ CSS でアニメーションします)。手動でインストールすることもできます。setup.md をお読みください。 - テーマ設定(M3):
mat.theme()ミックスイン、ビルトインパレット(mat.$violet-palette、mat.$azure-paletteなど)、密度とタイポグラフィの設定、light darkカラースキーム、mat.<component>-overrides()によるコンポーネントごとのオーバーライド。theming.md をお読みください。 - M2 から M3 への移行:v19 の ng-update スキーマティックと、手動で修正する際のパターン。migration.md をお読みください。
コンポーネント
Angular Material では、40 以上のコンポーネントがカテゴリ別にまとめられています。以下の各カテゴリファイルでは、コンポーネント、主要な入力、一般的なパターン、注意点を解説しています。
- フォームコントロール:Autocomplete、Checkbox、Datepicker、FormField、Input、Radio、Select、Slider、SlideToggle。form-controls.md をお読みください。
- ボタンとインジケーター:Button、ButtonToggle、Badge、Chip、Icon、ProgressBar、ProgressSpinner、Ripple。buttons-indicators.md をお読みください。
- レイアウト:Card、Divider、ExpansionPanel、GridList、List、Stepper、Tabs、Tree。layout.md をお読みください。
- ナビゲーション:Menu、Sidenav、Toolbar。navigation.md をお読みください。
- ポップアップとモーダル:BottomSheet、Dialog、Snackbar、Tooltip。overlays.md をお読みください。
- データテーブル:Table、Paginator、Sort、MatTableDataSource。data-table.md をお読みください。
CDK プリミティブ
- CDK:Overlay、Portal、A11y(FocusTrap、FocusMonitor、LiveAnnouncer、ListKeyManager)、ドラッグ&ドロップ、VirtualScroll、Stepper、ScrollDispatcher、Layout(
Breakpoints)。cdk.md をお読みください。
フォーム連携
- フォーム:
mat-form-field、MatInput/MatSelect/MatDatepicker、ErrorStateMatcherのパターン、<mat-error>の表示、カスタムコントロール向けのControlValueAccessorを使って、Material コンポーネントを ReactiveForms(標準的な方法)および Signal Forms(Angular v22 以降)に接続する方法。forms.md をお読みください。
アクセシビリティ
- アクセシビリティ:Material の WCAG 2.1 AA 準拠目標、キーボードとマウスでフォーカス時のスタイルを切り替える FocusMonitor、一時的なアナウンスに使う LiveAnnouncer、RTL サポート、Material が自動で対応することと、引き続き自分で対応する必要があること。accessibility.md をお読みください。