12k
All articles

Ember.jsの紹介

Ember.jsのコンベンション、GlimmerコンポーネントやEmbroider with Viteを活用し、ルーティング・サービス・trackedステートの連携を解説する。

OpenReplay Team
OpenReplay Team
Ember.jsの紹介

React、Vue、Angularでアプリケーションを構築したことがあれば、コンポーネントベースのアーキテクチャとモダンなJavaScriptツールについて理解しているでしょう。しかし、疑問に思うかもしれません。2026年においてEmber.jsは何を提供し、なぜLinkedInやApple Musicのような企業が今でもEmber.jsに依存しているのでしょうか?

Ember.jsは、大規模アプリケーションにおける安定性、強力な規約、開発者の生産性を優先する、成熟した意見の強いフレームワークです。この記事では、現代のEmberフレームワークが今日どのように機能するか、そして現在のエコシステムにおける新しいプロジェクトがどのようなものかを説明します。

重要なポイント

  • Ember.jsは、設定より規約を重視するコンポーネント・サービスフレームワークであり、チーム間で一貫したプロジェクト構造を実現します。
  • モダンなEmberは、Embroiderビルドシステムを使用し、高速な開発ビルド、ツリーシェイキング、最適化されたプロダクション出力のためのモダンなビルドオプションとしてViteをサポートしています。
  • トラッキングされた状態を持つGlimmerコンポーネントは、「データダウン、アクションアップ」パターンに従った軽量でリアクティブなUI開発を提供します。
  • .gjsおよび.gts形式を使用する単一ファイルコンポーネントは、テンプレートとバッキングクラスを組み合わせることができ、ボイラープレートを削減し、モダンなプロジェクトでますます採用されています。
  • Emberは、チームの一貫性と予測可能なアーキテクチャが重要な、野心的で長期的なアプリケーションに最適です。

Emberの違い

Emberはコンポーネント・サービスフレームワークです。コンポーネントはUIを処理します—マークアップ、動作、スタイルのバンドルで、他のフレームワークで知っているものと似ています。サービスは、長期的な共有状態を提供し、外部システムと統合します。例えば、ルーターはサービスです。

重要な特徴は、設定より規約です。すべてのEmberプロジェクトは同じ構造に従います。ルートは予測可能な場所に配置されます。コンポーネントは期待される場所に存在します。この一貫性により、開発者はプロジェクトアーキテクチャを再学習することなく、Emberのコードベース間を移動できます。

複雑で長期的なアプリケーションを構築するチームにとって、この予測可能性はオンボーディング時間とメンテナンスのオーバーヘッドを大幅に削減します。

モダンなEmberツール:ViteとEmbroiderビルドシステム

新しいEmberプロジェクトは、モダンなデフォルト設定でEmber CLIを使用します。Ember V2アプリ形式(新しいアプリのブループリントで使用)は、より広範なJavaScriptエコシステムとの互換性を向上させるために設計された現在の標準を表しています。

Embroiderビルドシステムは、現在標準のビルドパイプラインです。Embroiderは、適切なツリーシェイキング、コード分割、標準バンドラーとの統合を可能にします。新しいプロジェクトでは、Viteがサポートされており、ますます一般的なビルドオプションとなっており、高速な開発ビルドと最適化されたプロダクション出力を提供します。

新しいプロジェクトを作成するには:

npm install -g ember-cli
ember new my-app --typescript

これにより、Embroiderが設定されたTypeScript対応プロジェクトが生成されます。--typescriptフラグは、TypeScriptが公式にサポートされ、モダンなEmber開発で一般的に使用されていることを反映しています。

主要概念の概要

Glimmerコンポーネント

モダンなEmberは、Glimmerコンポーネントのみを使用します。これらは軽量で、「データダウン、アクションアップ」パターンに従い、リアクティビティのためにトラッキングされた状態を使用します。

import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';

export default class Counter extends Component {
  @tracked count = 0;

  @action
  increment() {
    this.count++;
  }
}

@trackedデコレーターは、変更時に再レンダリングをトリガーすべきプロパティをマークします—SolidのシグナルやVueのComposition APIのリアクティブステートに似ています。

