qrfiを作って分かったこと
先日、初めてのRustプログラミングの成果として、qrfi v0.1.0をリリースしました。
最近は、QRコード(QRコードは株式会社デンソーウェーブの登録商標です)を読み取らせることで無線LANに繋がる、ということが一般的になりましたが、一定の規格があり、その規格に沿ったQRコードを画面にその場で出力させるコマンドラインツールがqrfiです。macOSやLinuxのターミナルアプリで動かすことができます。

……という話自体は、2月28日にも書きました。
今回は、このqrfiの開発を通じて学んだことを書いてみたいと思います。
AIと一緒に進めた、はじめてのRust
今回の開発では、AIにコードを生成させつつ、自分で細かくプロンプトを出し直したり、ときには自分で書き直したりという進め方を取りました。
単に「動くコードを出してもらう」のではなく、
なぜこのような実装になるのか
他の書き方はないのか
その設計の根拠は何か
といった問いを重ねていきました。その結果として出来上がったのは、完成したプログラムというよりも、「オーダーメイドのRustチュートリアル」を経た成果物だったように思います。
AIは、実現したいことに対するコードの当たりをつけること、レビュー観点を示すこと、Rustという言語の概念の糸口を提示することにおいて、圧倒的に速い。検索と読解を何往復もする代わりに、対話を通じて理解の足場を作れるのは大きな助けでした。
あえてチャットベースAIを使う
私は仕事でコードを書いているわけではありません。また、今回の目的は「プロダクトを最速で作ること」ではなく、「Rustを学ぶこと」でした。
だからこそ、特化型のコーディングエージェントではなく、あえて汎用のチャットベースAIを使いました。
AIが提案したコードをそのまま流し込むことはせず、ひとつひとつ手で写し、少し変えてみて、コンパイルし、挙動を確認する。エラーが出れば、なぜ出るのかを考える。
その繰り返しです。
もしAIに「全部作ってもらう」スタイルを取っていたら、確かに開発はもっと速かったかもしれません。しかしそれでは、Rustという言語の所有権や借用、型システム、エラーハンドリングの思想といった部分が、自分の中に根を張らなかったと思います。
今回のやり方は、効率だけを見れば最速ではないかもしれませんが、学習としては非常に納得感のあるものでした。
AIがもたらしたものは「速度」よりも「方向性」
正直に言うと、AIがなかった場合と比べて、最終的なコードの品質や完成度が劇的に変わったかというと、そこまでの差はない気もしています。
開発速度についても、「最終的に動くものができるまでの時間」だけを見れば、大差ない、もしくは一見非効率という結果になる確率もそこそこあります。いや、2月11日にリポジトリに空コミット、2月22日に中身のあるコードを初めてコミット、2月25日にv0.1.0をリリースしたので、遅い方だと思います。
では、何が違ったのか。
私にとってAIがもたらしたものは、「オーダーメイドのチュートリアル」です。従来であれば、サンプルコードを書き重ねながら理解していく必要があった部分を、対話を通じて圧縮できた。一日中格闘するのではなくすきま時間で、自分が作りたいものにまっすぐ向かいながら、その都度必要な概念を学べる。
これは学習のタイムパフォーマンスという意味で、非常に大きな価値でした。
時間が浮いた分、私は「なぜそうなるのか」という理解に脳のリソースを割くことができました。表層的なコピペではなく、構造を掴むことに集中できたのは、AIとの協働ならではだと思います。
現代的なリリース作法を学ぶ
今回のリリースでは、Rustそのもの以外にも、多くの学びがありました。
GitやGitHubの使い方は、昔と比べてずいぶん進歩しています。特に、署名付きコミットやタグへの署名を行うためのGnuPGの設定など、「いまどきのリリース作法」を改めて学ぶ必要がありました。
READMEの書き方、LICENSEの選定と明示、リリースノートの整理。
crates.ioへの公開フロー。コードを書くこと以上に、「公開する」という行為には作法があるのだと実感しました。
ローカルで動くプログラムと、インターネット上で誰かが取得できるパッケージ。その間には、責任や透明性、再現性といった観点が横たわっています。
この一連のプロセスは、単なる技術習得というよりも、「ソフトウェアを社会に出す」という経験でした。
アンラーニングとラーニング
Rustに触れて感じたのは、これまで身につけてきたプログラミングの感覚を一度手放す必要がある、ということでした。可変であることが前提の書き方。例外に頼るエラーハンドリング。暗黙の型変換。そうした「慣れ」は、Rustでは通用しないことが多い。だからこそ、アンラーニングが必要でした。一方で、型安全や所有権の明示、エラーを値として扱う姿勢など、新たに学ぶべき思想も多い。
この「壊しては組み直す」プロセスそのものが、今回の一番の収穫だったように思います。
小さなv0.1.0という意味
v0.1.0というバージョンは、まだ未成熟であることの宣言でもあります。
しかし同時に、「ここまで来た」という区切りでもあります。
ゼロからRustを学び、AIと対話し、試行錯誤を重ね、公開可能な形にまで持っていった。その事実は、自分にとって小さくない意味を持ちます。
qrfiはまだ始まったばかりですが、このプロセスで得た学びは、次のプロジェクトにも、そして日々の思考や仕事の進め方にも確実に影響を与えていくはずです。
AIとともに学ぶということ。
作りながら理解するということ。
そして、社会に向けて公開するということ。
そのすべてを体験できた、よい最初のRustプロジェクトでした。
