miniCRAN を使用してローカル R パッケージ リポジトリを作成する

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Managed Instance

この記事では、miniCRAN を使用して R パッケージをオフラインでインストールし、パッケージと依存関係のローカル リポジトリを作成する方法について説明します。 miniCRAN は、パッケージと依存関係を識別して、それらを 1 つのフォルダーにダウンロードします。オフラインでの R パッケージ インストールでは、このフォルダーを他のコンピューターにコピーします。

1 つまたは複数のパッケージを指定できます。miniCRAN は、これらのパッケージの依存関係ツリーを再帰的に読み取ります。 その後、CRAN または類似のリポジトリから、リストされているパッケージとその依存関係のみがダウンロードされます。

この処理が完了すると、miniCRAN は、選択したパッケージとすべての必要な依存関係で構成される、内部的に一貫性のあるリポジトリを作成します。 このローカル リポジトリをサーバーに移動し、インターネットに接続せずにパッケージのインストールを続行できます。

経験豊富な R ユーザーは、多くの場合、ダウンロードしたパッケージの DESCRIPTION ファイルで依存パッケージの一覧を確認します。 ただし、Imports に記載されているパッケージには、第 2 レベルの依存関係がある場合があります。 このため、必要なパッケージの完全なコレクションをアセンブルするために miniCRAN をお勧めします。

ローカル リポジトリを作成する理由

ローカル パッケージ リポジトリを作成する目的は、サーバー管理者または組織内の他のユーザー (特に、インターネットにアクセスできないユーザー) が、サーバーに新しい R パッケージをインストールするために使用できる 1 つの場所を提供することです。 リポジトリを作成した後、新しいパッケージを追加することで、または既存のパッケージのバージョンをアップグレードすることで、そのリポジトリを変更できます。

パッケージ リポジトリは、次のシナリオに役立ちます。

  • セキュリティ: 多くの R ユーザーは、CRAN またはそのいずれかのミラー サイトから、新しい R パッケージを任意にダウンロードしてインストールすることに慣れています。 ただし、セキュリティ上の理由により、SQL Server を実行している実稼働サーバーは、通常、インターネットに接続されていません。

  • より簡単なオフライン インストール: オフライン サーバーにパッケージをインストールするには、すべてのパッケージの依存関係もダウンロードする必要があります。 miniCRAN を使用すると、簡単にすべての依存関係を正しい形式で取得し、依存関係のエラーを回避できます。

  • 改善されたバージョン管理: マルチユーザー環境では、サーバーに複数のパッケージ バージョンを無制限にインストールしないことが適切です。 ローカル リポジトリを使用すると、ユーザーに対して一貫したパッケージのセットを提供できます。

miniCRAN をインストールする

miniCRAN パッケージ自体は、他の 18 個の CRAN パッケージに依存しています。これらのパッケージのなかに、RCurl パッケージがあり、このパッケージには curl-devel パッケージに対するシステム依存関係があります。 同様に、パッケージ XMLlibxml2-devel に依存しています。 依存関係を解決するために、インターネットにフル アクセスできるコンピューター上に、ローカル リポジトリを最初に作成することをお勧めします。

基本 R、R ツール、およびインターネット接続があるコンピューターで、次のコマンドを実行します。 このコンピューターが SQL Server コンピューターではないことを前提としています。 次のコマンドは、miniCRAN パッケージと igraph パッケージをインストールします。 この例では、パッケージが既にインストールされているかどうかを確認しますが、if ステートメントをバイパスして、パッケージを直接インストールすることもできます。

if(!require("miniCRAN")) install.packages("miniCRAN") 
if(!require("igraph")) install.packages("igraph") 
library("miniCRAN")

CRAN ミラーと MRAN スナップショットを設定する

パッケージの取得に使用するミラー サイトを指定します。 たとえば、MRAN サイトや、必要なパッケージがあるリージョン内のその他のサイトを使用できます。 ダウンロードが失敗した場合は、別のミラー サイトを試してください。

CRAN_mirror <- c(CRAN = "https://mirrors.nics.utk.edu/cran/")

ローカル フォルダーを作成する

収集したパッケージを格納するローカル フォルダーを作成します。 これを頻繁に繰り返す場合、"miniCRANZooPackages" や "miniCRANMyRPackageV2" などのわかりやすい名前を使用することをお勧めします。

フォルダーをローカル リポジトリとして指定します。 R 構文では、パス名にスラッシュを使用します。これは、Windows の規則とは反対です。

local_repo <- "C:/miniCRANZooPackages"

ローカル リポジトリにパッケージを追加する

miniCRAN がインストールされて読み込まれたら、ダウンロードする追加パッケージを指定する一覧を作成します。

この最初の一覧には依存関係は追加しないでください。 miniCRAN によって使用される igraph パッケージは、依存関係の一覧を自動的に生成します。 生成された依存関係グラフの使用方法について詳しくは、「miniCRAN を使用したパッケージの依存関係の識別」を参照してください。

  1. ターゲット パッケージ "zoo" と "forecast" を変数に追加します。

    pkgs_needed <- c("zoo", "forecast")
    
  2. 必要に応じて、依存関係グラフをプロットします。 これは必須ではありませんが、有益である場合があります。

    plot(makeDepGraph(pkgs_needed))
    
  3. ローカル リポジトリを作成します。 必要に応じて、R バージョンを、SQL Server インスタンスにインストールされているバージョンに変更してください。 コンポーネントのアップグレードを行った場合、ご使用のバージョンは元のバージョンよりも新しい可能性があります。 詳細については、「R パッケージ情報の取得」を参照してください。

    pkgs_expanded <- pkgDep(pkgs_needed, repos = CRAN_mirror);
    makeRepo(pkgs_expanded, path = local_repo, repos = CRAN_mirror, type = "win.binary", Rversion = "3.3");
    

    この情報から、miniCRAN パッケージは、後でパッケージを SQL Server にコピーするために必要なフォルダー構造を作成します。

この時点で、必要なパッケージと必要な追加パッケージを含むフォルダーが作成されているはずです。 このフォルダーには、zip 形式のパッケージのコレクションが含まれている必要があります。 パッケージを解凍したり、ファイルの名前を変更したりしないでください。

必要に応じて、次のコードを実行して、ローカルの miniCRAN リポジトリに含まれているパッケージの一覧を表示します。

pdb <- as.data.frame(pkgAvail(local_repo, type = "win.binary", Rversion = "3.3"), stringsAsFactors = FALSE);
head(pdb);
pdb$Package;
pdb[, c("Package", "Version", "License")]

インスタンス ライブラリにパッケージを追加する

必要なパッケージを含むローカル リポジトリを作成したら、パッケージ リポジトリを SQL Server コンピューターに移動します。 次の手順では、R ツールを使用してパッケージをインストールする方法について説明します。

注意

パッケージをインストールするには、sqlmlutils を使用することをお勧めします。 「sqlmlutils で新しい R パッケージをインストールする」を参照してください。

  1. miniCRAN リポジトリが格納されているフォルダー全体を、パッケージのインストール先のサーバーにコピーします。 通常、このフォルダーは次の構造を持ちます。

    <miniCRAN root>/bin/windows/contrib/version/<all packages>

    この手順では、ルート ドライブからのフォルダーを想定しています。

  2. インスタンスに関連付けられている R ツールを開きます (たとえば、Rgui.exe を使用できます)。 右クリックして [管理者として実行] を選択し、ツールがシステムを更新できるようにします。

    • たとえば、RGUI の既定のファイルの場所は C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\bin\x64 です。
    • たとえば、RGUI のファイルの場所は C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\bin\x64 です。
    • たとえば、RGUI のファイルの場所は C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\R_SERVICES\bin\x64 です。
  3. インスタンス ライブラリのパスを取得し、ライブラリ パスの一覧に追加します。

    たとえば、次のように入力します。

    outputlib <- "C:/Program Files/Microsoft SQL Server/MSSQL13.MSSQLSERVER/R_SERVICES/library"
    

    たとえば、次のように入力します。

    outputlib <- "C:/Program Files/Microsoft SQL Server/MSSQL14.MSSQLSERVER/R_SERVICES/library"
    

    たとえば、次のように入力します。

    outputlib <- "C:/Program Files/Microsoft SQL Server/MSSQL15.MSSQLSERVER/R_SERVICES/library"
    
  4. miniCRAN リポジトリを server_repo としてコピーしたサーバー上の新しい場所を指定します。

    この例では、リポジトリをサーバーの一時フォルダーにコピーしたとします。

    inputlib <- "C:/miniCRANZooPackages"
    
  5. サーバーの新しい R ワークスペースで作業しているため、インストールするパッケージの一覧も指定する必要があります。

    mypackages <- c("zoo", "forecast")
    
  6. miniCRAN リポジトリのローカル コピーへのパスを指定して、パッケージをインストールします。

    install.packages(mypackages, repos = file.path("file://", normalizePath(inputlib, winslash = "/")), lib = outputlib, type = "win.binary", dependencies = TRUE);
    
  7. インスタンス ライブラリから、次のようなコマンドを使用して、インストールされているパッケージを表示できます。

    installed.packages()
    

次のステップ