PR

【Python】自分だけのAI CLIを1時間で開発する:TyperとOpenAI APIで作るコマンドラインアシスタント

はじめに:なぜ今、「自作AI CLI」なのか?

2025年、私たちはWarpやGhost-CLIなど、数多くの優れたAI搭載CLIツールに囲まれています。しかし、既製品のツールには「あと少し、ここがこうだったら…」というかゆいところに手が届かない瞬間も少なくありません。

  • 特定の定型作業を、もっと短いコマンドで実行したい。
  • チーム独自のコーディング規約をチェックさせたい。
  • 個人的なナレッジベースを検索させたい。

こんな時、最も柔軟かつ強力な解決策が「自分だけのAI CLIを自作する」ことです。

この記事では、モダンなPythonライブラリであるTyperOpenAI APIを使い、わずか1時間で実用的なAIコマンドラインアシスタントをゼロから開発する全手順を、ハンズオン形式で解説します。AI CLIを「使う側」から「作る側」へ、最初の一歩を踏み出しましょう。

なぜTyperなのか?CLIライブラリ比較

PythonにはいくつかのCLIライブラリがありますが、2025年現在、Typerが最も推奨される選択肢の一つです。

ライブラリ 特徴 長所 短所
argparse 標準ライブラリ 追加インストール不要 記述が冗長になりがち
Click デコレータベース 柔軟で強力 Typerよりは記述量が多い
Typer 型ヒントベース 記述量が最小、強力な補完 比較的新しい

Typerは、Pythonのモダンな機能である「型ヒント」をそのまま利用してコマンドの引数やオプションを定義するため、直感的でコードが非常にクリーンになります。

ステップ1:プロジェクトのセットアップ(10分)

まずは開発環境を整えます。

  1. プロジェクトフォルダ作成と仮想環境の構築
    bash
    mkdir my-ai-cli
    cd my-ai-cli
    python -m venv venv
    source venv/bin/activate

  2. 必要なライブラリのインストール
    bash
    pip install typer openai python-dotenv rich

    • typer: CLIフレームワーク
    • openai: OpenAI APIクライアント
    • python-dotenv: APIキーを安全に管理
    • rich: 出力をリッチにする(任意)
  3. APIキーの設定
    プロジェクトルートに.envファイルを作成し、OpenAIのAPIキーを記述します。
    .env
    OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ステップ2:TyperでCLIの骨格を作る(15分)

main.pyというファイル名で、CLIのエントリーポイントを作成します。

# main.py
import typer
from rich.console import Console
# TyperアプリケーションとRichコンソールを初期化
app = typer.Typer()
console = Console()
@app.command()
def ask(prompt: str):
    """AIに質問をします。"""
console.print(f"🤖 あなたの質問: {prompt}")
# ここにAIとの連携処理を追加する
ai_response = f"「{prompt}」に対するAIの応答です。"
console.print(f"[bold green]AIの応答:[/bold green] {ai_response}")
if __name__ == "__main__":
app()

動作確認:
ターミナルで実行してみましょう。

python main.py "こんにちは、AI!"

askというコマンドが自動で定義され、引数promptが受け取れていることがわかります。

ステップ3:OpenAI APIと連携する(25分)

いよいよAIの頭脳を組み込みます。

# main.py (全体)
import os
import typer
from openai import OpenAI
from dotenv import load_dotenv
from rich.console import Console
from rich.panel import Panel
# .envファイルから環境変数を読み込む
load_dotenv()
# TyperアプリケーションとRichコンソールを初期化
app = typer.Typer()
console = Console()
# OpenAIクライアントを初期化
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
@app.command()
def ask(
prompt: str = typer.Argument(..., help="AIへの質問内容")
):
    """AIに質問をします。"""
console.print(Panel(f"[bold blue]🤖 あなたの質問[/bold blue]\n{prompt}", title="入力", border_style="blue"))
with console.status("[bold yellow]AIが応答を生成中...[/bold yellow]"):
try:
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "あなたは優秀なアシスタントです。簡潔かつ的確に回答してください。"},
{"role": "user", "content": prompt}
]
)
ai_response = response.choices[0].message.content
console.print(Panel(f"[bold green]✅ AIの応答[/bold green]\n{ai_response}", title="出力", border_style="green"))
except Exception as e:
console.print(f"[bold red]エラーが発生しました:[/bold red] {e}")
if __name__ == "__main__":
app()

主な変更点:
dotenvでAPIキーを安全に読み込みます。
OpenAIクライアントを初期化します。
askコマンド内でclient.chat.completions.createを呼び出し、AIからの応答を取得します。
richPanelstatusを使い、見た目をリッチにしています。

最終的な動作確認:

python main.py "PythonのTyperライブラリの主な利点を3つ教えてください。"

これで、コマンドラインから直接AIと対話できる、あなただけのAIアシスタントが完成しました。

まとめと次のステップ:自作ツールを育てる楽しみ

今回は基本的なAIアシスタントを作成しましたが、自作ツールの可能性は無限大です。

  • 機能拡張: 会話履歴を保持する、ファイルの内容を読み込ませる、特定のコマンド(例:git commit -mのメッセージ生成)に特化させる。
  • ローカルLLM連携: Ollamaと連携させ、オフラインで動作するプライベートAI CLIに改造する。
  • パッケージ化: pyproject.tomlを設定し、PyPIに公開して世界中の開発者に使ってもらう。

この記事が、あなたがAI CLIを「作る側」に回り、開発ワークフローを劇的に改善するきっかけとなれば幸いです。

“`

コメント

タイトルとURLをコピーしました