本文へスキップ

HELLO!

AIコーディングエージェントを開発チームとして使って、iOSアプリ・SaaS・OSSを作っています。要件を決めるところから、UXを設計して、実装を指示して、検証をかけて、出てきたものを自分で確かめて、公開して運用するところまで通します。

AIは、動くデモを作るだけでは価値にならない。

// Works

作ったもの

要件を決めるところから、公開して運用するところまで通したものを並べています。

  • Koeha

    App Store 公開2026

    3分話すだけで、AIが日記を書く

    App Store
  • TraceLit

    本番稼働2026

    SNS上の権利侵害を、監視から弁護士相談の準備までつなぐ

    サイト
  • AI Builder

    本番稼働2026

    AIで作れる人を、任せられる人へ

    サイト
  • スミハジメ

    本番稼働2026

    東京への転入手続きを、期限順のやることリストにする(非公式)

    サイト
  • AgentRisk

    OSS2026

    AIエージェントに渡す前に、リポジトリを実行せずに検査する

    コード
  • model-router

    OSS2026

    タスクの難易度をAI自身に判定させて、モデルと推論レベルを振り分ける

    コード
  • MoguSwipe

    App Store 公開2026

    スワイプで、今日行く店を決める

    App Store
  • Mira / Wisp

    販売中2026

    記憶と人格を持って、デスクトップに住むAIエージェント

// Writing

書いたもの

作る過程で詰まったことと、その解き方を書いています。

  • 3案を並べても間違いは見つからない。潰す役を1体足したら1案落ちた

    観点3 + 反証1 + 統合1 の5体で設問671本の方針を決めた。反証役が1案を落とし、 3案が共有していた暗黙の前提を突き、こちらが渡した実データの誤りも2箇所見つけた。 分担表を手で書き写して116か所のうち28か所を取り違えた失敗も書いた。

  • 同じ日に3本出したら、2本は誰にも読まれていなかった(dev.to の実測)

    dev.to の閲覧を API で取ったら、3本出した日だけ2本が 0 だった。低いのではなく 0。 タグでも時刻でもないことを先に潰してから、本数だけが違うと分かった。 Zenn も同じ形の上限を持つが、あちらは push が成功したまま 404 になる。

  • VRM が配布先で弾かれた。手元のビューアは全部「正常」だった

    glTF の accessor が宣言する min/max が実データとずれていた。 レンダリングは実データを読むので絵は正常に出る。だから手元のビューアも 自前の検証も全部通り、検証器を持つ配布先に弾かれて初めて気づいた。

  • 「カクつく」の原因は補間ではなく日程表だった(動きを疑う順番)

    1つの症状から性質の違う3つの原因が出た。本命は日程表で、間隔5秒に対して 動きが9秒あり重なっていた。折れ点の判定は標本を2倍にして跳びが半分に なるかで見る。振幅で割ると大きい動きが不利になって使えない。

  • ブロックページを「証拠」として保存していた

    誹謗中傷の証拠として投稿の実物スクショを撮る機能で、第三者の埋め込みラッパーが 廃止ドメインになり、HTTP 200 のまま Cloudflare のブロックページを保存していた。 失敗が例外ではなく「それらしい画像」として返ってくる、という話。

  • 文字サイズを最大にしたら同じバグが11件出た(日本語は英語より酷く壊れる)

    Dynamic Type を XXXL にして全画面を撮ったら11件出た。全部同じ原因で、 「横並び固定 × 拡大テキスト」は1つのバグではなくパターンだった。 日本語はどこでも改行できるので、英語のように省略されず1行1文字で縦に積まれる。

  • 開発環境が便利にしていたところに、バグが8件並んでいた

    TestFlight に出すまでの検証を全部 __DEV__ でやっていた。本番だけを通る経路を コードで洗ったら8件出た。60秒開封が二重通知を隠し、匿名ログインが初回状態の リセットを隠し、常時オンの回線が「撮ったのに消えた」を隠していた。

  • 承認ダイアログが押せなくなった(全部見せることと、選べることは別)

    実行するコマンドを全部見せる作りにしたら、4,558 バイトの HTML でダイアログが 画面より高くなり、承認も拒否もできなくなった。defaultId と cancelId を 揃えると macOS で Enter が死ぬことも同時に判明した。

  • 画面収録から利用者名を消す(目視で3回漏らして、最後は機械に検査させた話)

    思いつかない場所は目視では永久に見つからない。ダイアログの飛行中・ 半透明のフェードイン・23秒映っていた URL バーを3回とも見落とし、 最後はテンプレートマッチを全コマに掛けて機械に検査させた。

  • TTS の分割位置は実時間比から決まる(測定環境を汚したまま設計して痛い目を見た話)

    読み上げを分割する位置は勘ではなく実時間比 r から p ≥ r/(1+r) で決まる。 ディスクが埋まり負荷が高い状態で測ったせいで実測が4倍遅く出て、 設計を間違えた記録。

  • VRM のポーズを別のモデルに当てたら顔が消えた話

    モデル間で本当に持ち運べるポーズ形式は .vrma だけだった。ボーンの ローカル座標系・humanoid 正規化・回転の合成順序という理由まで踏み込んで書いた。

  • コード経験ほぼゼロのPMOが、AI駆動開発で「AIに任せる前の安全チェックCLI」を作った話

    AIエージェントは人間より先にリポジトリの指示ファイルを読む。その前に .mcp.json や AGENTS.md を実行せずに検査する CLI を作った経緯と、 何を危険と判定しているか。

英語版は Wisp のサイトに Notes としてまとめています

// Stack

使っているもの

AI / エージェント

  • Claude Code
  • Codex
  • OpenAI Realtime API
  • Gemini
  • MCP
  • Agent Skills
  • OpenRouter

フロントエンド

  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • shadcn/ui
  • three.js
  • React Native
  • Expo

バックエンド / データ

  • Node.js
  • Supabase
  • PostgreSQL
  • Row Level Security
  • Firebase
  • Firestore

インフラ / 運用

  • Vercel
  • Cloudflare
  • Sentry
  • GitHub Actions
  • EAS Build

ネイティブ / 3D

  • iOS
  • Swift
  • Electron
  • VRM
  • VRoid Studio
  • Blender

品質 / 安全

  • Vitest
  • Playwright
  • Zod
  • SARIF
  • SSRF Hardening
  • RevenueCat
  • App Store Review

// About

このサイトについて

作ったものを置いておく場所として作りました。GitHub・Zenn・Qiita・X に散らばっているものが、ここからまとめて辿れます。

作り方は隠していません。実装はAIコーディングエージェントに任せていて、自分がやっているのは、何を作るか決めること、どう作るかの方針を決めること、出てきたものを採用するか直すか判断すること、そのために検証がかかる仕組みを組むこと、そして本番で壊れないところまで持っていくことです。認証・課金・データの扱い・監視まで設計して、はじめて業務で使えるものになります。そこを通していないものは、まだ作品とは呼べないと思っています。

このサイト自体も同じ作り方をしています。背景で動いているのはノードとその接続を描いた WebGL のシーンで、通信が細い端末や、動きを減らす設定をしている環境では読み込まずに静的な背景へ落とします。

このサイトでは、アクセス状況を把握するために Google アナリティクスを利用しています。Cookie を通じて、閲覧したページや滞在時間などの情報が Google へ送信されます。氏名・連絡先といった個人を特定できる情報は送信していません。ブラウザの設定、または次のアドオンで停止できます。 Google アナリティクス オプトアウト アドオン