世界を動かす技術を、日本語で。

申し訳ありませんが、まだ考える必要があります。

概要

  • Ruby on Rails の創始者DHHが Campfire Once を複数言語(Rust, Elixir, Go)でAIリライト
  • 各言語リライトで 非互換や設計の違い が発生、AIの限界が露呈
  • パフォーマンス評価やベンチマーク の難しさと、単一指標の危険性を指摘
  • ElixirとRustの並行処理 比較から、言語特性や設計トレードオフの重要性を解説
  • 結論: 自動化やAIに頼り切るのは危険、設計判断と批判的思考が必須

DHHによるCampfire OnceのAIリライトとその問題点

  • DHH が自作チャットアプリ Campfire Once を Ruby on Rails から Rust へAIエージェントでリライト
  • さらに Elixir や Go でもリライトを追加
  • AIによる自動リライトで 設計意図・仕様の曖昧さ が問題化
    • 「後方互換性を維持するか」「レイテンシとスループットの優先度」「許容メモリ量」など
    • プロンプトが具体的でないと 多くの設計判断が運任せ になる
  • 実際のリライト結果では 後方互換性やRedis利用有無などがバラバラ
    • Rust版は CSRFトークンを省略 しキャッシュ性を重視、 Redisを廃止 しインプロセスキュー化
    • Elixir版は Rails原作に近い設計
    • 言語の違いというより AIプロンプトの曖昧さ によるもの

AIリライトの品質とパフォーマンス問題

  • コードを読むと パフォーマンスや設計の問題 が多発
    • Elixir版は 全SQLクエリを1プロセスで逐次実行 し並列性に欠ける
    • Rust版も 一部DB操作が非同期でなく、スレッドブロッキング が発生
  • Rustの非同期ランタイムは 協調的スケジューリング のため、
    • タスクがyieldしないと 他タスクがブロック される
    • 非同期I/Oやasyncロック の適切利用が不可欠

ベンチマークとシステム設計上のトレードオフ

  • ベンチマークでは 単一指標での評価の危険性 を強調
    • Rust版の通知配信成功率が 高負荷時1%、Elixir版は 100%
    • ただし、Rust版は より多くのリクエスト処理 (4倍)を達成
    • Elixir版は 高負荷時にHTTP POSTの23%がタイムアウト
  • 通知遅延 や クライアントUX についても比較
    • Rust版は 遅延時にクライアント再接続で新着取得、Elixir版は 最大180秒の通知遅延
    • どちらがUXとして優れているかは 一概に決められない

並行処理・メモリ管理・イベント配信の設計判断

  • Rust版は tokio::sync::broadcast channel でイベント配信
    • チャンネル容量(stream_capacity)を 256→16384 に増やすと配信成功率が 14%→90% に上昇
    • しかし 遅延が大幅増 し、クライアント再接続戦略の方がUXとしては良い場合も
  • Elixir版は GenServerのメールボックス無制限 でOOMリスク
    • 100req/s時に 1.8GBメモリ使用
    • 「一部の通知を落とす or OOMで全停止」どちらが良いかは 設計次第

結論:AIと自動化の限界、設計と批判的思考の重要性

  • AIや自動化で全てが解決するわけではない
  • 言語ごとの特性や設計トレードオフ を理解し、 失敗モードを予測 する力が不可欠
  • 単一ベンチマーク指標に依存せず、複数観点で評価 する姿勢が重要
  • 批判的思考と設計判断能力 の維持が、信頼性あるシステム構築の鍵

Hackerたちの意見

自分が扱ってるシステムをしっかり理解して、今と未来の状態について賢い判断ができるようにしないとね。場合によっては、コードを読まなくても大丈夫なこともあるかもしれない。将来的にはそれがもっと一般的になるかも。でも今は、個人的にはコードを読む(またはざっと見る)方が好きだし、AIに頼りたくないな。

ここでの考え方は参考になるね。実際の効率向上を測るためにベンチマークを事前に設定しておけばよかったかも。でも、手を抜いた複雑なリライトはまだ準備が整ってないよ。

└

手を加えない複雑なリライトはまだ準備ができてない...ちょっと残念だね。だって、AIエージェントに動作するアプリケーションの完全なコードを渡せば(理想的にはテストも含めて)、それを別の言語の同等のアプリケーションに翻訳できるはずだよ。曖昧だったり不完全なプロンプトのせいで間違えるのは理解できるけど、このタスクにはプロンプトすら必要ないはず。必要な情報は全部コードの中にあるんだから。

「考える必要がある」っていうのが物議を醸す発言になる未来が怖いわ。

└

それは未来じゃない。

└

仕事では、考えることが基本的に discouragement されてるよね。AIエージェントを使ってないなら、何か間違ってるし、会社の時間を無駄にしてるってことになる。手でコードを書くなんて、もう誰もやるべきじゃないって強調されてるし、AIが何かを間違って実装したと思ったら、その理由をしっかり示さないと、ただの反AIのトラブルメーカーとしてレッテルを貼られちゃう。そうなると、物事が進むのを妨げる障害物になっちゃうよ。もし君の人間の意見が何か間違ってたり、単に成功してなかったら、次のレビューで無視されるし、みんな君の話を聞かなくなる。

└

自由な思考や批判的思考は、文明の始まりからほとんどの人間社会でタブー視されてきたか、エリートの特権とされてきたよね。

└

他に誰が考えてたかって?ヒトラーだよ!

ここでの文脈は、LLMによって翻訳されたシステムについてだから、理想的な使い方だよね。既存のシステムの開発者たちが90%の考えをすでにやってくれてるんだ。

└

それは本当にいいポイントだね。まずは現在の挙動をテストで文書化してから、どんなバグをテストケースに盛り込んでしまったのかを慎重に確認するのがいいかも。

└

うん、AIの成功事例って、ポートから来てることが多い気がする。あるいは、人間が理解している意図的なアーキテクチャが敷かれたプロジェクトからで、AIがその上に機能を追加してる感じ。Linuxディストリビューションに機能やドライバーを追加するのは、AIが特に価値をもたらす場所の一つだと思う。基盤がすでに整ってるからね。最近、エージェントコードがこんなアーキテクチャの基盤を必要とする理由について投稿したんだ。誰かの興味を引くかもね。 https://ljtn.github.io/epiq/blog/the-soft-fabric-of-agentic-...

└

「理想的なユースケース」って、すごい意見だね。記事で指摘されている「10%」の部分(全部の問題を指しているなら)は、最も時間と労力がかかることなんだ。これを理解して修正しないと、「90%」の「翻訳」をどうにかすることはできないよ。

Hacker Newsで議論の続きを見る