Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nix Meetup #2 学生サークルでの集団開発におけるNixの採用事例

Avatar for comavius comavius
March 09, 2025
49

Nix Meetup #2 学生サークルでの集団開発におけるNixの採用事例

Avatar for comavius

comavius

March 09, 2025
Tweet

Transcript

  1. 自己紹介 こま🍁 / @comavius 東京科学大学 工学院 経営工学系 2年 科学大の技術系サークルの traP

    にいます Nix歴は1年とちょっと 触っている技術など: 競プロ(アルゴ青/ヒューリスティック青), Rust, Golang, TS, その他諸々 最近はPyO3というRustとPythonを連携させるライブラリがマイブームです
  2. 実行環境管理の技術選定 - 要求 仕様面の要求 - 多数の言語処理系を同じコンテナ上で動かしたい - 一部の処理系が他の処理系に依存している (例: brainfxxk(bfc)とclang)

    実装する人間としての気持ち - 言語のインストールと言語一覧やコンパイルコマンドなどのメタデータを統一的に扱いたい - あまりに原始的な実装はつらい
  3. 実装 言語ごとにderivationを作ってdockertoolsでdocker image内に配置する default = pkgs.dockerTools.buildImage { name = "exec-container";

    copyToRoot = [self.packages.${system}.environment]; }; (flake.nix: L80-L85) (traP-jp/traO-Judge-docs develop ./exec-container)
  4. 実装 各言語のファイルにコンパイル時・実行時コマンドやその他メタデータを記述 languages = [{ binName = "clang++"; compile =

    "${myClang}/bin/clang++ -std=c++23 -o $OUT $SRC"; name = "C++(clang)"; run = "$OUT"; }]; (compilers/clang/default.nix: L17-L24) (traP-jp/traO-Judge-docs develop ./exec-container)
  5. 実装 sbomnix(tiiuae/sbomnix)を用いたライセンス違反の予防 nix-shell -p sbomnix --run "sbomnix .#environment" if grep

    -q "AGPL" sbom.spdx.json; then echo "Error: AGPL license found in sbom.spdx.json." exit 1 fi (license-check.sh: L6, L9-L12) (traP-jp/traO-Judge-docs develop ./exec-container)