2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

rix 入門

Last updated at Posted at 2024-12-01

R言語には、rixというdefault.nixを生成できるpackageが存在します。この記事では、そのrixの使い方を紹介したいと思います。

この記事は、R言語とNixが好きなしがない大学生が書いたものです。そのため、内容に誤りがあったり、表現が正しくないことがあるかもしれません。ご了承ください。

Nixとは

純粋関数型のパッケージマネージャのことです。また、パッケージマネージャは、パッケージの管理を容易にするツールです。
Nixの特徴をいくつか挙げるならば、再現可能なビルドができること、Nix言語で宣言的にパッケージ定義を記述できること、パッケージをアップグレードしても壊れない信頼性があることだと思います。この記事に最も強く結びついてくるNixの特徴は、再現性です。環境の再現はDockerがあると思いますが、この記事で紹介するNixの使い方は環境を再現する手段の一つとして考えていただけたら良いと思います。

rixとは

Nixにはnix-shellというコマンドがあり、nix-shellを実行すると、Nix言語の記述を元に構築された仮想開発環境のシェルが立ち上がります。そして、nix-shelldefault.nixまたはshell.nixというファイルに書かれた記述を元に、仮想開発環境を構築します。nix-shellは非常に便利ですが、Nix言語を書く必要があります。そこで、rixの出番です。rixを使用すると、R言語で書いたソースコードを元にdefault.nixを生成できます。

default.nixを生成し、仮想開発環境のシェルが立ち上がるまでの流れ

ざっと、流れを図示すると以下のような感じになります。
JapanR2024.png

使い方

では、Nixおよびrixの使い方を説明します。

環境

OS: ubuntu24.04.1 LTS (VMware上で動かしている)

r-baseNixのセットアップ

以下のコマンドは、1行ずつ実行してください。

# install r-base
sudo apt install r-base
# setup Nix
sudo apt install curl
sh <(curl -L https://nixos.org/nix/install) --daemon
sudo apt install nix-bin

rixのinstall

以下のコマンドは、1行ずつ実行してください。

sudo apt install libcurl4-openssl-dev
sudo R -e 'install.packages("rix")'

ソースコードの一例

以下は、ソースコードの一例です。以下のソースコードを実行すると、~/Desktop/配下にdefault.nixが生成されます。使い方が判明している引数のみ、コメントアウトで記載しておきます。

確認はしていませんが、使用できるRのpackageはNixpkg化されたRのpackageのみが使用できるはずです。Nixpkgsの数は膨大なので、多くのR packageもNixpkg化されているはずです。なので、最新のバージョンを使用することが必須でない限り、そこまで問題にならないと思われます。

Nixpkgの検索は、以下のサイトから行えます。
https://search.nixos.org/packages
rPackages.[R言語のpackage名]という名前で、packageが存在するはずです。
例) rPackages.shiny

library(rix)

rix(
    r_ver = "latest",
    #必要なpackageを記載する
    #例としてggplot2を追加した場合を記載しています
    r_pkgs = c("ggplot2"),
    system_pkgs = NULL,
    git_pkgs = NULL,
    ide = "code",
    shell_hook = NULL,
    #default.nixが生成されるディレクトリを指定
    project_path = "~/Desktop/",
    #TRUEのとき: すでに指定したディレクトリ配下にdefault.nixがあったら上書きする
    #FALSEのとき: すでに指定したディレクトリ配下にdefault.nixがあったら上書きしない
    overwrite = TRUE,
    #TRUEにするとdefault.nix生成時にターミナルに詳細なログを出す
    print = TRUE
)

上記のソースコードを実行すると、以下のdefault.nixが生成されました。

# This file was generated by the {rix} R package v0.12.4 on 2024-12-01
# with following call:
# >rix(r_ver = "4703b8d2c708e13a8cab03d865f90973536dcdf5",
#  > r_pkgs = c("ggplot2"),
#  > system_pkgs = NULL,
#  > git_pkgs = NULL,
#  > ide = "code",
#  > project_path = "~/Desktop/",
#  > overwrite = TRUE,
#  > print = TRUE,
#  > shell_hook = NULL)
# It uses nixpkgs' revision 4703b8d2c708e13a8cab03d865f90973536dcdf5 for reproducibility purposes
# which will install R version latest.
# Report any issues to https://github.com/ropensci/rix
let
 pkgs = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/4703b8d2c708e13a8cab03d865f90973536dcdf5.tar.gz") {};
 
  rpkgs = builtins.attrValues {
    inherit (pkgs.rPackages) 
      ggplot2
      languageserver;
  };
    
  system_packages = builtins.attrValues {
    inherit (pkgs) 
      glibcLocales
      nix
      R;
  };
  
in

pkgs.mkShell {
  LOCALE_ARCHIVE = if pkgs.system == "x86_64-linux" then "${pkgs.glibcLocales}/lib/locale/locale-archive" else "";
  LANG = "en_US.UTF-8";
   LC_ALL = "en_US.UTF-8";
   LC_TIME = "en_US.UTF-8";
   LC_MONETARY = "en_US.UTF-8";
   LC_PAPER = "en_US.UTF-8";
   LC_MEASUREMENT = "en_US.UTF-8";

  buildInputs = [  rpkgs  system_packages   ];
  
}

nix-shellコマンドの実行

default.nixがあるディレクトリでnix-shellコマンドを実行すると、仮想開発環境のシェルが立ち上がります。

nix-shell

サンプルのレポジトリ

サンプルのレポジトリを作成しましたので、適宜参照してください。

終わりに

ここまで記事を読んでいただきありがとうございます。
皆さんの快適なRライフの一助となれたらうれしいです。
では、また他の記事でお会いしましょう。
バイバイ (@^^)/~~~

参考サイト

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?