walrus-sites について
Walrus に静的サイトをデプロイするためのスキルです。サイトのリソースを Walrus に保存し、オンチェーンの Sui オブジェクトで管理します。分散型フロントエンドを作る開発者向けに、公開、更新、ローカルポータルの設定を扱います。
主な機能
- 01静的サイトの公開と更新
- 02サイトリソースと SPA ルーティングの設定
- 03保存期間とリソース一覧の管理
- 04テストネットサイト向けローカルポータルの設定
- 05ポータル設定と 404 のトラブルシューティング
活用シーン
- 01ビルド済みフロントエンドの Walrus へのデプロイ
- 02サイト更新とリソース保存期間の延長
- 03SPA のクライアントサイドルーティング用フォールバック設定
- 04ローカルポータルでのテストネットサイト表示
MCP 対応
利用可能な場合、最新情報の検証や参考ファイルにない詳細の確認に Sui ドキュメント MCP サーバーを使います。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mystenlabs/ skills --skill walrus-sitesインストール後、Claude Code で/walrus-sitesを入力して読み込まれたか確認します。
同梱ファイルportal/evals/evals.jsonpublishing/evals/evals.json
詳細
Walrus Sites — 分散型ウェブサイトホスティング
MCP ツール: お使いの環境で利用できる場合は、最新情報を得るために Sui ドキュメント MCP サーバー(
https://sui.mcp.kapa.ai)にも問い合わせてください。情報の検証と、これらの参照ファイルに記載されていない詳細の確認に使用してください。
Walrus Sites を使うと、静的ウェブサイト(HTML/CSS/JS)を Walrus にデプロイできます。サイトのリソースは、オンチェーンの Sui オブジェクトによって追跡されます。ポータルサーバーがサイトのサブドメインを解決し、Walrus からリソースを取得して HTTP 経由で配信します。その結果、中央集権型のサーバー、CDN、DNS を必要としない、完全に分散化されたフロントエンドが実現します。
ソースに関する制約: このスキルの情報はすべて、MystenLabs/walrus-sites リポジトリとWalrus Sites のドキュメントを出典としています。このスキルを拡張または更新する際は、これらのソースのみを参照してください。サードパーティのブログや非公式のチュートリアルは使用しないでください。
よくある失敗:
- Blob の有効期限切れ。 エポック数が少なすぎる状態で公開したサイトは、気付かないうちに動作しなくなります。Blob の有効期限が切れると、ポータルは 404 を返します。必ず余裕のある
--epochsの値(30 以上)を指定してください。 - ポータルの設定ミス。 ポータルの
original_package_idは、アプリの Move パッケージではなく、Walrus Sites フレームワークパッケージ(site::Site)と一致している必要があります。testnet のサンプル設定には正しい値が含まれているため、変更しないでください。 - testnet のサイトでは
wal.appを使用できません。 公開されているwal.appポータルが配信するのは mainnet のサイトのみです。testnet では、セルフホストのローカルポータルが必要です。 - SPA のルーティング。 シングルページアプリでは、クライアント側のルーティングに対応するために
ws-resources.jsonのルート設定が必要です。設定がない場合、/my-routeに直接移動すると 404 が返されます。
サブスキル
publishing — サイトの構築とデプロイ
パス: publishing/SKILL.md
読み込むタイミング: 新しいサイトのデプロイ、既存サイトの更新、エポック期間の選択、ws-resources.json の設定、または site-builder エラーのトラブルシューティングを行うとき。
対象: site-builder publish、site-builder update、--epochs フラグ、Blob の有効期限切れ、ws-resources.json の設定、SPA のルーティング、サイト名、デバッグ用の site-builder sitemap、site-builder destroy。
portal — testnet 用ローカルポータルの実行
パス: portal/SKILL.md
読み込むタイミング: testnet のサイトの表示、ローカルポータルのセットアップ、ポータルの 404 の解決、またはポータルの解決処理の仕組みを確認するとき。
対象: ポータルのクローン、依存関係(Bun)のインストール、portal-config.yaml、original_package_id の注意点、サーバーの起動、URL 形式、ポートの競合、mainnet と testnet の違い。
ルーティングガイド
| タスク | 読み込むスキル |
|---|---|
| フロントエンドを Walrus Sites にデプロイする | publishing/ |
| デプロイ済みのサイトを更新する | publishing/ |
| 404 またはサイトの有効期限切れを解決する | publishing/ + portal/ |
| testnet のサイトをローカルで表示する | portal/ |
| ローカルポータルをセットアップする | portal/ |
| ポータルに「ページが見つかりません」と表示される | portal/ + publishing/(Blob の有効期限を確認) |
| SPA のルーティングを設定する | publishing/ |
| サイトが持つリソースを確認する | publishing/(site-builder sitemap) |
| デプロイ済みのサイトを削除する | publishing/ |
| Walrus Sites と従来のホスティングを比較して選ぶ | 以下のスキルの内容 |
スキルの内容
主要な概念
-
Site オブジェクト。 Walrus Sites フレームワークパッケージの
site::Site型を持つ Sui オブジェクトです。メタデータ(名前、説明)と、リソースパスを Walrus の Blob 参照に対応付ける動的フィールドを保持します。site-builder publishで作成され、発行者のアドレスが所有します。 -
リソース。 デプロイしたディレクトリ内の各ファイルは、Walrus に保存されるリソースになります。小さなファイルは、1 つの「quilt」Blob にまとめられる場合があります。各リソースにはパス(例:
/index.html、/assets/main.js)と、任意の HTTP ヘッダーがあります。 -
ポータル。
<base36-site-id>.localhost:3000の URL をオンチェーンの Site オブジェクトに対応付けるサーバーです。Site の動的フィールドから要求されたリソースパスを探し、Walrus アグリゲーターから Blob を取得して、HTTP レスポンスとして返します。ポータルはフレームワークレベルのインフラストラクチャであり、アプリの一部ではありません。 -
ws-resources.json。 リソースヘッダー、ルーティング、Site のメタデータを制御する、Site のルートディレクトリ内の設定ファイルです。初回の発行時に Site オブジェクト ID とともに自動生成されます。2 回目以降の実行では、site-builder はこのファイルを読み取り、新しい Site を作成するか既存の Site を更新するかを判断します。 -
Blob の有効期限。 Walrus の Blob には、エポック数で測定される有限の保存期間があります。Blob の有効期限が切れると、ポータルは取得できなくなり、404 を返します。
site-builder sitemap <object-id>を使って有効期限を確認してください。修正するには、より大きな--epochs値で再発行します。
ルール
- テストネットへのデプロイでは、必ず
--epochs 30以上を指定してください。 低い値(5 など)では、数日以内に Blob の有効期限が切れます。本番のメインネットでは、さらに大きな値か--permanentを使用してください。 - 発行前にビルドしてください。
npm run build(または同等のコマンド)を実行して、静的なdist/ディレクトリを生成します。site-builder は指定されたディレクトリをそのまま発行します。 - Walrus Sites フレームワークパッケージがアップグレードされたと分かっている場合を除き、ポータルの設定にある
original_package_idは変更しないでください。 テストネットの例に記載されている値は正しいものです。 wal.appはメインネット専用です。 テストネットでは、MystenLabs/walrus-sitesリポジトリからポータルをセルフホストしてください。- 初回発行後に
ws-resources.jsonを確認してください。 Site オブジェクト ID が記録されています。今後の発行で新しい Site が作成されず既存の Site が更新されるよう、バージョン管理に含めてください。
よくある間違い
--epochs 5で発行し、1 週間後に Site がなくなった理由が分からなくなる。 Blob の有効期限が切れています。--epochs 30+で再発行してください。- ポータルの
original_package_idをアプリのパッケージ ID に変更する。 ポータルに必要なのは Walrus Sites フレームワークパッケージの ID(site::Site)であり、Move コントラクトのパッケージ ID ではありません。この 2 つはまったく別のものです。 - テストネットの Site に
wal.appでアクセスしようとする。wal.appが配信するのはメインネットのみです。テストネットではローカルのポータルが必要です。 - 発行前にフロントエンドをビルドし忘れる。
site-builder publish dist/はdist/ディレクトリの内容を発行します。先にnpm run buildを実行していないと、ソースファイルや古いビルド結果を発行することになります。 - フォールバックルーティングなしで SPA をデプロイする。 React/Vue/Svelte の SPA はクライアントサイドルーティングを使用します。
/borrowsに直接移動すると、ポータルは/borrowsをリソースとして探しますが、そのリソースは存在しません。ws-resources.jsonでフォールバックを設定してください。 - ポータルの起動前にポート 3000 を使用中のプロセスを終了しない。 Vite の開発サーバー、Next.js、その他のツールがポート 3000 を使用していることがよくあります。ポートが使用中の場合、ポータルはポートのバインドに失敗しても通知しません。