Godot4で作ったWebGLアプリを無料のGitHubPagesで公開する

スクリプトファイルやアプリのプロジェクトを公開・非公開でアップロードできる GitHub では、WebGL で作成されたブラウザゲームや、 HTML, CSS, JavaScript などを用いたホームページ・ウェブサイトを無料で公開できる GitHub Pages というホスティングサービスも提供しています。

GitHub 公式サイト 20240502

今回は、無料で軽快な 2D / 3D ゲームエンジン GodotEngine4 を用いて作成した簡易な WebGL(HTML5) アプリを、GitHubリポジトリに配置して、無料ウェブサイトや WebGL アプリを公開できるホスティングサービス GitHub Pages を用いてウェブブラウザ上でアプリを動作させます。

※ GodotEngine のバージョンは 4.2.1 です。 .NET 版ではありません
※画像の一部で M+ FONTS を使用しています。
※記事で紹介するスクリプト / プログラム / コードは自己責任で使用してください。

GitHubPagesでリポジトリをウェブサイトとして公開するための設定

GitHub Pagesリポジトリウェブサイトとして公開するための、 public なリポジトリの作成と GitHub Pages の設定については以下の記事を参照してください。

Godot4 で作ったWebGLアプリを GitHub リポジトリにアップロード

GodotEngine4WebGLアプリをエクスポートして、それを GitHub リポジトリにアップロードする手順は前回の記事を参照してください。

GitHub のサイト経由では 25 MB 以上のサイズのファイルはアップロードできませんが、 git コマンドによって 100 MB までアップロードする手順についても紹介しています。

アップロードした WebGL ブラウザアプリへのアクセス

GitHub Pages でウェブサイトとして公開する設定を行った public なリポジトリに、WebGL フォルダをアップロードすると、自動的にそれらのファイルをビルド・デプロイしてウェブサイトとして表示すする準備が行われます。

GitHub のリポジトリのページの Actions タブで、ビルド・デプロイが完了したことを確認します。

GitHub-リポジトリの-Actions-を選択してビルドとデプロイメントが完了したことを確認します

その後、 Settings タブのサイドバーで Pages を選ぶと表示されるページで公開されたサイトのトップページへの URL を取得しましょう。

GitHub-Pages-ウェブサイトが公開されました.VIsitボタンを押すとサイトが開きます

今回はリポジトリの直下ではなくサブフォルダに index.html があるので、トップページへの URL に「サブフォルダ/index.html」のパスを追記してアクセスします。

例では、GitHub Pages で表示されたトップページの URL が以下でした。
sakura-crowd はアカウント名です。 WebGLPublic はリポジトリ名です。
トップページでは自動作成してから編集した ReadMe.md の内容が表示されます。

WebGLPublic
WebGL アプリをサブフォルダでそれぞれ公開するためのリポジトリです。

アップロードした WebGL ファイルの index.html へのパスを追加すれば、 WebGL アプリをウェブブラウザでプレイできます。
今回の例では JumpOrDieWebGL というフォルダの中の index.html へのパスを追加して以下の URL で WebGL アプリにアクセスできます。

JumpOrDie

GitHub Pages へアクセスした際のエラー

アクセスすると、タイトルやアイコンはタブに表示されるのですが、画面にはエラーメッセージが表示されました。

GitHub リポジトリにアップロードした username.github.io の後の index.html にアクセスするとエラーが発生しました..

原因は GodotEngine4 でエクスポートされた WebGL には SharedArrayBuffer という機能が用いられているのに、それを動作させるためのサーバの設定足りていないことが原因です。

具体的にはエラーメッセージに書いてある「Cross Origin Isolation」と「SharedArrayBuffer」を有効にするために「Cross-Origin-Embedder-Policy」と「Cross-Origin-Opener-Policy」の2つの HTTP ヘッダーを追加する必要があります。

Chrome、Firefox および Safari で SharedArrayBuffer や高精細タイマーが使えるようになりました。そのためには cross-origin isolation という状態を有効にするのですが、親となる HTML ドキュメントに下記 2 つのヘッダーを送ります。

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
SharedArrayBuffer と過渡期な cross-origin isolation の話

The following features required to run Godot projects on the Web are missing:Cross Origin Isolation – Check web server configuration (send correct hedaders) SharedArrayBuffer – Check web server configuration (send correct headers)

Web 上で Godot プロジェクトを実行するために必要な次の機能がありません: クロスオリジン分離 – Web サーバー構成を確認します (正しいヘッダーを送信します) SharedArrayBuffer – Web サーバー構成を確認します (正しいヘッダーを送信します)

https://sakura-crowd.github.io/WebGLPublic/JumpOrDieWebGL/index.html にアクセスした際のエラーメッセージと Google 翻訳

HTTP の Cross-Origin-Embedder-Policy (COEP) レスポンスヘッダーは、(CORP または CORS を使用して)文書に明示的に許可を与えていない外部オリジンのリソースが、文書に読み込まれることを防止するものです。

