AIエージェントを使って10倍早く工場OTデータシミュレータを開発してしまった記録と旧来型開発ビジネスの終焉
きっかけ
自社のプロダクトやサービスをデモするって結構困りますよね。ユースケースにマッチしていなかったり、いかにもテストデータです的なつまらない感じのデータだったり。本当は本番環境や現場に適用されているシステムではめちゃくちゃ迫力と説得力があるのに、いざデモ環境やテストデータになると迫力と説得力に欠ける経験は皆さんしたことがあるのではないでしょうか?
私たち株式会社PROMPT-Xでは、商用の時系列データベース「CLOUDSHIP」とその可視化ソフト「RealBoard」を開発&販売しているのですが、お客様にデモする際、いつもこの「デモデータをどうするか?」で頭を悩ませていました。
特に最近は製造業のお客様やSIer様が増えてきていて、私たちのプロダクトの良さを分かっていただくには、実際のデータを使ったデモが欠かせません。でも、実際にお客様工場のデータを使うわけにもいかないし、かといって適当なランダムデータじゃ製造現場の雰囲気が全然出ない。
そこで思いついたのが`工場のOTデータをエミュレートできるシミュレータ`を作っちゃおう!というアイデアでした。
はじめに
今回、年末年始の時間を利用して、プラスチック射出成形工場のシミュレータを開発してみました。なぜ射出成形工場を選んだかというと、装置産業の基本といえる存在だからです。金型に溶かしたプラスチックを流し込んで製品を作る。このシンプルなプロセスの中に、圧力、温度、時間、品質管理など、工場シミュレータに必要な要素が全て詰まっています。また、製品を作るたびに同じ条件で繰り返すバッチ処理というのも、シミュレータにするにはうってつけでした。
シミュレータの概要
このシミュレータは、2台の射出成形機(前面・背面パーツ用)を持つ工場を模擬しています。原材料(ABS樹脂)の供給から、成形、組立、出荷までの一連の流れを、時系列データとして生成します。工場設備として、電力、冷却水、エアーの供給も考慮し、現実的なデータ生成を目指しました。
中間在庫も発生するようにして、プロセス製造とそのボトルネックやジャストインタイムに繋がる少量多品種生産の要となる生産調整についても後々は再現できるようにする算段です。
プロセスフロー図
いざ!開発へ
これまでClaude 3.5 Sonnet(のプロジェクトを利用)とは、Webシステムの開発やAPI実装などでAIとは協業してきた実績がありました。かなり頼もしいパートナーだと実感していましたが、今回のような複雑な要件を持つシミュレータ規模のAIエージェントを使った開発は初めての挑戦です。
SimPy
Pythonで離散イベントシミュレーションを行うためのライブラリ「SimPy」を採用しました。SimPyは、複雑なシステムやプロセスを簡潔なコードでモデル化できるのが特徴です。プロセス指向のアプローチを採用しており、シミュレーション内の時間管理やリソースの制約を直感的に扱うことができます。例えば、製造ラインの効率化、物流システムの最適化など、さまざまな分野で活用可能です。Pythonのジェネレータ機能を活用しており、簡単なコードでリアルな動作を再現できます。シミュレーションを通じてプロセスをシミュレーションしたい方におすすめのライブラリです。
開発の記録
Phase 1: 基盤構築期(12/26-30)
年末の忙しい中での開発開始です。1日2-3時間程度しか作業時間が取れませんでしたが、まずは基本設計から着手しました。
AIエージェントとの開発の基本は「徹底的に仕様書を書く」ことです。こちらの要件をランダムでもいいのでとにかく入力しまくると、かなり良い感じで設計書をマークダウンで整理してくれます。これはシミュレータ開発には予想以上に効果的&便利で、設計の整理と文書化が同時に進んでいきます。
作った仕様書は、手元にダウンロードしつつ、プロジェにドンドン追加していきます。
非常に大事なポイントですが、Claudeとのやりとりは「設計するのか?コードを書かせるのか?」をハッキリすべきです。どっちつかずなチャットは利用制限を近づけるだけで非効率になるからです。そして、設計チャットでも長くなりそうになってきたらmdに書き出す!を徹底するのが吉です。
基本的なテストコードも、AIが素早く提供してくれますので、いわゆる「テスト駆動開発」そのものを体現しながら進めました。この規模のプロジェクトでこれほど早く設計書や単体モジュールが整うのは、正直驚きがありましたね。
12/28は比較的まとまった時間(5時間)が取れて、ここで基本設計と個別モジュール実装の方向性が早くも固まりました。
気付くとこの時点でmdの仕様書が10本以上は完成していました。
Phase 2: 本格実装期(12/31-1/4)
ここから事態は複雑化します。プロセス製造特有の状態遷移や時間管理の実装で、いくら最強AIと思っているSonnet3.5をもってしても能力の限界が見え始めました。
特に以下の部分では苦労しました。
工場/設備/バッチの階層的な状態管理
70秒周期のバッチ処理と状態遷移の整合性
原料~中間在庫~製品による生産制御
これらの実装では、AIは基本的なコードは提供できても全体の整合性を保つのには困難を極めました。シミュレータ本体の骨子はClaudeに作らせましたが、肝心要のUpdateメソッドの実装には殆ど使えなかったのが実状です。
年始は意外と作業時間が取れ、1/1と1/2も3時間ほど(1/3はゴルフへ!)。1/4は朝から夜遅くまで約10時間かけて実装を進めました。
AI主導のコーティングから人間(私)主導のコーティングへバトンタッチ
このあたりが潮時と思いsimulator本体の実装は私が主導することになり、AIにはメソッドやテストコードの一部の生成や、個別機能の実装サポートに徹してもらう形に落ち着きました。
ここまで複雑な設計になると仕様全体を把握することがSonnet3.5をもってしても出来ませんでした。プロジェクトのナレッジ情報にはmdの仕様書とPythonコードを追加してはいましたが、これを全部把握するが困難で、この頃になると私もPythonコーディングとSimPyの実装にも慣れてきてコードが書けるようになっていました(思わぬスキルアップ!)。
Phase 3:シミュレータの完成(1/5午前)
1/4の夜の時点でかなり手応えありましたが、途中でプロセスデータ生成の設計とデータ管理モジュールを変更したせいもあり機能が重複してキレイじゃない状態がどうしてもゆるせず、思い切ってリファクタリングをAIの力を借りながら(この頃になると、コードレビューがClaudeの担当)やりとげました。
お昼過ぎにシミュレータが出した思い通りの美しくデータが出力されたCSVを見たときの感動は忘れられません。
Phase 3: API連携(1/5午後)
最後の山場は意外なところで突破口が開けました。CLOUDSHIPのOpenAPI(YML)仕様書が非常に有用で、これをAIに喰わせたらCLOUDSHIPAPIに出来上がったCSVデータを投入するAPI_Injectorの実装があっさり完了してしましました。しかも、この時間帯の前にClaudeの利用制限に引っかかってしまってChatGPT Plusしか使えないタイミングだったので、ChatGPTで実装できてしまったのは大きかったです。
ここであらためて気づいたのは、AIは「明確な仕様」があれば驚くほど正確に実装(当然速攻で)できるということ。逆に、複数の要素が絡み合う実装では、人間の判断やコーディングが必要になるという・・・プロンプトエンジニアリングと現在の最高水準のAIの限界ともいえる両面が確認できました。
振り返りと発見
1. 驚きの開発効率(10倍以上!)
実作業時間はわずか38時間程度でした。通常なら240-336時間(30-42人日:Claude見積)はかかるはずの開発が、この時間で完了しました。しかも、SimPyという本格的なシミュレーションフレームワークを使った開発だったにも関わらずですよ!? これは自分でも驚きでした。
2. チーム開発とは異なるアプローチ(間接コスト=ゼロ)
この規模のプロジェクトは通常はチームでの開発が必須です。でもそうすると必ず以下の課題が出てきます
チーム内のコミュニケーションコスト
メンバー間の知識・スキルの差
設計意図の共有の難しさ
でも今回は、私1人の開発者とAIエージェントという組み合わせで、これらの課題をほとんど感じることなく開発を進められました。
3. 予想外の価値(自然なテスト駆動開発とドキュメント整備)
特に驚いたのは、AIとの対話過程で自然と詳細な設計書やテストコードが整備されていったこと。これは将来のメンテナンス性を考えると、すごく大きな価値だと思います。
私一人の頭の中にある設計意図が、AIとの対話を通じて明確な文書として残される。この仕組みは本当に画期的でした
4.デプロイの引継ぎはClaudeのProjectを見て貰うだけ
プロモーション用のAWS(EC2)へのデプロイは、正月休み明けにウチのエンジニアにお願いしましたが、ここは「あえてミーティング無し」で「Claudeのプロジェクト見て下さい」とURLを渡しただけにしてみました。
私が口頭で説明するより、非常に詳細な設計書が整っているわけで、なんら説明することなく稼働環境へデプロイとGitへの登録ができたのは必然でした。
新しい開発スタイルの確立
このシミュレータ開発を通じて、ソフトウェア開発の新しい可能性が見えてきました・・・いや確立しました。全てのプロジェクトがこのアプローチに適しているわけではないのでしょうが、条件が揃えば「1人の熟練開発者(=オッサン)とAIエージェント」の組み合わせで、従来のエンジニアだけで構成されたチーム開発を圧倒的に上回る効率と品質を実現できる可能性が証明されたと言えます。
これまでのSIビジネスの終焉
旧来の要件設計から開発テストまでを「人工」と「工数」で計算して見積して開発を進めるビジネスの終焉が叫ばれていますが、これを自分自身の開発を通して体感できました。いや「痛感」しています。
「従来型開発の完全な敗北」とコメントするAI
今回の開発について「人間だけで開発した場合」とClaudeに比較してもらったときのSonnet3.5コメントです。もちろんこれは、エンジニアによる開発の敗北だという意味ではありませんけどね。
おわりに
このプロジェクトは、AIエージェントとの新しい協業の形を探る実験でもありました。結果として、予想以上の成果が得られただけでなく、ソフトウェア開発の新しい可能性とある意味残酷な未来予想図を垣間見ることができました。
特に、これまでWebシステム開発などで築いてきたClaude 3.5 Sonnetとの信頼関係が、こういった複雑なシミュレータ開発でも活きるのかを試せたのは大きな収穫でした。もちろん限界点も見えましたが、それを含めて、今後の開発アプローチを考える上で、重要な示唆を得られたと感じています。