Communitygithub.com

microsoft/aspire.dev

Microsoft/aspire ソースコードからすべてのコンテナイメージ参照(レジストリ、イメージ、タグ)を抽出し、aspire.dev Astro サイト用の JSON データファイルを生成します。

aspire.dev とは?

このスキルは、[microsoft/aspire](https://github.com/microsoft/aspire) リポジトリからすべてのコンテナイメージ参照を抽出し、[microsoft/aspire.dev](https://github.com/microsoft/aspire.dev) の Astro サイトで使用される `container-images.json` ファイルを生成します。抽出対象は `*ContainerImageTags.cs` という命名規則に従った静的クラスで、これらのファイルは `src/` ディレクトリ以下に動的に配置されます。このスキルは、Redis、PostgreSQL、Kafka などの主要な Aspire ホスティング統合から、Azure エミュレーター(CosmosDB、ServiceBus など)までをカバーし、各イメージのプライマリ・コンパニオン関係や代替タグも正確に解析して JSON に出力します。生成されたデータは Astro コンポーネントから直接インポート可能で、`aspire-integrations.json` などの関連データとクロスリファレンスできます。このスキルは、bash コマンドとファイル読み書きを呼び出して動作し、単一イメージのクイック確認には `grep` や `find` が推奨されます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/microsoft/aspire.dev/tree/HEAD/.agents/skills/container-images

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

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

ドキュメント

コンテナイメージスキル

このスキルは、microsoft/aspire 製品リポジトリからすべてのコンテナイメージ参照を抽出し、構造化された JSON ファイルを microsoft/aspire.dev の以下のパスに書き込みます:

src/frontend/src/data/container-images.json

この JSON は aspire.dev サイト上の Astro コンポーネントによって消費され、Aspire ホスティング統合で使用されるすべてのコンテナイメージのブラウズ可能なカタログをレンダリングします。


ソースコードパターン

microsoft/aspire 内のすべてのコンテナイメージメタデータは、*ContainerImageTags(または *ContainerImageTags.cs)という名前の静的クラスに存在します。各ファイルは厳格で一貫したパターンに従います:

internal static class <Name>ContainerImageTags
{
    public const string Registry = "<registry-host>";
    public const string Image = "<image-path>";
    public const string Tag = "<tag>";

    // 一部のファイルには追加のコンパニオンイメージがあります。例:
    public const string <Companion>Registry = "<registry-host>";
    public const string <Companion>Image = "<image-path>";
    public const string <Companion>Tag = "<tag>";
}

ファイルの場所

以下の glob パターンに一致するすべてのファイル:

src/**/ContainerImageTags.cs
src/**/*ContainerImageTags.cs

これらは多くのプロジェクトにまたがって存在します(以下は一部):

プロジェクトファイル
Aspire.Hosting.RedisRedisContainerImageTags.cs
Aspire.Hosting.PostgreSQLPostgresContainerImageTags.cs
Aspire.Hosting.SqlServerSqlServerContainerImageTags.cs
Aspire.Hosting.MongoDBMongoDBContainerImageTags.cs
Aspire.Hosting.MySqlMySqlContainerImageTags.cs
Aspire.Hosting.KafkaKafkaContainerImageTags.cs
Aspire.Hosting.RabbitMQRabbitMQContainerImageTags.cs
Aspire.Hosting.NatsNatsContainerImageTags.cs
Aspire.Hosting.GarnetGarnetContainerImageTags.cs
Aspire.Hosting.ValkeyValkeyContainerImageTags.cs
Aspire.Hosting.SeqSeqContainerImageTags.cs
Aspire.Hosting.QdrantQdrantContainerImageTags.cs
Aspire.Hosting.KeycloakKeycloakContainerImageTags.cs
Aspire.Hosting.OracleOracleContainerImageTags.cs
Aspire.Hosting.MilvusMilvusContainerImageTags.cs
Aspire.Hosting.ElasticsearchElasticsearchContainerImageTags.cs
Aspire.Hosting.YarpYarpContainerImageTags.cs
Aspire.Hosting.Azure.StorageStorageEmulatorContainerImageTags.cs
Aspire.Hosting.Azure.CosmosDBCosmosDBEmulatorContainerImageTags.cs
Aspire.Hosting.Azure.ServiceBusServiceBusEmulatorContainerImageTags.cs
Aspire.Hosting.Azure.EventHubsEventHubsEmulatorContainerImageTags.cs
Aspire.Hosting.Azure.SignalRSignalREmulatorContainerImageTags.cs
Aspire.Hosting.Azure.AppConfigurationAppConfigurationEmulatorContainerImageTags.cs
Aspire.Hosting.Azure.FunctionsDurableTaskSchedulerEmulatorContainerImageTags.cs
Aspire.Hosting.Azure.KustoAzureKustoEmulatorContainerImageTags.cs

重要: 新しいホスティングパッケージはいつでも追加される可能性があります。常にファイルを動的に検出し、ハードコードされたリストに依存しないでください。


抽出手順

ステップ 1 — aspire リポジトリを HEAD でクローンまたはアクセス

# ローカルで作業する場合:
git clone --depth 1 https://github.com/microsoft/aspire.git /tmp/aspire

ステップ 2 — すべての ContainerImageTags ファイルを検索

find /tmp/aspire/src -name '*ContainerImageTags.cs' -type f

ステップ 3 — 各ファイルを解析

各ファイルについて、すべてのイメージグループを抽出します。単一のファイルで複数のイメージ(プライマリ + コンパニオン)を定義できます。解析ルールは以下の通りです:

  1. プライマリイメージ: フィールド名が正確に Registry、Image、Tag であるもの。
  2. コンパニオンイメージ: 接頭辞を持つフィールド(例: PgAdminRegistry、PgAdminImage、PgAdminTag)。これらを共通の接頭辞でグループ化します。
  3. 代替タグ: TagVNextPreview、ManagementTag のようなフィールド。これらを同じイメージの追加タグバリアントとして含めます。
  4. 静的プロパティ vs const フィールド: ほとんどは public const string ですが、一部(例: Kusto)は public static string { get; } を使用します。両方に対応してください。
  5. 計算されたタグ: 一部のタグは計算されます(例: public const string ManagementTag = $"{Tag}-management";)。これらをリテラル値に解決してください。
  6. aspirePackage を導出: プロジェクトディレクトリ名から(例: src/Aspire.Hosting.Redis/ → Aspire.Hosting.Redis)。
  7. sourceFile を導出: リポジトリルートからの相対パス。

ステップ 4 — JSON を構築

出力配列の各エントリは、1 つの異なるコンテナイメージを表します:

[
  {
    "aspirePackage": "Aspire.Hosting.Redis",
    "name": "Redis",
    "registry": "docker.io",
    "image": "library/redis",
    "tag": "8.6",
    "fullImage": "docker.io/library/redis:8.6",
    "sourceFile": "src/Aspire.Hosting.Redis/RedisContainerImageTags.cs",
    "sourceUrl": "https://github.com/microsoft/aspire/blob/main/src/Aspire.Hosting.Redis/RedisContainerImageTags.cs",
    "isCompanion": false,
    "companionOf": null,
    "alternateTags": []
  },
  {
    "aspirePackage": "Aspire.Hosting.Redis",
    "name": "Redis Commander",
    "registry": "docker.io",
    "image": "rediscommander/redis-commander",
    "tag": "latest",
    "fullImage": "docker.io/rediscommander/redis-commander:latest",
    "sourceFile": "src/Aspire.Hosting.Redis/RedisContainerImageTags.cs",
    "sourceUrl": "https://github.com/microsoft/aspire/blob/main/src/Aspire.Hosting.Redis/RedisContainerImageTags.cs",
    "isCompanion": true,
    "companionOf": "Redis",
    "alternateTags": []
  },
  {
    "aspirePackage": "Aspire.Hosting.Azure.CosmosDB",
    "name": "CosmosDB Emulator",
    "registry": "mcr.microsoft.com",
    "image": "cosmosdb/linux/azure-cosmos-emulator",
    "tag": "stable",
    "fullImage": "mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:stable",
    "sourceFile": "src/Aspire.Hosting.Azure.CosmosDB/CosmosDBEmulatorContainerImageTags.cs",
    "sourceUrl": "https://github.com/microsoft/aspire/blob/main/src/Aspire.Hosting.Azure.CosmosDB/CosmosDBEmulatorContainerImageTags.cs",
    "isCompanion": false,
    "companionOf": null,
    "alternateTags": ["vnext-preview"]
  }
]

フィールド定義

フィールド型説明
aspirePackagestringNuGet パッケージ/プロジェクト名(src/ 下のディレクトリ名)
namestring人間にわかりやすい名前。プライマリイメージの場合は、クラス名から導出します(ContainerImageTags / EmulatorContainerImageTags のサフィックスを削除し、PascalCase を分割)。コンパニオンイメージの場合は、クラス名だけでなく、コンパニオンの接頭辞/タイプ(例: PgAdmin*、RedisCommander*)から導出します。
registrystringコンテナレジストリホスト(例: docker.io、mcr.microsoft.com、ghcr.io、quay.io、container-registry.oracle.com)
imagestringレジストリ内のイメージパス
tagstringプライマリタグ
fullImagestring完全修飾イメージ参照: {registry}/{image}:{tag}
sourceFilestringmicrosoft/aspire 内のソースファイルへの相対パス
sourceUrlstringmain ブランチ上のソースファイルへの GitHub パーマリンク
isCompanionbooleanこれがコンパニオン/ツールイメージ(例: pgAdmin、Kafka UI、phpMyAdmin)の場合は true
companionOfstring?このイメージが付属するプライマリイメージの名前。ない場合は null
alternateTagsstring[]このイメージに対して定義された追加のタグ定数(例: vnext-preview、management)

ステップ 5 — 並べ替えて書き込み

配列を aspirePackage(昇順)、次に isCompanion(プライマリが先)、次に name(昇順)で並べ替えます。

書き込み先: src/frontend/src/data/container-images.json


検証チェックリスト

ファイル生成後、以下を確認してください:

  • src/ 内のすべての *ContainerImageTags.cs ファイルが表現されている
  • 重複エントリがない(同じ registry + image + tag + aspirePackage)
  • すべての fullImage 値が適切な形式である(registry/image:tag)
  • コンパニオンイメージが正しくプライマリにリンクされている
  • JSON が有効で適切にフォーマットされている(インデント 2 スペース)
  • 上記のルールに従ってファイルが並べ替えられている

Astro でのデータ消費

src/frontend/src/data/container-images.json の JSON ファイルは、Astro コンポーネントで直接インポートできます:

import containerImages from '../data/container-images.json';

これは、同じディレクトリにある aspire-integrations.json、samples.json、github-stats.json などの既存のデータファイルと同じパターンに従います。

関連コンテンツへのリンク

各コンテナイメージエントリは、以下と相互参照できます:

  • 統合ドキュメント: src/frontend/src/data/integration-docs.json(aspirePackage で一致)
  • NuGet 統合: src/frontend/src/data/aspire-integrations.json(title ≈ aspirePackage で一致)
  • ソースファイル: コントリビューター向けの microsoft/aspire へのリンク

重要なルール

  • 常にファイルを動的に検出 — 新しいホスティングパッケージが頻繁に追加されます。
  • const と static プロパティパターンの両方を解析 — コードベースに両方存在します。
  • 計算されたタグ値の文字列補間を解決(例: $"""{Tag}-management""")。
  • 開発コンテナイメージ、テスト専用イメージ、または playground/ ディレクトリのイメージを含めない。
  • src/ ディレクトリ内の *ContainerImageTags.cs に一致するファイルのみを抽出。
  • aspire.dev リポジトリは Astro サイトです — データファイルは、コンポーネントで消費される他の JSON データとともに配置されます。

関連スキル