SHOEISHA iD

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

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

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

「Angular」17の新機能を解説──シンプルで使いやすい記法が多数登場!

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

SSR/SSGに関する改善

 SSR(Server-Side Rendering、サーバーサイドレンダリング)はサーバー側でWebページの内容を生成する技術、SSG(Static Site Generation、静的サイト生成)はコンパイル時にWebページの内容を生成しておく技術で、いずれもパフォーマンス向上の効果が期待できます。Angular 17ではSSR/SSGへの対応が改善されました。

SSR/SSG対応プロジェクトを生成可能に

 Angular 17では、Angular CLIでのプロジェクト生成時にSSR/SSGを有効にする選択肢が提供されるようになりました(図9)。なお、Angular 16で開発プレビューとして導入されたハイドレーションがAngular 17では正式版となり、SSR/SSGを有効にするとデフォルトで有効になります(ハイドレーションについてはAngular 16の紹介記事も参照してください)。

図9 Angular CLIでのプロジェクト生成時にSSR/SSGを有効にする選択肢
図9 Angular CLIでのプロジェクト生成時にSSR/SSGを有効にする選択肢

 ここでは、図9の指定で生成したプロジェクトをもとに実装したサンプル(p005-ssr-ssg、図10)で、Angular 17のSSR/SSG対応について説明していきます。このサンプルではルート(URLのパス)によって、「ルーターの出力」部の内容が変わります。

図10 SSR/SSG対応のサンプル(p005-ssr-ssg)
図10 SSR/SSG対応のサンプル(p005-ssr-ssg)

 このサンプルのルートと、「ルーターの出力」部に表示されるコンポーネントは表1の通りです。実装の詳細はサンプルコードを参照してください。

表1 図10のサンプルコードにおけるルートとコンポーネント
No. ルート 表示されるコンポーネント
1 /(ホーム) DefaultComponent
2 /comp1 Comp1Component
3 /comp2 Comp2Component
4 /comp1/<ID> Comp1Component(コンポーネント内にIDが表示される)

 このサンプルを「ng build」コマンドでビルドすると、dist/p005-ssr-ssgフォルダーに成果物が出力されます。このうち、browserフォルダー(クライアント側の成果物)を見ると、SSGにより、表1のNo.1~3のルートに対応する静的ページのindex.htmlが出力されていることがわかります(No.4のルートはIDが可変なので、SSGで静的ページを生成できません)。

図11 SSGで出力されたindex.html(p005-ssr-ssg)
図11 SSGで出力されたindex.html(p005-ssr-ssg)

 成果物を動作させるには、serverフォルダー(サーバー側の成果物)に含まれるserver.mjsを指定して、「node server.mjs」と実行し、Webブラウザーで「http://localhost:4000」にアクセスします。表1のNo.1~3のルートにアクセス(してWebブラウザーを再読込)した時はSSGによる静的ページが表示され、SSGで静的ページが生成されないNo.4のルートにアクセスした時は、SSRによりサーバーサイドでWebページが生成されます。ソースコード(図12)を見ると、サーバーサイドで生成されたWebページの内容を確認できます(ソースコード内にWebページのテキストやルートのIDが含まれることに注目してください)。

図12 SSRで出力されたWebページのソースコード(p005-ssr-ssg)
図12 SSRで出力されたWebページのソースコード(p005-ssr-ssg)

Firebaseデプロイの改善

 Firebaseのコマンドラインツール(Firebase CLI)に、Angular(などのWebフレームワーク)をデプロイ時に自動検出して処理する機能が、早期プレビューとして実装されました。以下で利用方法を説明していきます。なお、以下の説明では、Firebase CLIはインストール済みで、「firebase login」コマンドでGoogleアカウントにログイン済みであることを想定します。Firebase CLIの詳細は公式ドキュメントも参考にしてください。

 まず、「firebase experiments:enable webframeworks」コマンドで早期プレビュー機能を有効にします(このコマンドは1回だけ実行すればよいです)。次に、任意のフォルダー(ここでは「p005-ssr-ssg」と同じパスに作成した「p006-firebase」フォルダー)で「firebase init hosting」コマンドを実行します(図13)。

図13 Firebase CLIでAngularプロジェクトを設定する手順(p006-firebase)
図13 Firebase CLIでAngularプロジェクトを設定する手順(p006-firebase)

 ①でデプロイ先のFirebaseプロジェクト(既存のプロジェクトを使うか新規作成するかを選択可能)、②でデプロイするプロジェクトを指定します。②の「Do you want to use a web framework?」で「y」(Yesの意味)、「What folder would you like to ...」でAngularプロジェクトフォルダー(この場合は「../p005-ssr-ssg」)を指定すると、「Detected an existing Angular codebase...」と表示され、Angularのプロジェクトが自動検出されます。そのほかのオプションはデフォルトを受け入れると、AngularのプロジェクトをFirebaseにデプロイするための設定ファイルが出力されます。

 図13のコマンドを実行完了後、「firebase deploy」コマンドで、先ほど指定したAngularプロジェクトがFirebaseにデプロイされます。このとき、プロジェクトに含まれるSSR/SSGがFirebase上で動作するよう、自動的に処理されます。

 なお、本機能の利用に当たっては、以下の注意が必要です。

  • デプロイ先Firebaseプロジェクトは、従量制プラン(Blaze)の契約が必要です。
  • 記事執筆時点では、プロジェクトに含まれるserver.tsで「run();」をコメントアウトする必要があります(コメントアウトしないとFirebaseでSSRが動作しません)。本機能は早期プレビューなので、将来改善される可能性があります。

そのほかの変更・改善点

 ここまで説明してきた以外の主な変更・改善点を以下に記述します。

開発プレビュー版から正式版への移行

 これまで開発プレビュー版だったSignalや、Vite/esbuild利用のビルドが正式版になりました。

スタンドアロンAPIがデフォルトに

 Angular 15で正式版になったスタンドアロンコンポーネントなどが、プロジェクト生成時のデフォルトになりました。

Angular Materialのレガシーコンポーネントが削除

 UIライブラリー「Angular Material」のバージョン17では、バージョン15でレガシーとなった古いコンポーネントが削除されました。なお、Angular 18まではAngular Material 16と組み合わせてレガシーコンポーネントが利用できるとされています。

コンポーネントのスタイル指定が簡略化

 これまでコンポーネントのスタイル指定(styles、styleUrls)は、リスト12の通り、配列形式で指定してきました。

[リスト12]コンポーネントにおける従来のスタイル指定(p007-style/src/app/old-style.component.ts)
@Component({
  styles: [`
(略:CSSの記述)
  `],
  styleUrls: ['./styles.css']
})

 しかし、Angular 17からはリスト13の通り、配列ではない指定ができるようになりました。このとき「styleUrls」のプロパティ名が「styleUrl」に変更されていることに注意してください(「styles」は変わりません)。

[リスト13]コンポーネントにおける新しいスタイル指定(p007-style/src/app/new-style.component.ts)
@Component({
  styles: `
(略:CSSの記述)
  `,
  styleUrl: './styles.css'
})

まとめ

 本記事では、2023年11月にリリースされたAngular 17の変更点や追加機能を説明しました。Angular独自の記法をよりシンプルに置き換える改善とともに、angular.dev Webページで学習環境を充実させるなど、より多くの開発者がAngularに取り組みやすいよう改善が行われています。

参考資料

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
次世代Webアプリケーションフレームワーク「Angular」の活用連載記事一覧

もっと読む

この記事の著者

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

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/18959 2024/02/09 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング