ESKEES の作品を自分のサイトに置く
アルファ版(2026 年 9 月時点)の内容です。予告なく変更される場合があります。
ESKEES で作った作品(.eskx / .emg)は、showcase の外でも遊べます。方法は 3 つです。
- showcase の作品を埋め込む … iframe を 1 行貼るだけ。公式サンプルも、投稿された作品も置けます。
- 自分の
.eskxを置く … ESKEES Player(CDN)を読み込み、<eskees-player>タグでファイルの URL を指定します。showcase に投稿していない作品も置けます。 - Studio から Web ページとして書き出す … 作品を埋め込んだ HTML 1 ファイルができます。置くだけで遊べます。
どれも、showcase と同じ再生エンジンで動きます。スクリプト・UI・マスク・ステージ・物理・サウンド・カメラも、そのまま動きます。
動作例
下は、このページに <eskees-player> で置いた「かさねて 2048」です。押すと始まります(矢印キー・スワイプで操作)。
1. showcase の作品を埋め込む
showcase の作品のページで「埋め込む」を押すと、貼り付けるコードが表示されます。作品の URL が https://showcase.eskees.com/w/作品の ID なら、次のとおりです。
<iframe src="https://showcase.eskees.com/embed/作品の ID"
style="width: 100%; aspect-ratio: 16 / 9; border: 0"
allow="autoplay; fullscreen; gamepad" loading="lazy"></iframe>
- 押すまで作品を読み込みません(ページを開いただけでは通信しません)。
- スコアが出ると、その場でランキングに載せられます(押したときだけ送ります)。
- 公開をやめた作品は「この作品は見つかりません」と表示されます。
2. 自分の .eskx を置く(ESKEES Player)
ESKEES の「エクスポート ▾」で出力した .eskx を自分のサーバーに置き、次のように書きます。
<script type="module" src="https://showcase.eskees.com/player/1/eskees-player.js"></script>
<eskees-player src="/games/my-game.eskx" style="width: 800px; aspect-ratio: 16 / 9"></eskees-player>
属性
src | 作品の URL(.eskx / .emg)。必須 |
|---|---|
autoplay | 押さずに始める。音は、最初に画面を押したときから鳴ります(ブラウザの制限) |
lang | ボタンなどの文言(ja / en)。省略するとブラウザの言語 |
saves | セーブデータ。local(既定。そのサイトのブラウザに残る)か memory(閉じたら消える) |
transparent | 背景を透明にする。「クリックして遊ぶ」の表示も出さないので、autoplay と一緒に使います(配信の画面に重ねるとき。OBS で使う) |
fit | 置き場所と作品の比率が違うときの合わせ方。contain(収める。既定)/ cover(はみ出す)/ stretch(引き伸ばす) |
twitch | Twitch のチャンネル名。ログインなしでチャットにつなぎ、コメント・Bits・サブスク・レイドで作品のリアクションと on live が動きます(コメントに反応させる) |
relay | 中継(eskees live)の URL(ws://127.0.0.1:7357)。YouTube のコメントなどを受け取ります(YouTube のコメントに反応させる) |
fps | 1 秒に描く回数の上限(例: 30)。省くと画面のリフレッシュレートどおり。ずっと出しておく飾りやアプリの中で、電池を使わせたくないときに下げます |
scale | 描く解像度の倍率(0.25〜2。既定は 1)。0.5 なら縦横半分の画素で描いて引き伸ばします(軽くなりますが、にじみます) |
virtual-pad | 画面の十字とボタン(タッチ画面で出るパッド)の出し方。auto(既定。指で触る画面でだけ)/ on(いつも)/ off(出さない)。どれでも、出すのは作品がパッドを使っているときだけです。パッドを使わない作品をアプリに入れるときは off にします。mount では virtualPad |
大きさはページの側で決めます。指定しなければ、横幅いっぱい・16:9 で表示します。作品のキャンバスと同じ縦横比(aspect-ratio)にすると、余白が出ません。
イベント
eskees-ready | 作品を開けた |
|---|---|
eskees-error | 開けなかった(detail.message に理由) |
eskees-score | スクリプトがスコアを出した(detail に { board, value, lower })。showcase のランキングには送りません |
eskees-live | 配信のイベントが届いた(detail に { kind, source, user, text, amount, … }) |
eskees-live-status | Twitch とのつながり方が変わった(detail.via が twitch / relay、detail.state が connecting / joined / remote(中継が知らせてきた状態) / retrying / closed) |
document.querySelector('eskees-player').addEventListener('eskees-score', (e) => {
console.log(e.detail.board, e.detail.value);
});
JavaScript から置く
<script type="module">
import { mount } from 'https://showcase.eskees.com/player/1/eskees-player.js';
const game = await mount(document.getElementById('game'), '/games/my-game.eskx', { autoplay: true });
// game.restart() で最初から、game.togglePause() で一時停止、game.destroy() で外す
// 背景を透明にするときは { autoplay: true, transparent: true, fit: 'contain' }
// Twitch のチャットにつなぐときは { twitch: 'チャンネル名' }。自分でイベントを流すときは game.live({ kind: 'chat', source: 'test', user: 'たろう', text: '草', amount: 0 })
</script>
作品の変数に値を入れる
ページやアプリが持っている値(声の大きさ・アプリの状態など)を、作品に渡せます。<eskees-player> の要素にも、mount の戻り値にも同じメソッドがあります。
set(名前, 値) | 作品の変数に値を入れます。スクリプトで var level = 0 to 1 と宣言した変数は数にして範囲に収め、宣言していない名前は作品全体の変数にそのまま入れます(数・文字。true / false は 1 / 0)。値が変わったときだけ、次のフレームで on change 名前 が動きます。毎フレーム呼んでも軽いので、声の大きさのような値を 1 秒に 20 回送っても大丈夫です。作品を開く前に呼んでもよく、最後に入れた値は restart() の後にも入れ直します |
|---|---|
get(名前) | 作品の変数の値を読みます(var は数、ほかは文字か数。無ければ undefined)。set した値は次のフレームから読めます |
live(イベント) | 配信のイベントを流します(on live とリアクションが動く) |
restart() / togglePause() | 最初から / 一時停止 |
const orb = await mount(el, '/orb.eskx', { autoplay: true, transparent: true, fps: 30, scale: 0.75 });
orb.set('state', 2); // 作品の側は on change state で受ける
orb.set('level', 0.8); // var level = 0 to 1 と宣言しておく
Player をアプリやサイトに同梱する
ネットにつながない環境(スマートフォンのアプリの中など)では、Player のファイルを自分で置けます。
- 置くファイル:
eskees-player.jsと、同じ場所のchunks/フォルダを丸ごと置きます。ESKEES CLI を入れた場所のengine/play/にも同じものがあります。chunks/の中身は、物理(planck.js)か文字の演出(JIZURA)を使う作品のときだけ読み込まれます - 作品の渡し方:
mount(el, ArrayBuffer, …)で.eskxの中身をそのまま渡せます(URL から取りに行かない) file://では動きません(ES モジュールとimport()をブラウザが止めるため)。https://か、アプリの組み込みのサーバー(Capacitor のhttps://localhostなど)から開きます- WebGL2 が必要です(代わりの描き方はありません)
- ネットを使うのは、Google Fonts の書体を使う作品・JIZURA の書体・
twitch/relayを指定したときだけです。スコアの送信や計測はしません - 画面が隠れている間は描画もスクリプトも止まります。一時停止中と、開き終わる前に流した
live()は捨てられます。前面に戻ったら、状態をsetで入れ直すと確実です(setの値は捨てられません) - ESKEES Player は中断データ(続きから再開)を残しません。
savesが決めるのは、スクリプトのsaveを残す場所だけです - 同梱して配布するときは、
LICENSE.mdとNOTICE.md(ESKEES CLI を入れた場所にあります)も一緒に入れてください
3. Studio から Web ページとして書き出す
ESKEES Studio の「エクスポート ▾」→「Web ページとして書き出す(HTML)」で、作品を埋め込んだ HTML 1 ファイルができます。
- その HTML をサーバーに置くだけで遊べます。
.eskxを別に置く必要も、CORS の設定も要りません。 - 再生は ESKEES Player(CDN)です。見る人のブラウザが
showcase.eskees.comから Player を読み込みます。 - 作品は HTML の中に入るので、ファイルは作品の 4/3 ほどの大きさになります。大きな作品は、2. の方法(
.eskxを置いて<eskees-player src>)のほうが軽くなります。
置けるサイト・置けないサイト
- 置ける: HTML と JavaScript を自分で書けるところ(自分のサーバー・レンタルサーバー・GitHub Pages・Netlify・Vercel・Cloudflare Pages など)。自分で運営する WordPress では、カスタム HTML のブロックに書けます。
- 置けない: 記事に
<script>を書けないサービス(ブログや技術記事の投稿サイトの多く)。iframe を貼れるサービスなら、1. の埋め込みを使ってください。 - CSP(Content-Security-Policy)で外部のスクリプトを止めているサイトでは、
script-srcにhttps://showcase.eskees.comを加える必要があります。
注意
.eskxを別のドメインに置く場合は、その置き場所で CORS を許可してください(ESKEES Player がfetchで読み込むため)。同じサイトに置けば設定は不要です。- 1 つのページに複数置けます。キー操作を受けるのは、最後に押した 1 つだけです。
- 物理を使う作品では、物理のライブラリ(planck.js)を、そのときだけ追加で読み込みます。
/player/1/の間は、属性・イベント・mountの形を変えません。中身(不具合の修正など)は予告なく更新されます。互換性のない変更をするときは/player/2/を用意します。- EMG の部分(絵とアニメーション)だけを表示すればよい場合は、公開リポジトリの EMG の CDN プレイヤーも使えます。こちらは
.eskxの拡張データ(スクリプトなど)を動かしません。