mcpField
R
r-cran-status

r-cran-status

github.com/posit-dev開発551156 回インストール今日更新
リポジトリ

r-cran-status について

CRANパッケージの公開・審査状況、過去のバージョン、R CMD checkの結果を調べるスキルです。CRANの一覧を確認する際のリクエスト頻度も案内します。

主な機能

  1. 01公開・審査状況の確認
  2. 02過去のパッケージバージョンの検索
  3. 03プラットフォーム別R CMD check結果の確認
  4. 04win-builderのアップロードと進捗の確認
  5. 05CRANへのリクエスト頻度の管理

活用シーン

  1. 01投稿が審査待ちかどうかの確認
  2. 02指定バージョンの公開履歴の確認
  3. 03CRANチェックで失敗した環境の特定
  4. 04Windowsチェックがwin-builderに届いたかの確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/posit-dev/skills --skill r-cran-status

インストール後、Claude Code で/r-cran-statusを入力して読み込まれたか確認します。

詳細

CRAN パッケージのステータス

パッケージの申請・レビュー状況、特定の過去バージョンの経過(例:{package} {version}、btw v1.4.0 のように指定)、または CRAN のテストプラットフォーム全体での現在の R CMD check 結果を確認します。

「CRAN のステータス」は、次の 2 つの意味に解釈できます。

  • 申請状況:このパッケージ(またはバージョン)はレビュー中、公開済み、アーカイブ済み、または却下されましたか?「申請状況」を参照してください。
  • チェック結果:公開済みバージョンはすべてのプラットフォームで R CMD check に合格していますか?それとも、削除につながる可能性のある WARN/ERROR/NOTE フラグがありますか?「チェック結果」を参照してください。

CRAN のサーバーは、共有の無償リソースです。並列リクエストや短い間隔でのリクエストを決して行わないでください。リクエストの間に短く待機し(例:sleep 1)、一致が見つかったらすぐにループを停止し、このセッションですでに確認したページを再取得しないでください。

ワークフロー

  1. パッケージ名が指定されていない場合は、ユーザーに尋ねます。バージョンが指定されることもあります(例:btw v1.4.0 または btw 1.4.0)。先頭の v は取り除きます。
  2. どの質問かを判断します。
    • バージョンが指定されている場合、または申請、レビュー、キュー、却下/アーカイブに関する依頼の場合 → 申請状況。
    • チェック、R CMD check、WARN/ERROR/NOTE、プラットフォーム/フレーバーに関する依頼の場合 → チェック結果。
    • win-builder、check_win_devel()、または申請が届いたかどうかに関する依頼の場合 → Win-Builder。
    • 本当に曖昧な場合(例:「x の CRAN ステータスを確認して」だけの場合)は、どちらを意味するのか尋ねるか、両方を確認して報告します。
  3. 該当する以下のセクションに従い、結果を報告します。

申請状況

  1. まず現在公開されているバージョンを確認します(以下を参照)。
  2. バージョンが指定されていない場合、または指定バージョンが現在のバージョンと一致する場合は、現在の公開リリースとして報告します。PACKAGES に存在しない場合を除き、ステップ 5 に進みます。存在しない場合はステップ 3 に進みます。
  3. この会話中の以前の確認ですでにパッケージがステージまたはレビュアーフォルダーに見つかっている場合は、まずそのフォルダーを確認し、「CRAN のレビューステージ」の順序に沿って後続のステージを確認します。最初から再確認しないでください。それ以外の場合は、すべてのステージフォルダーとレビュアーフォルダーを確認します。
  4. incoming/ のステージフォルダーを検索します(以下を参照)。
  5. レビュアーに割り当てられたフォルダーを検索します(以下を参照)。
  6. 特定のバージョンが指定され、現在公開中のバージョンと一致しない場合(またはパッケージがまったく公開されていない場合)は、そのバージョンを CRAN Archive で確認します(以下を参照)。
  7. 結果を報告します(「申請状況の結果を報告する」を参照)。

CRAN のレビューステージ

