01プロジェクト概要
Re Player はリンク型メディアライブラリ:ストレージサービスを直接マウントするのではなく、外部メディアのリンクを仮想ディレクトリとして登録し、訪問者側のプレイヤーが必要に応じて読み込みます。すべてのページと API は Cloudflare Workers 上の Astro がサーバーサイドレンダリングで生成し、データは Cloudflare D1 に書き込まれます。
多形式の再生
動画・音声・画像をワンクリックで再生。Web プレイヤーが一括して処理します。
リンク疑似マウント
固定の /root 配下に任意の外部メディアリンクをマウントしてディレクトリツリーを構築します。
ASS 字幕
JASSUB / libass によるブラウザレンダリングで、中国語・日本語のフォントフォールバックを内蔵しています。
LRC 歌詞
リアルタイム同期と自動ハイライトスクロール。二言語歌詞と複数行タイムスタンプに対応しています。
言語の自動判定
訪問者の IP から中国語 / 英語 / 日本語を自動選択。手動での切り替えもできます。
訪問者統計
アクセス数・ディレクトリ・メディア・再生イベントは /table で確認できます。
5 つのテーマ
デフォルト・レトロ・アズール・ニューブルー・ライトグレー。公開ページでワンクリック切り替え。
パスワード保護
/admin の管理画面と /table の統計ページにはいずれも管理者パスワードが必要です。
D1 永続化
D1 が未バインドのときは自動的にメモリ保存へフォールバックするので、まず動作を確認してからデータベースを追加できます。
リポジトリ 英語・簡体字中国語・日本語の説明はそれぞれ README.md、 README.zh-CN.md、 README.ja.mdにあります。 このページはデプロイ方法のみを扱います。機能の詳細は README を参照してください。
02デプロイ方法の選び方
Re Player 本体は Cloudflare Workers 上で動作します。違いは「どうやってコードを Cloudflare へ届けるか」だけです。
| 方法 | 難易度 | リリース方法 | 向いている人 |
|---|---|---|---|
| Cloudflare Workers · Git 連携 | おすすめ | GitHub リポジトリを接続し、push またはクリックだけで自動ビルド・公開 | 一度設定すれば、あとはリポジトリを更新するだけでよい人 |
| Cloudflare Workers · Wrangler CLI | 中級者向け | ローカルでコマンド 1 つでビルドとアップロードが完了 | ターミナルに慣れ、リリース工程を完全に掌握したい人 |
| ローカル実行(プレビューのみ) | 任意 | npm run local / Local.cmd |
まず手元の PC で試したい、ローカルからのみアクセスしたい人 |
まず整理しておきたい 2 点
Re Player は @astrojs/cloudflare アダプタ(output: "server")を利用しており、ビルド成果物は
Workers ランタイム(dist/server/entry.mjs と
dist/server/wrangler.json、 ASSETS と DB バインディングを含む)
静的なファイル群ではありません。そのため Cloudflare Workers にしかデプロイできず、静的サイトとして Pages に置くことはできません。
このページのドキュメントサイトは純粋な静的ページで、Re Player のデプロイ方法だけを説明します。
オンラインデプロイの入口は提供せず、デプロイの代行も行いません。
動作環境
- Node.js ≥ 22(Astro 7 の要件)と npm。
- Cloudflare アカウント(無料プランで構いません。Workers と D1 のどちらにも無料枠があります)
- Git 連携方式では GitHub アカウント(リポジトリをご自分のアカウントへ Fork します)
- コマンドライン方式ではグローバルツールの追加インストールは不要で、
npx wranglerがプロジェクト内の依存をそのまま利用します。
03事前準備
-
Cloudflare アカウントを登録
dash.cloudflare.com を開いて登録・ログインします。無料プランでも Workers と D1 の無料枠が含まれており、個人利用には十分です。
-
Node.js 22 以上をインストール
nodejs.org からインストーラーをダウンロードし、インストール後にターミナルでバージョンを確認します。22 未満だと Astro 7 のビルドに失敗します。
-
コードを取得
リポジトリを clone するか、Releases から ZIP をダウンロードして展開します。Git 連携方式を使う場合は、先にリポジトリをご自分のアカウントへ Fork してから接続します。
-
(任意)Wrangler にログイン
コマンドラインでリリースする場合のみ必要です。初回実行時にブラウザで認証ページが開くので、そのまま承認してください。
# 1. 環境の確認
node -v # v22 以上が必要
npm -v
# 2. ソースコードの取得
git clone https://github.com/lircia/RP-Re_Player.git
cd RP-Re_Player
npm install
# 3. Cloudflare へログイン(コマンドラインでのリリース時のみ)
npx wrangler login
ヒント
一連の作業に必要なのは npmだけです。Docker も、追加のグローバルツールチェーンも不要です。
04Cloudflare Workers へデプロイ
これが最も手間のかからない方法です。リポジトリを Cloudflare に接続すれば、以後は push のたびに自動でビルド・公開されます。 過去のバージョンも記録として残るため、いつでもロールバックできます。
-
リポジトリを Fork
github.com/lircia/RP-Re_Playerを開き、右上の「Fork」をクリックしてご自分のアカウントへ Fork します。後から設定をカスタマイズしたり、変更を commit したりしやすくなります。
-
Cloudflare で Workers アプリケーションを作成
コンソール左側で「コンピューティングと AI」→「Workers と Pages」→「アプリケーションを作成」→ 「Workers」→「Import an existing Git repository / Connect to Git」を選択します。 初回は、画面の指示に従って Cloudflare が GitHub にアクセスすることを承認してください。
-
リポジトリと本番ブランチを選択
Fork したリポジトリを選び、本番ブランチは既定の
mainのままにします。 -
ビルドとデプロイの設定を確認
ビルドコマンドは既定の
npm run buildのままにします。デプロイコマンドは、アダプタが生成する設定ファイルを明示的に指定する必要があります (下の表を参照)。初回ビルドは 1〜3 分ほどかかります。 -
保存してデプロイ
完了すると
<プロジェクト名>.workers.devというアドレスが発行されます。 「設定 → ドメインとルート」から独自ドメインを割り当てることもできます。 -
D1 をバインドしたら再デプロイ
データベースのバインディングは、それ以降のデプロイにのみ反映されます。先に第 06 節を完了してから、もう一度「デプロイを再試行」をクリックしてください。
| 設定項目 | 値 | 説明 |
|---|---|---|
| ルートディレクトリ | / | リポジトリのルートがそのままプロジェクトのルートになります |
| ビルドコマンド | npm run build | 既定のままで、内部では astro check && astro build |
| デプロイコマンド | npx wrangler deploy --config dist/server/wrangler.json | アダプタの出力に含まれる Worker 設定を指定( ASSETS と DB バインディングを含む) |
| Node のバージョン | NODE_VERSION = 22 | 「設定 → 変数とシークレット」で追加し、ビルド環境の Node バージョンが古くならないようにします |
デプロイコマンドが既定値でない理由
npm run build が生成するのは dist/server/entry.mjs と
dist/server/wrangler.json。Wrangler は既定ではプロジェクトのルートにある wrangler.tomlを読みますが、
Worker のエントリと静的アセットのバインディングを実際に記述した設定はアダプタが生成するものです。そのためデプロイ時には
--config dist/server/wrangler.jsonを必ず付けてください。
05コマンドラインでのデプロイとローカルプレビュー
5.1 Wrangler CLI によるローカルからのリリース
ローカルにリポジトリを clone すれば、コマンド 1 つでビルドとリリースが完了します。ターミナル操作に慣れ、リリース工程を完全に掌握したい人に向いています。
git clone https://github.com/lircia/RP-Re_Player.git
cd RP-Re_Player
npm install
# ビルドして Cloudflare Workers へリリース
npm run cf:deploy
# 以下と同等:
# npm run build && wrangler deploy --config dist/server/wrangler.json
よく使うコマンド
npm run cf:dev ローカルで Worker ランタイム付きの開発サーバーを起動します。
npm run preview 既存のビルド成果物をプレビューします。
5.2 ローカル実行(任意)
手元で先に動作を確認したい場合は、 npm run local(Windows では Local.cmd をダブルクリックしても構いません)。
既定では 127.0.0.1 で HTTP 80 と HTTPS 443 サービスを提供します。
アドレスは soers.de5.netとして表示され、既定の管理者パスワードは masteradminです。
注意 メインリポジトリのローカル実行機能は不完全で、サービスを実行している端末からしかアクセスできません。 LAN 内のほかの端末からアクセスしたい場合は、リリースパッケージを使用し、同梱の説明に従ってください。
06D1 データベースの作成とバインド
D1 は疑似マウント情報、訪問者統計、設定を保存するために使います。D1 がなくても RP は動作します(自動的にメモリ保存へフォールバックします)が、 再起動や再デプロイのたびにデータが失われます。本番利用では必ずバインドしてください。
-
D1 データベースを作成
コンソールで「ストレージとデータベース」→「D1 SQL データベース」→「データベースを作成」を選び、 名前には
re-playを入力します(任意の名前で構いません)。ローカルでコマンドラインから作成することもできます。 -
database_id をコピー
データベースの詳細ページを開き、データベース ID をコピーします。
-
プロジェクトの設定に書き込む
ID を
wrangler.tomlに入力してリポジトリへ commit します。 Git 連携方式の場合は、コンソールの「設定 → バインディング」から直接 D1 バインディングを追加することもできます。 バインディング名は必ずDBのままにしてください。 -
再デプロイ
バインディングはデプロイ時にのみ反映されるため、必ずもう一度デプロイしてください(Git 連携方式では「デプロイを再試行」をクリックします)。
-
確認
/adminまたは/tableにアクセスすると、RP が必要なデータテーブルを自動で作成し、書き込みを開始します。
name = "rp"
compatibility_date = "2026-09-06"
keep_vars = true
[[d1_databases]]
binding = "DB" # 必ず DB。名前を変えないこと
database_name = "re-play" # あなたの D1 データベース名
database_id = "あなたの D1 データベース ID"
# データベースを作成(出力の database_id を wrangler.toml に記入)
npx wrangler d1 create re-play
# 既存のデータベース一覧を表示
npx wrangler d1 list
# データベースをバックアップ(更新前に実行を推奨)
npx wrangler d1 export re-play --remote --output backup.sql
RP が自動作成するデータテーブル
| テーブル | 用途 |
|---|---|
rp_pseudo_links | 疑似マウント(仮想ディレクトリ)情報 |
rp_media_visitors | メディアの再生進捗と完走統計 |
rp_visitor_events | アクセス・ディレクトリ・メディア・再生イベント |
rp_settings | 保存された環境変数 |
rp_visitor_theme | 公開ページの訪問者テーマ |
バインディング名は必ず DB にする 名前を変えると RP がデータベースを見つけられず、静かにメモリ保存へフォールバックします。その結果「再起動するとデータがすべて消える」という症状になります。
テーブル作成は不要 RP は起動時に上記のデータテーブルを自動で作成・アップグレードするため、D1 コンソールに SQL を貼り付ける必要はありません。
07環境変数
Workers プロジェクトの「設定 → 変数とシークレット」で追加するか、 wrangler.toml
[vars] セクションで宣言します。すべての変数は再デプロイ後に反映されます。
| 変数 | 用途 |
|---|---|
A | 訪問者ページを開く前に表示する外部メディアのアドレス |
B | A と C の最大表示時間/再生時間(秒)。既定値は 4.2 |
C | と A を同時に再生する任意の外部オーディオアドレス。設定すると A の動画はミュートになります |
N | サイト名 |
P | 管理者パスワード(「シークレット / Secret」として保存することを推奨) |
US | Umami スクリプトの URL |
UI | Umami のサイト ID |
UH | 任意:Umami のホストアドレス |
UD | 任意:Umami のドメイン一覧 |
DB は変数ではなくバインディング
DB はバインディング(Binding)です。第 06 節の「D1 データベースのバインド」で設定し、変数リストには書かないでください。
[vars]
A = "" # 訪問者ページを開く前に表示する外部メディアのアドレス
B = "4.2" # A / C の最大表示時間/再生時間(秒)
C = "" # A と同時に再生する任意の外部オーディオアドレス
N = "Re Player" # サイト名
P = "masteradmin" # 管理者パスワード。本番では必ず変更すること
US = "https://cloud.umami.is/script.js"
UI = ""
UH = ""
UD = ""
変数の優先順位
keep_vars = trueは Wrangler がコンソールで設定した変数を削除するのを防ぐため、 コンソールとwrangler.tomlは共存できます。- D1 が利用できる場合、RP は
rp_settings内の、空でないバインド済み短縮変数ごとにenv:変数名キーを書き込みます(キーがまだ存在しない場合のみ)。以後はデータベース内の値を優先的に読み取ります。 - つまり、管理画面で変更した値が再デプロイで上書きされることはありません。逆に、環境変数を変更しても反映されない場合は、
rp_settingsに古い値が残っていないか確認してください。
必ずパスワードを変更
既定のパスワード masteradmin は公開情報であり、 /admin と /table はいずれもこのパスワードで保護されています。
シークレット(Secret)として保存し、平文のまま公開リポジトリへ commit しないでください。
08初回アクセスと管理画面
-
サイトを開く
https://<プロジェクト名>.workers.dev(またはバインドした独自ドメイン)にアクセスします。 最初にイントロアニメーションが表示され、モバイルでは自動的に/Localへ遷移します。 -
管理画面にログイン
/adminを開き、変数Pで設定したパスワードでログインします(既定値はmasteradmin)。 -
メディアをマウント
管理画面で外部の動画 / 音声 / 画像リンクを仮想ディレクトリとファイルとして登録します。サイト名やテーマなどもここで設定します。
-
統計を確認
/tableでアクセス・ディレクトリ・メディア・再生イベントを確認します。
| ルート | 説明 |
|---|---|
/ | イントロアニメーション。モバイルでは /Local |
/Re | イントロアニメーションページ(外部の intro メディアの後で /Loading へ進みます) |
/Loading | 言語を選択すると訪問者ページへ進みます |
/Local | 通常の訪問者向けメディアライブラリ |
/Local/Pash/... | 通常の疑似マウント表示 URL |
/Tree/... | /root/tree でマウントしたメディアのネイティブプレイヤーページ |
/table | 訪問者統計ページ(管理者パスワードが必要) |
/admin | 管理画面(疑似マウント・テーマ・設定) |
Tree と Local
Tree と Local は同じ階層にありますが、通常の Local 一覧には表示されません。
ディレクトリツリーに表示したい場合は、管理画面で該当するフォルダを /tree として登録してください。
09バージョン更新
-
まずデータベースをバックアップ
D1 内のデータだけは再生成できないため、更新前に一度エクスポートしておくと安全です。
-
最新のコードを取得
コマンドライン方式では
git pull。Git 連携方式ではコードを push するか、そのまま再デプロイすれば完了です。 -
依存を更新して再リリース
npm installを実行してから、もう一度ビルドしてデプロイします。 -
データ構造は自動でアップグレード
RP は起動時にデータテーブルを自動で作成/アップグレードするため、手動で SQL を実行する必要はありません。
# 1. データベースをバックアップ
npx wrangler d1 export re-play --remote --output backup.sql
# 2. 最新のコードを取得して依存を更新
git pull
npm install
# 3. 再ビルドしてリリース
npm run cf:deploy
ロールバックは簡単 Git 連携方式では、デプロイのたびに履歴が残ります。問題が起きたときは「デプロイ」ページで過去のバージョンを選べばワンクリックで戻せます。 データベース構造は RP が自動で互換アップグレードするため、通常は手作業は不要です。
10よくある質問
ビルドに失敗し、Node のバージョンが古いというエラーが出る場合は?
Astro 7 には Node.js ≥ 22が必要です。ローカルでは Node を 22 以上に上げてください。
Cloudflare のビルド環境では、プロジェクトの「設定 → 変数とシークレット」で
NODE_VERSION = 22を追加してから再デプロイします。
Re Player を静的サイトとして Cloudflare Pages にデプロイできますか?
できません。アダプタが出力するのは Workers ランタイムのエントリ dist/server/entry.mjs と
dist/server/wrangler.json( ASSETS の静的アセットバインディングと
DB バインディングを含み)、サーバー側の実行環境が必要であり、静的なファイル群ではありません。
Re Player 本体は Cloudflare Workers へデプロイしてください。
デプロイ後にページが開かない/イントロアニメーションから先へ進まない場合は?
まずデプロイログにエラーがないか確認し、次にデータベースのバインディングと変数の設定が完了しているかを確認します。
入口ページは設定に従って A / C が指す外部メディアを読み込みます。
これらのアドレスにアクセスできないと、アニメーションの段階で長く待たされることがあります。まずこの 2 つの変数を空にして一度試すと原因を切り分けられます。
D1 のバインディング名は別の名前に変更できますか?
できません。必ず DBのままにしてください。名前を変えると RP がデータベースを読めず、メモリ保存へフォールバックします。
「再起動や再デプロイの後にデータがすべて消える」という症状になります。
まだ D1 を用意していませんが、先に動かすことはできますか?
できます。D1 がない場合、RP は自動でメモリ保存へフォールバックするため機能は一通り使えますが、再起動・再デプロイ・インスタンスの切り替えでデータは失われます。 まず試してからデータベースを追加する、という進め方で問題ありません。
環境変数を変更したのに反映されない場合は?
原因は 2 つ考えられます。1 つは環境変数は再デプロイしないと反映されないこと。もう 1 つは、D1 が利用できる場合に rp_settings 内の env:変数名 の値のほうが優先され、
管理画面で変更した値が環境変数を上書きする、という点です。第 07 節の優先順位の説明と照らし合わせて確認してください。
/admin が開けない、またはパスワードが常に間違いと表示される場合は?
P 変数が保存され、再デプロイ済みであることを確認してください。古いデータベースをそのまま使っている場合は、
rp_settings に古い env:P が残っていないか確認してください。
パスワードは「シークレット / Secret」として保存できます。変更した場合も再デプロイが必要です。
メディアの再生に失敗する、字幕や歌詞が読み込まれない場合は?
メディア、.ass 字幕と .lrc 歌詞は、いずれも Cloudflare Workers から
アクセスできる公開 HTTP(S) アドレスである必要があります。RP はブラウザの CORS 制限を避けるためにサイト内のエンドポイント経由で字幕と歌詞を読み込みますが、
配信元がリクエストを直接拒否する場合(ホットリンク防止・認証・IP 制限)は、それでも失敗します。
LAN 内のほかの端末からローカルサービスにアクセスしたい場合は?
メインリポジトリのローカル実行機能は不完全で、サービスを実行しているマシンからしかアクセスできません。LAN 内のほかの端末からアクセスする必要がある場合は、 リリースパッケージを使用し、同梱の説明に従ってください。
サイト全体の費用はどのくらいかかりますか?
Cloudflare Workers と D1 にはどちらも無料枠があり、個人利用や小規模な共有であれば通常は無料枠内に収まります。 アクセスが非常に多い場合に、Workers のリクエスト数と D1 の読み書き量を確認してください。
11付録
11.1 プロジェクトのディレクトリ構成
RP-Re_Player
├── src/ # ソースコード
│ ├── layouts/ # ページレイアウト
│ ├── lib/ # ビジネスロジック(疑似マウント、字幕、歌詞、テーマなど)
│ ├── pages/ # ルートページ
│ │ ├── api/ # API エンドポイント
│ │ │ ├── admin/ # 管理画面用エンドポイント
│ │ │ └── public/ # 訪問者向け公開エンドポイント
│ │ ├── Local/ # 訪問者向けメディアライブラリ
│ │ └── tree/ # ネイティブプレイヤー
│ ├── styles/ # グローバル/テーマスタイル
│ └── types/ # 型定義
├── public/ # 静的アセット(フォント、アイコン、ポスター)
├── scripts/ # ビルド/ローカル実行スクリプト
├── astro.config.mjs # Astro 設定
├── wrangler.toml # Cloudflare 設定
├── package.json # プロジェクトの依存
└── LICENSE # MIT ライセンス
11.2 関連リンク
プロジェクト
GitHub リポジトリ · 簡体字中国語 README · English README · 日本語 README · フィードバック
公式ドキュメント
Cloudflare Workers · Cloudflare D1 · Cloudflare Pages · Astro デプロイガイド
ライセンス
Re Player は MIT ライセンスで公開されています。自由に使用・変更・配布できます。
詳しい条件はリポジトリ内の LICENSE ファイルをご覧ください。
このページについて このページはデプロイ手順の説明のみを目的としており、デプロイの代行やオンラインデプロイの入口は提供しません。 ページは手書きの HTML / CSS / JS で作られており、サードパーティのフレームワークや外部リクエストはありません。まるごと転載したり、ご自身でホスティングしたりできます。