ANTIGRAVITY LABEN
記事一覧/Agents & Manager
Agents & Manager/2026-03-14中級

Antigravity リモートエージェント活用ガイド — クラウド上でAIエージェントを実行

Antigravity のリモートエージェント機能を使い、SSH接続先のサーバーやクラウドVM上でAIエージェントを実行する方法。ローカルリソースを消費せずに大規模タスクを自動処理する実践ガイド。

Antigravity338remote agentsSSHcloudautomation51

Antigravity リモートエージェント活用ガイド

Antigravity のリモートエージェント機能により、SSH接続先のサーバーやクラウドVM上でAIエージェントを実行できます。ローカルマシンのリソースを消費することなく、大規模なデータ処理やバッチ自動化を実現する強力な機能です。

リモートエージェントの概要

リモートエージェントは、Antigravity がSSH経由で接続したサーバー上で動作するAIエージェントです。以下のような用途に適しています。

  • 大規模データ処理: テラバイト級のログ解析やファイル変換
  • 長時間実行タスク: 数時間~数日のバッチ処理
  • リソース集約的な作業: 機械学習モデルの训练やコンパイル
  • 本番環境での自動修復: インシデント対応の自動化
  • 分散マルチサーバー処理: 複数のサーバーを並列活用

SSH接続の設定

リモートエージェントを使用する前に、SSH接続を適切に設定します。

SSH鍵の生成と配置

# ローカルマシンで SSH鍵を生成(未作成の場合)
ssh-keygen -t ed25519 -C "antigravity@example.com" -f ~/.ssh/antigravity_key
 
# 公開鍵をリモートサーバーに配置
ssh-copy-id -i ~/.ssh/antigravity_key.pub user@remote-server.com
 
# SSH接続テスト
ssh -i ~/.ssh/antigravity_key user@remote-server.com "echo 'Connection successful'"

Antigravity の SSH設定

~/.antigravity/config.yaml でSSH接続情報を登録します。

remote_hosts:
  production:
    host: "prod-server.example.com"
    port: 22
    user: "antigravity"
    key_path: "~/.ssh/antigravity_key"
    timeout: 30
    keep_alive_interval: 60
 
  staging:
    host: "staging-server.example.com"
    port: 22
    user: "antigravity"
    key_path: "~/.ssh/staging_key"
 
  gcp_instance:
    host: "34.123.45.67"
    port: 22
    user: "ubuntu"
    key_path: "~/.ssh/gcp_key"
    bastion_host: "bastion.example.com"  # オプション: 踏み台サーバー経由の場合
ℹ️
SSH鍵は絶対にバージョン管理に含めないでください。`.antigravityignore` に追加するか、環境変数で指定することを推奨します。

クラウドVM設定(GCP/AWS)

Google Cloud Platform での設定

# GCE インスタンスの起動
gcloud compute instances create antigravity-agent \
  --image-family=ubuntu-2204-lts \
  --image-project=ubuntu-os-cloud \
  --machine-type=n1-standard-4 \
  --zone=asia-northeast1-a
 
# SSH接続キーの設定
gcloud compute os-login ssh-keys add --key-file=~/.ssh/antigravity_key.pub
 
# インスタンスへのSSH接続確認
gcloud compute ssh antigravity-agent --zone=asia-northeast1-a

AWS EC2 での設定

# EC2 インスタンスの起動(AWS CLI)
aws ec2 run-instances \
  --image-id ami-0c802847a7dd848c0 \
  --instance-type t3.xlarge \
  --key-name antigravity-key \
  --security-group-ids sg-xxxxxxxx \
  --region ap-northeast-1
 
# セキュリティグループ設定(SSHアクセス許可)
aws ec2 authorize-security-group-ingress \
  --group-id sg-xxxxxxxx \
  --protocol tcp \
  --port 22 \
  --cidr 0.0.0.0/0
⚠️
本番環境では SSH アクセスを特定の IP アドレスに制限してください。`0.0.0.0/0` は開発環境のみの設定です。

リモートエージェントの実装

リモートエージェントの作成と実行

// antigravity-agent.js
import Antigravity from "@antigravitylab/sdk";
 
const client = new Antigravity({
  apiKey: process.env.ANTIGRAVITY_API_KEY,
});
 
// リモートサーバーで実行するエージェント
const remoteAgent = await client.createRemoteAgent({
  name: "log-analyzer-agent",
  host: "production",  // config.yaml で定義したホスト名
  workDir: "/tmp/antigravity-workspace",
  capabilities: {
    fileSystem: true,
    commandExecution: true,
    networkAccess: true,
  },
});
 
// エージェントにタスクを割り当て
const task = await remoteAgent.execute({
  instruction: `
    /tmp/logs ディレクトリ内のすべてのログファイルを分析し、
    エラーの発生パターンを抽出してレポートを作成してください。
    特に ERROR と CRITICAL レベルのログを重点的に分析します。
  `,
  timeout: 3600,  // 1時間
  maxRetries: 3,
});
 
// 実行結果の取得
console.log("Task Status:", task.status);
console.log("Output:", task.output);
console.log("Execution Time:", task.executionTime);

