SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

次世代Webアプリケーションフレームワーク「Angular」の活用

「Angular」の進化は止まらない――この1年で追加されたバージョン12・13の新機能は?

次世代Webアプリケーションフレームワーク「Angular」の活用 第25回

実装に関連するAngular 13の新機能

 次に、Angular 13の実装に関連した新機能を説明していきます。

動的なコンポーネントの追加がよりシンプルに

 Angular 13では、Web画面上に動的にコンポーネントを追加できます。ボタンを押すごとにコンポーネントが増える図6のサンプルで説明します。

図6 動的にコンポーネントを増やすサンプル(p007-dynamic-component-v12、p008-dynamic-component-v13)
図6 動的にコンポーネントを増やすサンプル(p007-dynamic-component-v12、p008-dynamic-component-v13)

 コンポーネントが動的に追加される<div>要素(詳細はサンプルコード参照)に付与するappDynamicComponentディレクティブは、Angular 12ではリスト11の通り実装します。(1)のコンストラクターで、子要素に対応するviewContainerRefと、コンポーネントを生成するために必要なcomponentFactoryResolverを依存性注入で受け取ります。(2)では、componentFactoryResolver.resolveComponentFactoryメソッドで取得するcomponentFactoryを引数にしてviewContainerRef.createComponentメソッドを実行します。

[リスト11]Angular 12でのappDynamicComponentディレクティブの実装(p007-dynamic-component-v12/src/app/dynamic-component.directive.ts)
@Directive({
  selector: '[appDynamicComponent]'
})
export class DynamicComponentDirective {
  // コンストラクター ...(1)
  // (依存性注入でviewContainerRef、componentFactoryResolverを受け取る)
  constructor(private viewContainerRef: ViewContainerRef,
    private componentFactoryResolver: ComponentFactoryResolver) {
  }
  // コンポーネントを追加 ...(2)
  createSubComponent() {
    const componentFactory
      = this.componentFactoryResolver.resolveComponentFactory(SubComponent);
    this.viewContainerRef.createComponent(componentFactory);
  }
}

 Angular 13ではこの記述が、リスト12の通りシンプルになります。コンストラクター(1)でcomponentFactoryResolverを受け取る必要がなくなり、(2)ではcreateComponentメソッドにコンポーネントクラス(SubComponent)を直接指定できます。

[リスト12]Angular 13でのappDynamicComponentディレクティブの実装(p008-dynamic-component-v13/src/app/dynamic-component.directive.ts)
@Directive({
  selector: '[appDynamicComponent]'
})
export class DynamicComponentDirective {
  // コンストラクター ...(1)
  // (依存性注入でviewContainerRefを受け取る)
  constructor(private viewContainerRef: ViewContainerRef) {
  }
  // コンポーネントを追加 ...(2)
  createSubComponent() {
    this.viewContainerRef.createComponent(SubComponent);
  }
}

インラインフォント展開のAdobe Fonts対応

 Angularでは、参照したWebフォントをビルド時にインライン展開して実行速度を向上できます。Angular 12まではGoogle Fontsに対応していましたが、Angular 13からはAdobe Fontsに対応しました。各フォントを利用する図7のサンプルで説明します。

図7 インラインフォントのサンプル(p009-inline-fonts)
図7 インラインフォントのサンプル(p009-inline-fonts)

 「ng build」でビルド後のindex.htmlでは、図8の通り、Google FontsとAdobe Fontsの指定がインライン展開されます。展開前の記述はサンプルコードを参照してください。

図8 インライン展開されたフォント参照記述(p009-inline-fonts/dist/p009-inline-fonts/index.html)
図8 インライン展開されたフォント参照記述(p009-inline-fonts/dist/p009-inline-fonts/index.html)

Angular Materialのアクセシビリティ(accecibility、a11y)対応

 Angular Materialは、現在MDC Webのコンポーネントと統合作業中で、統合後はアクセシビリティが改善する見込みです。例えば、現状のAngular Materialを利用した図9のサンプルでは、ラジオボタン(<mat-radio-button>)が縦に詰まって表示されます。

図9 現状Angular Materialのラジオボタン(p010-material-default)
図9 現状Angular Materialのラジオボタン(p010-material-default)

 新しいAngular Materialを試すには、「npm install @angular/material-experimental」でパッケージを導入後、モジュールを参照するapp.modules.tsでリスト13の通り、MatRadioModuleの参照先を変更します。

[リスト13]Angular Materialの参照先を変更する記述(p011-material-a11y/src/app/app.module.ts)
// import { MatRadioModule } from '@angular/material/radio'; // 変更前
import { MatRadioModule } from '@angular/material-experimental/mdc-radio'; // 変更後

 変更後のWebページでは、図10の通り、ラジオボタンの間隔が広がります。

図10 新しいAngular Materialのラジオボタン(p011-material-a11y)
図10 新しいAngular Materialのラジオボタン(p011-material-a11y)

Angular 12・13のそのほかの変更点

 これまで紹介してきた以外の変更点を、以下に列挙していきます。詳細は公式アナウンスのブログ記事(Angular12Angular 13)を参照してください。

Ivyへの移行

 次世代ビューエンジン「Ivy」への移行は進み、従来の古い「View Engine」は、Angular 12では非推奨に、Angular 13では非サポートになりました。Angularパッケージ形式を定める「Angular Package Format」も、View Engine関連の記述を削除して更新されました。

Protractorの将来を検討中

 テストフレームワークProtractorは、将来的に別のライブラリーで置き換えることが検討されています。Angular 12以降の新規プロジェクトではProtractorは利用されません。

ドキュメントの更新

 Angularの更新に合わせて、ドキュメントや動画とリソースが整備されました。

ビルドやツールに関する細かい変更

 Angular 12において、以下の変更が行われました。

  • ng buildのデフォルトがproductionビルドに変更
  • 型チェックをより厳密に行うStrictモードがデフォルト有効に変更
  • Visual Studio Code用拡張機能「Angular Language Service」で、Ivy対応がデフォルト有効に変更
  • Angular 11で実験的に導入されたWebpack 5が正式サポート

テストのteardown対応

 単体テストの実行時、それぞれのテスト終了後にブラウザのDOMをクリアする設定がAngular 12.1でオプションとして導入され、13ではデフォルトで有効になりました。

IE11は非推奨から非サポートへ

 IE11は、Angular 12で非推奨、Angular 13で非サポートとなりました。

フレームワークの変更

 RxJSはAndroid 13で7.4に、TypeScriptはAngular 12で4.2、Angular 13では4.4になりました。

コミュニティからの変更点

 Angularコミュニティから提案された改善を随時取り入れています。

まとめ

 本記事では、2021年5月にリリースされたAngular 12と、11月にリリースされたAngular 13について、変更点や追加機能を説明しました。おおむね半年に1回のペースでメジャーリリースが行われ、フレームワークとしての完成度を高めています。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
次世代Webアプリケーションフレームワーク「Angular」の活用連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト  吉川 英一(ヨシカワ エイイチ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/15748 2022/04/04 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー