Skip to content

Akashic System の導入

Akashic System のオールインワン環境を利用してマルチプレイゲームをホスティングするまでの導入方法についてまとめます。

オールインワン環境の構築

1. Akashic System のダウンロード

Akashic System のプロジェクトを clone して cd します。

sh
git clone https://github.com/akashic-games/akashic-system
cd akashic-system

INFO

akashic-system 内のソースコードを修正した場合は以下のようにプラットフォームを指定してビルドする必要があります。

sh
bash build.sh amd

なお、Akashic System の推奨プラットフォームは amd です。

tonistiigi/binfmt 等のエミュレータを使って、arm プラットフォームで利用する場合は、 予期せぬ性能劣化や正常に動作しない可能性があることをご了承ください。

2. Akashic System の起動

Akashic System のオールインワン環境を起動します。

sh
docker compose --file docker-compose-all-in-one.yml up -d

3. コンテンツとエンジンの配置

所定のディレクトリに、ホストしたいマルチプレイゲームと、それを動かすためのエンジンを配置します。

a. engines

エンジン (Akashic Engine のランタイム) は、akashic-runtime-distributables の Releases ページで公開されています。

https://github.com/akashic-games/akashic-runtime-distributables/releases から、最新リリースの dist.zip をダウンロードしてください。

dist.zip のリンク (Release の日付などは今後更新されることがあります)

TIP

執筆時点の dist.zip は こちら から直接ダウンロードできます。

dists.zip の内容は次のようになっています。

sh
dist/
├── 1.4.0-0/
│   ├── akashic-engine.js
│   ├── bootstrap.js
│   ...
├── 2.4.0-0/
│   ...
├── 2.4.0-0-canvas/
│   ...
├── 3.13.4-0/
│   ...
└── 3.13.4-0-canvas/
    ...

これを akashic-system プロジェクト内に以下のような形式で配置します。

sh
volumes/akashic-resources/engines/akashic-runtime/<revision>

<revision> 部分が 3.13.4-0-canvas などに対応します。 配置すると次のようになります。

sh
akashic-system/
└── volumes/
    └── akashic-resources/
        └── engines/
            └── akashic-runtime/
                ├── 1.4.0-0/
                │   ...
                ├── 2.4.0-0/
                │   ...
                ├── 2.4.0-0-canvas/
                │   ...
                ├── 3.13.4-0/
                │   ...
                └── 3.13.4-0-canvas
                    ├── akashic-engine.js
                    ├── bootstrap.js
                    ├── bundle_info.txt
                    ├── engineFilesV3_13_4_Canvas.js
                    ├── entry.js
                    ├── game-driver.js
                    ├── MANIFEST.md
                    ├── pdi-common-impl.js
                    └── playlogClientV7_3_1.js

これで、ランタイムとして 1.4.0-03.13.4-0-canvas を利用するコンテンツをホストできるようになりました。

TIP akashic-runtime-distraibutables の更新

akashic-runtime-distributables を、このように akashic-system と分けて管理しているのは、 Akashic Engine 更新時にランタイムのバージョン (akashic-rutime/X.Y.Z-W/) が増えるためです。

akashic-runtime-distributablesReleases ページの最新の dist.zip は、 最新までのすべてのランタイムを同梱した zip ファイルとなるように更新する予定です。

TIP -canvas について

ランタイムには 3.13.4-03.13.4-0-canvas のように、-canvas の有無だけが異なるものがあります。 -canvas 版は、WebGLRenderer を含まず、その分だけファイルサイズが軽量なバージョンです。 game.json で "renderers" を指定しない大抵のコンテンツでは -canvas 版を利用できますが、以下では簡単のために -canvas なし版を使っています。

b. game

ホストしたい Akashic コンテンツを、 akashic-system プロジェクト内に以下のような形式で配置します。

sh
volumes/akashic-resources/games/<gameCode>/<revision>

<gameCode> はそのコンテンツを識別する文字列、 <revision> はゲームのリビジョンを識別する文字列です。

このとき、コンテンツの game.json に次の記述を加えてください。

json
{
  "environment": {
    "akashic-runtime": {
      "version": "3.13.4-0"
    }
  }
}

(Akashic Engine v3 コンテンツの場合。v2 系なら "2.4.0-0" など、上で配置したランタイムのバージョンに合わせてください)

TIP

例として ニコニコスネーク (OSS 版) を配置する場合は、次の手順で行えます。

sh
# 1. ゲームをビルドする
git clone git@github.com:akashic-contents/niconicoSnake.git
cd niconicoSnake
npm install
npm run build

# 2. game.json を編集し、上記 `environment.akashic-runtime.version` プロパティ
#    を加える。値は "3.13.4-0" とする (コマンド略)

# 3. game.zip をつくる
npm install -g @akashic/akashic-cli
akashic export zip --output game.zip --nicolive

# 4. game.zip の中身を volumes/akashic-resources/games に入れる
unzip game.zip -d volumes/akashic-resources/games/niconico_snake/0.1.0

ここでは <gameCode>niconico_snake, <revision>0.1.0 としています。

c. content.json

実行する Akashic コンテンツの起動用設定ファイルである content.json を、 akashic-system プロジェクト内に以下のような形式で配置します。

sh
volumes/akashic-resources/contents/<gameCode>/<revision>/content.json

例えば、<gameCode>niconico_snake で、 <revision>0.1.0 であれば、 content.json は次のように配置します。

sh
volumes/akashic-resources/contents/niconico_snake/0.1.0/content.json

content.json の内容は以下のようにしてください。

json
{
  "engine_configuration_version": "3.13.4-0",
  "engine_urls": [
    "http://localhost:2100/engines/akashic-runtime/3.13.4-0/engineFilesV3_13_4.js",
    "http://localhost:2100/engines/akashic-runtime/3.13.4-0/playlogClientV7_3_1.js"
  ],
  "content_url": "http://localhost:2100/games/niconico_snake/0.1.0/game.json",
  "external": [],
  "content_id": "niconico_snake"
}

ここで engine_configuration_version は、(b) の game.json に記載したものと合わせてください。 さらに enigne_urls のファイル名は、 (a) で配置したランタイムのファイルパスに合わせてください。 (engineFiles*.jsplaylogClient*.js にあたるファイルが必要です)

また content.json 内における URL のホスト名とポート番号は、 起動した Akashic System のホスト名と resource-server のポート番号に置き換えてください。 クライアントの akashic-game-view と game-runner がリソースをダウンロードするために使われます。

TIP

content.json の各フィールドについては、後述の関連コンポーネント agvwREADME も参照してください。

また content.json は、ここでは例のため手動で作成していますが、実用的には game.json の内容から機械的に生成する方が簡便でしょう。

4. 動作確認

以下のコマンドで Akashic コンテンツがブラウザで起動できるかを確認します。

sh
bash ./tools/demo.sh

放送者用のページと参加者用のページがデフォルトのブラウザで開きます。

放送者用ページ

参加者用ページ

放送者用ページで 参加者受付を開始する ボタンを押した後、 参加者用ページで 参加する ボタンを押して募集が完了すると、 放送者と参加者のそれぞれのページでマルチプレイゲームが開始します。

放送者用ページ

参加者用ページ

この Akashic System の導入ページで参照した技術的情報は、以下にまとまっています。

  • System API documents
    • Akashic System の System API のリファレンスです。
  • akashic-runtime-distributables
    • Akashic Engine のランタイムファイルを公開するリポジトリ。上述のとおり、Releases ページの dist.zip を利用します。
  • agvw
    • Akashic ゲームをブラウザ上で動作させるコンポーネント。オールインワン環境のデモページでも使われています。