Skip to content

Property 'ɵunwrapWritableSignal' does not exist on type エラーの解決方法

問題の説明

Angularプロジェクトで作業中に、以下のエラーが発生していませんか?

bash
Property 'ɵunwrapWritableSignal' does not exist on type 'typeof import("/path/to/node_modules/@angular/core/index")'.

このエラーは主に以下の条件で発生します:

  • Angular 14以降を使用しているプロジェクト
  • [(ngModel)]ディレクティブを使用しているテンプレートファイル
  • Visual Studio CodeでAngular Language Service拡張を利用中
  • プロジェクト自体は正常にコンパイル・実行可能(エラーはIDE上でのみ表示)

重要な点として、このエラーはプロジェクトのランタイムエラーではなく、Angular Language Service拡張機能のバグによって引き起こされるものです。実際のアプリケーション動作には影響しませんが、開発体験を著しく低下させます。

解決策

🚀 方法1: Angular Language Service拡張機能の更新(推奨)

この問題の根本的な解決策は、VS Codeの拡張機能を最新版に更新することです。

最新版への更新手順

  1. VS Codeで拡張機能タブ(Ctrl+Shift+X)を開く
  2. "Angular Language Service"を検索
  3. 更新ボタンが表示されたらクリックして最新版に更新
  4. VS Codeを再起動

バージョン確認ポイント

  • v17.3.1以降を使用すれば問題は修正されています
  • 現在のバージョンは拡張機能の詳細画面で確認可能
  • アップデート後にエラーが解消しない場合は、一度拡張機能をアンインストールして再インストール

更新メリット

  • バグ修正が公式に適用されている
  • ダウングレード不要で最新機能を維持可能
  • 開発環境が安定化する

⚙ 方法2: angular.jsonのビルド設定変更

拡張機能の更新で解決しない場合、プロジェクト設定の変更で対処できる可能性があります。

json
{
  "projects": {
    "your-project-name": {
      "architect": {
        "build": {
          "options": {
            "aot": false,
            "buildOptimizer": false,
            "optimization": false,
            "sourceMap": true,
            "vendorChunk": true
          }
        }
      }
    }
  }
}

設定変更の注意点

  • この設定は開発環境のみで使用してください
  • optimization: falsebuildOptimizer: falseは本番ビルドでは非推奨
  • パフォーマンス低下の可能性があるため一時的な対処として使用

変更後はプロジェクトを再起動:

bash
npm run start
# または
ng serve

🔍 方法3: 依存関係とモジュールの確認

上記方法で解決しない場合、プロジェクト構成を再確認します。

  1. FormsModuleのインポート確認

    typescript
    // app.module.ts またはコンポーネントファイル
    import { FormsModule } from '@angular/forms';
    
    @NgModule({
      imports: [
        FormsModule // 必須
      ]
    })
  2. 拡張機能の競合チェック

    • 他のAngular関連拡張機能を一時無効化
    • 特にTypeScript/Ionic/Angular ESLint系拡張に注意
  3. Node.jsバージョンの互換性

    bash
    node -v  # Angular 14はNode 14.x-16.x推奨
    nvm use 16 # バージョン管理ツールで変更

根本原因と技術的背景

このエラーが発生する主な原因は:

  • Angular Language Serviceの内部関数ɵunwrapWritableSignal参照エラー
  • Angular 14以降のSignal導入に伴う変更に対応した拡張機能の不具合
  • VS Code拡張側のAngularコアバージョンとの不一致

ɵプレフィックスはAngularの内部APIを示し、直接使用するものではありません。Language Serviceが内部APIを誤って参照するとこのエラーが発生します。

結論

ɵunwrapWritableSignalエラー解決の最善策は:

  1. Angular Language Service拡張をv17.3.1以降に更新
    (VS Code拡張市場で最新版をダウンロード可能)

  2. それでも解決しない場合
    angular.jsonのビルド最適化設定を一時無効化
    → Node.jsバージョンを16.xにダウングレード

  3. 最終確認
    FormsModuleのインポート状態を確認
    → 拡張機能の競合可能性を調査

これら対策で殆どの場合、IDE上のエラー表示が解消します。根本的解決には常に最新版の公式拡張機能を使用することが重要です。