Upgrade to Pro — share decks privately, control downloads, hide ads and more …

~gijiby~ Ruby ベースとした非エンジニア向けプログラミング支援ライブラリを作ってみた

~gijiby~ Ruby ベースとした非エンジニア向けプログラミング支援ライブラリを作ってみた

TOKIUM & mybest Drinkup at RubyKaigi 2026 Day2 (https://connpass.com/event/390049) でのLT資料です。
※ gijiby は gem として公開予定ですが、2026.05 現在セキュリティ懸念によりレビュー中です🌱

Avatar for staka

staka PRO

May 13, 2026

More Decks by staka

Other Decks in Technology

Transcript

  1. L I G H T N I N G T

    A L K · 2 0 2 6 gijiby Ruby ベースとした非エンジニア向け プログラミング支援ライブラリを作ってみた @Ikaneko / 擬似コード混じり Ruby を動く Ruby にする話 # L T # R u b y # A I
  2. S T O R Y 仕様書が、いつかコードになる世界…の話 こ れ ま で

    人が読んで、人が書く 仕様書 人 (実装) コード も し A I が 最 強 な ら 仕様を投げるだけでコードが出てくる 仕様書 AI コード で も 現 実 は なんだかんだ任せきれてない 仕様書 AI レビュー コード 任せきれない原因はいろいろあるけど、今日はその ひとつのあるある の話
  3. 原 因 の ひ と つ : あ る あ

    る AIに同じ仕様書を渡したのに、毎回ちがうコードが出る 仕 様 ( 自 然 言 語 ) 100円未満の経費で「免税」なら「税フラグ」を出力、それ以外は「空欄」。 100円を超える場合はそれ以外のとき「ハイフン」を出力。 1 回 目 の c l a u d e c o d e if expense.amount < 100 expense.tax_exempt ? expense.tax_flag : "" else "-" end 2 回 目 の c l a u d e c o d e def tax_flag_output(expense) if expense[:amount] < 100 expense[:tax_exempt] ? expense[:tax_flag] : "" else "-" end end ロジックは同じ。でも実装スタイルが毎回ブレる。レビューで疲れるやつ。
  4. 仮 説 予測可能性 (Predictability) = 信頼性の一要素 毎回違うコード → 予測不能 →

    毎回レビュー → 信頼できない 同じ入力 → 同じ出力 = 予測できる = 信頼できる 信頼性 (Trust) 予測可能性 (Predictability) 出力の一貫性 (今回のスコープ) 予測可能性 を上げられれば、AI に任せきれる範囲も(きっと)広がるはず。
  5. B R I D G E では、どうやって「一貫性」を上げる? 3 R E

    A L I T Y 仕様の書き手は非エンジニア。学習コストで詰む Ruby 前提にした瞬間、結局「学習コスト問題」を先送りしているだけ 1 F A C T 入力が厳密なほど、AI 出力は一貫する 曖昧な仕様は出力をブレさせる / 詳細なプロンプトほど正確なコードに (先行研究より) 2 I D E A じゃあプログラミング言語で書かせれば完璧 Ruby なら学習障壁も低めで、型宣言も不要、日本語との親和性もあるし... 「厳密さ」 と 「ゆるさ」、両方ほしい。
  6. A P P R O A C H Ruby +

    擬似コード の混在を許す言語環境を作る 厳密に書ける プログラムとして解釈可能 ゆるく書ける 擬似コード・自然言語もOK 学習コスト低(ユーザフレンドリ) 非エンジニアでも書ける 表記ブレが少ない 同じ意図は毎回近い形に落ちる こ んな 感 じの 入 力を 許 した い x = 10 もし x が 5 より大きい場合 x を出力せよ end
  7. 爆 誕 作りました。その名も gijiby 擬似(giji) + Ruby → gijiby I

    N ( 擬 似コ ー ド混 じ り ) x = 10 もし x が 5 より大きい場合 x を出力せよ end O U T ( 実 行可 能 な R u b y ) x = 10 if x > 5 puts x end 使 い方 require "gijiby" result = Gijiby.compile(code) eval(result) Ruby で書ける人はそのまま、書けない人はふんわり。
  8. し く み エラーが消えるまでループで叩き直すパイプライン 1 受取 Ruby + 擬似コード 2

    前処理 決定的な書換えを先に 3 チェック 構文 → 実行時 4 AI 修正 行単位で差し替え 5 完成 実行可能な Ruby エラーなら修正してもう一度 ポイント: 決定的に直せる部分は前処理で潰す → AI 呼び出しを最小化 → 速くて安定
  9. T E C H H I G H L I

    G H T S 実装でこだわったとこ 3 つ サンドボックス ホストを守りつつ実行する ▪ fork した子プロセスで eval ▪ system / exec / spawn を remove_method ▪ Socket / File 系 const も削 除 行単位で修正 AIの暴走対策 ▪ エラー行だけを置換 ▪ 全部書き換えられないように ▪ Analyzer でノイズも先に除去 temperature = 0 一貫性に全振り ▪ llama.cpp ローカル + 構造化 出力 ▪ LLM は差し替え可能に設計 ▪ ルール化されるほど LLM の出 番は減っていく どれも「同じ入力 → 同じ出力」を守るための仕掛け
  10. R u b y + 擬 似 コ ー ド

    for i from 1 to 15 if i is divisible by 15 say "FizzBuzz" elsif i is divisible by 3 say "Fizz" elsif i is divisible by 5 say "Buzz" else say i end end 実 践 以下のコードを変換してみる! 生 成 見 込 コ ー ド (1..15).each do |i| if i % 15 == 0 puts "FizzBuzz" elsif i % 3 == 0 puts "Fizz" elsif i % 5 == 0 puts "Buzz" else puts i end end
  11. R E S U L T S 評価: 同じ擬似コード入力 →

    毎回バイト単位で同じ Ruby 55 / 55 全ケース一致 11 ケース × 5 回 独立実行 バイト単位で完全一致 平 均 B L E U - 4 ( 5 回 ) 0.9332 標準偏差 0.0000 実 行 一 致 ( e x e c - m a t c h ) 55 / 55 全 run × case L L M 不 要 で 変 換 完 了 4 / 11 前処理だけで <1秒 「再実行したら結果が変わるかも…」をひとまず忘れられるやつになった
  12. W R A P U P まとめ & よければ使ってください 擬似コード混じり

    Ruby を、実行可能な Ruby にコンパイル 同じ入力 → 同じ出力 (55/55) を経験的に達成 ルール化するほど速く・安定する「育つライブラリ」 G i t H u b staka121/gijiby Star & Contribute 募集中 ユ ー ザ フ レ ン ド リ に つ い て → 実際に使ってもらってないので、 「ユーザフレンドリである」と思い込むことで解決しました (天才) というわけで皆さん、使ってください。リアクションが最後のピースです。 ご清聴ありがとうございました / Thanks!