mcpField
A
alchemy

alchemy

github.com/georgejeffersクラウド・DevOps042 回インストール37 週間前に更新
リポジトリ

alchemy について

Alchemy は TypeScript ネイティブの Infrastructure as Code フレームワークです。このスキルは、利用者や拡張開発者向けに API、リソースのパターン、CLI の使い方を案内します。

主な機能

  1. 01TypeScript の Infrastructure as Code リファレンス
  2. 02リソースとバインディングの設定ガイド
  3. 03デプロイとローカル開発コマンドの案内
  4. 04フレームワークアダプターとプロバイダーの説明
  5. 05カスタムリソースの開発手順

活用シーン

  1. 01Alchemy プロジェクトの初期化
  2. 02Cloudflare Worker とリソースの設定
  3. 03ステージごとのインフラデプロイ
  4. 04Alchemy 向けプロバイダーやリソースの開発

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/georgejeffers/alchemy-skills --skill alchemy

インストール後、Claude Code で/alchemyを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
alchemy-concepts.md
checklist.md
doc-patterns.md
resource-patterns.md
test-patterns.md

詳細

Alchemy

Alchemy は、TypeScript ネイティブの Infrastructure-as-Code フレームワークです。このスキルでは、Alchemy の API、パターン、規約について包括的な知識を提供します。

以下のトピックの詳細については、references/alchemy-concepts.md を読み込んでください。

クイックスタート

新しいプロジェクト
alchemy create my-app --template vite
既存のプロジェクトに追加
alchemy init
コアファイル:alchemy.run.ts
import alchemy from "alchemy";
import { Worker, KVNamespace } from "alchemy/cloudflare";

const app = await alchemy("my-app");

const kv = await KVNamespace("cache", { title: "my-cache" });

const worker = await Worker("api", {
  entrypoint: "./src/worker.ts",
  bindings: {
    CACHE: kv,
    API_KEY: alchemy.secret(process.env.API_KEY),
    STAGE: app.stage,
  },
});

await app.finalize();
コマンド
alchemy deploy              # deploy (default stage = $USER)
alchemy deploy --stage prod # deploy to prod
alchemy dev                 # local dev with hot reload
alchemy destroy             # tear down all resources

タスクの振り分け

ユーザーのリクエストに基づいて、読み込む知識を判断してください。

ユーザーのリクエスト対応方法
プロジェクトに Alchemy をセットアップするalchemy create または alchemy init を使用して、alchemy.run.ts を作成します
Worker を追加するimport { Worker } from "alchemy/cloudflare" を使用し、エントリーポイントとバインディングを設定します
データベース/KV/R2/キューを追加するalchemy/cloudflare からインポートし、リソースを作成して Worker にバインドします
シークレットを使用する入力には alchemy.secret(process.env.X) を使用し、カスタムリソースでは Secret.unwrap() を使用します
開発モードをセットアップするalchemy dev を実行し、フレームワークアダプター/プラグインを設定します
フレームワーク(Vite/Astro など)を使用するフレームワークアダプターについては、references/alchemy-concepts.md §11 を読み込みます
本番環境にデプロイするalchemy deploy --stage prod を実行し、CI ガイドのパターンを参照します
Neon/Stripe/AWS/その他のプロバイダーを使用するプロバイダー一覧については、references/alchemy-concepts.md §13 を読み込みます
カスタムリソースを構築する実装パターンについては、references/resource-patterns.md を読み込みます
Alchemy の新しいプロバイダーを構築する以下のプロバイダー開発ワークフローをすべて実行します

主な概念

リソース

リソースは、作成/更新/削除のライフサイクルを持つメモ化された非同期関数です。各リソースは ID と props を受け取ります。

const db = await D1Database("my-db", { name: "my-db" });
バインディング

型安全なバインディングを使用して、リソースを Worker に接続します。

const worker = await Worker("api", {
  entrypoint: "./src/worker.ts",
  bindings: { DB: db, KV: kv, SECRET: alchemy.secret("value") },
});

型推論を使って Worker コードからアクセスします。

import type { worker } from "../alchemy.run";
export default {
  async fetch(req: Request, env: typeof worker.Env) {
    await env.DB.prepare("SELECT 1").run();
  },
};
シークレット
alchemy.secret(process.env.API_KEY)  // wrap a value
alchemy.secret.env.API_KEY           // shorthand
ステージ

インフラストラクチャの分離されたコピーです。ローカル環境ではデフォルトで $USER が使用されます。

alchemy deploy              # deploys to $USER stage
alchemy deploy --stage prod # deploys to prod stage
開発モード

Miniflare によるローカルエミュレーション、ホットリロード、フレームワーク連携を利用できます。

alchemy dev
フレームワークアダプター

各フレームワークには、リソースと Vite プラグイン/アダプターがあります。