一般的なパイプラインの順序で記載しています。パッケージは通常、上から下へ進みますが、すべてのパッケージがすべてのステージを通るわけではありません。

  • inspect / newbies:最初の手動検査待ち(newbies は初回申請者向け)
  • pending:詳細レビュー待ち
  • human/<initials>:CRAN レビュアーに割り当て済み
  • pretest:自動チェックの実行中または再実行中
  • waiting:CRAN がメンテナーからの回答を待機中(メンテナーが回答すると pretest に戻ります)
  • recheck:リバース依存関係のチェック
  • publish:承認済みで公開待ち
  • archive:却下済み

申請ステージフォルダーの確認

{package} を実際のパッケージ名に置き換えます。既知の最終ステージがある場合はそこから開始し(「申請状況」のステップ 3 を参照)、ない場合は inspect から開始します。

for stage in inspect newbies pending pretest waiting recheck publish archive; do
  curl -Ls "https://cran.r-project.org/incoming/$stage/" |
    grep -Eio '[^"]*{package}[^"]*' &&
    echo "Stage: $stage" && break
  sleep 1
done

レビュアー割り当てフォルダーの確認

レビュアーのイニシャル別フォルダー(例:human/KH)は CRAN チームの変更に伴って変わるため、固定の一覧ではなく incoming/ の一覧から見つけます。そこにあるフォルダーのうち、上記のステージ名に該当しないものはすべてレビュアーフォルダーです。

reviewer_folders=$(
  curl -Ls "https://cran.r-project.org/incoming/" |
    grep -Eio '<a href="[^"]+/">' |
    sed -E 's/<a href="([^"]+)\/">/\1/' |
    grep -Ev '^(inspect|newbies|pending|pretest|publish|recheck|archive|waiting|special)$'
)

for stage in $reviewer_folders; do
  curl -Ls "https://cran.r-project.org/incoming/$stage/" |
    grep -Eio '[^"]*{package}[^"]*' &&
    echo "Stage: human/$stage" && break
  sleep 1
done

パッケージがすでに公開済みかどうかの確認

curl -Ls https://cran.r-project.org/src/contrib/PACKAGES |
  awk -v pkg="{package}" '
    $0 == "Package: " pkg { found=1 }
    found && /^Version:/ { print; exit }
  '

出力された Version: 行が、現在の CRAN バージョンです。後で、指定された古いバージョンがそのバージョンに「置き換えられた」ものかどうかを伝えるために必要なので、覚えておいてください。

CRAN Archive で特定のバージョンを確認する

置き換えられたバージョンは、src/contrib/ からパッケージごとのアーカイブフォルダーに移動します。この Archive は、上記の archive の incoming/ ステージとは無関係です(前者は「却下済み」、こちらは「置き換えられた古いバージョン」を意味します)。

curl -Ls "https://cran.r-project.org/src/contrib/Archive/{package}/" |
  grep -Eio '[^"]*{package}_{version}\.tar\.gz[^"]*'

一致する .tar.gz ファイル名があれば、そのバージョンが公開され、その後置き換えられたことを意味します。

提出状況の確認結果を報告する

  • バージョンの指定がない場合:
    • PACKAGES に掲載されている場合:公開済みとして、現在のバージョンとともに報告します。
    • それ以外で、incoming/ またはレビュアーフォルダーに見つかった場合:上記のステージ一覧に基づき、フォルダー名とその意味を報告します。
    • それ以外の場合:CRAN の提出キューまたはインデックスに見つからなかったと報告します。
  • 特定のバージョンが指定されている場合:
    • PACKAGES の現在のバージョンと一致する場合:現行リリースとして報告します。
    • それ以外で、CRAN Archive に見つかった場合:公開済みで、現在のバージョン(PACKAGES に記載)に置き換えられたと報告します。例:「アーカイブで入手可能。v1.5.0 に置き換え済み」。
    • それ以外で、パッケージ(バージョンを問わず)が incoming/ またはレビュアーフォルダーに見つかった場合:そのステージを報告し、指定されたバージョンは過去のリリースではないことを明記します。
    • それ以外の場合:指定されたバージョンが見つからなかった(現行、アーカイブ、審査中のいずれにもない)と報告します。

