アプリのダウンロードとビルド

MeDo のプロジェクトコード書き出し機能では、アプリのソースコードをダウンロードし、ローカルで実行し、バックエンドがあれば自分の Supabase プロジェクトへ移行できます。ダウンロードごとに 300 Credits を消費します。

注記: アプリが純フロントエンド(バックエンドデータなし)の場合は、第 1〜4 節だけを行い、第 9 節でローカル実行します。バックエンドのデータ保存を使う場合は、完全なフローに従って自分の Supabase 上に構造を再構築してください。

1. ダウンロードに含まれるもの・含まれないもの

コードのダウンロードで取得する ZIP には、バックエンドの構造と関数コードが含まれますが、データ・ファイル・キーは含まれません。これにより、移行で何を扱う必要があるかが決まります。

内容ダウンロードに含まれる?場所
フロントエンドのソース(Vite + TS + React)はいsrc/
テーブル構造 / RLS ポリシー / DB 関数 / トリガーはいsupabase/schema.sql
生のマイグレーションスクリプトはいsupabase/migrations/
Edge Functions のコードはい(あれば)supabase/functions/**/*.ts
.env(Supabase URL と anon key)はいプロジェクトルートの .env
テーブル内のデータ行いいえソース DB からエクスポートが必要(多くのユーザーはアクセス不可、第 8 節参照)
Storage 内のファイルいいえ別途移行が必要
Edge Function のシークレットいいえ自分のプロジェクトで再設定が必要
service_role キーいいえプラットフォームが除去済み、自分のものを使用

注記: .env 内の URL と anon key は MeDo のホスト型バックエンドを指しています。置き換えなければ、ローカルのアプリはプラットフォームに接続し続け、自分のデータベースには接続しません。移行の核心は「構造を再構築し、この 2 つの値を差し替える」ことです。

2. アプリコードをダウンロードするには?

アプリが正常に生成されると、編集画面の上部に「ダウンロード」ボタンが表示されます。このボタンをクリックするだけで、アプリのコードパッケージをダウンロードできます。アプリ生成中はコードをダウンロードできない点に注意してください。ダウンロードは Pro 限定機能です。

MeDo エディターのトップバーにあるコードのダウンロードボタン

ダウンロードされるコードのバージョンは、開発者が現在編集中の特定のアプリバージョンに対応します。

開発中にエディターで GUI 変更(フォントや色の編集など)を行った場合は、コードをダウンロードする前に、まずアプリをプレビューするか公開してください。これにより、ダウンロードしたコードパッケージにすべての GUI 変更が含まれます。

GUI 変更後のダウンロード注意の例

3. ソースの解凍

ダウンロードしたパッケージを解凍してディレクトリに入ります:

cd ~/Downloads
unzip -o your-app.zip -d your-app
cd your-app/app-xxxxxxxx        # package.json を含むフォルダに入る

# 構造を確認
ls -la                          # package.json、src/、supabase/、.env が表示されるはず
ls -la supabase/
test -f supabase/schema.sql && echo "schema.sql あり(全量インポート)" || echo "schema.sql なし(migrations を使用)"

典型的な構造は次のとおりです:

app-xxxxxxxx/
├── .env                    # VITE_SUPABASE_URL / VITE_SUPABASE_ANON_KEY
├── package.json
├── src/                    # フロントエンドのソース
│   └── db/supabase.ts      # createClient(url, anonKey)
└── supabase/
    ├── config.toml
    ├── migrations/         # 生のマイグレーションスクリプト
    └── schema.sql          # 完全な構造:テーブル、RLS、関数、トリガー、storage バケット

注記: schema.sql があればそれを使います(第 5 節、全量インポート)。なければ supabase db push でマイグレーションを適用します。

4. ツールの準備

コードの編集には VSCodeIntelliJ IDEA、または好みの IDE を使えます。アプリを実行・移行するには、Node.js 20 以降Supabase CLIpsql(Postgres クライアント)の 3 つのツールが必要です。

