Communitygithub.com

コードの移植 (Porting code)

あるプログラミング言語で書かれたコードを別の言語に移植するためのスキルです。

コードの移植 (Porting code) とは?

このスキルは、あるプログラミング言語から別の言語へコードを移植する際のプロセスを定義しています。最初に、元のコードの主要な機能の概要を作成し、エッジケースや使用されているライブラリ、推奨されるターゲット言語の同等ライブラリを特定します。ライブラリの選択はユーザーの確認を取りながら進め、スタブ実装やスクラッチからの実装といったオプションを提示します。その後、ユニットテストを移植し、それを基にコードの移植と検証を反復的に行います。移植後は、ターゲット言語に一般的なパターンや命名規則に従い、元のコードの機能やログ、コメントを維持しつつ、新しいエッジケースや構造変更があれば明記します。成功条件として、テストのパス、リンターの通過、全機能の実装、エッジケースの対応、必要なライブラリのインストールが含まれます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AaronAsAChimp/skills/tree/HEAD/skills/porting-code

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

コードの移植

このスキルは、ある言語から別の言語へコードを移植するために使用されます。

入力

  • ターゲット言語
  • 移植するソースファイルまたはコード

プロセス

まず、現在のコードに存在する主要な機能の概要を作成します。以下の点に注意してください:

  • コードや単体テストが考慮しているエッジケース
  • 使用されているライブラリと、ターゲット言語での推奨相当ライブラリ

構造化されたユーザー入力または質問ツールを使用して、使用されている各ライブラリについて順に確認し、ユーザーとどの相当ライブラリを使用するかを検討します。

追加のオプションとして以下を提示します:

  • ライブラリ機能のスタブ化
  • スクラッチから実装

次に、単体テストを移植します。これを移植コードの検証の基礎として使用します。

最後に、事前に準備した概要を使用してコードを移植します。単体テストを活用して修正を行いながら、これを反復的に進めます。

一般的なガイドライン

  • ターゲット言語で一般的なパターンを使用する。
  • ターゲット言語で一般的な命名規則を使用する。
  • 移植コードは元のコードを反映し、ユーザーが同等の機能を簡単に見つけられるようにする。
  • 元のコードに存在するログ出力やコメントを維持する。
  • 新しいエッジケースがあれば記載する。
  • コード構造の変更があれば、ユーザーが方向性を把握できるように記載する。

成功条件

  • 単体テストが存在する場合は通過すること。
  • リンターが存在する場合は通過すること。
  • すべての主要な機能が実装されていること。
  • 特定されたすべてのエッジケースが対応されていること。
  • 必要なライブラリがすべてインストールされ、使用可能であること。

例

元のコード例

/**
 * 割引を含む製品の最終価格を計算し、税金を加算します。
 * 
 * 無効な割引の場合はエラーをスローします。
 */
export function calculatePrice(basePrice: number, discount: number | null, taxRate: number): number {
	let discountAmount = 0;

	if (discount) {
		if (discount >= 1) {
			// 割引が誤って設定されていると、負の価格が計算される可能性があります。
			// ユーザーに無効な価格を表示する前に停止します。
			throw new Error('Invalid discount');
		}

		discountAmount = basePrice * discount;
	}

	const taxAmount = (basePrice - discountAmount) * taxRate;

	return (basePrice - discountAmount) + taxAmount;
}

概要例

主要機能:

  • calculatePrice関数は、基本価格、割引率、税率を受け取り、製品の最終価格を計算します。
    • エッジケース:
      • 割引はnullの場合がある
      • 割引が1以上の場合は、無効な価格を防ぐために例外をスローする

移植コード例

def calculate_price(base_price: float, discount: Optional[float], tax_rate: float) -> float:
	"""
	割引を含む製品の最終価格を計算し、税金を加算します。

	無効な割引の場合は例外をスローします。
	"""
	discount_amount = 0

	if discount is not None:
		if discount >= 1:
			# 割引が誤って設定されていると、負の価格が計算される可能性があります。
			# ユーザーに無効な価格を表示する前に停止します。
			raise Exception('Invalid discount')

		discount_amount = base_price * discount

	tax_amount = (base_price - discount_amount) * tax_rate

	return (base_price - discount_amount) + tax_amount

応答例

コードをPythonに移植しました。

  • calculatePrice は calculate_price になりました。

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

関連スキル