Alejandro Rioja.
AI Agents

15分で初めてのAIエージェントを構築する方法

Alejandro Rioja
Alejandro Rioja
3 分で読める
TL;DR

フレームワークも、講座も、博士号も必要ありません。必要なのはNode.js、Anthropic SDK、そして25行のTypeScriptだけです。このチュートリアルでは、本物の動くエージェント——同じセッション内でCloudflareにデプロイできる構造化コンテンツ要約ツール——を構築します。唯一の前提条件は、無料のAPIキーです。

無料ニュースレター

毎週水曜。28,400人以上の読者。無駄なし。

目次

2026年6月更新。

TL;DR: フレームワークも、講座も、博士号も必要ありません。必要なのはNode.js、Anthropic SDK、そして25行のTypeScriptだけです。このチュートリアルでは、本物の動くエージェント——同じセッション内でCloudflareにデプロイできる構造化コンテンツ要約ツール——を構築します。唯一の前提条件は、無料のAPIキーです。

[オペレーターの視点] AIで自動化したい創業者から最もよく聞くのは「まずもっと学ばなければ」という言葉です。その必要はありません。エージェントのパターンはシンプルで、それを理解する最速の方法は実際に1つ作ってみることです。今日ゼロから始めるとしたら私が取るであろう、まさにその道筋を紹介します。

なぜ「AIエージェントを作ろう」系チュートリアルの多くは役に立たないのか

それらはPythonを使う(MLエンジニアには適しているが、それ以外の人には摩擦になる)か、LangChainのようなフレームワークの背後に本当のコードを隠すか、実際の業務につなげるには抽象的すぎるものを作るかのいずれかです。

このチュートリアルは、3つの点で異なります。

  1. TypeScriptのみ — JavaScriptを書いたことがあれば、これに付いてこられます
  2. フレームワークなし — モデルに触れるすべてのコード行が見えます
  3. 役立つ出力 — 顧客メール、レビュー、会議メモに実際に使える構造化要約ツールを構築します

あなたが構築するもの

コンテンツ要約エージェント:任意のテキストブロックを貼り付けると、一貫した形式の構造化された要約が返ってきます。HTTPリクエストが1つ入力され、きれいな要約が1つ出力されます。

これを最初のプロジェクトとする理由:このパターン——システムプロンプト + ユーザー入力 → 構造化出力——は、私が運用するすべてのエージェントの基盤です。システムプロンプトを差し替えれば、質問応答ツール、トーン書き換えツール、分類器、下書き生成ツールになります。これを一度学べば、本番のエージェントが実際に行うことの80%を学んだことになります。

前提条件(2分)

Dockerなし。仮想環境なし。pip installも一切なし。

ステップ1:プロジェクトを作成する(2分)

bash
mkdir my-first-agent && cd my-first-agent
npm init -y
npm install @anthropic-ai/sdk
npm install -D tsx typescript

エージェントを簡単に実行できるよう、package.jsonにスクリプトを追加します。

json
{
  "scripts": {
    "agent": "tsx agent.ts"
  }
}

ステップ2:エージェントを書く(5分)

agent.tsを作成し、これを貼り付けます。

typescript
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: process.env.ANTHROPIC_API_KEY,
});

const SYSTEM_PROMPT = `You are a precise content summarizer. When given any block of text, return a structured summary in this exact format:

**One-line summary:** <the core point in one sentence>

**Key points:**
- <point 1>
- <point 2>
- <point 3 if applicable>

**Action item (if any):** <one concrete next step, or "None">

Be specific. No filler. Under 150 words total.`;

async function summarize(text: string): Promise<string> {
  const message = await client.messages.create({
    model: "claude-haiku-4-5",
    max_tokens: 512,
    system: SYSTEM_PROMPT,
    messages: [{ role: "user", content: text }],
  });

  const block = message.content[0];
  if (block.type !== "text") throw new Error("Unexpected response type");
  return block.text;
}

const sample = `
  Hey team — following up on the Q2 review meeting.
  We agreed to push the launch to July 15th instead of June 30th
  due to the payment integration delay. Marketing needs the new
  landing page copy by June 20th or we can't start the email campaign.
  Budget for the launch campaign is confirmed at $8,000.
  Please confirm receipt.
`;

const result = await summarize(sample);
console.log(result);

ステップ3:実行する(1分)

bash
ANTHROPIC_API_KEY=sk-ant-... npm run agent

期待される出力:

code
**One-line summary:** Launch pushed to July 15th due to payment delay; landing page copy needed by June 20th to unblock email campaign.

**Key points:**
- Launch date moved from June 30th to July 15th
- Landing page copy deadline: June 20th (blocks email campaign)
- Campaign budget confirmed at $8,000

**Action item (if any):** Confirm receipt and deliver landing page copy by June 20th.

