mcpField
F
fix-manifest-json

fix-manifest-json

github.com/ui5開発44149 回インストール1 週間前に更新
リポジトリ

fix-manifest-json について

UI5 linter の指摘に応じて `manifest.json` を修正するスキルです。バージョン移行、非推奨項目やAPIの処理、ルーティングの更新を行い、無関係な設定は維持します。

主な機能

  1. 01Manifest Version 2 への移行
  2. 02最低 UI5 バージョンの更新
  3. 03非推奨ライブラリとコンポーネントの削除
  4. 04ビュータイプとプロパティの修正
  5. 05Version 2 のルーティング更新

活用シーン

  1. 01UI5 manifest の linter エラー修正
  2. 02バージョン更新時のルーティング刷新
  3. 03非推奨ビュータイプの手動変換準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ui5/plugins-coding-agents --skill fix-manifest-json

インストール後、Claude Code で/fix-manifest-jsonを入力して読み込まれたか確認します。

詳細

manifest.json の修正

このスキルは、UI5 リンターが検出するものの、アプリケーションの依存関係や構造の理解が必要になる場合があるため自動修正できない manifest.json の問題を修正します。

対象となるリンタールール

ルール IDメッセージパターンこのスキルでの対応
no-outdated-manifest-versionmanifest.json を Version 2 に更新する必要があります_version を "2.0.0" に更新する
no-legacy-ui5-version-in-manifestUI5 バージョン 1.136.0 以上を使用するminUI5Version を "1.136.0" に更新する
no-deprecated-library非推奨ライブラリ '...' の使用依存関係/ライブラリから削除する
no-deprecated-component非推奨コンポーネント '...' の使用依存関係/コンポーネントから削除する
no-deprecated-api非推奨のビュータイプ '...' の使用"XML" に変更する
no-deprecated-api非推奨プロパティ 'sap.ui5/resources/js'空の場合は削除する
no-deprecated-api非推奨クラス '...'(モデルタイプ)手動でのモダナイズ対象としてフラグを設定する
no-removed-manifest-propertyプロパティ '...' は Manifest Version 2 で削除されていますプロパティを削除する

使用するタイミング

次のようなリンター出力が表示された場合に、このスキルを適用します。

manifest.json:2:3 error manifest.json must be modernized to Version 2  no-outdated-manifest-version
manifest.json:15:5 error Use UI5 version 1.136.0 or higher in manifest.json  no-legacy-ui5-version-in-manifest
manifest.json:20:7 error Use of deprecated library 'sap.ui.commons'  no-deprecated-library
manifest.json:25:7 error Use of deprecated view type 'JSON'  no-deprecated-api
manifest.json:30:9 error Property '/sap.ui5/rootView/async' has been removed in Manifest Version 2  no-removed-manifest-property

修正方法

1. no-outdated-manifest-version - _version を 2.0.0 に更新する

重要:ルートの _version のみを "2.0.0" に更新してください。sap.app、sap.ui、sap.ui5 などの内部にある入れ子の _version プロパティは変更しないでください。現在の値(例:"1.1.0"、"1.2.0")を維持してください。

// Before
{
  "_version": "1.12.0",
  "sap.app": {
    "_version": "1.1.0",
    ...
  },
  "sap.ui5": {
    "_version": "1.2.0",
    ...
  }
}

// After — only root _version changed
{
  "_version": "2.0.0",
  "sap.app": {
    "_version": "1.1.0",
    ...
  },
  "sap.ui5": {
    "_version": "1.2.0",
    ...
  }
}

バージョンを 2.0.0 に更新した後、次の関連する変更も必ず適用してください。

  • async プロパティを削除する(セクション 6 を参照)
  • ルーティング設定プロパティの名前を変更する(セクション 8 を参照)
  • ルーティング設定またはターゲットに type: "View" を追加する(セクション 8 を参照)
2. no-legacy-ui5-version-in-manifest - minUI5Version を更新する
// Before
"dependencies": {
  "minUI5Version": "1.120.0",
  ...
}

// After
"dependencies": {
  "minUI5Version": "1.136.0",
  ...
}

