2026.02.19

アンチグラビティを使った最強コーディング:WordPress開発が“爆速”になる書き方

「WordPressのコーディングって、やることが多い割に似た作業も多い…」
そんなときに刺さるのが Google Antigravity(アンチグラビティ)。これは“ただの補完AI”じゃなく、計画→実装→検証まで自律的に進めるエージェント型の開発プラットフォームです。Google公式のCodelabでも「エージェント・ファースト」な開発環境として紹介されています。


Antigravityって何が違うの?

よくあるAIエディタは「人間が主役で、AIが補助(サジェストやチャット)」になりがち。
一方Antigravityは、“Mission Control(司令塔)”でエージェントを動かし、タスクを自走させる発想が中心です。画面も大きく Editor(IDE)Manager / Agent Manager(複数エージェント管理) の2つに分かれる、という説明が複数の解説・ハンズオンで共通しています。(Google Codelabs)


この記事のゴール(WordPressで“最強”を体感する)

例として、よくある実務タスクを Antigravity前提の進め方で作ります。

  • カスタム投稿タイプ event を追加
  • ACFが無くても動くようにフォールバック(get_post_meta
  • [event_card] ショートコードで一覧表示
  • CSSを同梱して“貼るだけ”にする

“最強”の使い方:まずAIに「仕様→設計→実装手順」まで作らせる

Antigravityの良さは、いきなりコードを書かせるより タスク分解が得意なところ。

最初に投げる指示(コピペ用)

目的:WordPressにイベント表示機能を追加したい。
要件:
- CPT event を追加(タイトル、本文)
- メタ項目:day(開催日), place(場所)
- ACFがあれば get_field、なければ get_post_meta で取得
- [event_card posts=6] ショートコードで最新6件をカード表示
- 可能ならCSSも同梱(ショートコード出力内にstyleタグでOK)
- functions.php に追記できる形で、コードは“全文”で出して

成果物:
1) 実装方針(ファイル/フック)
2) コード全文
3) 確認手順(WP管理画面で何を確認するか)

ポイントは「成果物」を明示して、実装方針→コード→確認手順の順番に固定すること。これだけで、後戻りが激減します。
(Codelabでも“エージェントが計画・実装・検証まで進める”思想が強調されています)(Google Codelabs)


WordPress実装例:CPT + ショートコード(貼るだけ版)

以下は、上の要件を満たすサンプルです(テーマの functions.php に入れる想定)。

<?php
if ( ! defined('ABSPATH') ) exit;

/**
 * Event CPT + Shortcode card list
 * - CPT: event
 * - Meta: day, place (ACF優先 / なければ post_meta)
 * - Shortcode: [event_card posts=6]
 */

add_action('init', function () {

  // -----------------------------
  // CPT: event
  // -----------------------------
  register_post_type('event', [
    'label'         => 'イベント',
    'public'        => true,
    'has_archive'   => true,
    'menu_position' => 20,
    'supports'      => ['title', 'editor', 'thumbnail', 'excerpt'],
    'rewrite'       => ['slug' => 'event'],
    'show_in_rest'  => true,
  ]);

});

/**
 * meta getter (ACF fallback)
 */
if ( ! function_exists('my_event_get_meta') ) {
  function my_event_get_meta($post_id, $key) {
    $post_id = (int)$post_id;
    $key = (string)$key;

    if ( $post_id <= 0 || $key === '' ) return '';

    if ( function_exists('get_field') ) {
      $v = get_field($key, $post_id);
      if ( $v !== null && $v !== false && $v !== '' ) return $v;
    }

    return get_post_meta($post_id, $key, true);
  }
}

/**
 * date format helper
 * Accepts: "2026-02-27" or "2026/02/27" etc.
 */
if ( ! function_exists('my_event_format_day') ) {
  function my_event_format_day($raw) {
    $raw = trim((string)$raw);
    if ( $raw === '' ) return '';

    $raw2 = str_replace(['.', '/', '年', '月', '日'], ['-', '-', '-', '-', ''], $raw);
    $raw2 = preg_replace('/\s+/', '', $raw2);

    try {
      $dt = new DateTime($raw2);
      return $dt->format('Y年n月j日');
    } catch (Exception $e) {
      return $raw; // 変換できなければそのまま
    }
  }
}

add_shortcode('event_card', function($atts){

  $atts = shortcode_atts([
    'posts' => 6,
  ], $atts, 'event_card');

  $posts = max(1, (int)$atts['posts']);

  $q = new WP_Query([
    'post_type'      => 'event',
    'post_status'    => 'publish',
    'posts_per_page' => $posts,
    'orderby'        => 'date',
    'order'          => 'DESC',
  ]);

  ob_start();
  ?>
  <style>
    .event-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
    @media (max-width: 900px){.event-cards{grid-template-columns:repeat(2,minmax(0,1fr));}}
    @media (max-width: 520px){.event-cards{grid-template-columns:1fr;}}
    .event-card{border:1px solid rgba(0,0,0,.08);border-radius:14px;padding:14px;background:#fff}
    .event-card__title{font-weight:700;font-size:16px;line-height:1.4;margin:0 0 8px}
    .event-card__meta{font-size:13px;line-height:1.6;opacity:.85}
    .event-card__meta span{display:block}
    .event-card__btn{display:inline-block;margin-top:12px;font-size:13px;text-decoration:none;padding:10px 12px;border-radius:999px;border:1px solid rgba(0,0,0,.15)}
  </style>

  <div class="event-cards">
    <?php if ( $q->have_posts() ): ?>
      <?php while ( $q->have_posts() ): $q->the_post();
        $pid   = get_the_ID();
        $day   = my_event_get_meta($pid, 'day');
        $place = my_event_get_meta($pid, 'place');
        $day   = my_event_format_day($day);
        $place = trim(wp_strip_all_tags((string)$place));
      ?>
        <article class="event-card">
          <h3 class="event-card__title"><?php echo esc_html(get_the_title($pid)); ?></h3>

          <div class="event-card__meta">
            <?php if ( $day !== '' ): ?>
              <span>開催日:<?php echo esc_html($day); ?></span>
            <?php endif; ?>
            <?php if ( $place !== '' ): ?>
              <span>場所:<?php echo esc_html($place); ?></span>
            <?php endif; ?>
          </div>

          <a class="event-card__btn" href="<?php echo esc_url(get_permalink($pid)); ?>">
            詳しく見る
          </a>
        </article>
      <?php endwhile; wp_reset_postdata(); ?>
    <?php else: ?>
      <p>現在、イベントはありません。</p>
    <?php endif; ?>
  </div>
  <?php
  return ob_get_clean();
});

Antigravityで“強い”進め方のコツ(WordPress向け)

1) まず「確認手順」もセットで作らせる

WPは「表示できたけど404」「管理画面の項目が出ない」みたいな事故が多いので、最初からチェックリスト化が効きます。

2) 変更範囲を固定する

  • 「functions.phpに追記だけ」
  • 「プラグイン化して安全に」
    みたいに“触る場所”を縛ると、AIの暴走が止まります。

3) セキュリティは“自動実行”を疑う

エージェントがターミナル等を扱えるタイプのIDEは便利な一方で、設定次第で危険も増えます。Antigravity系のエージェントIDEはセキュリティ懸念が話題になることもあるので、権限・機密ファイル・コマンド実行の扱いは慎重にした方が良いでしょう。


公式で触るなら(導入)

GoogleのCodelabに「Getting Started with Google Antigravity」があり、日本語ページもあります。まずここで全体像を掴むのが早いです。
プロダクトの入り口は公式サイト(antigravity.google)側から辿れます。

上部へスクロール