フレームワークリソースプラグイン/アダプター
ViteVitealchemy/cloudflare/vite
AstroAstroalchemy/cloudflare/astro
React RouterReactRouteralchemy/cloudflare/react-router
SvelteKitSvelteKitalchemy/cloudflare/sveltekit
NuxtNuxtalchemy/cloudflare/nuxt
TanStack StartTanStackStartalchemy/cloudflare/tanstack-start
BunSPABunSPA(プラグインは不要)
Next.jsNextjsalchemy/cloudflare/nextjs
Redwood (RWSDK)Redwoodalchemy/cloudflare/rwsdk
プロバイダー

Alchemy には 20 以上のプロバイダーがあります。主なものは次のとおりです。

プロバイダーインポート主なリソース
Cloudflarealchemy/cloudflareWorker、D1Database、KVNamespace、R2Bucket、Queue、DurableObjectNamespace、Hyperdrive、Zone、DnsRecords
Neonalchemy/neonNeonProject、NeonBranch、NeonDatabase、NeonRole
Stripealchemy/stripeWebhookEndpoint、Price、Product、Coupon など 10 種類以上
AWSalchemy/awsFunction、Table、Vpc、Subnet、SecurityGroup、Bucket、Role
AWS Controlalchemy/aws/controlAWS.{Service}.{Resource} — AWS CloudFormation 全体をカバーします
GitHubalchemy/githubGitHubSecret
Vercelalchemy/vercelVercelProject、VercelDnsRecord、VercelDeployment

規約

  • デフォルトのインポート:import alchemy from "alchemy"
  • サブパスからの名前付きインポート:import { Worker } from "alchemy/cloudflare"
  • await app.finalize() は常に alchemy.run.ts の最終行に置きます
  • リソースの物理名には、一意性を保つためにアプリ名とステージ名を含めます
  • ローカル環境ではステージはデフォルトで $USER です。本番環境では --stage prod を使用します
  • 機密値は必ず alchemy.secret() でラップします
  • 状態は .alchemy/ ディレクトリに保存されます(共有状態にする場合は .gitignore に追加するか、コミットしてください)

参考ファイル

詳細については、必要に応じて以下を読み込んでください。

  • references/alchemy-concepts.md — Alchemy のすべての概念を網羅した包括的なリファレンスです。アプリ、ステージ、スコープ、フェーズ、リソース、シークレット、状態、バインディング、CLI、開発モード、プロファイル、フレームワークアダプター、シリアライズ、およびリソースを含む 20 以上のプロバイダーを扱います。
  • references/resource-patterns.md — カスタムリソースを構築するための実装パターン(17 セクション)です。ユーザーがカスタムリソースを作成する場合、または Alchemy に貢献する場合に読み込んでください。
  • references/test-patterns.md — テスト規約とパターン(15 セクション)です。カスタムリソースのテストを記述する場合に読み込んでください。
  • references/doc-patterns.md — ドキュメントテンプレート(10 セクション)です。Alchemy プロバイダーのドキュメントを記述する場合に読み込んでください。
  • references/checklist.md — 完全性を検証するためのチェックリストです。プロバイダーの実装を検証する場合に読み込んでください。

プロバイダー開発ワークフロー

ユーザーが Alchemy フレームワーク自体の新しいプロバイダーまたはカスタムリソースを開発している場合(アプリで Alchemy を使用するだけの場合ではありません)、このワークフローを使用してください。

フェーズ 1:調査

プロバイダーの API を調査し、CRUD に対応するエンティティ、認証方式、レート制限を特定します。

フェーズ 2:設計

リソース一覧、Props/Output インターフェース、API クライアントの方式、依存関係の順序を定義します。

フェーズ 3:API クライアント

alchemy/src/{provider}/api.ts を作成します。最小限の fetch ラッパーを用意し、Secret.unwrap() へのフォールバックを使って環境変数で認証します。

フェーズ 4:リソース

各リソースを実装します。references/resource-patterns.md を読み込んでください。

  • Resource("{provider}::{Resource}", ...) を使い、作成/更新/削除のライフサイクルを実装します。
  • 物理名:props.name ?? this.output?.name ?? this.scope.createPhysicalName(id)
  • アロー関数ではなく、function 宣言を使用し、this 経由でコンテキストを参照します。
  • バインディングに対応する型ガード(is{Resource})をエクスポートします。
フェーズ 5:テスト

テストを記述します。references/test-patterns.md を読み込んでください。

  • alchemy.test(import.meta, { prefix: BRANCH_PREFIX })
  • try/finally を使用し、destroy(scope) と API の検証を行います。
フェーズ 6:ドキュメント

ドキュメント、ガイド、サンプルを作成します。references/doc-patterns.md を読み込んでください。

  • リソースのドキュメント:alchemy-web/src/content/docs/providers/{provider}/{resource}.md
  • ガイド:alchemy-web/src/content/docs/guides/{provider}.mdx
  • サンプル:examples/{provider}/alchemy.run.ts
フェーズ 7:検証

チェックリストを実行します。references/checklist.md を読み込んでください。

  • bun format、bun vitest alchemy/test/{provider}/、bun tsc -b を実行します。

コメント