型がついてるのに実体が違う。AIと開発するとよく騙される——という話をここに書きます
Zennドラフト2026-07-06
2386字
--- title: "型がついてるのに実体が違う。AIと開発するとよく騙される——という話をここに書きます" emoji: "🔬" type: "idea" topics: ["ai", "個人開発", "claude", "typescript", "poem"] published: false --- 先日、こんなバグを踏みました。 管理画面で作ったキャンペーン割引が、なぜか契約編集の画面に出てこない。DBを見てもデータは正しく入っている。最初は「一覧を取るクエリが悪い」と思って書き直しました。直らない。次にサーバーの応答を疑いました。これも違う。 結局、原因はまったく別の場所にありました。画面を開く処理の中に `started_at.slice(...)` という一行があって、そこで例外が飛んでいた。`started_at` は型定義上 `string` なのに、実体は `Date` オブジェクトだったんです。`Date` に `.slice` は無いので当然エラー。しかもその例外のせいで、**後ろにあった「キャンペーン一覧を取得する処理」に一度も到達していなかった**。だから何をいじっても一覧は空のまま。原因(日付の型)と症状(キャンペーンが出ない)が、画面上まったく別の場所にありました。 型は `string` と言っている。でも実体は `Date`。**型がついているのに、その型が嘘をついている。** 人もAIも「stringって書いてあるからstringだろう」と信じて、まんまと騙される。 ……という感じの「詰まり」を残していく場所として、Zennを始めます。はじめまして、Miyoki(みよき)です。 ## 何をやってる人か **Miyoki Labs** という屋号で、AIを使ったプロダクト開発をしています。肩書きは自分で「**AIプロダクトエンジニア**」と名乗ってます。企画から制作、運用、事業化まで、**一人でAIと一緒に通す**のが自分のやりたいことです。 その証明として、いま **Nompass** という小規模事業者向けのAI活用サービスを立ち上げて動かしています。さっきのキャンペーンのバグも、このNompassの開発で踏んだものです。うまくいくかはまだわかりません。でも、収益ラインも撤退ラインも自分で考える当事者になったことで、開発の解像度がかなり上がりました。 開発はほぼ Claude Code と二人三脚です。かなりの部分を書かせてます。ただ「AIが主役で自分はおまけ」ではなくて、**どこをAIに任せて、どこは人間が握るか**を決めるのが自分の仕事、という感覚でやってます。さっきの「型がつく嘘」も、AIに任せていれば防げたわけじゃなくて、**AIも自分も同じように騙された**話です。この線引きの話は、これから何度も書くことになると思います。 ## これまで作ってきたもの ポートフォリオ( https://miyoki-labs.com )にまとめていますが、ざっくり挙げるとこんな感じです。 - **説明できるRAG(経理・税務アシスタント)** — 回答だけじゃなく「どのチャンクを根拠にしたか」をUIで見せる。AIに勝手に判断させない設計を突き詰めた一本 - **ブログ自動化パイプライン** — キーワード→リサーチ→構成→本文→AIによる審査→Markdown出力、の6ステップで記事下書きを半自動生成するツール - **提案文ジェネレーター / 執筆補助ツール** — システムプロンプトで文体を固定して量産する系 - **テレアポ切り返しデモ / 数値分析カウンター** など どれも「AIで何をどこまで任せられるか」を、実際に手を動かして確かめた結果です。 ## これからZennに書くこと Zennは自分にとって**開発ログと失敗談を残す場所**にします。うまくいった話より、**詰まった話・見当違いした話**を中心に書くつもりです。理由は単純で、自分が調べ物をするとき一番助かったのが、そういう「同じ所でハマった人の記録」だったからです。 いま下書きにあるネタだと、たとえばこんなのを予定してます。 - 今日の冒頭で書いた「**型がつく嘘**」——ORM×RSCで `timestamp` が `Date` になり、`.slice` が時限爆弾になっていた話 - middlewareを「正しい位置」に直したら**無限リダイレクトループ**が始まった話(動いてなかったコードを直すと、隠れてたバグが動き出す) - `wrangler pages deploy` が「成功」したのに本番が404だった話(git無しはプレビュー扱いになる) - Cloudflare Pages で `next/image` が効かなくて、画像を実測273KB→34KBまで削った話 - AIの審査ゲートが「**構造的に絶対通らない**」設計になっていて、点数が70点に張り付いていた話 技術記事というより「その時どう間違えて、どう気づいたか」の記録に近いです。コードそのものより、判断の経緯を残したい。 ## というわけで 同じような実装や、同じハマりを踏んでいる人に、ここの記事がショートカットになったら嬉しいです。 各媒体のハンドルは全部そろえてあるので、**「@miyoki_labs で探して」** もらえれば見つかります。受託(AI業務自動化・ツール開発)の相談も、ポートフォリオ( https://miyoki-labs.com )から受けてます。 次の記事から、さっそく最初の失敗談——「型がつく嘘」を書きます。よろしくお願いします。
補足・事実確認
- **改稿の意図**:Zennは"技術記事・開発ログ"志向の場なので、純粋な自己紹介ではなく**具体的な詰まり(型がつく嘘)から入る「開発ログ初回」**の形に変更。voice-kit の固定ルール「各媒体の理想構成・文字数を目指す」を適用(本文 約2,200字=Zenn目標2,000〜5,000字内)。 - **出典**:`計画\02_ポジショニング.md`(人格キャノン)+ `計画\プロジェクト棚卸し.md`(実績)+ 冒頭バグ=`miyoki-blog`/`Nompass`の実ネタ(seeds-miyoki・log.md「キャンペーンが出ない真犯人は無関係な.slice例外」)。 - **ブランド文脈**:Miyoki(作り手の自己紹介)→ **Zenn個人**。 - **事実確認ポイント**: - 冒頭のキャンペーン/`.slice`バグは実在(log.md 2026-07-05・portal PR #15〜#17)。数字・PR番号を本文に出すなら refs 要確認。 - 「これから書くネタ」5件は全て `log.md`/`seeds-miyoki.md` にドラフトor記録済みの実ネタ(架空でない)。 - **CTA**:中盤(実績→ポートフォリオ)+末尾(受託相談)。Zenn文化に合わせアフィリ・過剰宣伝なし。 - **公開手段**:`published: false` のまま Zenn個人で手動投稿(将来は Phase2 の投稿ボタン化候補)。