エクスポートとセルフホスティング
アプリをプラットフォームの外に持ち出す方法:ソースをダウンロードし、ローカルで実行し、バックエンドを自分の Supabase プロジェクトに移行します。
アプリは MeDo に縛られていません。完全なソースをダウンロードし、自分のインフラで実行できます。
こんなときに行います
- コンプライアンスや社内ポリシーのため、自社サーバーでホストする必要がある。
- 開発者がプロジェクトを引き継ぎ、自分のリポジトリで管理したい。
- プラットフォームが生成する範囲を超えて開発を続けたい。
- すべてを自分で所有したいクライアントにプロジェクトを引き渡す。
どれにも当てはまらないなら、MeDo に残る方が簡単です。ホスティング、バックエンド、更新はすべて代わりに処理されます。
費用と必要な作業
ダウンロードごとに 300 クレジット かかります。それに加えて、セルフホスティングでは MeDo が担っていた部分、つまりデータベースの用意、関数のデプロイ、キーの管理、フロントエンドのホスティングを自分で引き受けることになります。初回の移行には 1 時間ほど見込み、ターミナルが必要になると考えてください。
注意: アプリがデータを保存しない純粋なフロントエンドの場合は、セクション 1〜4 だけ行い、セクション 9 でローカル実行すれば十分です。アプリがデータを保存する場合は、全体の流れに沿って自分の Supabase プロジェクトに構造を再構築してください。
1. ダウンロードに含まれるもの・含まれないもの
Download Code(コードをダウンロード) で得られる ZIP には、バックエンドの 構造と関数のコード が含まれます。データ、ファイル、キーは含まれません。これが移行で何をするかを決めます。
注意:
.envの URL と anon key は MeDo がホストするバックエンドを指しています。置き換えないと、ローカルのアプリは自分のデータベースではなく、引き続きプラットフォームと通信します。移行の核心は「構造を再構築し、この 2 つの値を入れ替える」ことです。
2. アプリのコードをダウンロードする
- エディターでアプリを開きます。ダウンロードは Pro と Max の機能で、完了済みの生成が必要です。生成が終わるまで待ってください。
- 上部バーの Download Code アイコン(クレジット残高の左側)をクリックします。ポップオーバーに、パッケージにはさらに開発を進めるための
README.mdが含まれる旨が表示されます。 - Download Code をクリックして確定します。ダウンロードには 300 クレジット かかります。

現在編集中のバージョンが得られます。Edit モードや Code ビューでフォント、色、コンテンツを変更した場合は、先に公開して、その変更がパッケージに含まれるようにしてください。
3. ソースを解凍する
ダウンロードしたパッケージを解凍し、ディレクトリに入ります。
典型的な構造は次のとおりです。
注意:
schema.sqlがある場合はそれを使います(セクション 5、フルインポート)。ない場合はsupabase db pushを実行してマイグレーションを適用します。
4. ツールを準備する
コードの編集には VSCode、IntelliJ IDEA、または好みの IDE を使えます。アプリの実行と移行には 3 つのツールが必要です。Node.js 20 以降、Supabase CLI、psql(Postgres クライアント)です。
macOS で Homebrew を使う場合:
注意:
libpqは keg-only です。psqlが引き続き「command not found」と報告される場合は、echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrcで PATH に追加し、ターミナルを再度開いてください。
Windows では、Node.js LTS、Scoop 経由の Supabase CLI(scoop install supabase)、PostgreSQL(psql を含む)をインストールします。以下のコマンドは同一で、export PATH=... の行だけが macOS 固有です。
Linux では、Node 20 以降、リリースバイナリからの Supabase CLI、パッケージマネージャー経由の psql(たとえば sudo apt install postgresql-client)をインストールします。
3 つすべてがバージョンを表示することを確認します。
注意: アプリがバックエンドのない純粋なフロントエンドなら、セクション 9 に進んで今すぐローカルで実行してください。Supabase の手順(セクション 5〜8)は、バックエンドにデータを保存するアプリにのみ該当します。
5. 自分の Supabase プロジェクトを作成する
Supabase アカウントをまだ持っていない場合
https://supabase.com にアクセスし、Start your project をクリックして、GitHub またはメールでサインアップします(無料)。MeDo アプリ 1 つの移行なら Free プランで十分です。

注意: Free プランで同時にアクティブにできるプロジェクトは最大 2 つです。すでに 2 つある場合は、先に 1 つを一時停止しないと新規作成できません。
プロジェクトを作成する
組織ホームで New project をクリックし、次を入力します。
- Project name、たとえば
taskflow-migrate - Database password:Generate a password をクリックして強力なパスワードを生成し、必ずコピーして保存します(スキーマのインポートに必要です。紛失した場合はリセットするしかありません)
- Region:ユーザーに最も近いものを選びます

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

