MOE3: モデル構成

Power(国)モデルと Province(地域)モデル

f:id:asagix:20130826014332p:plain:w200

Province から Power への参照を持つのはゲーム開始時の各国初期領土のみ。

増設や無政府時解体の際に、Power 側から has_many 指定で逆にたどって「本国」を取得するのに使用する。

Order(命令)モデル

とりあえず周辺のモデルも含めて書き出してみる。

f:id:asagix:20130826014320p:plain:w200

Order から Player への関連を経由して「どの卓のどの国(プレイヤー)が出した命令か」が、Order から Unit への関連を経由して「どの卓の何ターン目の何フェイズにどの地域にいる軍への命令か」が特定できる。

これで「どの卓の何ターン目の何フェイズに、どの国(プレイヤー)によってどの地域にいる軍に出された命令か」がカバーできる。「どんな命令か」は、Order の派生クラスとして定義する。

すっきりまとまって満足。

この構造ならば命令の対象は自国の軍には限らないので、MOE の伝統である仮想命令(支援や輸送で他国の軍を対象とする場合に設定するダミー命令)にも対応できる。

正規化もやりすぎると障害対応などで DB ダンプだけ見て状態を把握するのが困難になるけれど、これは本来ならば適切なメンテナンス用の画面を用意すべき話だろう。

モデル間の関連についての余談

Order から Province への参照は MoveOrder(移動命令)の移動先指定のため、Order から Order への自己参照は SupportOrder(支援命令)と ConvoyOrder(輸送命令)の対象指定のためである。

Diplomacy MOE3 on Rails4

Diplomacy MOE

Diplomacy MOE はオンラインでプレイできる審判役不要のディプロマシーである。

MOE という名前は「Mastering Operation Engine」などとうそぶいたこともあったが、実際のところは「各国の画像を萌え絵にしたら多少は殺伐感も薄れんじゃね?」というくだらない思いつきに由来するのは知る人ぞ知るところ。

結局、その思いつきの効果のほどは定かではない。

MOE2

現在稼働中の MOE2 はフレームワークを使用せずフルスクラッチで書かれている。

初代 MOE からリライトした際の努力もあってそれなりに小奇麗にまとまってはいるものの、様々な機能追加予定を放置したまま時間が過ぎ、数か月に一度バグ対応でソースを見直すくらいしかしなくなった今現在、薄れゆく記憶とともに保守性の低下著しい現実を無視できなくなりつつある。

早い話が MOE2 専用の汎用性もかけらもない独自フレームワークを維持するのもいい加減億劫になってきたのであった。

Ruby1.8

MOE2 開発時に現役であった Ruby1.8 は 2013 年 6 月を以てサポートが完全に終了した。

分かっていたことではあったので、流石に何らかの対策を取らねばと去年あたりから MOE の Ruby1.9 対応とか Rails 化計画などを行き当たりばったりで進めてはいたのだが、なまじ MOE2 が大きな問題もなく動いていることもあってモチベーションが保てず、とうとう今ここに至るまで成果は上がっていない。

一応、行軍解決処理がそこそこ動くまでは作ったのだが、Rails の強力な機能に振り回されて無駄に複雑になってしまい、半ば途方に暮れていた。

Ruby2.0 と Rails4

今 Ruby の最新バージョンは 2.0.0 となり、それに合わせて Rails も 4.0.0 に上がった。

良い機会だからと重い腰を上げて開発環境を整え、MOE3 の再開発というか新生 MOE3 の開発着手を宣言したのがつい先日の話である。

もし Ruby2.0 + Rails4 で作りかけの MOE3 が動けばそのまま開発を継続したのだが、サーバーに Ruby2.0 を入れ、gem を入れ直し、Passenger も更新し、どうにかこうにか環境を整えて試しに走らせた rake spec がエラーを吐いた瞬間に希望は捨てた。

その行軍解決処理はあまりにも難解で、テスト抜きでは修正すら覚束ないシロモノと成り果てていたのである。

そもそも Rails の機能を使っているくせに Rails っぽくない自覚と居心地の悪さがあった。根本的なところで Rails への理解が不足していて、リファクタリングでどうこうできるレベルではなかった。少なくともその労力をつぎ込むだけ価値を認めることはできなかった。

MOE3 on Rails4

そして新生 MOE3 である。過去は振り返らない。

当面の目標は行軍解決エンジンの完成だが、しかしその前に必要な部品が多すぎていつになったらスタート地点までたどり着けるかの見通しすら立たない。

それでもここ最近、別件で集中的に Rails を扱う機会があり、期せずして多少の経験を積むことができたのは幸いである。

こつこつやっていこう。