Dev Study
← Angular コース

69. NgModule — スタンドアロン以前のアプリの骨組み

ここからのセクションは、これまでと目的が少し違います。書けるようになるためではなく、読めるようになるためのレッスンです。スタンドアロンコンポーネントが標準になる前、Angularには長い「NgModule時代」があり、現場で動いている既存コードや検索で出てくる記事の多くは、いまもその時代の書き方です。まずはその中心にあるNgModuleから読み解きます。当時は、コンポーネントもパイプもサービスも、必ずどこかのNgModuleに登録しないと使えませんでした。

@NgModule デコレータを付けたクラスがモジュールです。読み方のコツは4つの配列に注目すること。declarations は「このモジュールが所有するコンポーネント・ディレクティブ・パイプ」、imports は「他のモジュールから機能を借りる」、providers は「DIに登録するサービス」、exports は「他のモジュールへ貸し出すもの」です。あるコンポーネントがテンプレートで使っている部品の出どころを探すときは、自分が declarations されているモジュールの imports をたどる、というのが基本の追跡ルートになります。

スタンドアロンとの対応も押さえましょう。standalone なコンポーネントの imports 配列は、NgModule が担っていた「使う部品の宣言」を各コンポーネントが自分で持つようにしたものです。移行中のプロジェクトでは両者が混在し、NgModule 側から standalone コンポーネントを imports することもその逆もできます。「declarations に見つからない部品は standalone かもしれない」と知っていれば、混在コードでも迷子になりません。

サンプルコード(フレームワーク環境が必要なため表示のみ)

// 典型的な NgModule 時代のコード(読めればOK、新規では書かない)
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { CommonModule } from '@angular/common';

@NgModule({
  // このモジュールが所有する部品(ここに無ければ他モジュールか standalone)
  declarations: [AppComponent, UserListComponent, YenPipe],

  // 他から機能を借りる(CommonModule は *ngIf などの提供元)
  imports: [BrowserModule, CommonModule, UserRoutingModule],

  // DIへの登録(現代の providedIn: 'root' が主流になる前の形)
  providers: [UserService],

  // アプリの起動起点(AppModule にだけある)
  bootstrap: [AppComponent],
})
export class AppModule {}
サンプルコードで身につける(5本) →

学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。

公式ドキュメントで詳しく ↗