macOS で Homebrew を使う場合:

brew install node                    # Node.js 20+(または https://nodejs.org のインストーラー)
brew install supabase/tap/supabase   # Supabase CLI
brew install libpq && brew link --force libpq   # psql / pg_dump

注記: libpq は keg-only パッケージです。psql が「command not found」と表示される場合は、echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc で PATH に追加し、ターミナルを開き直してください。

Windows では、Node.js LTS、Scoop 経由の Supabase CLIscoop install supabase)、PostgreSQLpsql を含む)をインストールします。以下のコマンドは同じで、export PATH=... の行のみ macOS 専用です。

Linux では、リリースバイナリから Supabase CLI を、パッケージマネージャーから psql を(例:sudo apt install postgresql-client)、Node 20 以降をインストールします。

3 つともバージョンが表示されることを確認します:

node -v && npm -v      # node 20 以降
supabase --version     # 例:2.109.1
psql --version         # 例:psql (PostgreSQL) 18.4

注記: アプリが純フロントエンドでバックエンドがない場合は、第 9 節へ進んでローカル実行してください。Supabase の手順(5〜8)はバックエンドのデータ保存を使うアプリにのみ該当します。

5. 自分の Supabase プロジェクトを作成する

まだ Supabase アカウントがない場合

https://supabase.com にアクセスし、Start your project をクリックして、GitHub またはメールで登録します(無料)。無料プランで MeDo アプリを 1 つ移行するには十分です。

無料枠上限アプリ 1 つあたりの使用量
データベースサイズ500 MB約 27 MB
ファイルストレージ1 GBファイルをアップロードしなければ 0
月間アクティブユーザー50,000アプリによる
同時アクティブプロジェクト21

無料プランの枠を表示する Supabase の組織ホーム

注記: 無料プランでは同時に最大 2 つのアクティブプロジェクトまでです。すでに 2 つある場合は、先に 1 つを一時停止しないと新規作成できません。

プロジェクトを作成する

組織ホームで New project をクリックし、次を入力します:

  • Project name、例:taskflow-migrate
  • Database passwordGenerate a password をクリックして強力なものを生成し、必ずコピーして保存します(schema のインポートに必要。紛失するとリセットしかできません)
  • Region:ユーザーに最も近いものを選びます

名前・パスワード・リージョンの欄がある Supabase の新規プロジェクトフォーム

Create new project をクリックし、プロビジョニング完了まで 1〜2 分待ちます。

プロビジョニング中の Supabase プロジェクト

4 つの認証情報を収集する

Project Settings に移動し、以下を記録します。以降のすべてのステップで必要になります。

