1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSの請求が怖いので、DBなしで「データ共有」を実装した話(と、React Flowの200ドル有料壁 vs AIの幻覚)

Last updated at Posted at 2025-12-11

【Update】 UIを刷新し、大型アップデートを行いました!

以前記事にした自作アプリ『Architecture Sandbox』ですが、 この度、UIの刷新と機能追加を行いました!

フォントやデザインを整えて見やすくしたほか、機能の追加に伴い「操作ガイド」も実装しました。 「使い方がわからない!」という方は、画面右上の「操作ガイド」ボタンからいつでも確認できるので、安心して触ってみてください。

interface.png

はじめに:貧乏性開発者の新たな挑戦

以前、『「システム設計の練習場所がない!」と嘆くのが嫌で、RustとAIで『最強の壁打ち相手』を自作した話』という記事を書きました。
初めて5件を超えるいいねをいただいて非常に励みになっています!このアプリの機能追加を考えている中で、開発者の私には新たな悩みが生まれていました。

  1. 「ユーザーが作ったシナリオ、共有できなくない?」(DBがないから保存できない)
  2. 「VPCとかAZとか、枠で囲いたくない?」(コンポーネントの親子関係が欲しい)

これらを解決するためにアップデートを行ったのですが、その裏側には「文字数制限」「月額200ドルの壁(と嘘をつくAI)」との戦いがありました。
今回は、そんな泥臭い実装の裏側を共有します。

戦い1:React Flowの「169ドルの壁」 vs Geminiの幻覚

「VPC」が欲しいだけなのに

AWSの設計図を描くなら、「VPCの中にSubnetがあり、その中にEC2がある」という包含関係(ネスト)の表現は必須です。
私が使用しているライブラリ「React Flow」には SubFlow という機能があり、これを使えば実現できそうでした。

「なるほど、公式のサンプルコードを見て実装するか」と思い、ドキュメントを開いたその時です。

react-flow_subscription.png

……はい?
「親ノードに合わせて自動リサイズする」とか「子ノードを親の中に封じ込める」といった実用的なサンプルコードを見るには、月額3万円近いサブスクが必要だったのです。
個人開発で払える金額ではありません。

AIに頼るも、嘘ばかりつく

「Pro版のコードが見れないなら、AIに書いてもらえばいい」
そう思い、いつも通りGeminiに実装を依頼しました。しかし、ここからが本当の戦いでした。

React Flowの SubFlowNesting に関する実装は複雑で、Geminiに聞いても「存在しないプロパティ」を使おうとしたり、「動かないロジック」を自信満々に提案してくるのです。

「そのAPIはv11にはないよ」「動かないよ」と指摘し、エラーログを食わせ、修正させる……というAIとの泥沼のレスバトルが続きました。
正解のコードが見えない中で、AIの幻覚(ハルシネーション)と戦いながら、動くコードを模索し続ける作業は、ある意味でゼロからコードを書く以上に精神を削られる作業でした。

demo.gif

結果として、なんとか「親ノードへの吸着」や「自動リサイズ」が動くようになりましたが、これは私の技術力というより、諦めずにAIにプロンプトを投げ続けた執念の成果です。

戦い2:DBなしで「データ共有」を実現するまでの右往左往

保存できないなら、URLに埋め込めばいいじゃない

次に「シナリオ共有」です。DBがないので、「設定データを全部URLパラメータに埋め込んで共有する」というアプローチを取りました。
しかし、ここでも壁にぶち当たります。

失敗1:圧縮してもX(Twitter)に入りきらない

最初は単純に、「JSONデータを lz-string というライブラリで圧縮してURLに乗せればいいや」と思っていました。
しかし、システム設計のデータは巨大です。ノード座標、ラベル、接続情報……圧縮してもURLは数百文字になり、X(旧Twitter)の投稿文字数制限を余裕でオーバーしました。

失敗2:情報を減らしたら「再現」できなくなった

「なら、URLに含める情報を減らせばいい」
そう考え、座標データなどを削ぎ落とし、最低限の情報だけをパラメータに含めるようにしました。

しかし、テストしてみると「共有されたURLを開いても、元の図と同じにならない」という事態が発生。
自動配置ロジックでズレたり、ユーザーのこだわりポイントが消えたり……。「設計図の共有」としてこれでは本末転倒です。

最終解:Rustバックエンドを経由してTinyURLへ

「すべての情報を残したい。でもURLは短くしたい。でもDB代は払いたくない」

行き着いた答えは、「外部の短縮URLサービス(TinyURL)を使う」でした。
ただし、フロントエンドから直接APIを叩くとAPIキーが漏れるし、CORSエラーも面倒です。

そこで、Rustバックエンド(Axum)にプロキシ機能を持たせました。

  1. フロント(React)から、巨大なJSON設定データをRustサーバーに投げる
  2. Rustサーバーが、TinyURL APIを叩いて短縮URLを取得する
  3. 短縮されたURLをフロントに返す

これなら、完全なデータを保持したまま、SNSでシェア可能な短いURLを生成できます。
もちろん、自前のDBは使っていないのでランニングコストはゼロです。

demo2.gif

今後の展望

AIとの戦いやコストとの戦いはまだ終わりません。今後は以下の機能実装を予定しています。

  • 接続線(Edge)の表現力強化:
    ただ線をつなぐだけでなく、「HTTPS」「gRPC」といったプロトコルのラベル表示や、同期/非同期通信での線の種類の使い分け(実線/点線)を実装し、より詳細な設計ができるようにします。
  • 設計図の画像エクスポート:
    現在はURL共有のみですが、設計したキャンバスをPNGやJPG画像としてダウンロードできる機能を追加し、ドキュメント作成やSNSシェアをさらに手軽にします。
  • テンプレート配置機能:
    「Web3層構成」や「サーバーレス構成」など、よくあるアーキテクチャパターンをワンクリックで配置できるようにし、初学者のサポートを強化します。

まとめ

  • 月額200ドルのサンプルが見れないので、幻覚を見るAIと戦いながら実装した
  • DB代を払いたくないから、試行錯誤の末にTinyURLプロキシを実装した

振り返ってみると、「お金がない」「情報がない」という制約のおかげで、React Flowの挙動や外部API連携の実装に詳しくなれました。
もし最初から潤沢な予算があったら、ただのライブラリのコピペで終わっていたかもしれません。

そんな「貧乏性」と「執念」でアップデートされたArchitecture Sandbox、ぜひ遊んでみてください。
現在も機能の拡張などをしながら自分で遊んでいるので、バグって動かないことがあってもご了承ください🙏
みなさんの作った「最強のアーキテクチャ」の挑戦状(URL)、お待ちしています!

Architecture Sandboxで遊んでみる

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?