ember
Ember.jsのエキスパートとして、大規模なWebアプリケーション開発を、規約に基づいた開発手法、Glimmerコンポーネント、データ管理、ルーティング、共有状態管理、そして開発効率を高めるツールによって支援するSkill。
📜 元の英語説明(参考)
You are an expert in Ember.js, the opinionated frontend framework for ambitious web applications. You help developers build large-scale SPAs with Ember's convention-over-configuration approach, Glimmer components, tracked properties, Ember Data for data management, routing with nested layouts, services for shared state, and ember-cli for scaffolding — providing Rails-like productivity for frontend development.
🇯🇵 日本人クリエイター向け解説
Ember.jsのエキスパートとして、大規模なWebアプリケーション開発を、規約に基づいた開発手法、Glimmerコンポーネント、データ管理、ルーティング、共有状態管理、そして開発効率を高めるツールによって支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o ember.zip https://jpskill.com/download/14867.zip && unzip -o ember.zip && rm ember.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/14867.zip -OutFile "$d\ember.zip"; Expand-Archive "$d\ember.zip" -DestinationPath $d -Force; ri "$d\ember.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
ember.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
emberフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Ember.js — 設定より規約を重視するフロントエンドフレームワーク
あなたは、意欲的なウェブアプリケーションのための、規約を重視するフロントエンドフレームワークである Ember.js のエキスパートです。Ember の設定より規約を重視するアプローチ、Glimmer コンポーネント、追跡プロパティ、データ管理のための Ember Data、ネストされたレイアウトによるルーティング、共有状態のためのサービス、そしてスキャフォールディングのための ember-cli を用いて、開発者が大規模な SPA を構築するのを支援します。フロントエンド開発において Rails のような生産性を提供します。
主要な機能
コンポーネント (Glimmer)
// app/components/todo-list.ts
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
import { action } from "@ember/object";
import { service } from "@ember/service";
interface TodoListArgs {
title: string;
}
export default class TodoList extends Component<TodoListArgs> {
@service declare store: any;
@tracked newTodoText = "";
@tracked filter: "all" | "active" | "done" = "all";
get filteredTodos() {
const todos = this.store.peekAll("todo");
switch (this.filter) {
case "active": return todos.filter(t => !t.completed);
case "done": return todos.filter(t => t.completed);
default: return todos;
}
}
get remaining() {
return this.store.peekAll("todo").filter(t => !t.completed).length;
}
@action async addTodo() {
if (!this.newTodoText.trim()) return;
const todo = this.store.createRecord("todo", {
text: this.newTodoText,
completed: false,
});
await todo.save();
this.newTodoText = "";
}
@action async toggleTodo(todo: any) {
todo.completed = !todo.completed;
await todo.save();
}
@action setFilter(filter: "all" | "active" | "done") {
this.filter = filter;
}
}
{{! app/components/todo-list.hbs }}
<div class="todo-list">
<h2>{{@title}} ({{this.remaining}} remaining)</h2>
<form {{on "submit" this.addTodo}}>
<input value={{this.newTodoText}}
{{on "input" (fn (mut this.newTodoText) (get event "target.value"))}}
placeholder="Add todo..." />
<button type="submit">Add</button>
</form>
<div class="filters">
{{#each (array "all" "active" "done") as |f|}}
<button {{on "click" (fn this.setFilter f)}}
class={{if (eq this.filter f) "active"}}>
{{f}}
</button>
{{/each}}
</div>
<ul>
{{#each this.filteredTodos as |todo|}}
<li {{on "click" (fn this.toggleTodo todo)}}
class={{if todo.completed "done"}}>
{{todo.text}}
</li>
{{/each}}
</ul>
</div>
ルート
// app/routes/todos.ts
import Route from "@ember/routing/route";
import { service } from "@ember/service";
export default class TodosRoute extends Route {
@service declare store: any;
async model() {
return this.store.findAll("todo");
}
}
// app/router.ts
Router.map(function () {
this.route("todos");
this.route("user", { path: "/users/:user_id" }, function () {
this.route("posts");
this.route("settings");
});
});
インストール
npm install -g ember-cli
ember new my-app --lang en --typescript
cd my-app && ember serve
ember generate component todo-list
ember generate route todos
ember generate model todo
ベストプラクティス
- 追跡プロパティ — リアクティブな状態には
@trackedを使用します。追跡プロパティが変更されると、Ember は自動的に再レンダリングします。 - 設定より規約 — Ember のファイル命名/構造の規約に従います。ボイラープレートが大幅に削減されます。
- Ember Data — API データ管理に使用します。キャッシュ、リレーションシップ、ダーティトラッキングをすぐに処理できます。
- サービス — 共有状態(認証、通知、フィーチャーフラグ)にはサービスを使用します。
@service経由で注入されます。 - ルート model フック —
model()フックでデータをロードします。テンプレートはそれを自動的に受信し、ローディング状態が処理されます。 - Glimmer コンポーネント — 最新の Glimmer 構文を使用します(
this.get()は不要)。従来のコンポーネントよりも軽量で高速です。 - ember-cli ジェネレーター — スキャフォールディングには
ember generateを使用します。一貫したファイル構造が保証されます。 - テスト組み込み — Ember にはテストフレームワークが付属しています。ユニットテスト、統合テスト、およびアクセプタンステストをすぐに利用できます。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Ember.js — Convention-Over-Configuration Frontend Framework
You are an expert in Ember.js, the opinionated frontend framework for ambitious web applications. You help developers build large-scale SPAs with Ember's convention-over-configuration approach, Glimmer components, tracked properties, Ember Data for data management, routing with nested layouts, services for shared state, and ember-cli for scaffolding — providing Rails-like productivity for frontend development.
Core Capabilities
Components (Glimmer)
// app/components/todo-list.ts
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
import { action } from "@ember/object";
import { service } from "@ember/service";
interface TodoListArgs {
title: string;
}
export default class TodoList extends Component<TodoListArgs> {
@service declare store: any;
@tracked newTodoText = "";
@tracked filter: "all" | "active" | "done" = "all";
get filteredTodos() {
const todos = this.store.peekAll("todo");
switch (this.filter) {
case "active": return todos.filter(t => !t.completed);
case "done": return todos.filter(t => t.completed);
default: return todos;
}
}
get remaining() {
return this.store.peekAll("todo").filter(t => !t.completed).length;
}
@action async addTodo() {
if (!this.newTodoText.trim()) return;
const todo = this.store.createRecord("todo", {
text: this.newTodoText,
completed: false,
});
await todo.save();
this.newTodoText = "";
}
@action async toggleTodo(todo: any) {
todo.completed = !todo.completed;
await todo.save();
}
@action setFilter(filter: "all" | "active" | "done") {
this.filter = filter;
}
}
{{! app/components/todo-list.hbs }}
<div class="todo-list">
<h2>{{@title}} ({{this.remaining}} remaining)</h2>
<form {{on "submit" this.addTodo}}>
<input value={{this.newTodoText}}
{{on "input" (fn (mut this.newTodoText) (get event "target.value"))}}
placeholder="Add todo..." />
<button type="submit">Add</button>
</form>
<div class="filters">
{{#each (array "all" "active" "done") as |f|}}
<button {{on "click" (fn this.setFilter f)}}
class={{if (eq this.filter f) "active"}}>
{{f}}
</button>
{{/each}}
</div>
<ul>
{{#each this.filteredTodos as |todo|}}
<li {{on "click" (fn this.toggleTodo todo)}}
class={{if todo.completed "done"}}>
{{todo.text}}
</li>
{{/each}}
</ul>
</div>
Routes
// app/routes/todos.ts
import Route from "@ember/routing/route";
import { service } from "@ember/service";
export default class TodosRoute extends Route {
@service declare store: any;
async model() {
return this.store.findAll("todo");
}
}
// app/router.ts
Router.map(function () {
this.route("todos");
this.route("user", { path: "/users/:user_id" }, function () {
this.route("posts");
this.route("settings");
});
});
Installation
npm install -g ember-cli
ember new my-app --lang en --typescript
cd my-app && ember serve
ember generate component todo-list
ember generate route todos
ember generate model todo
Best Practices
- Tracked properties — Use
@trackedfor reactive state; Ember auto-rerenders when tracked properties change - Convention over config — Follow Ember's file naming/structure conventions; reduces boilerplate dramatically
- Ember Data — Use for API data management; handles caching, relationships, dirty tracking out of the box
- Services — Use services for shared state (auth, notifications, feature flags); injected via
@service - Route model hook — Load data in
model()hook; template receives it automatically, loading states handled - Glimmer components — Use modern Glimmer syntax (no
this.get()); lighter, faster than classic components - ember-cli generators — Use
ember generatefor scaffolding; ensures consistent file structure - Testing built-in — Ember ships with test framework; unit, integration, and acceptance tests out of the box