R-universe
R-multiverse

2024-10-19 第115回R勉強会@東京
@eitsupi

はじめに

自己紹介

Rパッケージ

豊富なパッケージのインストールしやすさはRの魅力の一つ

  • 主なリポジトリとパッケージ数
    • CRAN(1997年~): 21,000以上
    • Bioconductor(2001年~): 2,000以上
    • R-universe(2021年~): 26,000以上

今日はR-universeR-multiverse(2024年~)を紹介!

リポジトリの仕組み

Rパッケージのリポジトリ 1/3

Rパッケージのリポジトリ 2/3

Rパッケージのリポジトリ 3/3

https://cran.r-project.org/src/ を開くと、
Apache Serverによりディレクトリ構造を確認できます。

自分でリポジトリを作りたい!

簡単にリポジトリを作成できるよう補助してくれる
Rパッケージが存在

  • miniCRAN (2014~):
    あるリポジトリ内のパッケージと依存関係をローカルにコピーし
    リポジトリを生成
    (例えばCRANの一部のスナップショットを作成)
  • drat (2015~):
    独自のリポジトリを生成、GitHub Pagesで簡単に公開

自分で作りたい……?

いや、勝手に生えてきてほしい!

今すぐR-universeに登録だ!

R-universeとは

GitHubアカウントだけあれば使える、
自動化されたRパッケージリポジトリ生成プラットフォーム

  1. GitHub上に<ユーザー名>.r-universe.devという名前の
    Gitリポジトリを作成
  2. 上記のGitリポジトリにpackages.jsonという
    パッケージ情報を載せたファイルを追加
  3. r-universe GitHub Appを アカウントに追加

上記手順を行うと1、GitHub Actionsによりパッケージがビルドされ
R-universe上にそのユーザー名を冠したリポジトリを生成

CRANとR-universeの比較

リリース難度 (1/4)

CRAN R-universe
動作チェック 厳しい 緩い
逆依存関係テスト あり なし
人力チェック あり なし
メンテナの存在確認 厳しい 緩い
過去バージョンアーカイブ あり なし2
ビルドツール 古い・乏しい 最新・豊富
リリース頻度 12回/年 1回/時間

リリース難度 (2/4)

CRANはユーザーに優しく、開発者には厳しい3

  • 開発者は本名とメアド登録必須
  • テスト厳しい
  • 全バージョン保持(※バイナリ除く)
  • 外部ツールが古かったりなかったりする
    • Rustは2023年4月リリースの1.69.0で固定
    • Goがない
  • パッケージにバイナリを含めてはならない

リリース難度 (3/4)

R-universeは開発者には優しいが、ユーザーが使用するときは不安。

  • 外部ツール・バイナリの利用は柔軟
    • ビルド中に外部ツールのインストールすら可能
  • リポジトリは開発者がいつでも削除できる
  • リリースは開発者がいつでもできる
  • リリースされたパッケージがテストに通っているか不明
  • 過去バージョンを容易にインストールすることはできない4

リリース難度 (4/4)

実際、CRANにリリースできないパッケージでも
R-universeならリリースできている。

これらのパッケージを
良い感じにインストールしたい

両方の良いところ取りをした
使いやすいリポジトリが
あればなあ……

その願い、
R-multiverseで叶うかも

R-multiverseとは (1/2)

A community-curated package repository system, powered by R-universe

R-multiverseとは (2/2)

  • 2つのリポジトリ
    • GitHubリリースに紐付いたパッケージを収録
      Communityリポジトリ
      • 作者の意志でリリースできる
    • テストに合格したパッケージのみを収録
      Productionリポジトリ) ← 2024年11月15日稼働開始予定
      • Communityリポジトリ内の正常に動作するパッケージのみ収録
      • 四半期毎に凍結しリリース頻度を制限
      • 将来的にはPosit Package Managerによりアーカイブも実現?5

R-multiverseを使うメリット

  • 「GitHubリリースの作成 = パッケージのリリース」という
    一般的に確立された手順でのリリースが保証されている
  • インストール先として、
    開発バージョンを個人のリポジトリから、
    リリースバージョンをR-multiverseから、
    という使い分けができる
  • 中央集権的リポジトリとして将来性あり

R-multiverseの活用

polarsパッケージは推奨インストール方法に採用

Sys.setenv(NOT_CRAN = "true")
install.packages("polars", repos = "https://community.r-multiverse.org")

以前の推奨だった独自のリポジトリは、
将来的にプレリリースバージョンの展開に利用予定
(現在は全く同じコミットを参照している)

Sys.setenv(NOT_CRAN = "true")
install.packages("polars", repos = "https://rpolars.r-universe.dev")

まとめ

CRAN、R-universe、R-multiverseの違いを理解して
快適なRパッケージ生活を!

Enjoy!

脚注

  1. Set up your own universe

  2. R-universe上のパッケージはGitリポジトリのコミットに紐付いているため、Gitリポジトリが部分的にアーカイブの機能を果たしている。

  3. 個人の意見です。

  4. renvを使えば可能。R-universe上のパッケージの元になったGitリポジトリのコミットを記録しそのコミットからパッケージをインストールする機能があるため。 https://ropensci.org/blog/2022/01/06/runiverse-renv/

  5. https://github.com/r-multiverse/help/issues/84等で言及あり。