ゴールデンウィークの成果報告

誰とも会わなかった(完)

読んだ本

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

5章まで読んだ。

ドメイン駆動、スキルツリーで言うと、オブジェクト指向Lv8ぐらいで解禁されるスキルのような印象を受けた。ストラテジーやMVCを理解してないと実装に至れない。ジャンルは違うけど、言語開発や、データベース設計、OS開発と同じように、一つのこじらせの極地にみえる(批判しているわけではない)

序盤は仕様理解(ドメイン理解)が大事でそれをチーム内で共通の言葉に落としてモデリングしましょうという話が続く。実際のドメイン駆動、値オブジェクトやエンティティに関しては、概念とドメイン層のマッピングするための一つのデザインパターンのように思える。

この前のObject design Rough Talksでかとじゅんさん(@j5ik2o)が言ってたけど、この本は「エリック・エヴァンスの」ドメイン駆動設計なので、理解するに越したことはないが、完全に模倣する必要はないとのこと。ただし、それを免罪符に設計を曲解すると中途半端なものができそうなので、一度完全になぞってメリット・デメリットを洗い出してみるのがよさそう。

ゲームメカニクス  おもしろくするためのゲームデザイン (ゲームデベロッパー)

ゲームメカニクス おもしろくするためのゲームデザイン (ゲームデベロッパー)

ゲームデザインの本。とくに内部経済の章を重点的に読んでた。ゲーム内経済は全てリソースの生産/消費で表現される。MMORPGのように本格な経済もあれば、マリオのコインと1UPの関係のようにプレーヤの動機付けよる誘導を行うものもある。

リソース設計が重点されるゲーム(ストラテジーやRPG)は、内部経済こそゲームのコアメカニクスであり、そのモデリングが大事。

この本でもエリック・エヴァンス本と同じようにコアメカニクスを表現するための独自言語が出てきた。実世界的なエンジニアリング、モデリングが本質なんですよ的な主張を一身に受けて辛くなってくる。サーバーの処理はともかく、UIを作るエンジニアとして人間が非論理的でモデリングしたくなさ高まる。

書いたコード

結局JavaScriptでこじらせたゲーム作ろうとすると世の中には自分が欲しいものがなさすぎて、自分で作ることになる。

Warden

mizchi/warden

vue.jsと一緒に使うようのルーティングライブラリ。詳細については別の記事で書いたの割愛。

vuejsの作者に紹介してもらえた。スターが33まで増えた。

Libretto

mizchi/libretto

さっき書いた。Promiseベースのコントロールフロー制御。指定した順にResolveされたら次のステップへ行く。全部が済んだらこれ自体のthenが発火する。ユーザーの入力とかの対話的な操作を抽象化したかった。

Seq = Libretto.extend
  steps: ['a', 'b', 'c']
  a: ->
    console.log 'a'

  b: -> new Promise (done) =>
    setTimeout =>
      console.log 'b'
      done()
    , 100

  c: ->
    console.log 'c'

seq = new Seq
seq.ready().then => console.log 'seq done'

これは処理をシーケンシャルに流すだけのサンプルだけど、ステートマシンっぽく遷移の管理することもできる。詳しくはREADMEにて。

Librettoはオペラ等の台本の意味。単にScript.jsとか付けたくなかったのでこういう名前になった

Momic.Model

mizchi/momic

ActiveModel風のブラウザストレージのAPIラッパー。詳細はサンプルにて。

mz

mizchi/mz

mizchi製のクライアントサイドのライブラリを一箇所にまとめてビルドしたやつ。依存管理が楽になる、という建前も名あるけど、自分のライブラリを作るのは一つの夢なので、単に自己満足でもある。 これ一つrequireするだけでmomic, libretto, warden が入って、mzの名前空間に適当にマッピングされる。あと適当なヘルパを足す予定。

本当はこういう大きなライブラリを作る気はなくて、基本は薄いパーツ大量に作って、ここでまとめるだけにしたい。あと、mzの設計方針として、ビューにあまり関与したくない。

ビューなんてその時の都合でいくらでも変わるし、フルcanvasみたいな過激なやつから、DOMべったりのやつまで、どうとでもなるのでライブラリとしてロックインはしたくないし、需要が高いので他の人がやってくれる(Backbone, Vue.js, Angular)。というか、ビューのライブラリは自分の趣味でコロコロ変わるので、よっぽど決定版だと思えるようなやつじゃないと自分のライブラリに入れたくない。

あとでサンプルプロジェクトを作る。

本来の目的

ゲーム作るはずが、ヤク刈ったら終わった。ゲームの方も全く進んでないわけじゃないけど…8月頃にはプロトタイプ仕上げたい気持ちはある。