リモート実行の監視

// リアルタイム進捗の監視
remoteAgent.on("progress", (event) => {
  console.log(`[${event.timestamp}] ${event.message}`);
});
 
remoteAgent.on("error", (error) => {
  console.error(`Execution Error: ${error.message}`);
});
 
remoteAgent.on("complete", (result) => {
  console.log(`Task completed in ${result.duration}ms`);
  console.log(`Output size: ${result.outputSize} bytes`);
});
 
// 実行中のセッション情報を取得
const sessionInfo = await remoteAgent.getSessionInfo();
console.log("CPU Usage:", sessionInfo.cpuUsage);
console.log("Memory Usage:", sessionInfo.memoryUsage);
console.log("Network I/O:", sessionInfo.networkIO);

ファイル同期戦略

単方向同期(ローカル → リモート)

// ローカルのプロジェクトファイルをリモートに同期
const syncResult = await remoteAgent.syncFiles({
  direction: "upload",
  source: "./src",
  destination: "/remote/project/src",
  patterns: {
    include: ["**/*.js", "**/*.json", "**/*.md"],
    exclude: ["node_modules", ".git", "dist"],
  },
  compression: true,  // 転送中に圧縮
  parallel: 4,        // 4並列で転送
});
 
console.log(`Synced ${syncResult.filesTransferred} files`);
console.log(`Total size: ${syncResult.totalSize} bytes`);

双方向同期(結果の取り戻し)

// リモートの実行結果をローカルに取得
await remoteAgent.syncFiles({
  direction: "download",
  source: "/remote/workspace/output",
  destination: "./results",
  patterns: {
    include: ["**/*.log", "**/*.csv", "**/*.json"],
  },
  preserve: true,  // タイムスタンプを保持
});
 
// 差分同期(変更されたファイルのみ)
await remoteAgent.syncFiles({
  direction: "bidirectional",
  source: "./data",
  destination: "/remote/data",
  deltaSync: true,  // 差分のみ転送
  checksum: "md5",  // MD5チェックサムで変更検出
});
ℹ️
大量のファイルを転送する場合は、`.antigravityignore` で不要なファイルを除外し、圧縮を有効にすることで転送時間を大幅に削減できます。

永続セッションの管理

セッションの保存と復帰

// 長時間実行タスク用に永続セッションを作成
const persistentSession = await remoteAgent.createPersistentSession({
  name: "data-pipeline",
  maxIdleTime: 3600,      // 1時間のアイドル後に自動削除
  autoReconnect: true,    // 接続切断時に自動再接続
  checkpoint: true,       // 定期的なチェックポイント作成
});
 
// セッションに複数のタスクを追加(キュー方式)
await persistentSession.queue({
  id: "task-1",
  instruction: "Step 1: Download data from source",
  dependencies: [],
});
 
await persistentSession.queue({
  id: "task-2",
  instruction: "Step 2: Process and transform data",
  dependencies: ["task-1"],
});
 
await persistentSession.queue({
  id: "task-3",
  instruction: "Step 3: Upload results to storage",
  dependencies: ["task-2"],
});
 
// パイプライン実行開始
await persistentSession.start();
 
// 進捗状況のポーリング
const checkProgress = setInterval(async () => {
  const status = await persistentSession.getStatus();
  console.log(`Pipeline Progress: ${status.completedTasks}/${status.totalTasks}`);
 
  if (status.completed) {
    clearInterval(checkProgress);
    console.log("Pipeline finished successfully");
  }
}, 30000);  // 30秒ごとに確認

セッションの復帰と再開

// 保存済みセッションを復帰
const session = await remoteAgent.resumePersistentSession("data-pipeline");
 
// チェックポイント情報を確認
const checkpoints = await session.listCheckpoints();
console.log("Available checkpoints:", checkpoints);
 
// 特定のチェックポイントから再開
await session.resume(checkpoints[0].id);
 
// セッションの詳細情報
const stats = await session.getStatistics();
console.log("Total execution time:", stats.totalTime);
console.log("Task success rate:", stats.successRate);
console.log("Average task duration:", stats.avgDuration);

リモート実行の監視とログ

リアルタイムログの取得

// リモートエージェントのログをストリーミング
const logStream = remoteAgent.streamLogs({
  level: "DEBUG",
  filter: {
    component: "executor",
    tags: ["performance", "error"],
  },
  follow: true,  // 継続的に新しいログを受け取る
});
 
logStream.on("data", (log) => {
  console.log(`[${log.level}] ${log.timestamp}: ${log.message}`);
});
 
logStream.on("error", (err) => {
  console.error("Log stream error:", err);
});

メトリクスと性能監視

// リモートサーバーの性能指標を監視
const metrics = await remoteAgent.getMetrics({
  interval: 60,  // 60秒間隔で収集
  duration: 3600,  // 1時間分のメトリクス
});
 
console.log("CPU Usage Over Time:");
metrics.cpu.forEach(point => {
  console.log(`  ${point.timestamp}: ${point.value}%`);
});
 