チェック結果

CRAN は、公開されている各パッケージについて、プラットフォームごとの R CMD check 結果を https://cran.r-project.org/web/checks/check_results_{package}.html で公開しています。WARN または ERROR の状態が約2~4週間以上続くと、CRAN によってアーカイブされるリスクがあります。

結果の表を取得して簡潔にします。

curl -Ls "https://cran.r-project.org/web/checks/check_results_{package}.html" |
  grep '<tr> <td>' |
  sed -E 's/<[^>]+>/ /g' |
  awk '{print $1": "$NF}'

各行について、flavor: STATUS という形式で1行ずつ出力されます。例:

r-devel-linux-x86_64-debian-clang: OK
r-oldrel-windows-x86_64: ERROR

ステータスは OK、NOTE、WARN、ERROR のいずれかです。OK 以外の flavor について、詳しい失敗内容は同じページの下部にある「Check Details」に記載されています。タグを除去せずに再度取得し、失敗した flavor の Version:/Check:/Result: 行の後にある <pre> 形式のセクションを確認してください。

404 は CRAN のチェック履歴がないことを意味し、現在公開されていない可能性が高いです。代わりに提出状況を確認してください。

チェック結果を報告する
  • すべての flavor が OK:そのパッケージはすべてのプラットフォームでチェックに合格していると報告します。
  • いずれかの flavor が NOTE/WARN/ERROR:該当する flavor とステータスを列挙し、「Check Details」に記載された失敗理由を要約して、WARN/ERROR が続くとアーカイブされる可能性があることを明記します。
  • ページが404の場合:チェック結果がないと報告し、代わりに提出状況を確認して報告します。

Win-Builder

Win-builder(win-builder.r-project.org)は、devtools::check_win_devel()(または check_win_release() / check_win_oldrelease())で送信されたパッケージに対して、Windows 上で R CMD check を実行します。tarball は匿名 FTP で ftp://win-builder.r-project.org/<flavor>/(R-devel、 R-release、または R-oldrelease)にアップロードされ、通常 15~30 分以内に DESCRIPTION に記載されたメンテナーのアドレスへ結果がメールで送信されます。ローカルで成功メッセージが表示されても、アップロードコマンドが完了したことを示すだけです。サーバーで受信を確認してください。

  1. アップロードの受信確認(確実な方法)。 tarball は flavor の FTP フォルダーに表示されるはずです。

    curl ftp://win-builder.r-project.org/R-devel/
    

    表示されていれば、アップロードされ、キューに入っています。サーバーのタイムスタンプはヨーロッパ時間(CEST/CET)なので、ローカルの送信時刻と比較するときは時差を考慮してください。

  2. 進行状況。 win-builder がファイルを処理すると、プレテストの一覧に表示されます。

    curl -Ls https://win-builder.r-project.org/incoming_pretest/ |
      grep -i {package}
    

    エントリは {package}_{version}_{yyyymmdd}_{hhmmss} の形式で、チェックが始まった後にのみ表示されます。ログは各エントリ内にあります(例:00check.log)。エントリは数か月間残るため、パッケージ名だけでなく、バージョンと日付を照合してください。

注意点:

  • incoming_pretest にエントリがないことは、アップロードに失敗したことを意味しません。エントリの表示は FTP の一覧より遅れることがあります。到着確認には FTP の一覧が確実です。キューが数時間詰まることもあり、その場合は一覧の滞留状況に現れます。
  • tarball が一覧に表示されている間は、再送信を勧めないでください。キューに入っており、重複しても処理が速くなることはありません。
  • tarball が消えたのにメールが届かない場合、実行は完了している可能性があります。メンテナーの迷惑メールフォルダーと incoming_pretest/ に、バージョンが一致する最近のエントリがないか確認してください。数時間経っても何も見つからない場合は、再送信せずに R-package-devel に問い合わせてください。

コメント