Cross-Origin-Embedder-Policy – HTTP | MDN

SharedArrayBuffer オブジェクトは、一般的な、生のバイナリーデータバッファーを表すために使用されます。

SharedArrayBuffer – JavaScript | MDN

Godot4 製のWebGLアプリ用に HTTP ヘッダーを追加

GodotEngine4 でエクスポートした WebGL では SharedArrayBuffer を利用します。
そのためには前述の「Cross-Origin-Embedder-Policy」と「Cross-Origin-Opener-Policy」の2つの HTTP ヘッダーを追加する必要がありますが、 GitHub Pages では HTTP ヘッダーの追加ができません

そこで、その2つの HTTP ヘッダーを追加できる JavaScript ファイル「gzuidhof/coi-serviceworker」を index.html の中で script タグを使って読み込ませます。
gzuidhof/coi-serviceworkerMIT ライセンスなので、名前とライセンス(またはライセンスへのリンク)を使用しているサービスの中に掲載しましょう。

gzuidhof/coi-serviceworker」にアクセスして、 coi-serviceworker.min.js ファイルを選択後、そのファイルのページのダウンロードボタンを押して js ファイルをダウンロードします。

GitHub gzuidof coi-serviceworker 様から coi-serviceworker.min.js をダウンロードします.

ダウンロードした coi-serviceworker.min.js ファイルを GitHub のリポジトリの WebGL の index.html ファイルと同じフォルダにアップロードします。

GitHub リポジトリの WebGL の index.html と同じ場所に coi-serviceworker.min.js をアップロードします..

そして、index.html ファイルに script タグの以下の1行を追加して、 coi-serviceworker.min.js ファイルを読み込み、その中で GodotEngine4 製の WebGL アプリを動作させるために必要な2つのHTTP ヘッダーを追加します。

<script src="coi-serviceworker.min.js"></script>
<!DOCTYPE html>
<html lang="en">
	<head>
		<script src="coi-serviceworker.min.js"></script> <!-- add by SakuraCrowd -->
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no">
		<title>JumpOrDie</title>
		<style>

うまく動作しない場合は、 Chrome ならば、エラーメッセージの表示されているウェブサイトで F12 キーを押すことでより具体的なエラーメッセージや JavaScript の読み込み動作などを確認できます。
※Chrome ウィンドウの右上の「…」ボタンを押して表示されるメニュー「その他のツール」→「デベロッパーツール」から表示することも出来ます。

GitHub Pages サブフォルダの WebGL の index.html にアクセスして F12 キーを押した際の画面.

Console タブでは、具体的なエラーメッセージを確認することができます。

GitHub Pages サブフォルダの WebGL の index.html にアクセスして F12 キーを押した際の Console タブによると coi-serviceworker.min.js が見つからないようです..

また、今回用いた ServiceWorker については Application タブのサイドバーの Service workers で読み込まれているか確認できます。

GitHub Pages サブフォルダの WebGL の index.html にアクセスして F12 キーを押した際の Application > Service workers.

今回スクリーンショットで掲載したエラーの理由は単純なファイル名の間違いでした。
coi-serviceworker.js という min が含まれていない間違った存在しないファイルを指定していたので修正すると解決しました。

エラーを修正したら、再びリポジトリの Actions タブビルド・デプロイの処理完了するのを待ってから、先ほどの WebGL アプリの URL にアクセスして動作を確認しましょう。

GitHub リポジトリの Actions でファイル変更で自動的に始まったビルドとデプロイが完了するのを待ちます..

テスト

coi-serviceworker.min.js を読み込んだことで、GodotEngine4 でエクスポートされた WebGL アプリを動作させるために必要な HTTP ヘッダー2つが追加され、先ほどのエラーメッセージは表示されず、作成したアプリが再生されました。

GitHub リポジトリの GitHub Pages で Godot4 の WebGL を coi-serviceworker.min.js のおかげで再生できました..

coi-serviceworker は MIT ライセンスなので、アプリ内でそれを使用していることと、 MIT ライセンスへのリンクを表記しましょう。
※ coi-serviceworker のライセンスは「coi-serviceworker/LICENSE at master · gzuidhof/coi-serviceworker」を参照してください。

GitHub リポジトリの GitHub Pages で Godot4 の WebGL では coi-serviceworker を使っていることとそのMITライセンスへのリンクを画面に表記します...

まとめ

今回は、無料で軽快な 2D / 3D ゲームエンジン GodotEngine4 を用いて作成した簡易な WebGL(HTML5) アプリを、GitHubリポジトリに配置して、無料ウェブサイトや WebGL アプリを公開できるホスティングサービス GitHub Pages を用いてウェブブラウザ上でアプリを動作させる手順を紹介しました。

HTTP ヘッダーを追加する「coi-serviceworker」についても紹介しました。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました