はじめに
AI のテキスト生成サービス(Claude、OpenAI)を自分の端末から手軽に呼び出したいと考えていませんか?
本記事では、TypeScript と Node.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 はデフォルトで問題ありませんが、esModuleInterop を true にしておくとインポートが楽になります。
環境変数の設定
プロジェクト直下に .env ファイルを作り、取得した API キーを書き込みます。
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 のリクエスト/レスポンスを安全に扱える。
- Claude と OpenAI のエンドポイントはほぼ同じ構造なので、モデル名だけ切り替えるだけで多様な AI を試せる。
- 環境変数と
.gitignoreでキー管理を徹底すれば、初心者でも安全に開発ができます。
実際に手を動かしてみると、AI 呼び出しの感覚が掴めるはずです。ぜひ自分だけのプロンプトやオプションを足して、オリジナル CLI を完成させてみてください。