Dev Container Features
で合体だ!!

2022-12-10 Japan.R 2022
@eitsupi

はじめに

自己紹介

  • @eitsupi
  • 製造業勤務
    • Excelが嫌になりRを触り初めて3年
  • Dockerイメージrocker/r-ver他のメンテナー
  • 2022年はApache Arrowにかなりコミットしました

最近Rパッケージを作りました

prqlr

  • PRQLをSQLに変換する関数を提供
  • tidyqueryパッケージ等と組み合わせて使えます!
"from mtcars | filter cyl > 3 | select [cyl, am, disp] | sort [-cyl] | take 4" |>
  prqlr::prql_to_sql() |>
  tidyquery::query()
                  cyl am  disp
Hornet Sportabout   8  0 360.0
Duster 360          8  0 360.0
Merc 450SE          8  0 275.8
Merc 450SL          8  0 275.8

prqlrのひみつ

  • Rustprql-compilerがPRQLをSQLに変換するぞ!
  • Pythonのprql-python、JavaScriptのprql-jsのようにRのprql-compilerバインディングも簡単にできるのでは?と思って作り始めたぞ!
    • extendrというのを使うと何か良い感じにできるらしいと聞いたことがあったぞ!1

…Rust?

Rustで開発……確か……

  • らすとあっぷ?
  • かーご?
  • らすとあならいざー?

Dev ContainerでOK。手動設定不要。

Dev Container

Dev Containerとは

  • 前身はMicrosoft社のVSCode Remote - Container拡張機能(2019年5月~)2
  • 開発環境をDockerコンテナとしてビルド、ソースコードを管理・共有できるようにする
  • GitHub Codespacesでも使用されている(2019年11月~)3
  • 2022年に仕様がオープン化され、OSSのCLIから利用できるようになった

Dev Containerを使うには?

{
  "name": "Rust",
  "image": "mcr.microsoft.com/devcontainers/rust:0-1-bullseye"
}
  1. 以上のような.devcontainer.jsonファイルをGitHubリポジトリのルートに配置します。
  2. GitHub上で「Create codespace on main」みたいな感じのボタンを押します。
  3. Rust開発環境セットアップ済VSCode起動!!

なるほど

  • 確かにRustの開発環境を簡単にセットアップできました。
  • でも、よく考えると今ほしいのはRustRの開発環境でしたね?

Dev Container Featuresで欲しい機能を組み合わせましょう。

Dev Container Features

  • 前身はVSCode Remote - Container拡張機能に組み込まれていた「レゴブロック」のように組み合わせられるシェルスクリプト。(2021年9月~)4
  • Dockerfileおよびdevcontainer.jsonファイルの断片のようなもの。
  • 「このコンテナにアレを足したい!」といったとき、一々Dockerfileを書かずにアレをコンテナ内にインストールできる。

合体!!

例えば「R開発用コンテナにRust開発環境も追加したい」

{
    "name": "R plus Rust",
    "image": "ghcr.io/rocker-org/devcontainer/r-ver:4",
    "features": {
        "ghcr.io/devcontainers/features/rust:1": {
            "version": "latest"
        }
    },
    "postCreateCommand": "R -q -e 'remotes::install_github(\"extendr/rextendr\")'"
}

あるいは「R開発用コンテナに最新のquarto-cliを設定したい」

{
  "name": "R plus quarto-cli",
  "image": "ghcr.io/rocker-org/devcontainer/tidyverse:4",
  "features": {
    "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": {}
  }
}

もちろんこのスライドもCodespacesで作成されました

ローカルのVSCodeからCodespacesに接続するとクラウドであることを忘れる使い心地。

まとめ

  • Dev Containerを使うと開発環境を簡単に構築できるぞ!
  • Codespacesが全ユーザーに開放されたのでブラウザ上からDev Containerをフルに使えるぞ!
  • RもDev Containerからおそらく良い感じに使えるぞ!

Enjoy!

脚注

  1. RパッケージでRustを使うには: extendr入門

  2. 「Visual Studio Code」でリモート開発 ~Microsoftが新しい拡張機能パックをリリース - 窓の杜

  3. Microsoft、クラウドコードエディター「Visual Studio Online」をパブリックプレビュー - 窓の杜

  4. [Tracking] Script and config updates to support simplified selection of “features”