Rパッケージにスターを送るパッケージ ThankYouStars を作成しました

先日 @teppeis さんが 依存しているnpmライブラリにGitHubスターを送るツール を作成されました。

それに触発され、R言語バージョンを作ってみました。

github.com

スターでパッケージ作者に感謝の気持ちを送りましょう。

どんなパッケージなの

インストール済みのRパッケージにすべてスターを付けるだけのパッケージです。

内部では、 installed.packages() を実行して DESCRIPTION のURLがGitHubのものを抽出し、 GitHub API を叩いてスターをつけています。 実行には GitHub API の Token が必要なので、READMEを参考に取得してください。

作ったきっかけは

より正確には、

  • まず @teppeis さんが npmツールを作成し、

teppeis.hatenablog.com

ccvanishing.hateblo.jp

じゃあR版を作るしかない、と思って作りました。 僕が把握していないだけで、他言語による実装もあるかもしれません。

R言語は、CRANに登録されたパッケージをインストールするのが基本ですが、最近は devtools のおかげでGitHub上にあるソースを直接インストールできるようになり、CRANには登録しないパッケージも増えてきました。それはそれで便利なのですが、CRANと違いダウンロード数が計測できないため、どのくらいユーザーがいるのか作者がわからないというデメリットがあります。

そこで、ThankYouStarsを使えばGitHubレポジトリにスターを簡単に送れるので、使っていることを伝えられますし、作成者側もモチベが上がります。thank-you-starsはR言語界隈とも親和性が高いと思います。

ちなみに、いい機会なので、CRANにも登録しました。 ついにCRANデビューです。

CRAN - Package ThankYouStars

しかし、CRAN登録版は、現状devtoolsでインストールしたパッケージに対しスターが送れません。 GitHubに置いている開発版は対応したので、今は devtools::install_github でインストールしてください。 CRAN版も近日中にアップデートします。

使い方は

上述したレポジトリにソースがあるので、 devtools でインストールできます。

セットアップ方法は3通りの方法があります。まず、GitHub API のtokenを取得し、

  1. ~/.thank-you-stars.json に保存
  2. 環境変数 GITHUB_PAT に保存
  3. 関数の引数にブチ込む

のどれかでOKです。

1の方法は他の thank-you-stars パッケージと同様の方法です。 2の方法は RからGitHub API を叩くパッケージ gh と同様の方法です。 お好きな方をお使いください。3の方法はおすすめしません。

ちなみに gh パッケージにはスターをつける機能が無かったので、直接 httr パッケージで叩いています。 PR送るかなぁ…。しかし誰も使わなさそうな機能だしなぁ…。

token のセットアップが完了したら、

library(ThankYouStars)
thank_you_stars()

でスターがつきます。 それが全てです。

謝辞

まず、先駆者の @teppeis さん、@mattn_jp さん、@y_taka_23 に御礼申し上げます。thank_you_starsの考え方は素晴らしく、また、コードも参考にさせていただきました。

また、パッケージ作成およびCRAN登録について、

のパッケージやブログを参考にさせていただきました。重ねて御礼申し上げます。 特に httr パッケージ関数のテスト方法が大いに参考になりました。

notchained.hatenablog.com

また、CRANの登録方法はほぼこの本に従いました。

Rパッケージ開発入門 ―テスト、文書化、コード共有の手法を学ぶ

Rパッケージ開発入門 ―テスト、文書化、コード共有の手法を学ぶ

過去に社内向けのパッケージを作るときに既に読んでいたのですが、 CRAN登録方法の章は今回初めて読み、かなり簡単にリリースできて驚きました。

CRAN登録は闇と聞いていたので長期戦を覚悟していたのですが、 結局1回のリジェクトだけで完了して拍子抜けです。 そのリジェクト理由も、ライセンスの明記不備と、ドキュメントのタイトルを大文字にしていなかったのを指摘されただけでした。 少なくともこの程度のパッケージなら闇ではなさそうなので、怯えずにどんどんパッケージ作ると良さそうです。