console.log("Memory Usage (Peak):", metrics.memory.peak, "MB");
console.log("Disk I/O (Total):", metrics.diskIO.totalBytes, "bytes");
console.log("Network Throughput:", metrics.network.throughput, "Mbps");

コスト最適化戦略

自動スケーリング

# Antigravity のスケーリング設定
remote_hosts:
  auto_scaling_pool:
    type: "aws_auto_scaling_group"
    min_instances: 1
    max_instances: 10
    target_instance_type: "t3.large"
 
    scale_up_policy:
      metric: "cpu_usage"
      threshold: 75
      scale_increment: 2
      cooldown: 300
 
    scale_down_policy:
      metric: "cpu_usage"
      threshold: 25
      scale_decrement: 1
      cooldown: 600
 
    cost_optimization:
      spot_instances: true
      spot_max_price: "0.15"
      preemptible: true

計算リソースの効率化

// 複数タスクの並列実行で効率を最大化
const tasks = Array.from({ length: 100 }, (_, i) => ({
  id: `task-${i}`,
  instruction: `Process file segment ${i}`,
}));
 
// バッチ実行(指定した数のタスクを並列実行)
const batchResult = await remoteAgent.executeBatch(tasks, {
  parallelism: 8,           // 同時実行数
  batchSize: 50,            // バッチサイズ
  progressCallback: (completed, total) => {
    console.log(`Progress: ${completed}/${total}`);
  },
});
 
console.log(`Total cost: $${batchResult.estimatedCost}`);
console.log(`Time saved by parallelization: ${batchResult.timeSaved}s`);
⚠️
クラウド環境では課金が継続します。不要になったインスタンスやセッションは確実に削除してください。

実行結果の最適化

// リモートで処理した結果をフィルター&圧縮して転送
const optimizedResult = await remoteAgent.getResult({
  outputPath: "/remote/output",
  compression: "gzip",      // gzip 圧縮
  chunkSize: "10MB",        // 大きなファイルは分割
  cleanup: true,            // ダウンロード後にリモートのファイルを削除
});
 
console.log(`Downloaded ${optimizedResult.files} files`);
console.log(`Compressed size: ${optimizedResult.compressedSize} MB`);

実践例:大規模ログ分析

リモートエージェントを使用した実践的な例です。

// 本番サーバーで大規模ログを分析
const analysisTask = await client.createRemoteAgent({
  name: "log-analyzer",
  host: "production",
}).execute({
  instruction: `
    /var/log/application.log の過去24時間分を分析し、
    以下を実施してください:
 
    1. エラー発生箇所の特定
    2. エラー頻度の計算
    3. パターン分析(どの操作の後で発生するか)
    4. 影響受けたユーザー数の推定
    5. JSON形式でレポート作成
  `,
  timeout: 1800,
});
 
// 結果をローカルに取得&可視化
const report = JSON.parse(analysisTask.output);
console.log("=== Error Analysis Report ===");
console.log(`Total errors: ${report.summary.totalErrors}`);
console.log(`Unique patterns: ${report.patterns.length}`);
console.log(`Affected users: ${report.affectedUsers}`);
 
report.patterns.forEach(pattern => {
  console.log(`\nPattern: ${pattern.name}`);
  console.log(`  Frequency: ${pattern.count}`);
  console.log(`  Severity: ${pattern.severity}`);
});

次のステップ

  • リモートエージェントの監視とアラート設定
  • クラウド環境でのセキュリティベストプラクティス
  • マルチリージョンの分散処理戦略
  • 本番運用での トラブルシューティング

リモートエージェント機能により、Antigravity のスケーラビリティが飛躍的に向上します。クラウドの力を最大限に活用しましょう。

個人開発12年とアーティスト活動から見るエージェント設計

線引きするときの3つの判断軸

  • 失敗時の影響が金銭やユーザー体験にどれだけ波及するか
  • 復旧オペレーションが明文化されているか
  • 観測ログから人間が再現できる粒度に整っているか

まとめ — 検証ステップの推奨

  1. 観測メトリクスとアラートを設置
  2. 限定ロールアウトで本番検証
シェア

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

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

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

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

Agents & Manager2026-06-27
一度きりのプロンプトを、再利用できるサブエージェントに残す
Antigravity 2.0 の dynamic sub-agents で生まれた『うまくいったプロンプト』を、会話履歴に埋もれさせず再利用可能な定義として残す方法を、実際のファイル構成と蒸留手順とともにまとめました。
Agents & Manager2026-07-17
エージェントに渡した参照メモの7割は届いていませんでした — head で切る運用の限界を測った記録
定期実行のエージェントに参照メモを cat と head で渡していたところ、肝心な行が黙って落ちていました。切り取り位置を実測し、行数ではなくセクション単位の契約に置き換えるまでの記録です。
Agents & Manager2026-07-16
AGENTS.md を厚くするほどルールが守られなくなった — 遵守率を計測して指示を削るまで
AGENTS.md に書いたルールが守られない。衝突でも読み込み失敗でもなく、単に無視されていました。ルールを検証可能な述語に分解し、遵守率を継続計測して指示を削るまでの運用記録です。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →