2 min read

Claude Code (Claude Opus 4) に自社 OSS のサンプルを作って貰った

Claude Max プラン (200 ドル) が Claude Opus 4 が定額と聞いたので、さっそく契約して、Claude Code で自社 OSS のサンプルを作ってみた。

libdatachannel という C++ で書かれた WebRTC と WebSocket が利用できるライブラリを nanobind を利用して Python バインディングを作成したのが、サンプルコードが欲しかったので RFC に準拠した WebRTC シグナリング仕様である WHIP のサンプルを作成した。

指示したこと

  • _source にある libdatachannel のソースを読んで
  • docs にある WHIP の RFC を読んで
  • src 以下のソースを読んで
  • コマンドラインで利用できる WHIP クライアントを libdatachannel-py を利用して作って

結果、色々やりとりしつつ数時間で自社製品にダミーの音声と映像を配信する WHIP に対応したクライアントが生成できた。かかった費用は 200 ドル以下。

これは色々修正したバージョン
libdatachannel-py/examples/whip.py at bc8e4faaa057efecf9038a6623565a1371113142 · shiguredo/libdatachannel-py
Python bindings for libdatachannel. Contribute to shiguredo/libdatachannel-py development by creating an account on GitHub.

雑感

  • とにかく無難なコードを書く
  • 色々読み込ませれば大きな間違いをしない
  • 変な事をしない
  • とにかく大外れしないのはスゴイ

ちなみに作成中にもともとの libdatachannel の Python バインディングのセグフォするバグを見つけてくれた​。自分が見ていない間に試行錯誤して pytest でセグフォしないコードを探し出していた。

見つけたバグの再現テストと修正を切り出した Pull-Request がこちら。
non-zero データだと opus encoder がセグフォする問題を修正する by voluntas · Pull Request #9 · shiguredo/libdatachannel-py

また、デコード機能を Claude Code だけで追加した実装はこの 3 つ。

ただデコード機能はテストがお粗末だったので人にレビューしてもらい、人に修正してもらってからマージした。


ちょっとした問題もソースコードを読んで、実際にインタプリタ動かして確認してくれるのは強い。これはパッケージングの間違いを見つけて貰った時のメッセージ。

⏺ 問題の原因

  調査の結果、from libdatachannel.codec でインポートエラーが発生する原因は以下の通りです:

  1. setup.py でサブパッケージが含まれていない

  packages=["libdatachannel"],  # codecとlibyuvサブパッケージが含まれていない

  現在の設定では、libdatachannel パッケージのみが含まれ、libdatachannel.codec と libdatachannel.libyuv
  サブパッケージが含まれません。

後回しになりがちなちょっとした修正やサンプルコードの作成がほっといてもできるのは良いし、とにかく解説してもらえるのが良い。

とりあえず、色々後回しにしていたタスクを作業中に頼んでやっていこうと思おう。

ちなみに作って貰ったサンプルはとても参考になった。自分は動くコードをを読んで理解するのが向いてるタイプなのでとてもありがたい。

Claude Opus 4

Claude Code で /model opus を指定すると opus を使い続けるモードになる。Max プラン 200 ドルに入ってこれを選ぶのが本当にオススメ。