minUI5Version が配列の場合は、1.136.0 未満のすべてのエントリを更新してください。

3. no-deprecated-library - 非推奨ライブラリを削除する

次の非推奨ライブラリを sap.ui5/dependencies/libs から削除してください。

  • sap.ui.commons - 代わりに sap.m を使用する
  • sap.ui.ux3 - 代わりに sap.m と sap.f を使用する
  • sap.makit - 代わりに sap.viz を使用する
  • sap.me - 代わりに sap.m を使用する
  • sap.ca.ui - 標準コントロールを使用する
  • sap.landvisz - 非推奨
  • sap.ui.vtm - 非推奨
  • sap.sac.grid - 1.112 以降非推奨、1.114 で削除
  • sap.ui.suite - 1.108 以降非推奨
  • sap.zen.commons - 1.89 以降非推奨
  • sap.zen.crosstab - 1.89 以降非推奨
  • sap.zen.dsh - 1.89 以降非推奨
// Before
"libs": {
  "sap.m": {},
  "sap.ui.commons": {},
  "sap.ui.layout": {}
}

// After
"libs": {
  "sap.m": {},
  "sap.ui.layout": {}
}
4. no-deprecated-component - 非推奨コンポーネントを削除する

非推奨コンポーネントを sap.ui5/dependencies/components から削除してください。

5. no-deprecated-api - ビュータイプを修正する

非推奨のビュータイプを "XML" に変更してください(JavaScript を多用するビューの場合は "Typed" にします)。

  • JSON → XML
  • HTML → XML
  • JS → XML(または、複雑な JavaScript ロジックの代替として Typed ビューを検討する)
  • Template → XML

