packages/ ディレクトリには、複数のアプリ・サービスで共有されるライブラリパッケージが含まれます。全パッケージは @speakeasy/ プレフィックスで workspace 参照されます。
| パッケージ | 名前 | 役割 |
|---|
| Cellar | @speakeasy/cellar | 業務データベース(Drizzle ORM) |
| Vault | @speakeasy/vault | 認証データベース(Drizzle ORM) |
| Jigger | @speakeasy/jigger | 共有スキーマ・型定義(Zod) |
| Glass | @speakeasy/glass | UI コンポーネント(Svelte 5) |
| Garnish | @speakeasy/garnish | デザイントークン(Tailwind + daisyUI) |
| purelovers-client | @speakeasy/purelovers-client | 外部連携クライアント |
業務データベースパッケージ — 連絡先・チャット・店舗・配信など、ビジネスデータの Drizzle ORM スキーマとクライアントを提供します。
| 項目 | 内容 |
|---|
| パス | packages/cellar |
| 技術 | Drizzle ORM v1.0 beta + PostgreSQL |
| 依存 | @speakeasy/jigger, drizzle-orm, pg, zod |
import { createDrizzleClient } from '@speakeasy/cellar'; // DB クライアント
import { chatRoom, chatMessage } from '@speakeasy/cellar/client'; // スキーマ直接参照
| エクスポートパス | 内容 |
|---|
@speakeasy/cellar | メインエントリ(クライアント生成関数) |
@speakeasy/cellar/client | スキーマ・型定義の直接エクスポート |
| ファイル | テーブル |
|---|
schema/contact.ts | contact, contact_purelovers, contact_chat_ng, contact_chat_ng_history |
schema/chat.ts | chat_room, chat_message, user_room_state, chat_attachment |
schema/shop.ts | shop, shop_line_account, shop_transfer, shop_purelovers |
schema/broadcast.ts | broadcast |
schema/label.ts | label |
schema/notification.ts | notification_setting |
schema/shop-notification.ts | shop_notification_setting, shop_push_subscription, shop_email_recipient |
schema/customer-notification.ts | customer_notification_setting, customer_push_subscription |
schema/push.ts | push_subscription, push_message |
schema/domain-blacklist.ts | domain_blacklist, global_domain_blacklist |
bun run generate # Drizzle マイグレーション生成
bun run migrate:dev # 開発環境マイグレーション実行
bun run migrate:deploy # 本番環境マイグレーション実行
bun run studio # Drizzle Studio(本番)
bun run studio:dev # Drizzle Studio(開発)
詳細は Cellar DB 仕様 を参照してください。
認証データベースパッケージ — better-auth が管理するユーザー・セッション・組織データの Drizzle ORM スキーマとクライアントを提供します。
| 項目 | 内容 |
|---|
| パス | packages/vault |
| 技術 | Drizzle ORM v1.0 beta + PostgreSQL |
| 依存 | @speakeasy/jigger, drizzle-orm, pg |
import { user, session } from '@speakeasy/vault/schema'; // スキーマ参照
import { createVaultClient } from '@speakeasy/vault/client'; // DB クライアント
| エクスポートパス | 内容 |
|---|
@speakeasy/vault | メインエントリ |
@speakeasy/vault/client | DB クライアント生成関数 |
@speakeasy/vault/schema | スキーマ・型定義 |
| ファイル | テーブル |
|---|
schema/user.ts | user, session, account, verification |
schema/organization.ts | organization, member, organizationRole, memberRole, invitation |
schema/apikey.ts | apikey, passkey |
schema/oauth.ts | oauthApplication, oauthAccessToken, oauthConsent |
schema/custom.ts | outerMail, outerPhone, scimProvider |
詳細は Vault DB 仕様 を参照してください。
共有スキーマ・型定義パッケージ — Zod スキーマ、TypeScript 型、列挙型、RPC ユーティリティ、Hono ミドルウェアなど、全サービスで共有される定義を提供します。
| 項目 | 内容 |
|---|
| パス | packages/jigger |
| 技術 | Zod v4 + Hono + TypeScript |
| 依存 | hono, zod |
import { ContactSchema } from '@speakeasy/jigger/schemas'; // Zod スキーマ
import type { Contact } from '@speakeasy/jigger/schemas'; // 型定義(スキーマから推論)
import type { NotificationQueueMessage } from '@speakeasy/jigger/types'; // 型定義
import { createSmartClient } from '@speakeasy/jigger/rpc'; // RPC ユーティリティ
import { domainBlacklist } from '@speakeasy/jigger/middleware'; // Hono ミドルウェア
import { trackDbOperation } from '@speakeasy/jigger/analytics'; // 分析ユーティリティ
import { createPipelinesLogstreamClient } from '@speakeasy/jigger/logstream'; // 監査ログ
import { rateLimitMiddleware } from '@speakeasy/jigger/rate-limit'; // レートリミット
import { securityHeadersMiddleware } from '@speakeasy/jigger/security-headers'; // セキュリティヘッダー
import { isMaintenanceMode } from '@speakeasy/jigger/maintenance'; // メンテナンスモード
import { validateRedirectUrl } from '@speakeasy/jigger/url-validation'; // URL バリデーション
import { statement } from '@speakeasy/jigger/permissions'; // パーミッション
| エクスポートパス | 内容 |
|---|
@speakeasy/jigger | 非推奨 メインエントリ(全モジュール再エクスポート) |
@speakeasy/jigger/schemas | Zod v4 スキーマ定義(base, contact, chatroom 等) |
@speakeasy/jigger/types | TypeScript 型定義(通知キューメッセージ等) |
@speakeasy/jigger/rpc | RPC クライアントユーティリティ |
@speakeasy/jigger/middleware | Hono ミドルウェア(domainBlacklist 等) |
@speakeasy/jigger/analytics | Analytics Engine ユーティリティ |
@speakeasy/jigger/logstream | 監査ログ(Pipelines ベース) |
@speakeasy/jigger/rate-limit | レートリミットミドルウェア |
@speakeasy/jigger/security-headers | セキュリティヘッダーミドルウェア |
@speakeasy/jigger/maintenance | メンテナンスモード判定 |
@speakeasy/jigger/url-validation | URL バリデーション |
@speakeasy/jigger/permissions | パーミッション文(better-auth 用) |
// schemas/base.ts で定義される基本型
const UUID = z.string().uuid();
const Email = z.string().email();
const URL = z.string().url();
const DateTime = z.string().datetime();
const Int = z.number().int();
const Entity = z.object({ id: UUID, createdAt: DateTime, updatedAt: DateTime });
共有 UI コンポーネントライブラリ — Svelte 5 (Runes) + Melt UI で構築された再利用可能な UI コンポーネントを提供します。
| 項目 | 内容 |
|---|
| パス | packages/glass |
| 技術 | Svelte 5 + Melt UI + daisyUI |
| 依存 | @speakeasy/garnish, @lucide/svelte, melt |
import { Select, SelectOption } from '@speakeasy/glass';
import { CommandPalette, CommandItem, CommandGroup } from '@speakeasy/glass';
import { Tooltip } from '@speakeasy/glass';
import { Toaster, addToast } from '@speakeasy/glass';
| コンポーネント | 説明 |
|---|
Select | ドロップダウンセレクト |
SelectOption | セレクトのオプション項目 |
CommandPalette | コマンドパレット(Spotlight 風) |
CommandItem | コマンドパレットの項目 |
CommandGroup | コマンドパレットのグループ |
CommandEmpty | コマンドパレットの空状態 |
CommandSeparator | コマンドパレットのセパレータ |
Tooltip | ツールチップ |
Toaster / addToast() | トースト通知システム |
Glass コンポーネントの対話的ドキュメントは Storybook で確認できます。
bun run storybook # Storybook 起動
デザイントークンパッケージ — Tailwind CSS v4 + daisyUI 5 のテーマとデザイントークンを提供します。
| 項目 | 内容 |
|---|
| パス | packages/garnish |
| 技術 | Tailwind CSS v4 + daisyUI 5 |
| Peer 依存 | daisyui, tailwindcss |
import { speakeasyLight, speakeasyDark } from '@speakeasy/garnish/themes';
import { spacing, fontSize, shadow } from '@speakeasy/garnish/tokens';
import '@speakeasy/garnish/css'; // メイン CSS
| エクスポートパス | 内容 |
|---|
@speakeasy/garnish | メインエントリ |
@speakeasy/garnish/themes | テーマ定義(light / dark) |
@speakeasy/garnish/tokens | デザイントークン |
@speakeasy/garnish/css | メイン CSS ファイル |
| テーマ | ベースカラー | プライマリ | アクセント |
|---|
speakeasyLight | Warm Paper (#fffbf0) | Antique Gold | Brand Pink |
speakeasyDark | Deep Abyss (#1a1824) | Luminous Gold | Neon Rouge |
| カテゴリ | 範囲 |
|---|
| spacing | 0〜32(0〜8rem) |
| fontSize | xs〜5xl(line-height 付き) |
| fontWeight | thin〜black(100〜900) |
| borderRadius | none〜full |
| shadow | sm〜2xl + inner |
| animation | duration(fast/normal/slow)+ easing |
| zIndex | auto, 0〜50, semantic(dropdown/modal/tooltip 等) |
外部連携クライアント — purelovers.com ロイヤリティプラットフォームの Speakeasy モジュール API クライアントです。
| 項目 | 内容 |
|---|
| パス | packages/purelovers-client |
| 技術 | TypeScript(依存なし) |
import { fetchPurelovers } from '@speakeasy/purelovers-client';
import type { PureloversResult } from '@speakeasy/purelovers-client';
- API キー認証:
X-API-KEY ヘッダーによる認証
- snake_case → camelCase 変換: レスポンスのキーを自動変換
- Result 型: 成功/失敗を判別可能な discriminated union を返却
- レビュー環境対応: Basic 認証 + Cookie のサポート
type PureloversResult<T> =
| { readonly ok: true; readonly data: T }
| { readonly ok: false; readonly error: string; readonly statusCode: number };
- Base — purelovers 連携設定の管理
- Tap — 外部 API 経由のデータ同期