これが動くAIエージェントです。実際の入力、カスタムのシステムプロンプト、構造化された出力。全体でわずか30行のコードです。

ステップ4:あなたのユースケース向けにカスタマイズする

システムプロンプトこそが、このエージェントをあなただけのものにする唯一の要素です。差し替えるだけで使える代替案を3つ紹介します。

顧客レビュー分類器:

code
Classify this customer review as POSITIVE, NEGATIVE, or MIXED.
Then extract the main complaint or praise in one sentence.
Format: SENTIMENT: <label>
RESUME: <one sentence>

会議の文字起こし → アクションアイテム:

code
Extract all action items from this meeting transcript.
Format each as: [OWNER if mentioned] [ACTION] by [DEADLINE if mentioned]
If owner or deadline is not stated, leave those fields blank.
Return a numbered list. No preamble.

SNS向けのトーン書き換えツール:

code
Rewrite this text in a direct, confident, first-person tone for LinkedIn.
Remove hedging language ("I think", "maybe", "sort of").
Keep it under 200 words. Return only the rewritten text, no commentary.

これらはいずれも、システムプロンプトが異なるだけの同じ30行のエージェントです。それぞれに新しいプロジェクトを用意する必要はありません——SYSTEM_PROMPTを更新して再実行するだけです。

ステップ5:本番環境にデプロイする

ローカルスクリプトはプロトタイプです。本番のエージェントは、スケジュールに従って、あるいはイベントに応じて動作します。私が使う道筋:Cloudflare Workers。

Workersは1日あたり10万リクエストまで無料で、数秒でデプロイでき、インフラを一切管理することなくcronトリガー、KVストレージ、キューを利用できます。

Wranglerをインストールし、Workerのひな形を作成します。

bash
npm install -g wrangler
wrangler init my-agent-worker --template worker-typescript
cd my-agent-worker
npm install @anthropic-ai/sdk

APIキーをシークレットとして保存します(決してコード内に書かないでください)。

bash
wrangler secret put ANTHROPIC_API_KEY

src/index.tsを次の内容に置き換えます。

typescript
import Anthropic from "@anthropic-ai/sdk";

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const { text } = await request.json<{ text: string }>();

    const client = new Anthropic({ apiKey: env.ANTHROPIC_API_KEY });
    const message = await client.messages.create({
      model: "claude-haiku-4-5",
      max_tokens: 512,
      system: YOUR_SYSTEM_PROMPT,
      messages: [{ role: "user", content: text }],
    });

    const block = message.content[0];
    if (block.type !== "text") return Response.json({ error: "Bad response" }, { status: 500 });
    return Response.json({ summary: block.text });
  },
};

デプロイします。

bash
wrangler deploy

これでhttps://my-agent-worker.<your-subdomain>.workers.devにライブのAPIエンドポイントができました。Zapier、Google Sheetsのスクリプト、モバイルアプリ——HTTPリクエストを送れるあらゆる場所から呼び出せます。

次に何を構築するか

基本パターンが動くようになったら、複雑さは3つの種類でやってきます。

ツール使用(tool use) — 外部APIをいつ呼び出すかをモデルに判断させます。常に同じロジックを実行するのではなく、入力に応じてモデルがどのツールを呼び出すかを選びます。これが、検索したり、データベースに書き込んだり、通知を送ったりするエージェントの作り方です。

チェーン化(chaining) — あるエージェントの出力を別のエージェントの入力として渡します。分類器が応答器へルーティングし、要約器が翻訳器へ流し込みます。私が本番で運用しているエージェントのほとんどは、単一の呼び出しではなく、2段階または3段階のチェーンです。

cronトリガーwrangler.toml[triggers] crons = ["0 8 * * *"]を追加すれば、エージェントがスケジュールに従って動作します。ポーリングも、常時稼働のサーバーも不要です。これが、私がこのサイトを運用するために使っているコンテンツパイプラインの仕組みです。

これら3つのパターンはすべて、本番で30以上のエージェントを運用するために私が使っているエージェントスタックで完全なTypeScriptコードとともに解説しています——その記事は、本記事が終わるところから続きます。

オペレーターの結論

「エージェントを作ろうと考えている」状態から「デプロイ済みのエージェントを持っている」状態までの隔たりは、およそ15分と30行のコードです。システムプロンプトこそが製品です——フレームワーク選びではなく、そこにエネルギーを注ぎましょう。エージェントが週に1時間を節約してくれるなら、それは年間50時間です。まずはシンプルな版を作り、それが元を取るか見極め、ユースケースが求めるときにだけ複雑さを足していきましょう。

続きを読む

AIプレイブックをメールでお届け

毎週水曜。28,400人以上の読者。無駄なし。

↵ すべての結果を見る esc esc で閉じる