mcpField
G
gemini-blog

gemini-blog

github.com/motormetrics開発2256 回インストール今日更新
リポジトリ

gemini-blog について

gemini-blogは、データに基づくブログ記事を生成するTypeScriptスキルです。自動車やCOEの統計を扱うプロジェクト向けで、分析と構造化生成を分け、結果を保存できます。

主な機能

  1. 01分析と生成の2段階処理
  2. 02Code Executionによる計算
  3. 03Zodによる記事構造の検証
  4. 04CarsとCOEのタグ定数
  5. 05生成記事の冪等な保存

活用シーン

  1. 01区切りデータから記事を作成
  2. 02月ごとの自動車統計の整理
  3. 03COE市場記事の生成

インストール

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

$npx skills add https://github.com/motormetrics/motormetrics --skill gemini-blog

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

詳細

Gemini ブログ生成スキル

ブログ生成パッケージ:packages/ai/

アーキテクチャ

packages/ai/
├── src/
│   ├── generate-post.ts    # 2-step generation (analysis → structured output)
│   ├── config.ts           # System instructions
│   ├── schemas.ts          # Zod schemas (postSchema, highlightSchema)
│   ├── tags.ts             # Tag constants (CARS_TAGS, COE_TAGS)
│   ├── hero-images.ts      # Hero image URLs
│   └── save-post.ts        # Post persistence with idempotency
2 ステップのフロー
  1. ステップ 1(分析):generateText() + コード実行ツール + 拡張思考 → 正確な計算
  2. ステップ 2(生成):generateObject() + Zod スキーマ → 型安全な構造化出力

主な関数

// Generate and persist (returns saved-post metadata, not the raw Zod object)
import { generateBlogContent } from "@motormetrics/ai";

const post = await generateBlogContent({
  data: tokenisedData,     // Pipe-delimited data
  month: "October 2024",
  dataType: "cars",        // "cars" or "coe"
});

// post.postId, post.title, post.slug, post.excerpt

スキーマ

// postSchema
z.object({
  title: z.string().max(100),              // SEO title, max 60 chars preferred
  excerpt: z.string().max(500),            // Meta description, under 300 chars
  content: z.string(),                     // Markdown (no H1)
  tags: z.array(z.string()).min(1).max(10), // 3-5 tags, first is dataType
  highlights: z.array(highlightSchema),    // 3-6 key statistics
});

// highlightSchema
z.object({
  value: z.string(),   // "52.60%", "$125,000"
  label: z.string(),   // "Electric Vehicles Lead"
  detail: z.string(),  // "2,081 units registered"
});

タグ定数

export const CARS_TAGS = ["Cars", "Registrations", "Fuel Types", "Market Trends", ...] as const;
export const COE_TAGS = ["COE", "Quota Premium", "1st Bidding Round", "PQP", ...] as const;

プロンプトの更新

packages/ai/src/config.ts を編集します:

  • ANALYSIS_INSTRUCTIONS:計算ロジック用
  • GENERATION_INSTRUCTIONS:出力形式用

デバッグ

出力品質が低い場合: ステップ 1 の分析ログを確認し、コード実行ツールで Python が実行されることを確認します スキーマ検証エラー: Zod の制約(最大長、配列の範囲)を確認します API エラー: AI_GATEWAY_API_KEY を確認し、Gateway のクォータ/請求を確認します

環境変数

AI_GATEWAY_API_KEY=...              # Required (Vercel AI Gateway)
DATABASE_URL=...                    # Required for generate-and-save (Neon/Postgres)
BLOB_READ_WRITE_TOKEN=...           # Required for local hero-image upload

ベストプラクティス

  1. 常に 2 ステップのフローを使用する: 分析と生成を分離します
  2. コード実行を省略しない: 正確な計算に必須です
  3. タグ定数を使用する: 用語の一貫性を保ちます
  4. テレメトリを有効にする: コストと品質を追跡します

参考資料

  • パッケージの完全なドキュメントについては packages/ai/AGENTS.md を参照してください
  • Vercel AI SDK:最新のドキュメントには Context7 を使用してください

コメント