見出し画像

68歳、定年退職してからAIファッションアプリを作った話【開発秘話 vol.5】

アセンブラ世代がAIと一緒にECサイトを作った話(技術編)

前回、バーチャル試着の話を書いた。

「AIが写真に服を着せてくれる」という技術のことを書いたのだが、読んでくださった方から「PHPもJSも未経験なのに、どうやって作ったの?」という質問をいくつかいただいた。

今回は、その話だ。

私のエンジニア歴

最初に自己紹介をしておく。

私のキャリアは、アセンブラから始まった。1980年代のことだ。

当時のコンピュータは今とはまるで違う。メモリは256KB。ディスクも高価で、レジスタやアドレス指定を手書きで管理しながら、1バイト単位でコードを書いていた。

その後、C言語、C++と移っていった。基盤系のシステム開発が長かった。OSのドライバ、ネットワーク制御、ミドルウェアの設計——そういう仕事を30年以上やってきた。

Webのことは、ほとんど知らなかった。

PHPもJavaScriptも、MySQLも、仕事で触ったことはほぼない。HTMLは「タグを書くやつ」くらいの認識だった。

そんな68歳が、なぜECサイトを作ることになったのか。

「コードは書ける。でも言語が違う」

定年退職してから、時間はある。アイデアもある。妻(53歳)のために「似合う服を教えてくれるアプリ」を作ろうと思った経緯は、vol.1に書いた通りだ。

問題は、現代のWeb開発が自分の知っている世界とまるで違うことだった。

アセンブラ世代の私にとって、プログラムとは「CPUに直接命令する」ものだ。変数の型は厳密に管理する。メモリの無駄遣いは悪だ。そういう感覚でコードを書いてきた。

ところがWebの世界は、驚くほど「ゆるい」。

PHPは型が曖昧だ。JavaScriptは非同期処理が当たり前で、コールバックやPromiseが飛び交う。HTMLはエラーが出てもブラウザが適当に補完してしまう。

「これは、言語の壁ではなく、文化の壁だ」と思った。

AIコーディングアシスタントとの出会い

そこで頼ったのが、AIコーディングアシスタントだ。

最初は「コードを書いてもらう道具」くらいに思っていた。でも実際に使い始めると、それは「一緒に設計を考えてくれるパートナー」だった。

たとえばこんなやりとりをした。

私:「Stripeで決済をしたい。でもComposerは使いたくない。サーバーが共用ホスティングで、自由に環境を変えられないから」

AI:「わかりました。Stripeのライブラリを使わず、curlで直接APIを叩く方法で実装しましょう」

そしてAIは、StripeのAPIドキュメントの仕様を踏まえながら、純粋なPHPのcurl実装を書いてくれた。

アセンブラ世代の私には、「直接APIを叩く」という感覚の方がむしろ馴染みやすかった。ライブラリという「魔法」を使わず、通信の内容を自分で把握できる。その方がデバッグもしやすい。

低レイヤーの感覚が、ここで活きた。

Webhookで一番悩んだ

技術的に一番苦労したのは、StripeのWebhookだった。

Webhookとは何か。Stripeで決済が完了したとき、Stripeが私のサーバーに「決済が終わりましたよ」と通知を送ってくれる仕組みだ。

この通知を受け取って、注文ステータスを「paid」に更新し、在庫を減らし、ポイントを付与し、確認メールを送る——という一連の処理をしなければならない。

最初、これがうまく動かなかった。

Stripeからの通知が届いていない。届いているのかもしれないが、処理されていない。ローカルで開発しているのでStripeがサーバーにアクセスできない——という問題が重なった。

AIに相談すると、「署名検証が通っていない可能性があります」と言う。

Stripeのwebhookには、「本当にStripeからの通知か」を確認するための署名がある。この検証が失敗すると、セキュリティのためにリクエストを拒否する。

コードを見直すと、タイムスタンプの許容誤差の設定が間違っていた。

アセンブラ時代に「バスエラー」を延々とデバッグしていた頃の感覚が戻ってきた。1バイトのズレが全体を壊す、あの感覚。レイヤーは違えど、デバッグの本質は変わらない。

「3つのサービスが同じDBを共有する」という設計

今、私が作っているシステムは3つのサービスで構成されている。

この3つは、同じMySQLデータベースを共有している。

「なぜ分けないのか」と思う方もいるかもしれない。

理由は、ユーザー管理の一元化だ。kitemir.jpで会員登録したユーザーが、shop.kitemir.jpでも同じIDでログインできる。診断結果と購買履歴が一体で管理できる。

