2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

再編集できるVRChat向けプロフィールカードメーカーを作るときに考えたこと

2
Last updated at Posted at 2026-05-06

この記事は仕様書をもとに、Chat GPT-5.5 Thinkingに生成してもらってます。
でも、アプリ自体はVibe Codingではないので、そこはご安心を...


VRChat向けのプロフィールカードメーカーを作りました。

ただ、今回やりたかったのは単に「画像を作れるツール」ではなく、あとから再編集できることを前提にした設計です。

既存のツールでもプロフィール画像を作れるものはありますが、

  • 再編集できない
  • 再編集対応と書いてあっても復元が不安定
  • 同一端末でも編集元に戻れないことがある

といった体験がありました。

そのため今回は、出力用画像ではなく、再編集可能なデータを中心に設計することを意識しました。

この記事で書くこと

この記事では、VRChat向けプロフィールカードメーカーを題材にしつつ、主に次の観点をまとめます。

  • なぜ「画像生成ツール」ではなく「再編集可能なエディタ」として考えたのか
  • ローカル保存に IndexedDB を選んだ理由
  • PNG出力と編集データをどう分けて考えたか
  • 将来的なクラウド保存を見据えて、どこまでをローカル責務にしたか

やりたかったこと

要件としてはシンプルで、最初はこうでした。

  • ブラウザだけで使える
  • VRChat向けのプロフィールカードを作れる
  • あとから同じカードを編集し直せる
  • 完成形は PNG で出力できる

ここで重要だったのは、PNG はあくまで成果物であって、編集元ではないということです。

画像を書き出せるだけだと、その瞬間に「編集の文脈」が失われます。
だから設計の中心は画像ではなく、カードの編集状態そのものに置く必要がありました。

再編集できることを最優先にした

プロフィールカードは、一度作って終わりではありません。

  • 活動時間が変わる
  • SNSリンクが増える
  • 見た目を少し調整したくなる
  • 季節やイベントに合わせて更新したくなる

つまり、必要なのは「画像生成」よりも、継続的に更新できることです。

この前提に立つと、保存対象は PNG ではなく、

  • 入力されたプロフィール情報
  • 使用している画像データ
  • テーマやレイアウト情報
  • どのカードをどう表示するかという状態

になります。

なぜ IndexedDB を使ったのか

初期段階では、ログインなしですぐ触れることを優先しました。

そのため、保存先としてはブラウザ内で完結できる IndexedDB を採用しています。

IndexedDB を選んだ理由

  • ログイン不要で始められる
  • ブラウザ内である程度まとまったデータを扱える
  • 画像を含む編集データの保存先として localStorage より向いている
  • 「まず作る、あとで再編集する」という基本体験を成立させやすい

とくに今回のように、カード情報だけでなく画像も扱う場合、localStorage はかなり窮屈です。
文字列中心で容量面も弱いため、Blob を扱いやすい IndexedDB のほうが現実的でした。

保存設計で分けたかったもの

今回の設計で重要だったのは、編集用データ出力用データ を混同しないことです。

考え方としては、次のように分けています。

1. カードのメタデータ

  • 名前
  • 活動スタイル
  • 各種リンク
  • テーマ
  • レイアウトに必要な情報

これは「カードを再現するための情報」です。

2. 画像アセット

  • アバター画像
  • ギャラリー画像
  • 背景など

これはカード本体に直接埋め込むのではなく、別のアセットとして管理したほうが扱いやすいです。

3. PNG出力

  • 完成した見た目を画像として書き出したもの

これは配布や投稿には便利ですが、再編集の元データにしてはいけません。

この分離をしておかないと、「画像はあるけど編集状態に戻れない」という、まさに避けたかった状態になりやすいです。

ローカル保存だけでは足りない理由

IndexedDB は初期体験を作るには向いていますが、ずっとそれだけでいくのは厳しいとも感じています。

理由は単純で、

  • 端末をまたげない
  • ブラウザ環境に依存する
  • 消えるリスクを完全には避けられない
  • 公開や共有につなげにくい

からです。

なので、ローカル保存はあくまで 最初の体験を成立させるための手段 と割り切っています。

今後のクラウド保存をどう考えているか

次にやりたいのはクラウド保存です。

ただし、ここで重要なのは「ログイン機能を付けること」自体ではありません。
価値になるのは、

  • 別端末でも同じカードを開ける
  • 継続的に管理できる
  • バックアップ性が上がる
  • 将来的に公開プロフィールへつなげられる

ことです。

つまり、クラウド化は新機能というより、再編集体験をローカル環境の外まで拡張するためのものだと考えています。

作ってみて感じたこと

実際に作ってみると、プロフィールカードメーカーは「画像を出力できるか」より、「編集状態をどれだけ信用して預けられるか」のほうが大事だと感じました。

出力だけなら比較的早く実装できます。
でも、保存して、開き直して、また触れて、破綻せず更新できるようにするには、設計をかなり丁寧に考える必要があります。

このあたりは、プロフィールカードに限らず、何かしらのビジュアルエディタや作成ツール全般にも通じる話だと思います。

まとめ

VRChat向けプロフィールカードメーカーを作る中で、いちばん大事だったのは 「あとで戻ってこれること」 でした。

そのために、

  • PNG は成果物として扱う
  • 編集データは別に持つ
  • 画像アセットとメタデータを分ける
  • IndexedDB でまずローカル保存を成立させる
  • 将来的にクラウド保存へ拡張できる形にしておく

という考え方で進めています。

もし、画像生成系のツールやエディタを作っていて、
「出力はできるけど、再編集や保存の設計が難しい」
と感じているなら、まずは 出力物ではなく編集状態を主役にする ところから考えると整理しやすいかもしれません。

補足

実際に作ったアプリはこちらです。
VRCardMaker

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?