4 つの認証情報を集める
Project Settings に移動し、次を記録します。以降のすべての手順で必要です。
注意: anon key は設計上公開されるもので(RLS で保護)、フロントエンドの
.envに入れて構いません。service_role / secret key はフルアクセスのキーです。フロントエンドに置いたり git にコミットしたりしないでください。
6. データベース構造をインポートする
セクション 5 のデータベース接続文字列を使って、schema.sql を新しいデータベースに読み込みます。文字列は postgresql://postgres:<your-DB-password>@db.<project-ref>.supabase.co:5432/postgres のような形です。
注意: MeDo の
schema.sqlは防御的な構文(CREATE TABLE IF NOT EXISTS、DO $$ ... EXECUTEで包んだストレージポリシー、ON CONFLICT DO UPDATE付きのバケット)を使っているため、新規プロジェクトへのインポートは競合なく実行できます。
schema.sql がない場合は、代わりに CLI でマイグレーションを適用します。
インポートを確認する
移行したテーブルは Supabase の Table Editor でも直接確認できます。

7. Edge Functions をデプロイしてシークレットを設定する
まず、パッケージに関数があるか確認します。
関数がない場合(多くのアプリは anon と RLS だけで、サーバー側の関数を持ちません)は、このセクションをスキップします。
関数がある場合は、デプロイしてシークレットを再設定します。
注意: 関数のシークレットはソースパッケージに含まれないため、手動で再設定する必要があります。サードパーティの API キーや、関数内で参照される
SUPABASE_SERVICE_ROLE_KEYなどです。
8. データを移行する(任意)
この手順には ソースデータベース(MeDo がホストする Supabase)の接続文字列が必要です。一般ユーザーは通常ソースへの直接アクセス権を持たないため、その場合データを自動的に移行することはできません。アプリを再度操作してデータを生成するか、プラットフォームにエクスポートの支援を依頼するしかありません。新しく作成したアプリにはデータがないので、スキップできます。
ソースデータベースにアクセスできる場合:
主要テーブルの select count(*) がソースとターゲットで一致することを確認します。
9. .env を置き換えてローカルで実行する
プロジェクトルートの .env を編集し、URL と anon key を自分のプロジェクトの値(セクション 5 で集めたもの)に入れ替えます。変数のプレフィックスはフレームワークによって異なるので、.env にある既存の名前を確認してください。
編集後の .env はおおむね次のようになります。
依存関係をインストールし、開発サーバーを起動します。
注意:
npm run devは使わないでください。MeDo はpackage.jsonのdevとbuildスクリプトをプレースホルダーのechoに置き換えているため、何も起こりません。代わりにnpx viteを使います。
ターミナルに表示されたアドレス(たとえば http://127.0.0.1:5173/)を開くと、ランディングページが表示されるはずです。

メール確認を無効にする
新しい Supabase プロジェクトでは既定でメール確認が有効なため、サインアップ後にログインするには確認メールが必要になります。ローカルテストでは先に無効にします。コンソールで Authentication → Sign In / Providers → Email に移動し、Confirm email をオフにして保存します。
注意: 確認の無効化(および下記の admin API のショートカット)はローカルテスト専用です。本番に移る前に Confirm email を再びオンにして、実際のユーザーがメールアドレスを確認するようにしてください。
Free プランにはメール送信のレート制限もあります。確認を無効にしても email rate limit exceeded が出る場合は、service key を使って admin API 経由で確認済みのユーザーを作成します。
データが自分のデータベースに保存されることを確認する
アプリでサインアップまたはログインしてレコードを作成し、データベースに問い合わせます。
ログイン後はワークスペースに入り、データは自分の Supabase から取得されます。

3 つのテーブルすべてが対応するレコードを返せば、サインアップ、トリガーによるプロファイル作成、業務データの書き込みという一連の流れが自分の Supabase に到達していることが証明されます。
10. よくある落とし穴
11. 移行チェックリスト
- ツールの準備:
supabase、psql、node20 以降 - ソースをダウンロードして解凍し、
supabase/schema.sqlがあることを確認 - 自分の Supabase プロジェクトを作成し、データベースパスワードを保存
- 4 つの認証情報を集める:URL、anon key、データベース接続文字列、service key
psql -f supabase/schema.sqlを実行し、テーブル、RLS、トリガーを確認- 関数があればデプロイしてシークレットを設定(なければスキップ)
- データが必要なら移行(ソースデータベースにアクセスできる場合のみ。できなければスキップ)
.envの URL と anon key を置き換える- Confirm email を無効にする
pnpm installとnpx viteを実行し、サインアップ、ログイン、データ作成を行う- データベースに問い合わせて、データが自分の Supabase に保存されることを確認