対象:

  • sap.ui5/rootView/type
  • sap.ui5/routing/config/viewType
  • sap.ui5/routing/targets/*/viewType
// Before
"rootView": {
  "viewName": "my.app.view.Main",
  "type": "JSON"
}

// After
"rootView": {
  "viewName": "my.app.view.Main",
  "type": "XML"
}

重要:ビュータイプを変更する場合は、実際のビュー ファイルも XML 形式に変換する必要があります。手動レビュー対象としてフラグを設定してください。

6. no-removed-manifest-property - 非同期プロパティの削除(Manifest v2)

Manifest バージョン 2.0.0 以降では、ルートビューとルーティング設定の async フラグは暗黙的に true となるため、次の 2 か所からのみ削除する必要があります。

  • sap.ui5/rootView/async
  • sap.ui5/routing/config/async
// Before (v2)
"rootView": {
  "viewName": "my.app.view.Main",
  "type": "XML",
  "async": true
}

// After (v2)
"rootView": {
  "viewName": "my.app.view.Main",
  "type": "XML"
}

対象範囲に関する警告 — それ以外の場所から async を削除しないでください。 暗黙的な非同期動作が適用されるのは rootView と routing.config のみです。正当に async が含まれる場合があり、保持する必要があるその他の場所には、次のようなものがあります。

  • sap.ui5/models/*/settings/async(例:OData/JSON モデルの非同期読み込みフラグ)
  • async を含む sap.app/dataSources/* の設定
  • sap.ui5/extends、sap.ui5/componentUsages、またはサードパーティの名前空間にあるカスタム設定
  • ルート定義内の async のうち、トップレベルの routing.config.async ではないもの

リンタールール no-removed-manifest-property が適用されるのは、上記の 2 つのパスのみです。リンターが示す箇所を信頼し、指摘されたプロパティだけを削除してください。

7. no-deprecated-api - sap.ui5/resources/js の削除

配列が空の場合は、js プロパティ全体を削除してください(空になった場合は resources も削除してください)。

// Before
"resources": {
  "js": []
}

// After
// (resources section removed if empty)

空でない場合は、適切なモジュール依存関係に手動でモダナイズする必要があります。

8. ルーティング設定 — Manifest バージョン 2 用のプロパティ名変更

_version を "2.0.0" に更新する場合は、ルーティング設定のプロパティ名も変更する必要があります。view を接頭辞とするプロパティ名は、バージョン 2 では非推奨です。

プロパティ名の変更ルール:

旧プロパティ(v1.x)新プロパティ(v2.0.0)場所
viewPathpathrouting.config
viewNamenamerouting.config と routing.targets.*
viewIdidrouting.targets.*
viewLevellevelrouting.targets.*
viewTypeviewType変更なし — そのまま保持

新たに必須となるプロパティ:

プロパティ値場所
type"View"routing.config(すべてのターゲットに適用)または各 routing.targets.* エントリー

変更前(v1.x):

"routing": {
    "config": {
        "routerClass": "sap.m.routing.Router",
        "viewType": "XML",
        "viewPath": "my.app.view",
        "controlId": "app",
        "controlAggregation": "pages",
        "async": true
    },
    "routes": [
        {
            "name": "main",
            "pattern": "",
            "target": "main"
        }
    ],
    "targets": {
        "main": {
            "viewName": "Main",
            "viewId": "main",
            "viewLevel": 1
        },
        "detail": {
            "viewName": "Detail",
            "viewId": "detail",
            "viewLevel": 2
        }
    }
}

変更後(v2.0.0):

"routing": {
    "config": {
        "routerClass": "sap.m.routing.Router",
        "viewType": "XML",
        "path": "my.app.view",
        "controlId": "app",
        "controlAggregation": "pages",
        "type": "View"
    },
    "routes": [
        {
            "name": "main",
            "pattern": "",
            "target": "main"
        }
    ],
    "targets": {
        "main": {
            "name": "Main",
            "id": "main",
            "level": 1
        },
        "detail": {
            "name": "Detail",
            "id": "detail",
            "level": 2
        }
    }
}

変更内容の概要:

  • config の viewPath → path
  • 各ターゲットの viewName → name
  • 各ターゲットの viewId → id
  • 各ターゲットの viewLevel → level
  • viewType は viewType のまま(変更なし)
  • async は routing.config からのみ削除(v2 では暗黙的に true)。モデル、dataSources、その他の無関係な設定にある async には手を加えないでください。セクション 6 の対象範囲に関する警告を参照してください。
  • config に type: "View" を追加(ビューとコンポーネントが混在する場合は、代わりに各ターゲットに "type": "View" を追加)

config に type を追加する場合とターゲットごとに追加する場合:

  • config に type を追加(最も一般的):すべてのターゲットがビューの場合
  • ターゲットごとに type を追加:ルーティングターゲットが混在する場合(ビューとコンポーネントの両方がある場合)

実装手順

  1. manifest.json ファイルを読み込み、解析します
  2. 各リンターエラーについて(ルール ID とメッセージで特定):
    • no-outdated-manifest-version:ルートの _version を "2.0.0" に更新します(ネストされた _version の値は変更しません)
    • no-legacy-ui5-version-in-manifest:minUI5Version を "1.136.0" に更新します
    • no-deprecated-library:依存関係からライブラリを削除します
    • no-deprecated-component:依存関係からコンポーネントを削除します
    • no-deprecated-api(ビュータイプ):"XML" に変更します
    • no-deprecated-api(resources/js):空の場合は削除します
    • no-removed-manifest-property:プロパティを削除します
  3. _version を 2.0.0 に更新した場合は、ルーティングのモダナイズも適用します。
    • ルーティング設定とターゲット内の viewPath → path、viewName → name、viewId → id、viewLevel → level を変更します
    • routing.config(またはターゲットごと)に type: "View" を追加します
    • async は sap.ui5/rootView と sap.ui5/routing/config からのみ削除します。モデルの設定、dataSources、その他のパスから async を削除しないでください。これらの async フラグは保持します。
  4. JSON の書式(インデント)を保持します
  5. 更新したファイルを書き込みます

修正例

リンターの出力:

manifest.json:2:3 error manifest.json must be modernized to Version 2  no-outdated-manifest-version
manifest.json:15:5 error Use UI5 version 1.136.0 or higher in manifest.json  no-legacy-ui5-version-in-manifest
manifest.json:20:7 error Use of deprecated library 'sap.ui.commons'  no-deprecated-library
manifest.json:35:9 error Property '/sap.ui5/rootView/async' has been removed in Manifest Version 2  no-removed-manifest-property
manifest.json:40:9 error Property '/sap.ui5/routing/config/async' has been removed in Manifest Version 2  no-removed-manifest-property

変換:

// Before
{
  "_version": "1.12.0",
  "sap.app": {
    "_version": "1.1.0",
    ...
  },
  "sap.ui5": {
    "_version": "1.2.0",
    "dependencies": {
      "minUI5Version": "1.84.0",
      "libs": {
        "sap.m": {},
        "sap.ui.commons": {},
        "sap.ui.layout": {}
      }
    },
    "rootView": {
      "viewName": "my.app.view.Main",
      "type": "XML",
      "async": true
    },
    "routing": {
      "config": {
        "routerClass": "sap.m.routing.Router",
        "viewType": "XML",
        "viewPath": "my.app.view",
        "controlId": "app",
        "controlAggregation": "pages",
        "async": true
      },
      "routes": [
        { "name": "main", "pattern": "", "target": "main" }
      ],
      "targets": {
        "main": {
          "viewName": "Main",
          "viewId": "main",
          "viewLevel": 1
        }
      }
    }
  }
}

// After
{
  "_version": "2.0.0",
  "sap.app": {
    "_version": "1.1.0",
    ...
  },
  "sap.ui5": {
    "_version": "1.2.0",
    "dependencies": {
      "minUI5Version": "1.136.0",
      "libs": {
        "sap.m": {},
        "sap.ui.layout": {}
      }
    },
    "rootView": {
      "viewName": "my.app.view.Main",
      "type": "XML"
    },
    "routing": {
      "config": {
        "routerClass": "sap.m.routing.Router",
        "viewType": "XML",
        "path": "my.app.view",
        "controlId": "app",
        "controlAggregation": "pages",
        "type": "View"
      },
      "routes": [
        { "name": "main", "pattern": "", "target": "main" }
      ],
      "targets": {
        "main": {
          "name": "Main",
          "id": "main",
          "level": 1
        }
      }
    }
  }
}

注意事項

  • ルートの _version のみを 2.0.0 に更新してください。sap.app、sap.ui、sap.ui5 などの内部にある _version プロパティは変更しないでください。
  • _version を 2.0.0 に更新する際は、必ず同じ手順でルーティングプロパティの名前を変更し、type: "View" を追加してください。
  • ビューの種類を JSON/HTML/JS から XML に変更する場合は、実際のビューのファイルも変換する必要があります。後続タスクとして明記してください。
  • 非推奨のライブラリを削除する際は、コードベースにモダナイズが必要な該当ライブラリからのインポートがないか確認してください。
  • minUI5Version を更新すると、古い UI5 バージョンではアプリが実行できなくなります。これは、最新の UI5 との互換性を確保するための意図的な変更です。
  • _version を 2.0.0 に更新した後、synchronizationMode やその他の v1 固有プロパティが存在する場合は、それらも削除してください。
  • Manifest v2 の厳格性:Manifest v2.0.0 ではエラー処理がより厳格になります。ビュー/フラグメントの構文エラーは、これまでのように無視されず、エラーを発生させます。
  • sap.ui/supportedThemes は manifest v2 でエラーの原因になります。存在する場合は削除してください。
  • Manifest v2 では IAsyncContentCreation は強制されません。fix-component-async スキルによって Component.js に明示的に追加する必要があります(このスキルでは対応しません)。
  • Typed View の代替案:非推奨のビューの種類(JS、JSON、HTML)を変更する場合、既定の置き換え先は XML ですが、JS を多用する複雑なビューでは、代替案として Typed ビューを検討してください。

関連スキル

  • fix-component-async:manifest.json の更新後は、Component.js に IAsyncContentCreation インターフェイスが必要です。正しい配置については、このスキルを参照してください。
  • fix-bootstrap-params:HTML のブートストラップ(data-sap-ui-libs)で参照されている非推奨のライブラリについては、このスキルではなく fix-bootstrap-params を使用してください。

コメント