はじめに
この記事はR言語 Advent Calendar 2024の24日目の記事です!Japan.Rで「RでHex」というタイトルで発表したのですが、その内容をパッケージにしてみたよ、というお話です。開発したボードゲームはこちらのリンクから遊べます。
発表資料
パッケージ作成
作成したpackageはこちらです(一部未完)。
ゲームボードの描写や勝敗判定などは実装済みなので、パッケージ単体でも最低限ゲームを遊ぶための下地は出来ています1。開発にあたって考えたこと、調べたことを紹介します。
考えたこと
Japan.Rの発表時点では、作成したボードゲームは書き捨てのコードでした。
一部の関数は修正が必要だったので、次の2点を意識しながら開発を進めました。
tidyverseを使わない
一番苦しかったです。いつも分析するときは、library(tidyverse)
とおまじないのように唱えていました。しかし、パッケージの軽量化のためには使わないに越したことはありません。ggplot2
だけはなくすことが出来ませんでしたが、それ以外のパッケージとの依存関係はなくすことが出来ました。
devtoolsを使い倒す
文字通りですが、devtools
を使い倒します。ドキュメント生成やライセンスの追加など、ライブラリ開発に必要な事項はほぼすべて関数一つ叩くだけで済みます。同様にRstudioの機能もいろいろと便利なものが多いです。roxygen skeletonの追加2などは、知らなかったらかなり苦痛だったと思います。「少しめんどうかも」と思ったときは、まず最初にdevtools
やRstudioが何とかしてくれないかと調べることを意識しました。
役立った資料
基本的にはhttps://r-pkgs.org/を参照しながら作成しました。第二版は英語版だけですが、第一版は邦訳が出ています。いくつか大きめの加筆が入っているので、英語に抵抗がなければ第二版をお勧めします。とはいえ日本語資料を最初にざっと確認しておくと、スムーズに全体感を掴めていいと思います。僕は次の3つを読みました。
おわりに
実は人生初めてのパッケージ開発でしたが、特に詰まることなく作業を進めることが出来ました。ただ、ゲーム開発自体も初めてなので、ユーザーにどこまで関数を提供するか?の判断が難しかったです、というよりうまくいきませんでした。全ての関数を提供しています(筋肉)。また、テストコードを書くのが非常に難しかったです。こちらはボードゲームならではの問題ですが、期待する動作や状態を書くにはパターン数が多く、結局最低限のテストしか書けませんでした。状態をランダムに生成してテストすることなどが出来るとよさそうなので、今後の宿題としたいと思います。
今回で開発の勘所は掴めたので、ドキュメントの整備や機能のアップデート3などを進めていきたいと思います。もしご興味がある方がいましたら、issueなどは気軽に立てて頂いて構いません。たまにRで変なものを作るのは楽しいので、是非皆さんにもおすすめします!
Enjoy!
Footnotes
ボードの更新ロジックをパッケージに含めることが出来なかったため、現状まだ使いづらい パッケージになってしまいました。↩︎
sec-whole-game-document https://r-pkgs.org/whole-game.html#sec-whole-game-document↩︎
boardの更新を簡単なゲームAIに任せられるようなexampleを追加したい↩︎