0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TypeScriptで作るAI呼び出しミニCLI:ClaudeとOpenAIを手軽に試す

0
Posted at

はじめに

AI のテキスト生成サービス(Claude、OpenAI)を自分の端末から手軽に呼び出したいと考えていませんか?
本記事では、TypeScriptNode.js だけでシンプルなコマンドラインツール(CLI)を作る手順を解説します。プログラミング初心者でも、数ステップで動くスクリプトが完成します。

必要なもの

項目 バージョン例
Node.js 18.x 以上
npm / yarn 任意
API キー Claude(Anthropic) と OpenAI(ChatGPT)

API キーは各サービスの管理画面から取得してください。取得方法は公式ドキュメントに従うだけで OK です。

プロジェクトの作成

# ディレクトリ作成 & 移動
mkdir ai-mini-cli && cd ai-mini-cli

# TypeScript と必須パッケージをインストール
npm init -y
npm i -D typescript @types/node
npm i node-fetch@2 dotenv
npx tsc --init

tsconfig.json はデフォルトで問題ありませんが、esModuleInteroptrue にしておくとインポートが楽になります。

環境変数の設定

プロジェクト直下に .env ファイルを作り、取得した API キーを書き込みます。

.env
ANTHROPIC_API_KEY=your_anthropic_key
OPENAI_API_KEY=your_openai_key

.gitignore.env を忘れずに追加して、キーが公開リポジトリに流出しないようにします。

CLI の本体コード

src/index.ts を作成し、以下のコードを貼り付けます。

import fetch from 'node-fetch';
import * as dotenv from 'dotenv';
dotenv.config();

type Model = 'claude' | 'openai';

async function callClaude(prompt: string): Promise<string> {
  const res = await fetch('https://api.anthropic.com/v1/complete', {
    method: 'POST',
    headers: {
      'x-api-key': process.env.ANTHROPIC_API_KEY!,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      model: 'claude-2.1',
      prompt,
      max_tokens_to_sample: 200,
    }),
  });
  const data = await res.json();
  return data.completion;
}

async function callOpenAI(prompt: string): Promise<string> {
  const res = await fetch('https://api.openai.com/v1/chat/completions', {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.OPENAI_API_KEY!}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      model: 'gpt-3.5-turbo',
      messages: [{ role: 'user', content: prompt }],
      max_tokens: 200,
    }),
  });
  const data = await res.json();
  return data.choices[0].message.content;
}

// エントリポイント
async function main() {
  const args = process.argv.slice(2);
  const model: Model = (args[0] as Model) ?? 'openai';
  const prompt = args.slice(1).join(' ') || 'こんにちは、AI!';

  try {
    const reply = model === 'claude' ? await callClaude(prompt) : await callOpenAI(prompt);
    console.log(`--- ${model.toUpperCase()} の返答 ---`);
    console.log(reply);
  } catch (e) {
    console.error('API 呼び出しに失敗しました', e);
  }
}

main();

コードのポイント

  • dotenv で環境変数をロードし、キーをコードに埋め込まない安全設計にしています。
  • node-fetch を使うことで HTTP リクエストをシンプルに記述。
  • CLI の引数は process.argv から取得し、node dist/index.js openai "天気は?" のように実行できます。
  • エラーハンドリングは最低限ですが、実務ではステータスコードやレートリミットの考慮が必要です。

ビルドと実行

# TypeScript をコンパイル
npx tsc

# 生成された JavaScript を実行
node dist/index.js claude "AI って何ですか?"

npm run ts-node のように ts-node を入れれば、コンパイルせずに直接実行することも可能です。

まとめ

  • TypeScript の型情報で API のリクエスト/レスポンスを安全に扱える。
  • ClaudeOpenAI のエンドポイントはほぼ同じ構造なので、モデル名だけ切り替えるだけで多様な AI を試せる。
  • 環境変数と .gitignore でキー管理を徹底すれば、初心者でも安全に開発ができます。

実際に手を動かしてみると、AI 呼び出しの感覚が掴めるはずです。ぜひ自分だけのプロンプトやオプションを足して、オリジナル CLI を完成させてみてください。

詳しい手順はこちら → https://felixstudio0.gumroad.com/?utm_source=qiita&utm_medium=github_actions&utm_campaign=2026-q1&utm_content=qiita-footer

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?