fix-manifest-json について
UI5 linter の指摘に応じて `manifest.json` を修正するスキルです。バージョン移行、非推奨項目やAPIの処理、ルーティングの更新を行い、無関係な設定は維持します。
主な機能
- 01Manifest Version 2 への移行
- 02最低 UI5 バージョンの更新
- 03非推奨ライブラリとコンポーネントの削除
- 04ビュータイプとプロパティの修正
- 05Version 2 のルーティング更新
活用シーン
- 01UI5 manifest の linter エラー修正
- 02バージョン更新時のルーティング刷新
- 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-version | manifest.json を Version 2 に更新する必要があります | _version を "2.0.0" に更新する |
no-legacy-ui5-version-in-manifest | UI5 バージョン 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→XMLHTML→XMLJS→XML(または、複雑な JavaScript ロジックの代替としてTypedビューを検討する)Template→XML
対象:
sap.ui5/rootView/typesap.ui5/routing/config/viewTypesap.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/asyncsap.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) | 場所 |
|---|---|---|
viewPath | path | routing.config |
viewName | name | routing.config と routing.targets.* |
viewId | id | routing.targets.* |
viewLevel | level | routing.targets.* |
viewType | viewType | 変更なし — そのまま保持 |
新たに必須となるプロパティ:
| プロパティ | 値 | 場所 |
|---|---|---|
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を追加:ルーティングターゲットが混在する場合(ビューとコンポーネントの両方がある場合)
実装手順
- manifest.json ファイルを読み込み、解析します
- 各リンターエラーについて(ルール 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:プロパティを削除します
_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フラグは保持します。
- ルーティング設定とターゲット内の
- JSON の書式(インデント)を保持します
- 更新したファイルを書き込みます
修正例
リンターの出力:
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 を使用してください。