しょぼいQuickQRからの脱却
QuickQR Enhanced、ついに完成しました。
元のQuickQRといえば、見た目はしょぼいし、機能はテキストをQRコードに変換するだけという、まさに「動けばいいや」精神の権化みたいなツールでした。
でも今回、サイトリニューアルの流れで「せっかくなら見た目をキレイにして、機能も拡張してみよう」と軽い気持ちで手を付けたのが運の尽き。
結果、WiFi設定・連絡先・イベント・位置情報・バッチ処理・プリセット管理・履歴管理・カメラ読取・印刷機能まで搭載した、当初の想定を遥かに超える高機能ツールになってしまいました。
AIとの壁打ちで機能が増殖
「WiFi設定のQRコードも作れたら便利かも」 「連絡先のvCardも対応したい」 「位置情報QRがあると面白そう」 「バッチ処理できたら効率的だよね」
AIとの壁打ちをしていると、どんどんアイデアが湧いてきて、気がつくと機能が増殖していました。
生成AIが「こんな機能はいかがですか?」とガシガシ提案してくれるものだから、ついつい「それもいいね!」と言ってしまう。まさに機能のインフレーション状態です。
1000行の壁 - AIの限界を感じた瞬間
最初の500行くらいまでは順調でした。AIが出力するコードもほぼ一発で動くし、「これは楽勝だな」と思っていました。
ところが1000行を超えたあたりから様相が一変。
- コード出力に異様に時間がかかる(カップラーメンができるレベル)
- 出力されたコードが動かない
- 微修正を依頼しても違う部分が壊れる
- やり取りが増えて、修正の修正の修正…
「あ、これAIの限界だな」と感じた瞬間でした。
大規模なコードベースになると、AIも全体を把握しきれなくなるんですね。まるで人間と同じように、複雑さの壁にぶつかってしまう。
AI時代の設計フェーズ革命 - 見えてきた新しい方法論
この経験で改めて感じたのは、設計フェーズの重要性です。いや、重要性どころの話ではありません。生死を分けるレベルです。
従来の開発なら「とりあえず動くものを作って、後でリファクタリング」というアプローチもアリでした。でもAI相手だとそうはいかない。
段取り八分、AI一分二分?
昔から「段取り八分」という言葉がありますが、AI開発時代はもはや**「段取り九分」**かもしれません。
今回の経験から見えてきたのは、開発完了のゴールに向けての筋書きを、より解像度高く描いていく必要性です。
具体的には:
❌ 悪い例:「WiFi機能を追加する」
⭕ 良い例:「WiFiFormクラスでSSID/パスワード/セキュリティ設定を管理し、
QRGeneratorクラスに文字列を渡してWIFI:T:WPA;S:...形式で生成」
AIに「WiFi機能を追加して」と言うと、既存のコードのどこにどう組み込むかで迷走します。でも事前にインターフェースと責任範囲を明確にしておくと、AIも迷わずに実装してくれる。
依存関係の可視化が生命線
特に疎結合な作り。機能やコードの依存を少なくして、一つの変更が他に影響しないような構造にする必要があります。
今回痛感したのは、AIは依存関係を把握するのが苦手だということ。人間なら「あ、ここを変えたらあっちに影響するな」と直感的に分かることが、AIには見えていない。
結局、ファイル分割して確実に動く部分を固めていく戦略に切り替えました:
core_utils.js
- 基本ユーティリティ(他に依存しない)ui_manager.js
- UI関連(core_utilsのみ依存)data_manager.js
- データ管理(core_utilsのみ依存)qr_generator.js
- QR生成ロジック(全部から独立)
たとえばこんな具合です。 それぞれが独立して動くようにして、インターフェースを明確にする。まさに疎結合的なアプローチです。
AIとの共存における新しい方法論
この辺りは今回の経験からうっすら見えてきたものはありますが、今後よい方法を確立していく必要があります。
おそらく、これがコード生成AIとの共存において新しく生まれていく方法論になっていくでしょう。
従来の設計手法に加えて:
- AIが理解しやすいモジュール境界の設計
- コンテキスト量を意識した機能分割
- AIの出力品質が保てるコードサイズの把握
- 人間が最後に品質保証できる粒度での設計
まだ手探り状態ですが、確実に言えるのは 「AIが賢くなったから設計はテキトーでいい」は大間違い だということ。
むしろ逆で、AIと協働するからこそ、より精密な設計が必要なんです。
1000行の教訓 - AIのコンテキスト限界との付き合い方
「AIは万能じゃない」というのは頭では分かっていましたが、1000行の壁で体感しました。
人間だって一度に把握できる情報量には限界があります。AIも同じ。いや、ある意味人間より制約が厳しいかもしれません。
だからこそ、AIが一度に処理できる粒度で問題を分解する技術 が重要になってきます。これは従来の「関心の分離」とは少し違う、「AIコンテキストの分離」 とでも呼ぶべき新しい観点かもしれません。
この辺りの気付きや方法論については、また別の機会にじっくり語ってみたいと思います。AI時代のエンジニアリングは、まだまだ未開拓の領域だらけですからね。
こだわりという名の時間泥棒
最終的にはある程度満足のいくものが完成したので「よし」としましょう。
でも振り返ってみると、こだわりを出し始めてしまう性分がいつも仇となるんですよね。
印刷機能なんて、正直「誰が使うんだ?」レベルの機能に一番時間をかけてしまいました。休みの日だからって、そんな誰も使わないような機能に熱中してしまう愚か者です。
// 印刷用HTMLドキュメントを作成
const printHTML = `
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>QRコード印刷</title>
<style>
@page {
margin: 2cm;
size: A4;
}
// ... 延々と続くCSS
でも、たまにはこういうガッツり作る時間も大切なんじゃないかと思います。普段は効率重視でサクサク作ることが多いですが、時にはこだわって、納得いくまで作り込む時間も必要ですよね。
QRコードへの感謝とリスペクト
今回QuickQRを作り直しながら、改めてQRコード技術の素晴らしさを実感しました。
QRコードは1994年に日本の自動車部品メーカー・デンソー(現デンソーウェーブ)の原昌宏さんとそのチームによって発明されました。
デンソーの現場から生まれた技術
開発のきっかけは、デンソーの製造現場からの切実な要望でした。
当時、部品管理のためにバーコードを10個ほど並べて読ませていたため、作業効率が非常に悪く、現場の作業員から「疲れる」「もっと速く読み取れないか?」という不満と要望が上がっていました。
原昌宏さんは1992年からバーコードスキャナや光学文字認識(OCR)装置の開発に携わっていましたが、この現場の声を受けて「バーコードより多くの情報を盛り込めるコード」の開発に着手したのです。
碁石からのインスピレーション
興味深いのは、QRコードの位置検出パターン(あの四角い目印)のアイデアが囲碁の碁石からきていることです。
原さんは昼休みに囲碁をしていて、「黒と白の比率が1:1:3:1:1になるパターンは自然界にほとんど存在しない」ことに気づき、これを位置検出に応用したそうです。
まさに遊び心と観察力から生まれた発明ですね。
特許の無償開放という英断
そして何より素晴らしいのは、デンソーがQRコードの特許を無償で開放したことです。
通常、他人の特許を使用するには許可が必要ですが、デンソーウェーブは「規格化されたQRコードについては権利行使しない」と明言しました。
原さんによると、この決断の理由は:
「いくらいいコードができても、周辺機器などのインフラが整備されていなければ自由に安心して使えない。特許を開放して他社にもインフラ整備を進めてもらうことで、いち早くQRコードを普及させようと考えた」
「より多くの人にQRコードを使ってもらいたい」
この開発者の純粋な思いが、QRコードの世界的普及を実現したのです。
世界的評価と受賞
この功績は世界的にも認められ、2014年には欧州発明家賞の「Popular Prize」を受賞、2023年には日本学士院賞・恩賜賞も受賞しています。
現在、QRコードは世界中で使われ、特にスマートフォンの普及とともに決済、情報共有、認証など、あらゆる場面で活用されています。
原さんは「決済での使用は想定外だった」と語っていますが、技術が想定を超えて発展していくのも、特許を開放したからこそですね。
エンジニアとしての感謝
今回QuickQR Enhancedを作りながら、QRコードという技術の恩恵を改めて感じました。
- 簡単にWiFi設定を共有できる
- 連絡先交換がスムーズになる
- 位置情報を瞬時に伝えられる
- URLを手入力する必要がない
これらすべてが、30年前に日本で生まれた技術と、それを無償で世界に提供したエンジニアの志によって実現されています。
原昌宏さんとデンソーチームの皆さんに、心からの感謝とリスペクトを送りたいと思います。
まとめ - 技術への愛と継承
QuickQR Enhancedの開発を通じて、技術の進歩とは多くの人の積み重ねによるものだと実感しました。
QRコードという素晴らしい基盤技術があり、それを無償で提供してくれた先人がいて、今の私たちが新しいツールを作ることができる。
時にはこだわりすぎて時間をかけすぎることもありますが、それもまた技術への愛の表れなのかもしれません。
そして何より、AI時代であってもエンジニアの設計力と洞察力は不可欠だということを、身をもって学ぶことができました。
たかがQRコード生成ツール、されどQRコード生成ツール。
小さなツールひとつにも、技術の歴史と多くの人の思いが詰まっているのですね。
QuickQR Enhanced: https://aoiroinc.com/ja/tools/quick-qr/
参考文献・出典
QRコードの歴史・開発経緯について: