3カ月ほど前に Visual Basic のプログラムを C# に移植してる感想 - koudenpaのブログ を書いた。
このSRC -Simulation RPG Construction-というスーパーロボット大戦ライクなSRPGのC#(.NET)への移植はまだ趣味の時間の過半を使う形で続けている。
リポジトリを作ったころから数えると、使っている時間の波はありつつも5カ月くらいは続けていることになるだろうか? 趣味のプログラムには数カ月で飽きる自分としてはなかなか画期的な実績だ。なので感想を更新しておこうかな、と思った。
動機・やってること
動機自体は先の記事に書いた通りSRCのデータをWebで眺めたい、というところだったのだけれど
データを読む部分だけでも移植してみることにした。
このデータを読む部分だけではなく、「どうせならプレイしたいなぁ」とゲームとしてSRCのシナリオをプレイする部分も移植をしている。
データビューワーに関しては自分が見たいデータは大体出るようになったので、ひと段落といったところ。
GitHub PagesとAzure Static Web Appsにホスティングして、たまに気になったデータを眺めている。まどか☆マギカの続編が発表されたのでそのデータを眺めたりとか。Webでサッとみられるのは体験が良い。データを読むという目的は達成された。
- GitHub Pages: https://7474.github.io/SRC/
- Azure Staic Web Apps: https://srcv.7474.jp/
リポジトリはこれ。
失敗したこと
「どうせならプレイしたいなぁ」とゲームとしてSRCのシナリオをプレイする部分も移植をしている。
ここからはこの部分なのだけれど、まぁまぁ失敗したなって感じているところがいくつかある。言語化して記憶を強くしたい。
VBとC#間の言語のギャップを埋める戦略を持たずに移植を続けた
とにかく配列などのオフセットが0ではないのが厳しい。
特に先の記事の感想でも上げているこの部分。
なーんも考えずに、あるところは0オフセットのC#の配列やリスト、あるところは1オフセットにするようにしたラッパークラス、あるところは添え字0もあるが1からしか使っていないC#の配列、など大層カオスなことになっている状態。
どう考えても保守性に響く負債になっている。
VB->C#へはコンバータがあるから移植余裕だろ! と考えている方がいたらくれぐれもこの点にはお気をつけいただきたい。初手で1オフセットにするようにしたラッパークラスを使うとか方針付けするのが良いのではないかと思う。他のギャップもどう埋めるのか検討されたうえで進行して負債を残さないようにされたい。
半端にリファクタリングしている
一応基本的に愚直に変換する つもりで作業してはいるのだけれど、なんかこのデータ構造好きじゃないなー、とか半端に変更したりしてしまっている。
結果として、修正量が増えて移植速度が落ちている。
素朴に「アホか?」と思うけれど、LINQ書くのは楽しいのでよし。
元のコードを知ってる人には不親切になっているという害はあるかもしれない。
失敗について
「失敗したなぁ」とは思っているけれど、移植が落ち着いて「気が向いたらリファクタリングすればいいや」位に考えている。
この点は仕事と違って気楽。気兼ねなく失敗して教訓を得られてラッキーだ。
いい体験
何か主に取り組んでいるものがあると、気になったことを試すネタにできてよい。
この取り組みに関しては以下のようなことのネタにできている。
- VSCodeのプラグイン
- GitHub ActionsのAction
- MIDIファイル弄り
- WinHelpの変換
- NuGetパッケージ
- フロントエンドアプリケーションのE2Eテスト
- 同ビジュアルテスト
- TerraformのAzureプロバイダ
Web屋をやっているのにWebアプリケーションがないのはネタとして弱いので「何かWebアプリケーションを考えてもいいかなぁ」と思い始めたところだ。
Blazor WebAssembly のプリレンダリングサーバー立てる、位でもいいかもしれない。
Static Web Appsでそれができるようなインテグレーションできると嬉しいのだけれど、サービスのターゲットになってないだろうなぁ。
Next.jsとかだとISRとかSSG統合されているサービスあるよね? Blazorをガチで普及させるならAzureで同等のことができて欲しいところだ。
なんか脱線し始めた。
要は何か柱があると、そこから枝葉を伸ばせて便利って感じ。
もうしばらくはSRC柱で趣味のプログラミングをやっていこうと思う。
感想その3も書けるといいな。
ちょっとずつ動くようになっているので、都度動きを録画したりして楽しんでいる。面白バグが出た時が一番楽しい。
一番好きだったSRCのコマンド、それはFadeIn/Outでした。
— 光電/7474 (@koudenpa) 2021年5月8日
なんかかっこいい画面になって好きだった。 pic.twitter.com/N1nJsMUfQO
マップ兵器は気持ちいいな。 pic.twitter.com/UojaAotmdV
— 光電/7474 (@koudenpa) 2021年5月16日