認証情報場所用途
Project URL(https://<ref>.supabase.coSettings → Data API.env に書き戻す
anon / publishable keySettings → API Keys.env に書き戻す
データベース接続文字列 / パスワードSettings → Database(前ステップのパスワードも)schema のインポート
service_role / secret keySettings → API Keysバックエンドスクリプトと管理操作、フロントエンドには使わない

注記: anon key は設計上公開されるもの(RLS で保護)で、フロントエンドの .env に入れて構いません。service_role / secret key はフルアクセスのキーです——フロントエンドに入れたり git にコミットしたりしないでください。

6. データベース構造をインポートする

第 5 節のデータベース接続文字列を使い、schema.sql を新しいデータベースに読み込みます。文字列は postgresql://postgres:<自分のDBパスワード>@db.<project-ref>.supabase.co:5432/postgres のような形です。

cd ~/Downloads/your-app/app-xxxxxxxx
export PATH="/opt/homebrew/opt/libpq/bin:$PATH"

# 全量インポート(schema.sql がある場合)
psql "postgresql://postgres:<DBパスワード>@db.<ref>.supabase.co:5432/postgres" \
  -v ON_ERROR_STOP=0 -f supabase/schema.sql

注記: MeDo の schema.sql は防御的な構文(CREATE TABLE IF NOT EXISTSDO $$ ... EXECUTE で包んだ storage ポリシー、ON CONFLICT DO UPDATE 付きのバケット)を使うため、まっさらなプロジェクトへのインポートでも競合なく実行できます。

schema.sql がない場合は、CLI でマイグレーションを適用します:

supabase login
supabase link --project-ref <自分の project-ref>
supabase db push

インポートを検証する

DBURL="postgresql://postgres:<DBパスワード>@db.<ref>.supabase.co:5432/postgres"
psql "$DBURL" -c "\dt public.*"                                                   # テーブル
psql "$DBURL" -tc "select count(*) from pg_policies where schemaname='public';"  # RLS ポリシー数
psql "$DBURL" -tc "select tgname from pg_trigger where tgrelid='auth.users'::regclass and not tgisinternal;"  # トリガー

移行されたテーブルは Supabase の Table Editor でも直接確認できます。

移行されたテーブルを表示する Supabase の Table Editor

7. Edge Functions のデプロイとシークレットの設定

まず、パッケージに関数が含まれるか確認します:

ls supabase/functions/ 2>/dev/null

関数がない場合(多くのアプリは anon と RLS のみで、サーバー側関数を持ちません)、この節は飛ばせます。

関数がある場合は、デプロイしてシークレットを再設定します:

# 1) すべての関数をデプロイ
supabase functions deploy --project-ref <自分の project-ref>
# または個別に:supabase functions deploy <function-name>

# 2) 関数が使うシークレットを調べる(ソース中の Deno.env.get)
grep -rhoE "Deno\.env\.get\(['\"][^'\"]+['\"]\)" supabase/functions | sort -u

# 3) 1 つずつ設定する(値は自分のサービスから)
supabase secrets set MY_API_KEY=xxxx --project-ref <自分の project-ref>
supabase secrets list --project-ref <自分の project-ref>

注記: 関数のシークレットはパッケージに含まれず、手動で再設定する必要があります:第三者 API キー、および関数内で参照される SUPABASE_SERVICE_ROLE_KEY など。

8. データの移行(任意)

このステップにはソースデータベース(MeDo のホスト型 Supabase)の接続文字列が必要です。一般ユーザーは通常ソースに直接アクセスできず、その場合データは自動移行できません——アプリを再実行してデータを生成するか、プラットフォームにエクスポートを依頼するしかありません。新規作成したアプリにはデータがないため、この手順は飛ばせます。

ソースデータベースに接続できる場合:

# データのみ、構造なし(構造は第 6 節で構築済み)
pg_dump "<ソース-DB-URL>" --data-only --no-owner --no-privileges --disable-triggers -Fc -f data.dump
pg_restore --data-only --disable-triggers -d "<ターゲット-DB-URL>" data.dump

コアテーブルの select count(*) がソースとターゲットで一致することを確認します。

9. .env を差し替えてローカルで実行する

プロジェクトルートの .env を編集し、URL と anon key を自分のプロジェクトの値(第 5 節で収集)に差し替えます。変数のプレフィックスはフレームワークによって異なるため、.env にある既存の名前を確認してください:

# Vite:  VITE_SUPABASE_URL / VITE_SUPABASE_ANON_KEY  (または VITE_APP_SUPABASE_*)
# Taro:  TARO_APP_SUPABASE_URL / TARO_APP_SUPABASE_ANON_KEY
# Expo:  EXPO_PUBLIC_SUPABASE_URL / EXPO_PUBLIC_SUPABASE_ANON_KEY

編集後、.env はおおよそ次のようになります:

VITE_APP_ID=app-xxxxxxxx
VITE_SUPABASE_URL=https://<自分の-ref>.supabase.co
VITE_SUPABASE_ANON_KEY=eyJhbG...(自分のプロジェクトの anon key)

依存関係をインストールして開発サーバーを起動します:

# 依存関係をインストール(プロジェクトに pnpm-workspace.yaml があれば pnpm、なければ npm i)
npm i -g pnpm && pnpm install     # または npm install

# 開発サーバーを起動
npx vite --host 127.0.0.1

注記: npm run dev は使わないでください。MeDo は package.jsondevbuild スクリプトをプレースホルダーの echo に置き換えているため、実行しても何も起きません。代わりに npx vite を使ってください。

ターミナルに表示されるアドレス(例:http://127.0.0.1:5173/)を開きます。ランディングページが表示されるはずです。

localhost で実行中の MeDo アプリのランディングページ

メール確認を無効にする

新しい Supabase プロジェクトはデフォルトでメール確認が有効なため、登録後にログインするには確認メールが必要です。ローカルテストでは、まず無効にします:コンソールで Authentication → Sign In / Providers → Email に移動し、Confirm email をオフにして保存します。

注記: 確認の無効化(および下記の admin API のショートカット)はローカルテスト専用です。本番公開の前に Confirm email を再度オンにして、実際のユーザーにメールを確認させてください。

無料プランにはメール送信レート制限もあります。確認を無効にしても email rate limit exceeded になる場合は、service key を使い admin API で事前確認済みのユーザーを作成します:

curl "https://<ref>.supabase.co/auth/v1/admin/users" \
  -H "apikey: <service_key>" -H "Authorization: Bearer <service_key>" \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"Passw0rd!","email_confirm":true}'

データが自分のデータベースに入ることを検証する

アプリで登録またはログインしてレコードを 1 件作成し、データベースを照会します:

psql "$DBURL" -tc "select email from auth.users;"          # 登録したユーザー
psql "$DBURL" -tc "select username from public.profiles;"  # トリガーが自動作成した profile
psql "$DBURL" -tc "select name from public.projects;"      # アプリで作成した業務データ

ログイン後にワークスペースに到達し、データは自分の Supabase から来ます。

ログイン後の MeDo アプリのワークスペース。自分の Supabase が裏側にある

3 つのテーブルすべてが対応するレコードを返し、チェーン全体——登録、トリガーによる profile 作成、業務書き込み——が自分の Supabase に到達することを証明します。

10. よくある落とし穴

症状原因対処
npm run dev が「Do not use this command」と表示するMeDo が dev スクリプトを無効化npx vite --host 127.0.0.1 を使う
登録後ログインで止まり、DB にユーザーがいないデフォルトでメール確認が有効Authentication → Providers → Email で Confirm email を無効化
email rate limit exceeded(429)無料プランのメールレート制限確認を無効化。それでも止まる場合は admin API で事前確認済みユーザーを作成
登録エラー「username may only contain letters, digits, underscores」アプリが <username>@domain をメールとして扱うusername に @ を入れず、英数字のみにする
プロジェクトを作成できない無料プランは最大 2 つのアクティブプロジェクト既存のプロジェクトを 1 つ一時停止する
command not found: psqllibpq が keg-only で PATH にないexport PATH="/opt/homebrew/opt/libpq/bin:$PATH"
schema インポートで auth.storage. の競合が出るまっさらでない DB へのインポート新規プロジェクトにインポートする。MeDo の schema.sql は防御的で、新規 DB では競合しない

11. 移行チェックリスト

  • ツール準備:supabasepsqlnode 20 以降
  • ソースをダウンロードして解凍し、supabase/schema.sql があることを確認
  • 自分の Supabase プロジェクトを作成し、データベースパスワードを保存
  • 4 つの認証情報を収集:URL、anon key、データベース接続文字列、service key
  • psql -f supabase/schema.sql を実行し、テーブル・RLS・トリガーを検証
  • 関数があればデプロイしてシークレットを設定(なければ飛ばす)
  • データが必要なら移行する(ソース DB に接続できる場合のみ、なければ飛ばす)
  • .env の URL と anon key を差し替える
  • Confirm email を無効にする
  • pnpm installnpx vite を実行し、登録・ログイン・データ作成を行う
  • データベースを照会し、データが自分の Supabase に入ることを確認する