ANTIGRAVITY LABEN
記事一覧/Tips & 活用術
Tips & 活用術/2026-03-30上級

Antigravity × カスタムコードジェネレーター構築 — テンプレートエンジン + AI エージェントでプロジェクト固有のコード生成パイプラインを作る

Antigravity の AI エージェントとテンプレートエンジンを組み合わせ、プロジェクト固有のコードジェネレーターを構築する方法を解説。Hygen・Plop・カスタムスクリプトとAGENTS.md連携で、チーム全体のコード品質と生産性を引き上げます。

Antigravity338code-generatortemplatescaffoldingautomation51productivity19advanced19

プレミアム記事

取り組みの背景 — なぜ「自分だけのコードジェネレーター」が必要なのか

プロジェクトが成長するにつれ、同じようなファイル構造を繰り返し作成する場面が増えてきます。API エンドポイント、React コンポーネント、データベースマイグレーション、テストファイルなど、毎回手作業でボイラープレートを書いていると、時間がかかるだけでなく、チームメンバーによって微妙にスタイルが異なるコードが生まれてしまいます。

Antigravity の AI エージェントは、単にコードを生成するだけでなく、プロジェクトの規約やパターンを理解した上で一貫性のあるコードを出力できます。しかし、エージェントへのプロンプトだけに頼ると、毎回同じ指示を繰り返す必要があり、出力の安定性も保証しにくくなります。

ここで活躍するのが テンプレートエンジンと AI エージェントの組み合わせ です。テンプレートエンジンが「構造」を担保し、AI エージェントが「文脈に応じたロジック」を補完します。この二層アーキテクチャによって、プロジェクト固有のコード生成パイプラインを構築できます。

テンプレートエンジンの選定 — Hygen・Plop・カスタムスクリプトの比較

コードジェネレーターを構築する際、まず決めるべきはテンプレートエンジンの選択です。主要な3つのアプローチを比較してみましょう。

Hygen — ファイルベースのシンプルなジェネレーター

Hygen はテンプレートをファイルシステムに配置するだけで動作するジェネレーターです。学習コストが低く、小〜中規模プロジェクトに適しています。

# Hygen のインストールとセットアップ
npm install -g hygen
hygen init self
 
# テンプレートの作成
# _templates/component/new/index.tsx.ejs.t
// _templates/component/new/index.tsx.ejs.t
---
to: src/components/<%= name %>/<%= name %>.tsx
---
import React from 'react';
 
interface <%= name %>Props {
  /** コンポーネントの説明 */
  children?: React.ReactNode;
}
 
/**
 * <%= name %> コンポーネント
 * 自動生成: <%= new Date().toISOString().split('T')[0] %>
 */
export const <%= name %>: React.FC<<%= name %>Props> = ({ children }) => {
  return (
    <div className="<%= h.changeCase.paramCase(name) %>">
      {children}
    </div>
  );
};
 
export default <%= name %>;

Hygen の強みは、テンプレートがそのままファイルとしてリポジトリに存在するため、レビューやバージョン管理が容易な点です。

Plop — インタラクティブなプロンプト付きジェネレーター

Plop はインタラクティブなプロンプトを通じて、ユーザーに情報を入力させながらコードを生成します。複雑な条件分岐が必要な場合に威力を発揮します。

// plopfile.ts
import { NodePlopAPI } from 'plop';
 
export default function (plop: NodePlopAPI) {
  plop.setGenerator('api-endpoint', {
    description: 'REST API エンドポイントを生成',
    prompts: [
      {
        type: 'input',
        name: 'resource',
        message: 'リソース名(例: users, products):',
      },
      {
        type: 'checkbox',
        name: 'methods',
        message: '生成するHTTPメソッド:',
        choices: ['GET', 'POST', 'PUT', 'DELETE'],
      },
      {
        type: 'confirm',
        name: 'withAuth',
        message: '認証ミドルウェアを含めますか?',
        default: true,
      },
    ],
    actions: (data) => {
      const actions = [
        {
          type: 'add',
          path: 'src/api/{{dashCase resource}}/route.ts',
          templateFile: 'templates/api-route.hbs',
        },
        {
          type: 'add',
          path: 'src/api/{{dashCase resource}}/schema.ts',
          templateFile: 'templates/api-schema.hbs',
        },
      ];
      // テスト対象のメソッドが選択されている場合のみテストファイルを生成
      if (data && data.methods && data.methods.length > 0) {
        actions.push({
          type: 'add',
          path: 'src/api/{{dashCase resource}}/route.test.ts',
          templateFile: 'templates/api-test.hbs',
        });
      }
      return actions;
    },
  });
}

