スクリーンショット_2018-09-19_20

ローグライク(仮)コード生成ツール・精霊シルフのアビリティ追加

今日はコード生成ツール "Code Generator" を作った。C++ のソースコードのファイルを生成する Ruby 製のコマンドである。

例えば

bin/code_generator skill fatal_attack

のようにコマンドを打つと FatalAttack というアビリティ(スキル)の雛形ソースコードを吐き出してくれる。"src/skills/fatal_attack.h" と "src/skills/fatal_attack.cpp" と "tests/skills/fatal_attack_test.cpp" を生成し、`make test` するとビルドは成功してテストは失敗するような状態になる。
あとはこの雛形に肉付けをしていけばアビリティを組み上げることができるという便利なツールである。

他にも、

bin/code_generator simple user models

とコマンドを実行すれば "src/models/user.cpp" やテストが生成される。

こういったジェネレータが必要になる理由は C++ に存在する『ボイラープレートコード』と呼ばれる言語仕様上の無駄(というと言いすぎだが)があるからだ。Wikipedia には「言語仕様上省略不能でかつ、ほとんど変更を加えることなく多くの場所に組み込む必要があるソースコードのこと。」と書かれている。
手紙で言えば「拝啓、貴社益々ご清栄のこととお慶び申し上げます。」みたいなものが各ファイルごとにあるわけである。
C++ の場合はマクロやテンプレートを使ってボイラープレートコードを減らすこともできるのだが、コンパイル時間の増加や保守性の低下が問題になることもある。これらの問題と生成ツールの保守コストとを天秤にかけた結果、作ることを決めた。

久しぶりの Ruby

昔は Rubyist だったが、最近書いてなかったので久しぶりで楽しく書けた。

その他の進捗

このツールを使って、精霊シルフのアビリティ『エリアヒール(仮名)』を作った。周囲の味方を少し回復してくれるものだ。シルフは体力が少なく攻撃力も低いのだが、数少ない回復アビリティを使える仲間である。

応援してくださると嬉しいです。よろしくお願いいたします!