🦔

「できません」と言った Claude Code が、ドキュメントを渡したら動いた ── Kaggle NB自動提出を例に

に公開

はじめに

あるコンペに参加していて、Claude Code に提出を自動化させようとした。しかし「できません。」と返答があった。

ググってみる。「Kaggle API では Code Competition への完全自動提出は不可能」
と書いた記事が上位に並ぶ。実装例まで載っていて、それなりに説得力がある。

しかし、最終的には全自動で提出できた。push から submission まで、
ブラウザを一度も開かずに。鍵だったのは Claude Code に
2つのドキュメントを読み込ませる という、ただそれだけのことだった。

  1. Kaggle CLI の公式ドキュメント(提出方法)
    https://github.com/Kaggle/kaggle-cli
  2. 参加しているコンペのルールページ(GPU可否、実行時間制限などコンペ固有の制約)

この記事では、私が実体験で詰まった3つのポイントと、なぜこの2層を読ませると
上手くいくのかを共有する。

前提:認証設定だけ済ませておく

この記事の手順を試す前に、Kaggle CLI の認証設定だけ済ませておく必要がある。
~/.kaggle/kaggle.json の配置か、環境変数(KAGGLE_USERNAME / KAGGLE_KEY
の設定が必要だ。手順は公式ドキュメントに記載されている。

ここさえ済んでいれば、あとはこの記事の通りに動く。

3段階の詰まり

1.「提出できない」と言われた

Claude Code に最初に頼んだとき、「直接 Kaggle にアクセスできません」と返ってきた。
検索結果にも「できない」記事が並ぶ。

しかし公式の Kaggle/kaggle-cli リポジトリのドキュメントを読むと、
Code Competition への提出コマンドが正式に用意されている:

kaggle competitions submit <competition-name> \
  -k <username>/<notebook-slug> \
  -f <output-filename> \
  -v <notebook-version> \
  -m <message>

-k でノートブック、-v でバージョン、-f で出力ファイルを指定すれば、
CLI一発で完結する。

検索で「できない」と書いていた記事は、古い Kaggle/kaggle-api リポジトリ時代の
制約を引きずった情報だった。Claude Code に新しい公式CLIのドキュメントを
読み込ませると、状況は一変した。
「できません」が消え、正しい手順を
一発で提案してきた。

2. データセットのパスの名前で詰まった

提出フローは動いた。次に詰まったのはデータセットの読み込みだった。

Claude Code が書いたコードはローカル想定のパスで、Kaggle Notebook 実行時の
パスと食い違っていた。ローカルでコード生成をしていたため提出時のパスを
AIが理解していなかった。「/kaggle/input/<コンペ名>/」だとしっかり教えれば
解決した。

3. GPU 禁止のコンペで GPU を使った

これは私自身の勘違いだった。

参加していたコンペは GPU 使用が禁止されていたが、私はそのルールを正しく
把握しておらず、「GPU を使ってよい」と思い込んでいた。Claude Code は私の
指示通り、GPU 前提のコードを淡々と書いた。実行もできてしまう。

公式ドキュメントを読ませるだけでは足りない。コンペ固有のルールは
Kaggle CLI のドキュメントには書かれていない。コンペごとに違うからだ。
AIは私の勘違いを訂正できない。AIもそのルールを知らないからだ。

解決策:2つのドキュメントを読ませる

最終的に辿り着いた手順は単純だ。

  1. Kaggle CLI の公式ドキュメント を Claude Code に読み込ませる

    • https://github.com/Kaggle/kaggle-cli の README とチュートリアル
    • 認証、データセット取得、Notebookのpush、Code Competitionへのsubmitまで
      一通り載っている
  2. 参加しているコンペの "Overview" ページ を Claude Code に読み込ませる

    • GPU/TPU 使用可否、外部データ可否、実行時間制限、提出形式

この2つを最初にコンテキストに入れてから「これに従って提出を自動化して」と頼む。
それだけで Claude Code は動く実装を書いてくる。

なぜこれで上手くいくのか

理由はシンプルだ。

AIは概要しか知らない、しかも古い概要を。
LLM の事前学習には、最新の Kaggle CLI 仕様が入っていない。古い kaggle-api
時代の「Code Competition は API で完全自動化できない」という知識を引きずる。
だから「できません」と返ってくる。

検索結果は失敗の記録が上位を占める。
成功者は「公式ドキュメントを読んで実装したら普通に動いた」と記事を書く動機がない。
失敗談のほうが書かれやすく、SEO的にも強い。検索結果には強いバイアスがかかっている。
今回のように仕様が更新されても、古い「できない」記事はそのまま残り続ける。

コンペのルールは AI の事前知識に絶対に入っていない。
コンペは毎回違う。GPU可否も、外部データ可否も、提出形式も毎回違う。
AIに頼るのではなく、自分でルールページを渡すしかない。

最新の公式仕様」と「ローカルルール」── この2層を明示することで
初めて、AIは正しく実装できる。片方では足りない。

一般化

このパターンは Kaggle に限らない。

「公式APIドキュメント」+「そのプロジェクト固有のルール」を AI に読ませる、
というやり方は、ほとんどのツール統合タスクに当てはまる。
GitHub Actions、Hugging Face Hub、社内API ── 何であれ、
汎用ドキュメントとローカルルールの2層を読ませる のが基本動作だ。

特に、ツールの仕様が更新されている場合、AIの事前知識と検索結果はどちらも古い情報を返してくる。最新の一次情報を自分で渡さない限り、AIは古い内容で出力してしまう。

AIに出典を表示させて正しい内容なのかを吟味するように、正しいドキュメントを
読み込ませるとAIは正しく実行してくれる。

AIに「できる?」と聞いてはいけない。
「このドキュメントを読んで実装して」と頼むべきだ。

Discussion