はじめに
DXOpalというブラウザで動作するゲームライブラリをRailsで動かしてみたときの備忘録です。
やったこと
Railsアプリの作成
まず、rails new
でアプリのひな型を作成
rails new dxopal_rails --webpack=vue
今後、SPAやPWAにすることも考慮に入れて、--webpack=vue
を追加している。
あとは、実際のゲーム画面を表示するview
とcontroller
を作成。
rails g controller game index
その後、作成したgame_controller.rb
を下記のように修正。
class GameController < ApplicationController
def index
end
def main
main = File.open('./app/views/game/main.rb')
source = main.read
render json: source
end
end
main
というメソッドを追加し、そこでゲームのソースコードを読み取ってJSON形式で展開させている。
最後に、routes.rb
を編集して、game/main
へのルーティングを設定する。
Rails.application.routes.draw do
get 'game/index'
get 'game/main'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
とりあえず、これでDXOpalが動くひな型はできた。
次に、DXOpalの導入を行う。
DXOpalの導入
まず、gem install dxopal
でDXOpal
をインストール。
gem install dxopal
次に、app/views/game
ディレクトリまで移動し、dxopal init
を実行する。
dxopal init
その際、index.html
とdxopal.min.js
とmain.rb
が作成される。
index.html
の中身をindex.html.erb
内に貼り付けて、以下のようにする
<h1>Game#index</h1>
<p>Find me in app/views/game/index.html.erb</p>
<script type="text/ruby">
DXOpal.dump_error{ require_remote 'main' }
</script>
<canvas id="dxopal-canvas"></canvas>
<div id="dxopal-errors"></div>
dxopal.min.js
はapp/assets/javascript
内へ移動させて、application.js
を以下のように書き換える。
//= require rails-ujs
//= require activestorage
//= require dxopal.min
//= require turbolinks
//= require_tree .
最後に、DXOpal
をGemfile
に追加し、bundle install
を行う。
僕の場合、thor
のバージョンでエラーが起きていたので、下記のように修正し、bundle update
とbundle install
をそれぞれ実行したね。
gem 'dxopal'
gem 'thor', '>= 0.19.1'
おわりに
最後に、Railsのサーバーを建てればOK!
rails s
これでDXOpal
をRails上で実行できるようになった。
このとき作ったサンプルはこちらからダウンロードできる。
DXOpalOnRails