Claude Codeで機械学習コンペに挑戦!Solafune空き地検出コンペでの実践記録
皆さん、おはよう、こんにちは、こんばんは!!
最近、X界隈にてClaude Codeが盛り上がりを見せています。
皆さんもご存じとは思いますが、Claude Codeはマジで革新的です。ユーザー側から指示を出すと、自分でタスク分解をして、ガンガンとコードを書いてくれます。瞬殺です。自分で書くよりも何十倍も速いです。
ただし、クセが強いです。自分が期待するアウトプットを出してもらうには試行錯誤が結構必要です。指示を出せば後は手放しで、はい完成、なんてマジックはありません。
そんな背景もあり、沢山のノウハウ記事も見かけるようになりました。一方、それら記事のほとんどがウェブサイト制作や、Webアプリケーションサービス開発の内容となっており、機械学習やAIを使ったモデル開発や精度向上にフォーカスした記事はほとんど見当たりません。
ということで、今回、Claude Codeを使ってコードを一切書かずに機械学習コンペに挑戦してみたという記録を取り上げます。
そこで得た反省点や学びを共有できればと思います。
筆者の機械学習/AIの経験
Claude Codeは、誰が使うかに影響されると考えています。なので、筆者紹介をしておきます。
筆者は、機械学習/AIについては初心者です。「ゼロから作るDeep Learning」やスタンフォード大学の「Machine Learning」講座など一通り勉強はしましたが、実戦経験はほぼ皆無です。
一応、segmentation-models-pytorchを使って学習から推論までコードを書けたりはします。とは言ってもKagglerでもありません。
普段は、ルールベースの解析を行ったりしているという感じです。
Claude Codeを使ってみようと思った背景
自分のコーディング技術をごまかしたいからです。
コーディングの時間を大幅に短縮したいからです。
普段の業務では、クライアントの要望に対して衛星データを使って、どんな価値を提供できるのかを考えています。
事業開発に足を突っ込みつつ、技術開発にも足を突っ込んで、プロダクトの事業構想を練ったり、一人PM・作業者で案件を片づけたり、PMとしてAIエンジニアに仕事を依頼したりしています。
そんなことをやってると、コーディングの時間をまともに取ることができません。やりたい気持ちはいっぱいです。むしろ、解析・モデル開発業務に専念したいぐらいです。
ということで、設計は自分でやって、コーディングはClaude Codeにやってもらうことができれば、事業開発も技術開発も両方こなせるなぁなんて甘い考えを持ち、Claude Codeに手を出しました。
Claude Codeを使うメリット
Claude Codeをだいぶ使い込みましたが、Claude Codeは、以下の観点から非常に便利なツールだなと感じました。
コーディングが爆速
とにかく早いです。内容によりますが、大体1-2分でモデルの実装をしてくれます。
コーディングが爆速なので、アイデアさえあれば、いくらでもすぐに実装してくれます。おかげで、普通に自分が書いたら1-2時間、場合によっては1日以上かかるようなコードでも1-2分で書いてくれます。
ただし、依存関係が複雑なものはClaude Codeも苦労していました。segmentation-models-pytorchなんかは特に問題なく実装できるのですが、MMdetectionになると実装すら手引きしてあげないと全くダメでした。また、環境もsegmentation-models-pytrochとMMdetectionを一緒にしたものを構築してくれるかなと思って試してみましたが、やっぱり駄目でした。なので最終的には別々のdocker-compose.ymlを作成しました。
ただ、Claude Codeを使い始めて2-3週間が経過した頃、Web検索の機能が追加されました。それによって依存関係やエラーへの対応が上手くなったり、場合にはよっては読んで欲しいURLを渡してあげることで上手く解決できるようになりました。
エラーへの自動対応
これまでのブラウザーベースのLLMだと、コードをコピペで貼り付ける必要があり、エラーが発生した時に上手くコンテキストを読んで対応するというのが非常にしづらかったです。そのため、エラーを解決するのが難しいことも多々ありました。
その点、Claude Codeは、それまでのコンテキストを読み取ってエラー対応をしてくれます。しかも必要に応じてWeb検索もかけてくれます。
それによって、いちいち、ユーザー側でコンテキストを渡したりとかエラーメッセージを渡したりすることが無くなりました。すべて自動でやってくれます。大変有難いです。
PDCAサイクルを高速実行
コーディングは、PDCAサイクルのDにあたる部分です。そこが爆速で終えられるということは、アイデアの試行回数が非常に多くなるということです。これは、モデル開発や精度向上にとって大きくプラスに働きます。ただし、ごみアイデアを量産してもごみしか生まれないので、そこは要注意です。
実験から得られるナレッジの蓄積が容易
実験の内容や、そこから得られるナレッジを資料などに整理するのって結構手間ですよね。Claude Codeなら依頼すれば一瞬でしてくれます。
これにより、実験内容を上手く整理してなくて後で「あれ?この実験の内容って何だったっけ??」と困ることは無くなります。
なので、コーディングも爆速でしてくれて、そのナレッジも上手く蓄積できるという一石二鳥の状態を作ることができます。これが、Claude Codeのパワーです。
Claude Codeを利用するうえでの課題
一方、Claude Codeを使うにあたっては結構苦労しました。以下が課題になります。
設定ルールの非順守
CLAUDE.mdにルールを設定すると、それに従ってくれると公式では発表されていますが、実際にはそうはなりません。
最初は従ってくれるのですが、コンテキストが長くなるにつれてルールが無視されるようになります。ディレクトリのルールを書いていても全然違うところにファイルが作成されたり保存されたりします。
ということで、そろそろやばそうだ、と感じ始めた時には、改めてCLAUDE.mdを読んでもらうことにしています。
コンテキストの短縮
長くやりとりをしていると、急に「compacting history・・・」というメッセージが表示され、それまでのヒストリー(コンテキスト)が短縮されます。
これが指示した後の実装中に生じると最悪です。指示した内容とは異なる実装を行ったり、上に記載したようにルールとは全然異なる形での運用が行われるようになります。気付けば悲惨・・・な状況になります。
最近は、右下にcompacting historyが実行されるまでのコンテキストの長さ(?)が表示されるようになったので、それが自動で実行される前にタスクが落ち着いた段階でユーザー側で/compactという形でcompacting historyを実行しています。
そうすると、変な挙動を抑えることができるようになります。
アイデア出しに不向き
機械学習/AIでいうと、ベースライン作成後の精度向上が必須作業となります。これ無くしては高い精度を見込めません。
そこはLLMのお得意分野になるかと思い、ベースラインの作成後、精度向上に向けて色々とアイデア出しもさせました。ただし、一定コンテキストを理解しているはずのClaude Codeであっても出した最初のアイデアで上手くいったことは一度もなかったです。
僕の方から、精度向上に向けた観点として何があるかを聞いて出してもらって、自分が良さそうだなと思う観点を深掘りして深掘りして、ようやく良さそうなアイデアに行きつきます。つまり、精度向上にあたって良いアイデアが出るかどうかは今のところユーザー側の経験や知識に依存するということです。
特に、今回参加したコンペでは①物体検出と②セグメンテーションの2タスクの組み合わせとなっていて、セグメンテーションは比較的高い精度のモデルを開発できたのですが、物体検出については色々と試行錯誤しましたが、なかなか高い精度を出すことができませんでした。
おかげで、2025年6月26日時点にはなりますが、83位中31位となっています(それでも初心者の僕がその順位にいられるというのはClaude Codeのおかげです)。
物体検出はデータを見た限り、結構凝った工夫が必要そうな課題になっていて、Claude Codeもなかなか良いアイデアを出せずで、僕自身もアイデアがさっぱりで、結構な時間を費やしました。
出始めのClaude Codeを試すにはタスクとして難易度が少し高かった気もしました。
反省点
Claude Codeを利用するメリットと課題を述べましたが、僕自身にも使い方に反省すべき点はあったと感じています。
機械学習コンペにClaude Codeを使って参加したわけですが、いかんせん、機械学習も初心者で、Claude Codeの使い方も慣れてないわけです。
なので、コンペに参加した最初の方は、Claude Codeのクセも把握できていなかったですし、CLAUDE.mdに適切なルールも設定できておらず、それによって実験管理もナレッジ管理も上手くできていなかったです。
その結果、色々な実験は行ったのですが、その時に得られるコンペやデータのコンテキストを上手く蓄積・整理できず、Claude Codeのアイデア出しを最大限には活用できなかったと考えています。
Claude Codeを筆頭にLLMの能力を最大限発揮させるには、適切な情報(コンテキスト)をいかに与えられるかが勝負になります。
ただし、今回のコンペを通じてClaude Codeの使い方は概ね理解できたと感じているので、今後、他のコンペでもClaude Codeを使っての参加をしてみたいと思います。
学び
Claude Codeを使ってみて最も大切だと感じたことは、タスクの計画と管理の重要性です。
ユーザーが何か指示を出すと、Claude Codeは頑張って応えようとしてくれます。ただ、その指示に至るまでの道筋が曖昧だった場合、つまり目標に対して道筋が無数考えられる場合には、自分が想定している道筋を選んでくれる可能性は非常に低いです。そのため、Claude Codeが実行予定のタスクの計画をきちんと立てて管理してやらないと、「そのアプローチじゃないんだけどなぁ」とか「そういう実装じゃないんだけどなぁ」というのが頻発します。
これはClaude Codeに特有の現象ではない印象を持っています。読者の皆さんも、仕事で同僚にタスクを依頼したら想定していたのとは違ったものが渡されたなんて経験は一度はあるんではないでしょうか。
つまり、Claude Codeは非常に人間に近い挙動をしていると言っても過言ではないと考えます。Claude Codeは、浅く幅広い知識を豊富に持っているけれども、倫理観や仕事観や経験といったものがないので平気でルールも守らなくなるし、嘘をついてユーザーを騙そうとするし、エラーが発生した時も表面的な解決策で片付けようとします。
ということで、Claude Codeに想定通りのアウトプットを出してもらうには、渡すタスクを明確にしてあげて管理もきちっとすることが必要になります。現段階であれば、凄腕のエンジニアの場合、それをするぐらいであれば自分でコードを書いた方が早いと思う人の方が大多数だと思います。
一方、一昨年のChatGPTの登場から、LLMがすごいスピードで進化していることを考えると、LLMをいかに使いこなすかをノウハウとしてもっておかないと、いくら凄腕のエンジニアであってもなかなかしんどい戦いにはなるんではないかと思います。逆に、凄腕のエンジニアであれば、LLMを活用することで、より一層凄いことができるという印象を持っています。
ということで、僕のCLAUDE.mdは、タスク管理を最重要視したものになっています。
まとめ
ということで、機械学習コンペSolafuneへの参加を通じてClaude Codeを使った開発経験を共有しました。
コンペの結果(とは言っても、まだ開催中ですが)は現時点で83位中31位ということですが、僕の経験を踏まえると悪くなかったんじゃないかと思います。
Claude Codeの使い方は一定学べたので、この学びを基に、次のコンペに早く挑戦したい気持ちでいっぱいです。
今後も、Claude Codeを使った機械学習開発の実践例を共有していければと思います。機械学習で使ってるぜという方がいれば、ぜひ、皆さんの経験や考えをお伺いできると嬉しいです。
Discussion