Angularのアップデートに関するメモ帳

Angularの「ng update」の基本的な使い方と、バージョン18から19へアップデートする際の注意点について調査します。
「ng update」の基本コマンドや、使用方法の詳細、依存関係の管理方法について解説します。
また、Angular v18からv19へアップデートする際の推奨手順や、変更点、互換性に関する注意点、エラー対処方法などを整理してお伝えします。
調査が完了したら、詳細をお知らせします。
Angularの「ng update」コマンドの基本とAngular v18からv19へのアップデート
ng updateコマンドの基本的な使い方
ng updateとは: Angular CLIのng update
コマンドは、プロジェクトの依存パッケージを最新バージョンにアップデートし、必要に応じてコードの自動変換(マイグレーション)を行うためのコマンドです (AngularプロジェクトのためのRenovate設定 | lacolaco's marginalia)。特にAngular本体(@angular/coreや@angular/cli)をメジャーバージョンアップする際に利用され、単にパッケージを更新するだけでなく非推奨APIの置き換えや設定ファイルの更新なども自動的に実施します (AngularプロジェクトのためのRenovate設定 | lacolaco's marginalia)。これにより、開発者は手作業の修正を最小限にAngularの最新機能を取り込むことができます。
主なコマンド例: 一般的にAngularを最新の安定版にアップデートするには、プロジェクトのルートディレクトリで以下のように実行します(Angular CLI自体とフレームワークコアを同時に指定します) (ng update • Angular 日本語版):
ng update @angular/cli @angular/core
上記コマンドは、現在のプロジェクトをAngularの最新安定版まで一括更新します (ng update • Angular 日本語版)。特定のメジャーバージョン(例えばv19)へアップデートしたい場合は、パッケージ名にバージョン範囲を指定します (ng update • Angular 日本語版)。例えばAngular 19系へ更新するには次のように実行します。
ng update @angular/cli@^19 @angular/core@^19
※この例では最新の19.x.x系に更新します (ng update • Angular 日本語版)(@latest
タグ指定や^19
指定により、19系の最新パッチ版が適用されます)。
主要なオプション: ng update
にはいくつか便利なオプションがあります。主なものを以下にまとめます。
オプション | 説明 |
---|---|
--next |
次のベータ版やリリース候補(RC)版にアップデートします (ng update • Angular)。 |
--allow-dirty |
Gitリポジトリに未コミットまたは未管理の変更があってもアップデートを許可します (typescript - Repository is not clean. Please commit or stash any changes before updating In Angular 8 - Stack Overflow)(通常、**「リポジトリがクリーンでない」**エラー回避に使用)。 |
--force |
ピア依存関係のバージョン不整合を無視して強制的にアップデートします (typescript - Repository is not clean. Please commit or stash any changes before updating In Angular 8 - Stack Overflow)(依存関係の制約でブロックされる場合に使用。ただし副作用に注意)。 |
--create-commits (-C ) |
アップデートやマイグレーションごとにGitコミットを自動作成します (ng update • Angular)。変更履歴を追跡したいときに便利です。 |
--migrate-only |
パッケージのバージョンは変更せず、マイグレーションスクリプト(コード変換)のみ実行します (ng update • Angular)。--from /--to オプションと併用して特定バージョン間の変換だけを適用できます。 |
使用する場面: ng update
は、Angularのフレームワーク自体やAngular CLI、Angular MaterialなどAngular公式パッケージを新しいメジャー/マイナー版に上げるときに主に使います。例えば「Angular 18から19へ上げたい」「Angular 18.xの最新パッチに上げたい」といった場合です。加えて、Angularと連携する一部のサードパーティライブラリ(NgRxやAngular Firebaseなど)もng update
用のスケマティックを提供している場合があり、その際は同様に ng update パッケージ名
で対応するライブラリのアップデートと自動修正を行えます。通常、メジャーバージョンアップや重要なマイナーアップデートではng update
による自動移行が推奨されており、パッチレベルのアップデート(バグ修正のみ)では単純な依存関係更新でも問題ない場合があります (AngularプロジェクトのためのRenovate設定 | lacolaco's marginalia) (AngularプロジェクトのためのRenovate設定 | lacolaco's marginalia)。
依存関係の更新とマイグレーション: ng update
を実行すると、該当パッケージ(例: @angular/core
)およびそれに関連するパッケージ群をまとめて更新します (AngularプロジェクトのためのRenovate設定 | lacolaco's marginalia)。例えばAngular本体を更新する場合、@angular/core
だけでなく@angular/common
や@angular/compiler
、必要に応じてrxjs
やzone.js
、TypeScriptのバージョンまで含めて適切な組み合わせにアップデートされます (AngularプロジェクトのためのRenovate設定 | lacolaco's marginalia) (Version compatibility • Angular)。さらに、アップデート時には自動的にマイグレーションスクリプトが実行され、古いバージョンで非推奨になった設定やコードが新しい書き方に置き換えられます (AngularプロジェクトのためのRenovate設定 | lacolaco's marginalia)。たとえば、angular.json
から不要になった項目を削除したり、将来的に削除される予定のAPI呼び出しを新しいAPIに書き換えるといった処理が行われます (AngularプロジェクトのためのRenovate設定 | lacolaco's marginalia)。この自動マイグレーションによって、開発者は手作業での大規模な書き換えをせずに安全にアップグレードできます。なお、ng update
実行後には変更点の差分を確認し、アプリケーションが正しく動作するかテストすることが重要です (AngularプロジェクトのためのRenovate設定 | lacolaco's marginalia)。
よくあるエラーと対処法: ng update
コマンドを利用する際に遭遇しやすいエラーとその対処法をいくつか紹介します。
-
「Repository is not clean (リポジトリがクリーンでない)」エラー: アップデート実行時に未コミットの変更があると、このエラーで処理が停止します。対処法は変更をコミットまたはスタッシュしてから再実行することです。どうしてもコミットせずに進めたい場合は、上記の
--allow-dirty
オプションで強行できます (typescript - Repository is not clean. Please commit or stash any changes before updating In Angular 8 - Stack Overflow)が、アップデート後に問題が発生しないか十分注意してください。 -
ピア依存関係の競合によるエラー: 特定のライブラリが要求するAngularのバージョン制約に抵触する場合、
ng update
がブロックされることがあります(例:「requires a peer of @angular/core <18 but 19 found」のようなメッセージ)。この場合、まずそのライブラリ(またはその新バージョン)がAngular最新版をサポートしているか確認しましょう。対応版が存在するなら一緒にアップデートし、不明な場合一時的に--force
オプションで強制アップデートする方法もあります (typescript - Repository is not clean. Please commit or stash any changes before updating In Angular 8 - Stack Overflow)。【※注意】--force
での強制アップデート後は、該当ライブラリが正常に動作するかテストし、必要なら代替ライブラリへの移行を検討してください。 -
グローバルCLIのバージョン不一致: 開発マシンにグローバルインストールされたAngular CLIのバージョンと、プロジェクト内のCLIバージョンが大きく異なると、コマンド実行時に警告が出たり不整合が生じることがあります。アップデート前後にはグローバルのAngular CLIも最新に更新しておくことが推奨されます(例:
npm install -g @angular/cli@19
等)。こうすることでローカルプロジェクトとコマンドの互換性を保てます。 -
その他のエラー: アップデート途中でネットワークエラーやメモリエラーが起きた場合、再度
ng update
を実行すれば途中から続行されます。依存関係解決の不具合で失敗する場合は、一度node_modules
を削除してnpm install
し直す、npm cache clean
するなど環境を整えてから再挑戦してください。アップデート完了後にビルドエラーが発生する場合は、CLIが出力したBreaking Changes(破壊的変更)に関するメッセージやAngular公式の変更ログを確認し、それに従ってコード修正を行います。例えば、Angularのアップデートに伴い型定義が厳密化されてエラーになった場合は型注釈を追加する、不要になったpolyfillsのインポートが削除された場合はコードから参照を外す、といった対応をします。
以上がng update
コマンドの基本的な使い方と注意点です。次に、具体的にAngular v18からv19へのアップデート手順と変更点について詳しく見ていきます。
Angular v18からv19へのアップデート
推奨されるアップデート手順
Angular v18からv19へバージョンアップする際は、以下の手順で進めることが推奨されます。
-
公式情報の確認とバックアップ: まずAngular公式のリリースノートやアップデートガイドを確認し、変更点や注意事項を把握します。重要なプロジェクトであれば事前にソースコードのバックアップやGitブランチの作成を行い、いつでも元の状態に戻せるようにしておきます。
-
Angular CLIの更新: 開発環境にインストールされているAngular CLI(グローバル)を最新バージョン(v19系)に更新します。例えばnpmを利用している場合、
npm install -g @angular/cli@19
を実行します(Linux/macOS環境では先頭にsudo
が必要な場合があります)。これにより、新バージョン用のコマンドが利用可能になります。 -
プロジェクトの依存関係更新: プロジェクトディレクトリに移動し、Angular本体とCLIをv19へアップデートします。具体的には以下のコマンドを実行してください (Guide to update your Angular application v18.0)。
ng update @angular/core@19 @angular/cli@19
CLIが新バージョンのパッケージをインストールし、続いてマイグレーションスクリプトが自動的に走ります。実行中にいくつか質問プロンプトが表示される場合があります。内容を確認し、必要に応じて
Yes/Y
で変更を適用してください。(※ヒント: エラーが発生した場合は前述の対処法セクションを参照してください。) -
関連パッケージの更新: Angular MaterialやAngular CDK等、Angular公式の追加ライブラリを利用している場合は、対応するv19版へアップデートします。例えばMaterialを使っている場合、上記コマンドに続けて
ng update @angular/material@19 @angular/cdk@19
を実行します。その他、フォームや言語サービスなど個別にインストールしているAngularパッケージ(例:@angular/forms
や@angular/localize
)があれば、それらもpackage.jsonのバージョンを確認し必要に応じて更新してください。RxJSについては、Angular 19はRxJS 7系との後方互換を保ちつつ、RxJS 8もサポートしています (Version compatibility • Angular)。RxJS 8を利用したい場合はnpm install rxjs@^8
で手動更新できますが、既存コードとの互換性に注意してください。 -
ビルドとテストの実行: 依存関係の更新が完了したら、
ng serve
やng build
でアプリケーションが正しくビルド・起動できるか確認します。併せてng test
で単体テストがすべて通ることを確認してください。特に大きな変更があった部分(後述の変更点を参照)の周辺は重点的に動作確認します。 -
追加のマイグレーションや手動修正: Angularアップデートによって非推奨APIの置換などは自動で行われますが、新しい推奨手法への移行がオプショナル(任意)になっている箇所もあります。例えば、v19で安定版となったSignalベースの@Input/@Outputやクエリにコードを書き換えたい場合、以下の専用スクリプトを手動で実行できます (Meet Angular v19. In the past two years we doubled down… | by Minko Gechev | Angular Blog) (Meet Angular v19. In the past two years we doubled down… | by Minko Gechev | Angular Blog)。
# @Input()をSignalベースのInputに変換 ng generate @angular/core:signal-input-migration # @ViewChild等のクエリをSignalベースに変換 ng generate @angular/core:signal-queries-migration # 従来のEventEmitter出力を新しい出力APIに変換 ng generate @angular/core:output-migration
上記は必要な場合のみ実行します。また、アップデートガイドに「手動で対応が必要」と記載された項目(Breaking Changes)があれば、その指示に従いコード修正を行ってください。作業が完了したら改めてビルド・テストを行い、アップデート前と同じ機能が正常に動作することを確認しましょう。
Angular v19の主要な変更点と新機能
Angular 19は、開発者体験とパフォーマンスの向上を主眼に、数多くの新機能や改良が盛り込まれています (Meet Angular v19. In the past two years we doubled down… | by Minko Gechev | Angular Blog) (Meet Angular v19. In the past two years we doubled down… | by Minko Gechev | Angular Blog)。v18からv19へのアップデートで特に注目すべき主要ポイントをまとめます。
-
SSR性能の強化(インクリメンタル・ハイドレーション他): サーバサイドレンダリング(SSR)を利用するアプリ向けに大幅な最適化が行われました。まずインクリメンタル・ハイドレーション(incremental hydration)の開発者プレビューが導入され、テンプレート内で
@defer
ディレクティブを付けた部分をユーザーの操作に応じて遅延読み込み・段階的にハイドレーションできるようになりました (What's New in Angular 19: Top Features and Updates) (What's New in Angular 19: Top Features and Updates)。これにより初期ロード時の不要なJS実行を減らし、ページの初期表示を高速化できます。またルート単位のレンダリングモード設定が追加され、各ルート(ページ)ごとに「サーバでレンダリングする」「ビルド時にプリレンダリングする」「クライアント側(SPAとして)処理する」を選択可能になりました (What's New in Angular 19: Top Features and Updates) (What's New in Angular 19: Top Features and Updates)。新しいServerRoute
ツールを使い、SSRすべきルートとそうでないルートをきめ細かく制御できます (What's New in Angular 19: Top Features and Updates)。さらに、SSR時のユーザー操作を損ねないようイベント・リプレイ(Event Replay)機能がデフォルトで有効化されました (Meet Angular v19. In the past two years we doubled down… | by Minko Gechev | Angular Blog)。これは、SSRページでユーザーがハイドレーション完了前に行ったクリック等のイベントを一旦キャプチャしておき、必要なスクリプト読み込み後に遅延実行する仕組みです (What's New in Angular 19: Top Features and Updates) (What's New in Angular 19: Top Features and Updates)。これらSSR周りの新機能(インクリメンタル・ハイドレーション、ルート毎のSSR制御、イベントリプレイ)により、初期表示の体感速度向上とサーバレンダリング時の操作レスポンス改善が期待できます (Angular v19 Released: Top Features and Updates) (Angular v19 Released: Top Features and Updates)。 -
リアクティブプログラミング(Signals)の強化: v16以降プレビュー段階だったAngular Signalsが、v19でさらに強化・安定化されました。まずシグナルベースの@Input/@Output、ViewChild/ContentChild等のクエリAPIが安定版(stable)となり、正式に利用可能になりました (Meet Angular v19. In the past two years we doubled down… | by Minko Gechev | Angular Blog) (Meet Angular v19. In the past two years we doubled down… | by Minko Gechev | Angular Blog)。Signal入力は従来の@Inputと異なり読み取り専用になる(親から渡されたSignalを子コンポーネント側で書き換え不可)点に留意が必要です (Meet Angular v19. In the past two years we doubled down… | by Minko Gechev | Angular Blog)。また、新たに**
linkedSignal
というプリミティブが追加されています。linkedSignal
は他のSignalに依存する可変状態を簡潔に表現するためのAPIで、例えば選択肢リストに基づいて現在の選択項目を表すSignalを自動的に連動させるケースなどで役立ちます (What's New in Angular 19: Top Features and Updates) (What's New in Angular 19: Top Features and Updates)。従来はeffect
で実装していた「依存Signalの変化に追随して値をリセットする」ようなパターンが、linkedSignalによりシンプルに記述可能になります (Meet Angular v19. In the past two years we doubled down… | by Minko Gechev | Angular Blog)。さらにresource
API**(実験的機能)が導入されました。resource()
は非同期処理の結果をSignalと統合して扱うための仕組みで、PromiseやObservableから得た非同期データを直接シグナルの一部として扱えるようになります (Meet Angular v19. In the past two years we doubled down… | by Minko Gechev | Angular Blog)。これにより、HTTPリクエストなどの結果をSignalsリアクティブシステムにスムーズに取り込めるようになります。総じてAngular 19では、Signalsを用いたリアクティブプログラミングが一段と実用的になり、今後のAngularアプリ開発の選択肢として本格的に利用できるようになりました (Meet Angular v19. In the past two years we doubled down… | by Minko Gechev | Angular Blog)。 -
開発体験の改善(Tooling強化): 開発効率を上げるための数々の改善も盛り込まれています。まずAngular CLIの新しいビルドシステムがプレビュー段階で利用可能です。これは内部的にesbuildやViteを採用したビルダーで、既存のWebpackベースビルドよりビルド・リビルド速度が向上します (Meet Angular v19. In the past two years we doubled down… | by Minko Gechev | Angular Blog)。v19ではKarma経由のユニットテストでもこの新ビルダーを試せるようになり(
angular.json
でbuilderMode
を設定)、テスト実行時間も短縮されます (Meet Angular v19. In the past two years we doubled down… | by Minko Gechev | Angular Blog)。またホットモジュールリプレース(HMR)の強化も行われ、スタイルやテンプレートの変更時にページ全体のリロード無しで即座に反映されるようになりました (What's New in Angular 19: Top Features and Updates) (What's New in Angular 19: Top Features and Updates)。従来はHMRでもCSSやHTMLの変更でフルリロードが発生していましたが、v19では状態を保持したまま部分的に更新できるため、フロントエンド開発のライブプレビューが快適になります (What's New in Angular 19: Top Features and Updates)。さらにAngular Language Service(言語サービス)とCLIスケマティックの連携により、コードエディタ上で自動マイグレーションを提案・適用する機能が追加されました (What's New in Angular 19: Top Features and Updates)。たとえば旧来の構文で書かれた@Inputや@ViewChildにカーソルを当てると、エディタ内で最新APIへの変換を適用できるなど、アップデート作業を支援してくれます (What's New in Angular 19: Top Features and Updates)。他にも、不要インポートの自動削除や、Angularチーム公式コンポーネントとしてタイムピッカー(UI用時間入力)コンポーネントの追加など、