テンプレートとGJS/GTS

Emberテンプレートは、Glimmer VMを介して最適化されたバイトコードにコンパイルされるHandlebarsベースの構文を使用します。フレームワークは、.gjs(JavaScript)および.gts(TypeScript)形式を使用した厳密モードテンプレートと単一ファイルコンポーネントに移行しています。

これらの単一ファイルコンポーネントは、テンプレートとバッキングクラスを1つのファイルに結合し、ボイラープレートを削減し、より良いツリーシェイキングを可能にします。

ルーティング

Emberのルーターは組み込まれており、ネストされたルート、動的セグメント、クエリパラメータを処理します。ルートは、レンダリング前にデータをロードするためのmodelフックを定義できます:

import Route from '@ember/routing/route';
import { service } from '@ember/service';

export default class PostsRoute extends Route {
  @service store;

  model() {
    return this.store.findAll('post');
  }
}

データレイヤー

EmberData(@ember-data)は、APIデータ、キャッシング、リレーションシップを管理するための規約を提供します。これはオプションですが、デフォルトで含まれています。RESTまたはJSON:APIバックエンドの場合、ボイラープレートを大幅に削減します。

プロジェクト構造

典型的なモダンなEmberプロジェクトは、コードを予測可能に整理します:

  • app/components/ — UIコンポーネント
  • app/routes/ — ルートハンドラー
  • app/templates/ — ルートテンプレート
  • app/services/ — 共有状態とロジック
  • app/models/ — データモデル(Ember Dataを使用する場合)

この構造はプロジェクト間で一貫しており、これが中核的な価値提案です。

Emberを検討すべき場合

Emberは、チームの一貫性が重要な、野心的で長期的なアプリケーションに最適です。ダッシュボード、管理インターフェース、または複数の開発者による複雑なシングルページアプリケーションを構築している場合、規約は時間の経過とともに配当をもたらします。

マーケティングサイトや軽量なプロジェクトの場合、Astroのようなより軽量なフレームワークの方が理にかなっています。

まとめ

公式のEmberチュートリアルでは、完全なアプリケーションの構築を順を追って説明しています。Emberガイドでは、各概念を詳しく説明しています。コミュニティサポートについては、Ember Discordがアクティブで役立ちます。

モダンなEmberは、数年前に覚えているかもしれないフレームワークではありません。Vite、Embroider、TypeScriptサポート、単一ファイルコンポーネントにより、プロダクションアプリケーションにとって価値のある安定性を維持しながら進化しています。

よくある質問

新しいプロジェクトにおいて、EmberはReactやVueと比較してどうですか?

Emberは設定より規約を優先するため、プロジェクト構造に関する意思決定が少なくて済みます。ReactとVueはより柔軟性を提供しますが、チームが独自のパターンを確立する必要があります。長期的なアプリケーションに取り組む大規模なチームにとって、Emberの一貫性はオンボーディング時間とメンテナンスコストを削減します。

Ember.jsを使用する際、Ember Dataは必須ですか?

いいえ、Ember Dataはオプションです。デフォルトで含まれており、RESTまたはJSON:APIバックエンドとうまく機能しますが、fetch、axios、またはその他のデータ取得アプローチを使用できます。多くのチームは、GraphQLや非標準APIを使用する際に代替手段を選択します。

Reactから移行する開発者にとって、学習曲線はどうですか?

React開発者は、両方がコンポーネントベースのアーキテクチャを使用しているため、Glimmerコンポーネントに親しみを感じるでしょう。主な調整は、Emberの規約、ルーティングシステム、Handlebarsテンプレート構文を学ぶことです。ほとんどの経験豊富なJavaScript開発者は、数週間以内に生産的になります。

Ember.jsでTypeScriptを使用できますか?

はい、TypeScriptはモダンなEmberで公式にサポートされています。新しいプロジェクトは--typescriptフラグで生成でき、フレームワークはコアAPIの型定義を提供します。.gtsファイル形式により、単一ファイルコンポーネントでTypeScriptを使用できます。

DevTools for the frontend

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.