カスタム TypeScript スクリプト — 完全な制御が必要な場合

大規模プロジェクトや特殊な要件がある場合は、TypeScript でフルスクラッチのジェネレーターを構築するアプローチも有効です。

// scripts/generate.ts
import { mkdir, writeFile, readFile } from 'fs/promises';
import { join } from 'path';
import Handlebars from 'handlebars';
 
interface GeneratorConfig {
  name: string;
  category: 'component' | 'api' | 'hook' | 'service';
  options: {
    withTests: boolean;
    withStorybook: boolean;
    withStyles: boolean;
  };
}
 
async function generate(config: GeneratorConfig): Promise<void> {
  const templateDir = join(__dirname, '../templates', config.category);
  const outputDir = join(__dirname, '../src', config.category + 's', config.name);
 
  await mkdir(outputDir, { recursive: true });
 
  // テンプレートの読み込みとコンパイル
  const templateSource = await readFile(
    join(templateDir, 'index.hbs'),
    'utf-8'
  );
  const template = Handlebars.compile(templateSource);
 
  // コンテキストの構築
  const context = {
    name: config.name,
    pascalName: toPascalCase(config.name),
    kebabName: toKebabCase(config.name),
    timestamp: new Date().toISOString(),
    ...config.options,
  };
 
  // ファイルの生成
  const output = template(context);
  await writeFile(join(outputDir, 'index.tsx'), output);
 
  console.log(`✅ Generated ${config.category}: ${config.name}`);
}
 
function toPascalCase(str: string): string {
  return str.replace(/(^\w|-\w)/g, (match) =>
    match.replace('-', '').toUpperCase()
  );
}
 
function toKebabCase(str: string): string {
  return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
}
 
// 実行例:
// npx tsx scripts/generate.ts --name=UserProfile --category=component --withTests

各アプローチの使い分けとしては、少数のシンプルなテンプレートなら Hygen、対話的な生成フローが必要なら Plop、完全なカスタマイズが必要なら TypeScript スクリプトという判断になります。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
テンプレートエンジン(Hygen・Plop)と AI エージェントの連携パターンを体系的に習得できる
AGENTS.md とカスタムルールを組み合わせた組織横断のコード生成パイプラインを構築できる
実際に動作するジェネレーターの TypeScript 実装とテスト戦略を手に入れられる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Tips & 活用術2026-04-04
Antigravity AI開発ワークフロー高速化 実践ガイド — コンテキスト管理・タスク分解・並列処理の実践テクニック集
Antigravityを使った開発速度を根本から底上げする実践テクニック集。コンテキスト管理・タスク分解・Planning/Fastモードの使い分け・並列処理まで、プロが実践するワークフロー最適化の全手法を体系的に解説します。
Tips & 活用術2026-07-10
エージェントへの依頼は、送信ボタンを押す前に大きさを測れる — 差し戻し率から逆算するタスク分割
Antigravity のエージェントが的外れなコードを返すとき、原因はプロンプトの文言ではなくタスクの大きさにあります。依頼文を送信前に採点する Python スコアラーを実装し、80件の依頼ログを後ろ向きに採点して差し戻し率との相関を確かめた記録です。
Tips & 活用術2026-07-07
Antigravityの起動がウイルス対策に弾かれたら、署名を検証してから許可する
Antigravityデスクトップアプリの起動がウイルス対策に阻まれたとき、誤検知と本物の脅威を切り分ける方法を解説します。macOSのGatekeeperとWindows Defenderで署名を検証してから、最小スコープで許可リスト化する手順をコード付きでまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →