所要時間: 約30分 | 難易度: ★★★☆☆

この記事で作るもの

  • プロジェクト全ファイルを1M(100万)トークンのコンテキストに流し込み、機能仕様書を自動生成するPythonスクリプト
  • 前提知識:Pythonの基礎(pip操作、環境変数の設定)、VS Code等のエディタ操作
  • 必要なもの:MiniMax APIキー、Python 3.9以上の実行環境

📦 この記事に関連する商品(楽天メインで価格確認)

Mac mini M2 Pro

1Mトークンの巨大テキスト処理時に安定したメモリ容量を確保できるため

楽天で価格を見る Amazonでも確認

※アフィリエイトリンクを含みます

先に確認するスペック・料金

MiniMax M3は、中国のユニコーン企業MiniMaxが発表した最新モデルです。最大の特徴は、コーディング能力と「Agentic(エージェント的)」な推論能力の高さ、そして100万トークンという膨大なコンテキスト窓にあります。

料金面では、Claude 3.5 SonnetやGPT-4oと比較して非常に競争力があります。現在のレートでは、100万トークンあたり数ドルのレンジで運用可能です(最新のAPIドキュメントでは「abab7」系列として提供)。ハードウェアは、API経由での利用になるため、MacBook Airや古いノートPCでも問題ありません。ただし、1Mトークンのテキストを処理する場合、クライアント側のメモリを1GB程度消費することがあるため、極端にスペックが低いPCは避けてください。

また、API取得には電話番号認証が必要ですが、日本の番号(+81)でも登録可能です。登録時に「個人開発者」か「企業」かを選択する場面がありますが、個人で試す分には個人アカウントで十分です。

なぜこの方法を選ぶのか

巨大なコードベースを解析する場合、これまでは「RAG(検索拡張生成)」を使うのが一般的でした。しかし、RAGには「検索漏れ」という致命的な欠点があります。関連するコードが検索に引っかからないと、AIは断片的な情報だけで判断を下し、誤った修正案を出してしまいます。

MiniMax M3の1Mコンテキストを使えば、RAGのような複雑なベクトル検索を構築することなく、コードを「丸ごと」放り込めます。これにより、ファイル間の複雑な依存関係や、プロジェクト全体の設計思想をAIが正確に把握できるようになります。Claude 3.5 Sonnetの20万トークンでは収まりきらなかった大規模リポジトリを、そのまま扱えるのがこの方法の最大のメリットです。

Step 1: 環境を整える

まずは必要なライブラリをインストールします。標準的なrequestsでも動かせますが、今回はより堅牢に扱うためにdotenvを活用します。

# プロジェクトディレクトリを作成
mkdir minimax-analysis && cd minimax-analysis

# 必要なライブラリのインストール
pip install python-dotenv requests pathspec

pathspecをインストールするのは、.gitignoreを考慮してファイルを読み込むためです。node_modulesや.gitフォルダをAIに送ってしまうと、一瞬でトークンを浪費し、解析の質も下がるからです。

⚠️ 落とし穴: MiniMaxのAPIは、リクエストのペイロードサイズに制限がある場合があります。100万トークン対応とはいえ、一度に数GBのバイナリを送りつけるとエラーになります。あくまで「テキストファイル」を対象にすることを忘れないでください。

Step 2: 基本の設定

.envファイルを作成し、取得したAPIキーを設定します。

MINIMAX_API_KEY=your_api_key_here
MINIMAX_GROUP_ID=your_group_id_here

次に、APIを呼び出すためのベースクラスを作成します。MiniMaxのAPIは独自の形式(abab7-chatなど)を指定する必要があります。

import os
import requests
from dotenv import load_dotenv

load_dotenv()

class MiniMaxClient:
    def __init__(self):
        self.api_key = os.getenv("MINIMAX_API_KEY")
        self.group_id = os.getenv("MINIMAX_GROUP_ID")
        # MiniMaxのV2 APIエンドポイント。abab7(M3相当)を指定する
        self.url = f"https://api.minimax.chat/v1/text_experience?GroupId={self.group_id}"

    def generate(self, prompt, system_prompt="You are a professional software engineer."):
        headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }

        payload = {
            "model": "abab7-chat", # M3相当の推論モデル
            "tokens_to_generate": 4096,
            "reply_constraints": {"sender_type": "BOT", "sender_name": "Expert"},
            "messages": [
                {"sender_type": "SYSTEM", "sender_name": "System", "text": system_prompt},
                {"sender_type": "USER", "sender_name": "User", "text": prompt}
            ],
            "stream": False
        }

        response = requests.post(self.url, headers=headers, json=payload)
        if response.status_code != 200:
            raise Exception(f"API Error: {response.text}")

        return response.json()["reply"]

各設定項目の意味:

  • abab7-chat: M3のコーディング特化型モデルです。
  • tokens_to_generate: AIの回答の長さです。4096は現状の最大クラスです。
  • sender_type: MiniMax独自の形式です。USER/SYSTEM/BOTを明示します。

Step 3: 動かしてみる

まずは最小構成で、APIが正しく叩けるか確認します。

if __name__ == "__main__":
    client = MiniMaxClient()
    result = client.generate("Hello, can you explain what 'M3' architecture in your context means?")
    print(result)

