mcpField
E
encore-service

encore-service

github.com/encoredev開発30833 回インストール2 日前に更新
リポジトリ

encore-service について

Encore アプリケーションのサービス構成を設計するスキルです。単一サービスから複数サービス、システム単位の構成まで扱い、Encore クライアント経由のサービス呼び出しも説明します。

主な機能

  1. 01encore.service.ts によるサービス定義
  2. 02単一・複数サービスアプリの構成
  3. 03関連サービスのシステム別編成
  4. 04~encore/clients 経由のサービス呼び出し
  5. 05サービスごとのデータベース設定

活用シーン

  1. 01Encore サービスの新規作成
  2. 02拡大するアプリの構成選択
  3. 03コマースサービスのシステム別編成
  4. 04サービス間の型付き呼び出し

インストール

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

$npx skills add https://github.com/encoredev/skills --skill encore-service

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

詳細

Encore サービスの構造

手順

サービスの作成

すべての Encore サービスには encore.service.ts ファイルが必要です:

// encore.service.ts
import { Service } from "encore.dev/service";

export default new Service("my-service");
最小構成のサービス構造
my-service/
├── encore.service.ts    # Service definition (required)
├── api.ts               # API endpoints
└── db.ts                # Database (if needed)

アプリケーションのパターン

単一サービス

サービスはアプリケーションのルートに定義できます:

my-app/
├── package.json
├── encore.app
├── encore.service.ts
├── api.ts
├── db.ts
└── migrations/
    └── 001_initial.up.sql
マルチサービス

各サービスはそれぞれ独自のディレクトリに配置します:

my-app/
├── encore.app
├── package.json
├── user/
│   ├── encore.service.ts
│   ├── api.ts
│   └── db.ts
├── order/
│   ├── encore.service.ts
│   ├── api.ts
│   └── db.ts
└── notification/
    ├── encore.service.ts
    └── api.ts
大規模アプリケーション(システムベース)

関連するサービスをシステムにグループ化します:

my-app/
├── encore.app
├── commerce/
│   ├── order/
│   │   └── encore.service.ts
│   ├── cart/
│   │   └── encore.service.ts
│   └── payment/
│       └── encore.service.ts
├── identity/
│   ├── user/
│   │   └── encore.service.ts
│   └── auth/
│       └── encore.service.ts
└── comms/
    ├── email/
    │   └── encore.service.ts
    └── push/
        └── encore.service.ts

サービス間呼び出し

~encore/clients から他のサービスをインポートします:

import { user } from "~encore/clients";

export const getOrderWithUser = api(
  { method: "GET", path: "/orders/:id", expose: true },
  async ({ id }): Promise<OrderWithUser> => {
    const order = await getOrder(id);
    const orderUser = await user.get({ id: order.userId });
    return { ...order, user: orderUser };
  }
);

ガイドライン

  • サービスを他のサービスの中に入れ子にすることはできません
  • サービス間の呼び出しには ~encore/clients を使用してください(直接インポートはしないでください)
  • 各サービスは独自のデータベースを持てます
  • サービス名は小文字で、内容が分かる名前にしてください
  • コードを整理するためだけにサービスを作らないでください - 代わりにフォルダーを使用してください
  • サービスの境界が決まっていない場合は encore-architecture を使用してください

コメント