dx-migrate-js-to-ts-sdk について
dx-migrate-js-to-ts-sdkは、Contentstack Delivery SDKのコードをJavaScriptからTypeScriptへ移行する開発者向けスキルです。APIを対応付けてコードを書き換え、パッケージ変更や非対応パターンも示します。
主な機能
- 01JavaScript APIをTypeScript相当のAPIに対応付け
- 02SDKコードをTypeScriptに書き換え
- 03Stack、Entries、Assets、Queryを対象
- 04パッケージと初期化の変更点を説明
- 05制限と非対応パターンを明示
- 06比較と移行例を提示
活用シーン
- 01既存のDelivery SDKコードを変換
- 02JavaScriptとTypeScriptのクエリAPIを比較
- 03キャッシュやutilsの移行変更を計画
- 04書き換え前に機能制限を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ contentstack/ contentstack-agent-skills --skill dx-migrate-js-to-ts-sdkインストール後、Claude Code で/dx-migrate-js-to-ts-sdkを入力して読み込まれたか確認します。
詳細
dx-migrate-js-to-ts-sdk
説明
Contentstack Delivery SDK のコードを JavaScript から TypeScript に移行します。動作を維持しながら、セットアップ、初期化、Stack、Entries、Assets、Query、ページネーション、キャッシュ、utils、taxonomy、画像変換の使用方法を書き換え、TypeScript 固有の違いを明示します。
使用する場面
ユーザーが Contentstack Delivery SDK のコードを JavaScript から TypeScript に移行したい場合に使用します。 Stack、Entries、Assets、Query、ページネーション、キャッシュ、utils、taxonomy、画像変換に関する JavaScript SDK と TypeScript SDK の API を比較したい場合に使用します。 ユーザーが移行にすぐ使える書き換え、並べて比較できる例、または破壊的変更と制限事項の簡潔なリストを必要としている場合に使用します。
ユーザーの課題
ユーザーは、機能を失うことなく、既存の Contentstack Delivery SDK コードを JavaScript から TypeScript に移行する必要があります。API の違い、必要なパッケージ、TypeScript 固有のパターン、サポートされていない JavaScript の動作を、動作するコードに明確に反映する必要があります。
成功基準
JavaScript SDK に対応する TypeScript SDK の API を正しく特定します。 ソースコードが提供された場合、コードを有効な TypeScript SDK の使用方法に書き換えます。 必要なインストール、初期化の変更、TypeScript 固有のヘルパーの使用方法を明示します。 再設計が必要になる可能性のある制限事項やサポートされていないパターンを強調します。 コードですぐに使用できる移行ガイダンスと例を提示します。
想定される入力
- 既存の JavaScript SDK コードまたはスニペット
- Node.js や React Native などの対象ランタイム環境
- Stack、Entries、Assets、Query、キャッシュ、utils、taxonomy、画像変換など、対象となる SDK の領域
- ユーザーが説明、移行手順、または書き換え済みの TypeScript コードのどれを希望するか
想定される出力
- 移行の概要
- API の対応関係に関する説明
- 書き換え済みの TypeScript コード例
- 制限事項やサポートされていない機能に関する警告
- 必要に応じた JavaScript と TypeScript の比較
ユーザーリクエストの例
- この Contentstack JavaScript SDK のコードを TypeScript に移行してください。
- この Stack、Entry、Query の使用方法を TypeScript Delivery SDK 向けに書き換えてください。
- この JavaScript の Contentstack スニペットに相当する TypeScript のコードを見せてください。
- contentstack から @contentstack/delivery-sdk に移行する際に必要な変更は何ですか?
- TypeScript Delivery SDK に移行する際の制限事項は何ですか?
- TypeScript Delivery SDK ではキャッシュポリシーの使用方法をどのように書き換えますか?
- JavaScript の utils を使用した HTML レンダリングを TypeScript に移行するにはどうすればよいですか?
- この taxonomy クエリを JavaScript SDK から TypeScript に変換してください。
ワークフローの概要
SDK の領域と現在の JavaScript のパターンを特定します。 JavaScript API を対応する TypeScript の API にマッピングします。 パッケージのインストール、インポート、初期化を調整します。 TypeScript の型と SDK メソッドを使用してコードを書き換えます。 制限事項、キャッシュ要件、utils の変更、サポートされていないクエリパターンを明示します。 簡潔な移行の概要と例を提示します。
指示
範囲
ユーザーによる Contentstack Delivery SDK コードの JavaScript から TypeScript への移行を支援します。依頼された場合、またはソースコードが提供された場合は、コードを書き換えます。正確な API 対応関係、インストール手順、初期化、型付け、機能の違いに重点を置きます。
移行ルール
@contentstack/delivery-sdk の TypeScript SDK に相当する機能を優先します。可能な限り動作を維持します。サポートされていない JavaScript のパターン、TypeScript のみの追加機能、必要なパッケージの変更を明示します。リファレンスドキュメントにない SDK メソッドを作り出さないでください。
主な対応関係
contentstack.Stack(...) ではなく contentstack.stack(...) を使用します。適切に stack.contentType(...), entry(...), asset(...), query(), fetch(), find(), paginate(), next(), previous(), locale(), includeReference(), includeEmbeddedItems(), includeContentType(), includeCount() および taxonomy の各メソッドを使用します。キャッシュのサポートには @contentstack/persistance-plugin が、utils の使用には @contentstack/utils が必要であることに注意してください。
制限事項
URL の 8 KB 制限、1 つのクエリで複数のコンテンツタイプを参照できないこと、Global Field のスキーマを直接クエリできないことを明記してください。関連する場合は、コンテンツタイプの詳細を取得するために include_global_field_schema を使用することを提案してください。assetFields のサポートは NA 地域に限定されていることに触れてください。
例
ユーザーがサポートを求めている場合は、移行例を少なくとも 1 つ含めてください。有用な場合は、コードを変更前と変更後で並べて示すなど、比較しやすい形式を優先してください。ユーザーがソースコードを提示した場合は、書き換えた TypeScript 版と、変更点の簡潔な概要を返してください。関連する場合は、キャッシュ、utils、クエリ、タクソノミー、ページネーションの例を含めてください。
出力形式
簡潔に、移行を重視してください。 コード例にはコードブロックを使用してください。 役立つ場合は、JavaScript と TypeScript を並べて示してください。 サポートされていない動作や変更された動作は、明確に示してください。 ソースコードが提示された場合は、書き換えた TypeScript 版を含めてください。 リファレンスドキュメントにない SDK メソッドを作り出さないでください。
ツールに関する注意事項
特に必要がない限り、ツールは不要です。
コードが提示された場合は、変換と説明のみに注力してください。
キャッシュが関係する場合は、永続化プラグインが必要であることに触れてください。
utils が関係する場合は、@contentstack/utils の別途インストールが必要であることに触れてください。
画像変換について質問された場合は、ドキュメントに記載されている ImageTransform メソッドのみを使用してください。
セキュリティ
デフォルトのルール
- デプロイトークンや環境シークレットを決して公開しないでください。
- 実行前にデプロイ先を検証してください。
- 本番環境へのデプロイには確認を必須としてください。
- レビューなしに本番環境へ自動デプロイしないでください。
破壊的な操作
破壊的な操作は実行しないでください。削除、上書き、コンテンツの公開を伴うリクエストには、事前に明示的な確認を求め、影響を説明してください。
シークレット
配信トークン、API キー、その他のシークレットを要求、公開、またはそのまま出力しないでください。コードサンプルにシークレットが含まれている場合は、プレースホルダーに置き換えてください。
環境変数
環境変数が必要な場合は、プレースホルダー名を使用し、想定される値を説明してください。実際の値を出力したり、文脈からシークレットを推測したりしないでください。
製品コンテキスト
-
- 製品:Developer Experience
-
- 説明:開発者体験向けツール
-
- 製品の安全ルール:- デプロイトークンや環境シークレットを決して公開しないでください。
- 実行前にデプロイ先を検証してください。
- 本番環境へのデプロイには確認を必須としてください。
- レビューなしに本番環境へ自動デプロイしないでください。
例
基本的な SDK インストールの移行(few shot *)
ユーザー: JavaScript Contentstack Delivery SDK から TypeScript に移行するにはどうすればよいですか?
アシスタント: @contentstack/delivery-sdk@latest をインストールし、インポートを @contentstack/delivery-sdk に切り替えて、初期化処理を contentstack.Stack(...) から contentstack.stack(...) に更新してください。キャッシュが必要な場合は、@contentstack/persistance-plugin@latest をインストールしてください。utils が必要な場合は、@contentstack/utils@latest をインストールしてください。
コアパッケージとインポートの変更点を示します。
Stack の同期処理の移行(few shot *)
ユーザー: この同期コードを TypeScript に変換してください:Stack.sync({ init: true, locale: 'en-us' })
アシスタント: TypeScript SDK の stack インスタンスを使用し、stack.sync({ locale: 'en-us' }) を呼び出してください。TypeScript ガイドでは、初回同期に init: true は使用しません。
同期 API の違いを示します。
エントリー取得の移行(few shot *)
ユーザー: Stack.ContentType('blog').Entry('uid').only('title').toJSON().fetch() に相当する TypeScript のコードは何ですか?
アシスタント: TypeScript SDK では、stack.contentType('blog').entry('uid').only('title').fetch() を使用してください。型付きの結果が必要な場合は、fetch<BlogEntry>() のようにジェネリック型またはインターフェースを追加してください。
エントリー API の対応関係と型付けのパターンを示します。
参照と並べ替えを使ったクエリの書き換え(few shot)
ユーザー: この JavaScript のクエリを TypeScript 用に書き換えてください:Stack.ContentType('blog').Query().where('title', 'welcome').includeCount().toJSON().find()
アシスタント: TypeScript SDK では、stack.contentType('blog').entry().query().where('title', 'welcome').includeCount().find() を使います。参照先のコンテンツも必要な場合は、find() の前に includeReference('field_uid') を追加してください。
クエリの書き換えと TypeScript のクエリメソッドを示します。
キャッシュポリシーの移行(few shot)
ユーザー: TypeScript SDK でキャッシュをサポートするには、何か追加で必要ですか?
アシスタント: はい。@contentstack/persistance-plugin@latest をインストールし、Policy.IGNORE_CACHE 以外のキャッシュポリシーを使用する場合は、永続ストアとともに cacheOptions を渡してください。
キャッシュプラグインが必要なことを示します。
Utils ライブラリの移行(few shot)
ユーザー: Contentstack Utils の使用方法を TypeScript に移行するにはどうすればよいですか?
アシスタント: @contentstack/utils@latest をインストールして、別途インポートしてください。例:import * as Utils from '@contentstack/utils'。その後、contentstack.Utils.jsonToHTML(...) の代わりに Utils.jsonToHTML(...) を呼び出します。
utils パッケージを別途インストールする必要があることを示します。
タクソノミークエリの移行(few shot)
ユーザー: このタクソノミーフィルターを TypeScript 用に変換してください:Stack.ContentType('article').Query().where('taxonomies.topics', termUid).find()
アシスタント: stack.contentType('article').entry().query() を使い、フィルターに適したタクソノミーヘルパー(equalAndBelow('taxonomies.topics', termUid, level) など)を適用してください。タクソノミーレコードを直接取得する場合は、stack.taxonomy('taxonomy_uid').find() または .term('term_uid').fetch() を使います。
タクソノミーに対応したクエリの移行を説明します。
制限事項の確認(エッジケース)
ユーザー: TypeScript でも、JavaScript と同じ方法で複数のコンテンツタイプとグローバルフィールドスキーマをクエリできますか?
アシスタント: いいえ。TypeScript Delivery SDK は、1 つのクエリで複数のコンテンツタイプ参照をサポートしておらず、グローバルフィールドスキーマの直接クエリにも対応していません。コンテンツタイプの詳細を取得するには、include_global_field_schema を使ってください。また、URL の上限は 8KB です。
ドキュメントに記載されている制限事項を示します。