期待される出力

Hello! The MiniMax M3 architecture refers to... (中略) ...it supports 1M context windows and multimodal inputs.

この段階でエラーが出る場合は、MINIMAX_GROUP_IDが正しいか、支払い情報の登録(無料枠でも設定が必要な場合あり)が済んでいるかを確認してください。

Step 4: 実用レベルにする

本題である「巨大リポジトリの一括解析」機能を実装します。.gitignoreを読み込み、不要なファイルを除外しながらプロジェクト全体を一つのテキストに固めます。

import pathspec

def get_project_context(root_dir):
    context = ""
    # .gitignoreの読み込み
    gitignore_path = os.path.join(root_dir, ".gitignore")
    if os.path.exists(gitignore_path):
        with open(gitignore_path, "r") as f:
            spec = pathspec.PathSpec.from_lines("gitwildmatch", f.readlines())
    else:
        spec = pathspec.PathSpec.from_lines("gitwildmatch", [])

    for root, dirs, files in os.walk(root_dir):
        # 除外ディレクトリ
        dirs[:] = [d for d in dirs if not d.startswith(".") and d != "node_modules"]

        for file in files:
            full_path = os.path.join(root, file)
            relative_path = os.path.relpath(full_path, root_dir)

            if spec.match_file(relative_path):
                continue

            try:
                with open(full_path, "r", encoding="utf-8") as f:
                    content = f.read()
                    context += f"\n\n--- File: {relative_path} ---\n{content}"
            except:
                continue # バイナリファイル等はスキップ

    return context

# メイン処理
if __name__ == "__main__":
    client = MiniMaxClient()
    repo_path = "./my-project" # 解析したいリポジトリのパス

    print("Reading project files...")
    all_code = get_project_context(repo_path)

    prompt = f"""
    以下のプロジェクト全コードを解析し、機能仕様書を作成してください。

    # 目的
    1. プロジェクトの全体像(何を目的としたシステムか)
    2. 主要なコンポーネントとその役割
    3. データフローの概要
    4. 改善の余地がある設計箇所

    # コード
    {all_code}
    """

    print("Analyzing with MiniMax M3 (this may take a minute)...")
    analysis_result = client.generate(prompt)

    with open("specification.md", "w", encoding="utf-8") as f:
        f.write(analysis_result)

    print("Analysis complete! Check specification.md")

このスクリプトを使えば、数万行のコードをAIが俯瞰し、人間が数時間かけて行うリサーチを数分で終わらせてくれます。私が私物で運用している200ファイル程度のAPIサーバープロジェクトを投げたところ、各エンドポイントの依存関係を正確に抜き出した仕様書が3分ほどで生成されました。

よくあるトラブルと解決法

エラー内容原因解決策
401 UnauthorizedAPIキーまたはGroup IDのミス.envの設定を再確認。最新の管理画面からコピーする
Internal Server Error送信データが大きすぎる1M対応とはいえ、1リクエストの物理的なサイズ制限に抵触。ファイルを削るか小分けにする
回答が途中で切れるtokens_to_generate不足パラメータを増やすか、回答を継続するように促す

次のステップ

この記事の内容をマスターしたら、次は「Agentic」な機能を試してみてください。MiniMax M3は単なる回答だけでなく、ツール利用(Function Calling)の精度が非常に高いです。

具体的には、生成した仕様書をもとに「足りないテストコードを自動で作成し、ファイルとして保存する」エージェントを構築するのが面白いでしょう。Pythonのsubprocessと組み合わせて、テストを実行し、エラーが出たら再修正するループを組めば、開発効率は劇的に向上します。また、マルチモーダル機能を活かして「UIのスクリーンショットを投げ、それを実現するためのCSSを既存のコードベースに合わせて修正させる」といった実務的なタスクにも挑戦してみてください。

よくある質問

Q1: 中国のAIということで、セキュリティやプライバシーは大丈夫ですか?

ビジネス利用の場合、API経由で送信されたデータが学習に利用されるかどうかは、利用規約(Terms of Service)の「Enterprise」プランの詳細を確認する必要があります。機密性の高いコードを扱う場合は、プロキシを通すか、個人情報のマスキング処理をStep 4のスクリプトに組み込むことを推奨します。

Q2: Claude 3.5 Sonnetと比較して、コーディング能力はどう感じますか?

私が試した感触では、コードの「正確性」はSonnetがわずかに勝りますが、「文脈の理解量」ではM3が圧倒します。特に古いプロジェクトの全体把握や、大規模なリファクタリングの計画立案にはM3の方が向いていると感じました。

Q3: 1Mトークンをフルに使うと、API料金が高くなりませんか?

MiniMaxの料金体系は比較的安価に設定されていますが、1Mトークンを毎リクエストで消費すると、1回あたり数百円〜かかる場合があります。開発中はStep 4で読み込むファイルを制限し、本番解析の時だけフルに回すのが賢い運用です。


1. X投稿用ツイート本文 (TWEET_TEXT) 2. アフィリエイト商品情報 (AFFILIATE_CONTEXT)

3. SNS拡散用ハッシュタグ (HASHTAGS) 4. SEOタグ (SEO_TAGS) 5. URLスラッグ (SLUG)


あわせて読みたい