claude-skills/

Anthropic公式スキル・プラグインの日本語ディレクトリ

last sync 22h ago
スキルOfficialdevelopment

🔧fix-manifest-json

プラグイン
ui5-modernization

説明

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 - Use sap.m instead
  • sap.ui.ux3 - Use sap.m and sap.f instead
  • sap.makit - Use sap.viz instead
  • sap.me - Use sap.m instead
  • sap.ca.ui - Use standard controls
  • sap.landvisz - Deprecated
  • sap.ui.vtm - Deprecated
  • sap.sac.grid - Deprecated since 1.112, removed 1.114
  • sap.ui.suite - Deprecated since 1.108
  • sap.zen.commons - Deprecated since 1.89
  • sap.zen.crosstab - Deprecated since 1.89
  • sap.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):

  • JSONXML
  • HTMLXML
  • JSXML (or consider Typed view as an alternative for complex JS logic)
  • TemplateXML

Applies to:

  • 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"
}

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/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"
}

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 include async
  • Any custom configuration under sap.ui5/extends, sap.ui5/componentUsages, or third-party namespaces
  • Any async inside route definitions that is not the top-level routing.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:

  • viewPathpath in config
  • viewNamename in each target
  • viewIdid in each target
  • viewLevellevel in each target
  • viewType stays as viewType (unchanged)
  • async removed only from routing.config (implicit true in v2). Do NOT touch async on 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:

  • type in config (most common): All targets are views
  • type per target: Mixed routing targets (some views, some components)

Implementation Steps

  1. Read and parse the manifest.json file
  2. For each linter error (identified by rule ID and message):
    • no-outdated-manifest-version: Update root _version to "2.0.0" (keep nested _version values unchanged)
    • no-legacy-ui5-version-in-manifest: Update minUI5Version to "1.136.0"
    • no-deprecated-library: Remove the library from dependencies
    • no-deprecated-component: Remove the component from dependencies
    • no-deprecated-api (view type): Change to "XML"
    • no-deprecated-api (resources/js): Remove if empty
    • no-removed-manifest-property: Remove the property
  3. If _version was updated to 2.0.0, also apply routing modernization:
    • Rename viewPathpath, viewNamename, viewIdid, viewLevellevel in routing config and targets
    • Add type: "View" to routing.config (or per target)
    • Remove async only from sap.ui5/rootView and sap.ui5/routing/config. Do NOT remove async from model settings, dataSources, or any other path — those keep their async flag.
  4. Preserve JSON formatting (indentation)
  5. 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 _version to 2.0.0 — do NOT change nested _version properties inside sap.app, sap.ui, sap.ui5, etc.
  • When updating _version to 2.0.0, always apply routing property renames and add type: "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 minUI5Version update means the app won't run on older UI5 versions - this is intentional for modern UI5 compatibility
  • After updating _version to 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/supportedThemes causes an error in manifest v2 — remove it if present
  • IAsyncContentCreation is NOT enforced by manifest v2 — it must be explicitly added in Component.js by the fix-component-async skill (this skill does not handle it)
  • Typed View alternative: When changing deprecated view types (JS, JSON, HTML) the default replacement is XML, but for complex JS-heavy views, consider Typed views as an alternative

Related Skills

  • fix-component-async: After updating manifest.json, Component.js needs the IAsyncContentCreation interface — 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 による自動翻訳です。