先日、9年の歳月をかけて開発してきた、3万行規模の日本語プログラミング言語「なでしこ3」を、ゼロからGo言語で書き直してリリースしました。なんと、企画からリリースまでわずか1週間。しかも、主要な言語コアとライブラリに至っては、わずか1日で実装できました。そんなことができたのも、AIがあったからです。今回は、開発の経緯やAI活用のコツをまとめてみました。
開発スタートはベッドの中で
日本語プログラミング言語「なでしこ」は、日本語でプログラムを書くことができるプログラミング言語です。開発は2004年に始まり、「誰でも簡単プログラマー」を掲げて、現在までアクティブに開発を続けています。
なお、現行の「なでしこ3」は、2017年にJavaScriptで書き直したコードベースが中心となっています。なでしこ3を使うと、ブラウザ上で動くツールやゲームを開発できます。そのコア部分のコードの総行数は約3万行あります。
今回、「なでしこ」をGo言語で書き直そうと思ったきっかけは、ちょっとした思いつきでした。夜、ベッドの上でゴロゴロしながらスマートフォンを開き、AIと会話したのが始まりです。
ChatGPTアプリのリモート画面を開き、「なでしこ3を作り直すとしたら…」というような簡単なつぶやきを書き込みました。すると、さまざまなプログラミング言語や実行環境で「なでしこ」を作り直した場合のメリットとデメリットが詳しく提示されました。その内容がとても興味深く、いろいろな質問を繰り返しているうちに、そのまま実装計画までできあがってしまいました。
次の画面は、実際にその時に使っていたチャット画面です。スマートフォン版のChatGPTアプリには「リモート」という機能があり、PC上で実行しているCodexに指示を与えたり、会話したりできます。
ベッドの上でゴロゴロしながらCodexと会話していると、アイデアがどんどん発展していきました。Codexはローカルにある情報にもアクセスできるので、実際に現在のなでしこの実装を調べながら答えてくれたのです。
その計画がとても良さそうに思えたので、翌朝起きて、深く考えずに「実装してみて」と一言書き込みました。
すると、その日の夜には、実行エンジンと基本ライブラリが完成していました。なんと、ほぼ1日で言語のコア機能が実装できてしまったのです。FizzBuzz問題を解くプログラムが実行できるのはもちろん、ファイル操作のような定型処理や、データベースへのアクセス機能まで実装されていました。
そして、その後の1週間、仕事の合間にバグを直したり、機能をブラッシュアップしたりして、無事リリースにまで至りました。
どのAIモデルを使った?
AI企業が乱立する昨今、どのAIを使って開発したのかは、気になるところでしょう。今回のなでしこの開発で主に使ったのは、コーディングエージェントの定番である「Claude Code」と「ChatGPT/Codex」です。そして補助用として、GoogleのGeminiを搭載したAntigravityも所々で使いました。
Claude CodeではOpus 5とSonnet 5を、CodexではGPT-5.6 Solを利用しました。ただし、何も考えずに高性能なモデルばかり使っていると、あっという間に利用制限に達してしまいます。そこで、実装計画を立てる時にはOpus 5やGPT-5.6 Solを使い、実装やテストには、やや軽量なSonnet 5やGPT-5.6 Terraを使う、というように役割を分けました。
プログラミング言語のような高度なソフトウェアを作るには、高性能なAIモデルが必要に違いないと思う人もいるかもしれません。しかし、プログラミング言語を実装するためのアルゴリズムは長年にわたって研究されており、さまざまな製品に応用されています。
そのため、実装方針さえ明確になっていれば、必ずしも最上位のモデルを使わなくても、計画に沿って正しく実装することができました。
ちなみにClaudeでは、Opus 5よりも性能の高いFable 5.1も提供されています。利用コストは高いものの、Opusでも解決できない問題が出てきたら使ってみようと思っていました。しかし、今回、それほど高度なモデルを使いたくなる場面は一度もありませんでした。
この経験からも、単純に性能の高いモデルを使いさえすれば、良いアプリが開発できるわけではないことが分かります。そもそも、ソフトウェア開発では、複数の小さな機能を組み合わせることで、大きな機能を実現します。そのため、AIに開発を任せる場合でも、適切な単位に機能を切り分けることが、良いプログラムを作るための重要なコツなのだと、今回改めて感じました。
仕様を明確に提示できたことが鍵だった
今回のリリースまでの経過を振り返ってみると、特にうまくいったのは、AIに対して仕様を明確に提示できたことでした。AIにアプリ開発を依頼する場合、指示が不明瞭だと、思ったようなアプリを作り上げることはできません。
今回、これほど短期間に、たった一人で3万行を超える規模のプログラミング言語をリリースできたのは、すでに「なでしこ3」という既存の実装があり、それをGo言語で作り直すという、とても明確なゴールがあったからだと考えています。
加えて、なでしこ3の開発が始まってから9年が経過しており、その間、ユーザーの皆さんと一緒にコツコツと積み上げてきた膨大なWikiのドキュメントや、Web上で公開されている多数のサンプルプログラムがあったことも、大きな助けになりました。
そうした役に立ちそうな資料一式をプロジェクト内に配置しておきました。AIの実行ログを見ていると、実装に迷った時には、現行版の挙動を確認したり、Wikiのドキュメントを参照したりしながら作業していることが分かりました。
実際の手順について
実際の開発は、次のような手順で進めました。
- 現行のなでしこ3の挙動を規定する仕様書やテストコードを大量に生成
- 仕様書を基にして、AIが開発計画を立案し、大きな機能は人間もレビュー
- AIが実装を開始したら、小さな機能が完成するたびにテストし、別のAIにコードレビューするようにした
なお、手順3でAIが実装を行う際、既存なでしこの実装にバグを見つけた場合には、バグチケットとして記録するよう指示していました。その結果、現行のJavaScript(TypeScript)版なでしこ3に残っていたバグも、かなりの数を修正することができました。
これは、とても面白い発見でした。AIに対して単に「バグを探して」と指示しても、なかなか問題を発見できません。しかし、「この機能を作り直して」と指示すると、実装を詳しく調べる過程で、これまで気付かなかった問題が次々と見つかるのです。
この手法はいろいろな仕事でも実践していますが、既存機能を再実装させることで、それまで隠れていた問題をあぶり出せることがあるのです。
まとめ
以上、今回は3万行規模の「なでしこ」を作り直すという経験を通して、AIを活用したソフトウェア開発について、さまざまな知見を得ることができました。
少し前には、JavaScriptの実行環境であるBunが、それまでZigで書かれていた53万行のコードを、11日間でRustに書き直したというニュースもありました。それと比べれば、3万行というのは小さな規模と言えるかもしれません。
しかし、今回、実際に自分で試してみたことで、AIで1日に実用レベルの数万行のコードを生成できることが分かりました。そして、自分自身がゼロから開発できるものなら、AIを使うことで、その開発速度を劇的に高められることも分かりました。
ただし、AIが生成した大量のコードが、間違っていることも多くあり、テストを用意し、レビューし、問題があれば修正するという、従来のソフトウェア開発で重要だった作業は、AI時代になっても変わらないという点も確認できました。
AIによってコードを書く速度が劇的に上がったからこそ、「何を作るのか」「どのような仕様にするのか」「どうやって正しさを確認するのか」という、人間側の設計力がこれまで以上に重要になります。皆さんのAI開発の参考になれば幸いです。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。これまで50冊以上の技術書を執筆した。直近では、「大規模言語モデルを使いこなすためのプロンプトエンジニアリングの教科書(マイナビ出版)」「Pythonでつくるデスクトップアプリ(ソシム)」「実践力を身につける Pythonの教科書 第2版」「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」など。


