CRANを見据えるならパッケージの機能が最小限の内に送ってしまえ

カテゴリ: r

金曜日にchunkhooksパッケージをCRANに送りだしました。コードブロックに行番号をつけたり、fig.widthの単位をインチからミリメートルに変換したり、そんなおお役立ちフックをちょこちょこ盛り込んでいます。

最近は、CRANに登録を考えているパッケージは、最小限に実装して早々にリリースするようにしています。今回はたった3つのフックで0.0.1とすることにしました。

パッケージの規模の小さいうちに抑えるべきところを抑えたいからです。

  1. ドキュメントの充実
  2. テストの充実
  3. CRANによるチェックのパス
  4. 達成感

最初からパッケージの規模を大きくしようとすると、ついついドキュメントやテストが後回になります。すると、これらが面倒になり、後回しになり、CRANにも送れなくなる。悪循環ですね。テストはなくてもCRANに送れますが、書いておくに越したことはありません。特に依存パッケージがある場合は、依存関係によるコードの破綻を素早く検知できるようになります。

そして、パッケージの規模が小さい内にCRANに送ると、指摘される箇所も少なく済みます。最初のリリース時点での指摘を覚えておけば、次回以降のリリースでも注意すべき要領が分かります。

最後に達成感は非常に大事です。CRANに載ると成果物感が出ます。次のやる気に繋がります。ええ、抑えるべきところですとも!

デメリットとしては、メンテナンスしないといけない感が増すところでしょうか。この点は最近も話題になりましたね。まあやりたいと思える範囲でやっていくしかないのが現状だと思います。

jsrsasignの寄付金を募ることにしてみました(やりがいって何だっけ?)

というわけで、誰にでも勧められるわけではありませんが、最近私が意識しているパッケージ開発方針でした。

余談ですが、パッケージを作る時にライセンスやバッジやらの設定が面倒なので、そのあたりを自分向けに関数としてカスタムし始めました。

https://github.com/atusy/templater/blob/master/R/init_package.R

雰囲気的には以下のことをやってます。本気で開発しようとするとここまで設定するべきことがあるのかと思うとちょっとだるくなりますなー。

# パッケージ作成
usethis::create_package()

# GitHubに作ったレポジトリにpush

# 細かい設定
usethis::use_news_md()
download.file('https://raw.githubusercontent.com/github/gitignore/master/R.gitignore', '.gitignore')
unlink(c('DESCRIPTION', 'README.md'))
usethis::use_description(list(
      `[email protected]` = 'person(given = "Atsushi",
                                family = "Yasumoto",
                                role = c("aut", "cph", "cre"),
                                email = "[email protected]",
                                comment = c(ORCID = "0000-0002-8335-495X"))',
      Maintainer = 'Atsushi Yasumoto <[email protected]>',
      URL = sprintf('https://%s.atusy.net, https://github.com/atusy/%s',
                    package, package),
      Language = "en-US"
    ))
usethis::use_mit_license("Atsushi Yasumoto")
usethis::use_readme_md()
usethis::use_cran_badge()
usethis::use_mit_license()
usethis::use_spell_check()
usethis::use_roxygen_md()
usethis::use_testthat()
usethis::use_pkgdown()
usethis::use_github_action_check_full()

追記

2020-07-28

Uryuさんからコメントを頂きました。

私もこのコメントには同意するところで、初稿に「CRANを見据えるなら」という前提が欠けていたことを反省しております。というわけで改題し、内容もちょこっとだけ変えました。

私の場合、たとえばatusydownやatusyverseといった個人用パッケージはCRANに登録しません。また、便利なパッケージながら似たテーマのパッケージが既に存在しているから、そちらにマージしてもらって私がCRANにパッケージを登録するのは避けたいと思っているものもあります。後者についてもとりあえず私が使えれば私は困らないので。。

このパッケージはぜひ人々に使って欲しい!と思えるようなものをCRANに登録するよう心掛けます。