ただし、データが混在しないよう、テーブルには厳格なプレフィックスルールを設けた。

  • kitemir.jp → プレフィックスなし(users, diagnoses, tryons)

  • shop.kitemir.jp → mk_(mk_products, mk_orders, mk_coupons)

  • asp.kitemir.jp → asp_(asp_users, asp_license_keys)

基盤系エンジニア出身らしく、この設計は最初に決めた。名前空間の管理は、低レイヤー開発の基本だ。

AIとの役割分担

AIコーディングアシスタントとの作業で学んだのは、「何をAIに任せ、何を自分で考えるか」という役割分担だ。

AIが得意なこと:

  • ボイラープレートコードの生成(認証、セッション管理、フォームバリデーション)

  • ライブラリやAPIの使い方を調べて実装する

  • エラーメッセージから原因を推測する

  • セキュリティ上の注意点を指摘する(「ここはPDOプリペアドステートメントを使うべきです」)

私が考えること:

  • 全体のアーキテクチャ設計(どのサービスがどのデータを持つか)

  • パフォーマンスの考慮(大量CSVインポートをバッチ処理に分割するなど)

  • セキュリティの根本方針(APIキーをどこに置くか、Webhookの署名検証を省略しないなど)

  • デバッグの最終判断(エラーの根本原因を特定する)

アセンブラ時代に培った「システム全体を頭の中で把握する力」が、ここで使えた。

AIは「木」を見るのが得意だ。私は「森」の構造を考える。そのコンビネーションが、思った以上にうまく機能した。

数千行のコードが、数ヶ月で完成した理由

正直に言う。

AIコーディングアシスタントがなければ、このシステムは完成しなかった。

3つのサービスを合わせると、PHPファイルだけで100を超える。データベースのテーブルは30以上。Stripe連携、メール送信、画像処理、VTO連携、CSV一括インポート——これだけの機能を、Webが未経験の68歳が数ヶ月で作った。

「本当に一人で作ったんですか?」と聞かれることがある。

一人ではない。AIと一緒に作った。

でも、設計の判断、デバッグの最終確認、ユーザー体験の方向性——そこは全部、自分で考えた。AIが書いたコードを、自分で読んで、理解して、改善した。

基盤系エンジニアとして30年で身につけた「コードを読む力」と「システムを疑う力」が、ここで初めてWeb開発に使えた。

今、3つのサービスが動いている

現在、3つのサービスはすべて稼働中だ。

kitemir.jphttps://kitemir.jp)では、写真をアップロードするとパーソナルカラーと体型タイプをAIが診断し、バーチャル試着もできる。Stripeのサブスクリプション課金も本番で動いている。

shop.kitemir.jphttps://shop.kitemir.jp)では、Maison Kiteブランドの商品を購入できる。商品ページから直接バーチャル試着ができるWidget機能も実装した。

asp.kitemir.jphttps://asp.kitemir.jp)では、他のアパレルECサイトがバーチャル試着機能を自社サイトに組み込めるパッケージを提供している。

3つとも、自分一人とAIで作り上げた。

68歳が現代Web開発を学んで気づいたこと

最後に、少し大きな話をさせてほしい。

アセンブラ世代のエンジニアは、「基礎がある」という強みと、「知らない技術が多すぎる」という弱みを同時に持っている。

AIコーディングアシスタントは、その弱みを大幅に補ってくれた。

「PHPでStripeのWebhookを実装するには?」と聞けば、ドキュメントを読まなくても実装方法を教えてくれる。「このエラーの意味は?」と聞けば、原因の候補を挙げてくれる。

でも、「このシステム全体をどう設計するか」は教えてくれない。「ユーザーにとって何が必要か」は教えてくれない。「セキュリティの根本方針は何か」は、自分で決めなければならない。

つまり、AIは「実装力」を提供してくれるが、「判断力」は人間が持つしかない

30年間のエンジニア経験で身についた判断力が、AIという道具を使いこなす基礎になった。

これは、シニアエンジニアにとって、思った以上に大きなアドバンテージだと思う。

次回予告

vol.6では、50〜70代女性のためのUI設計の話を書こうと思っている。

「大きなボタン」「16px以上の文字」——技術仕様ではなく、なぜそうするのかの話だ。妻(53歳)や、彼女の友人たちに実際に使ってもらいながら気づいたことを書く。

現在3つのサービスとも稼働中です。ぜひ試してみてください。 kitemir.jp(StyleAI): https://kitemir.jp Maison Kite EC: https://shop.kitemir.jp VTO-EC Suite(B2B): https://asp.kitemir.jp

いいなと思ったら応援しよう!