🔧fix-manifest-json
- プラグイン
- ui5-modernization
- ソース
- GitHub で見る ↗
説明
UI5 linterが報告するものの自動修正できない `manifest.json` の問題を修正します。 次のような場合に使用: linterが以下のルールを出力している場合: - `no-outdated-manifest-version` — `_version` が 2.x でない場合 - `no-legacy-ui5-version-in-manifest` — `minUI5Version` が 1.136 未満の場合 - `no-deprecated-library` — dependenciesに非推奨ライブラリが含まれる場合 - `no-deprecated-component` — dependenciesに非推奨コンポーネントが含まれる場合 - `no-deprecated-api` — 非推奨のビュータイプ、resources/js、非推奨モデルタイプが使用されている場合 - `no-removed-manifest-property` — manifest v2 の async フラグに関する問題がある場合 バージョン、ライブラリ、コンポーネント、ビュータイプに関するエラーが含まれる `manifest.json` ファイルに対してトリガーされます。 `manifest.json` を自動的に更新し、モダンな UI5 との互換性を確保します。
原文を表示
Fix manifest.json issues that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs these rules: - `no-outdated-manifest-version` - For _version not being 2.x - `no-legacy-ui5-version-in-manifest` - For minUI5Version below 1.136 - `no-deprecated-library` - For deprecated libraries in dependencies - `no-deprecated-component` - For deprecated components in dependencies - `no-deprecated-api` - For deprecated view types, resources/js, deprecated model types - `no-removed-manifest-property` - For async flags in manifest v2 Trigger on manifest.json files with errors about version, libraries, components, view types. Automatically updates manifest.json to be modern UI5 compatible.
ユースケース
- ✓UI5 linterが非推奨ルールを報告している
- ✓manifest.jsonのバージョンが古い
- ✓非推奨ライブラリ・コンポーネントを削除したい
- ✓UI5互換性を最新化するとき
本文
Fix manifest.json
This skill fixes manifest.json issues that the UI5 linter detects but cannot auto-fix because they may require understanding of the application's dependencies and structure.
Linter Rules Handled
| Rule ID | Message Pattern | This Skill's Action |
|---|---|---|
no-outdated-manifest-version |
manifest.json must be modernized to Version 2 | Update _version to "2.0.0" |
no-legacy-ui5-version-in-manifest |
Use UI5 version 1.136.0 or higher | Update minUI5Version to "1.136.0" |
no-deprecated-library |
Use of deprecated library '...' | Remove from dependencies/libs |
no-deprecated-component |
Use of deprecated component '...' | Remove from dependencies/components |
no-deprecated-api |
Use of deprecated view type '...' | Change to "XML" |
no-deprecated-api |
Use of deprecated property 'sap.ui5/resources/js' | Remove if empty |
no-deprecated-api |
Use of deprecated class '...' (model types) | Flag for manual modernization |
no-removed-manifest-property |
Property '...' has been removed in Manifest Version 2 | Remove the property |
When to Use
Apply this skill when you see linter output like:
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
Fix Strategy
1. no-outdated-manifest-version - Update _version to 2.0.0
IMPORTANT: Only update the root _version to "2.0.0". Do NOT change nested _version properties inside sap.app, sap.ui, sap.ui5, etc. — those should remain at their current values (e.g., "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",
...
}
}
After updating to version 2.0.0, you MUST also apply these consequential changes:
- Remove async properties (see section 6)
- Rename routing configuration properties (see section 8)
- Add
type: "View"to routing config or targets (see section 8)
2. no-legacy-ui5-version-in-manifest - Update minUI5Version
// Before
"dependencies": {
"minUI5Version": "1.120.0",
...
}
// After
"dependencies": {
"minUI5Version": "1.136.0",
...
}
If minUI5Version is an array, update all entries below 1.136.0.
3. no-deprecated-library - Remove Deprecated Libraries
Remove these deprecated libraries from sap.ui5/dependencies/libs:
sap.ui.commons- Usesap.minsteadsap.ui.ux3- Usesap.mandsap.finsteadsap.makit- Usesap.vizinsteadsap.me- Usesap.minsteadsap.ca.ui- Use standard controlssap.landvisz- Deprecatedsap.ui.vtm- Deprecatedsap.sac.grid- Deprecated since 1.112, removed 1.114sap.ui.suite- Deprecated since 1.108sap.zen.commons- Deprecated since 1.89sap.zen.crosstab- Deprecated since 1.89sap.zen.dsh- Deprecated since 1.89
// Before
"libs": {
"sap.m": {},
"sap.ui.commons": {},
"sap.ui.layout": {}
}
// After
"libs": {
"sap.m": {},
"sap.ui.layout": {}
}
4. no-deprecated-component - Remove Deprecated Components
Remove deprecated components from sap.ui5/dependencies/components.
5. no-deprecated-api - Fix View Types
Change deprecated view types to "XML" (or "Typed" for JS-heavy view cases):
JSON→XMLHTML→XMLJS→XML(or considerTypedview as an alternative for complex JS logic)Template→XML
Applies to:
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"
}
Important: When changing view types, the actual view file must also be converted to XML format. Flag this for manual review.
6. no-removed-manifest-property - Remove Async Properties (Manifest v2)
In manifest version 2.0.0+, the async flag is implicitly true for the root view and the routing configuration, so it must be removed from exactly these two locations:
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"
}
SCOPE WARNING — do NOT remove async from anywhere else. The implicit-async behavior applies only to rootView and routing.config. Other locations where async may legitimately appear (and must be preserved) include:
sap.ui5/models/*/settings/async(e.g., OData/JSON model async loading flag)sap.app/dataSources/*settings that includeasync- Any custom configuration under
sap.ui5/extends,sap.ui5/componentUsages, or third-party namespaces - Any
asyncinside route definitions that is not the top-levelrouting.config.async
The linter rule no-removed-manifest-property only fires for the two paths above. Trust the linter's pointer — only remove the exact properties it flags.
7. no-deprecated-api - Remove sap.ui5/resources/js
If the array is empty, remove the entire js property (and resources if it becomes empty).
// Before
"resources": {
"js": []
}
// After
// (resources section removed if empty)
If not empty, this requires manual modernization to proper module dependencies.
8. Routing Configuration — Rename Properties for Manifest Version 2
When _version is updated to "2.0.0", the routing configuration properties must also be renamed. The view-prefixed property names are deprecated in version 2.
Property renaming rules:
| Old Property (v1.x) | New Property (v2.0.0) | Where |
|---|---|---|
viewPath |
path |
routing.config |
viewName |
name |
routing.config and routing.targets.* |
viewId |
id |
routing.targets.* |
viewLevel |
level |
routing.targets.* |
viewType |
viewType |
Unchanged — keep as-is |
New required property:
| Property | Value | Where |
|---|---|---|
type |
"View" |
routing.config (applies to all targets) OR each individual routing.targets.* entry |
Before (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
}
}
}
After (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
}
}
}
Changes summary:
viewPath→pathin configviewName→namein each targetviewId→idin each targetviewLevel→levelin each targetviewTypestays asviewType(unchanged)asyncremoved only fromrouting.config(implicittruein v2). Do NOT touchasyncon models, dataSources, or other unrelated config — see Section 6 scope warning.type: "View"added to config (alternatively, add"type": "View"to each individual target if mixing views and components)
When to add type to config vs per target:
typein config (most common): All targets are viewstypeper target: Mixed routing targets (some views, some components)
Implementation Steps
- Read and parse the manifest.json file
- For each linter error (identified by rule ID and message):
no-outdated-manifest-version: Update root_versionto"2.0.0"(keep nested_versionvalues unchanged)no-legacy-ui5-version-in-manifest: UpdateminUI5Versionto"1.136.0"no-deprecated-library: Remove the library from dependenciesno-deprecated-component: Remove the component from dependenciesno-deprecated-api(view type): Change to"XML"no-deprecated-api(resources/js): Remove if emptyno-removed-manifest-property: Remove the property
- If
_versionwas updated to 2.0.0, also apply routing modernization:- Rename
viewPath→path,viewName→name,viewId→id,viewLevel→levelin routing config and targets - Add
type: "View"torouting.config(or per target) - Remove
asynconly fromsap.ui5/rootViewandsap.ui5/routing/config. Do NOT removeasyncfrom model settings, dataSources, or any other path — those keep theirasyncflag.
- Rename
- Preserve JSON formatting (indentation)
- Write the updated file
Example Fix
Given linter output:
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
Transform:
// 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
}
}
}
}
}
Notes
- Only update the root
_versionto 2.0.0 — do NOT change nested_versionproperties insidesap.app,sap.ui,sap.ui5, etc. - When updating
_versionto 2.0.0, always apply routing property renames and addtype: "View"in the same pass - Changing view types from JSON/HTML/JS to XML requires the actual view files to be converted - flag this as a follow-up task
- When removing deprecated libraries, check if there are any imports from those libraries in the codebase that need modernization
- The
minUI5Versionupdate means the app won't run on older UI5 versions - this is intentional for modern UI5 compatibility - After updating
_versionto 2.0.0, synchronizationMode and other v1-specific properties should also be removed if present - Manifest v2 strictness: Manifest v2.0.0 enables stricter error handling — syntactical errors in views/fragments now throw errors instead of failing silently
sap.ui/supportedThemescauses an error in manifest v2 — remove it if presentIAsyncContentCreationis NOT enforced by manifest v2 — it must be explicitly added in Component.js by thefix-component-asyncskill (this skill does not handle it)- Typed View alternative: When changing deprecated view types (
JS,JSON,HTML) the default replacement isXML, but for complex JS-heavy views, considerTypedviews as an alternative
Related Skills
- fix-component-async: After updating manifest.json, Component.js needs the
IAsyncContentCreationinterface — defer to that skill for correct placement - fix-bootstrap-params: For deprecated libraries referenced in HTML bootstrap (
data-sap-ui-libs), use fix-bootstrap-params instead of this skill
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。