Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Nix Meetup #2 学生サークルでの集団開発におけるNixの採用事例
Search
comavius
March 09, 2025
58
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Nix Meetup #2 学生サークルでの集団開発におけるNixの採用事例
comavius
March 09, 2025
More Decks by comavius
See All by comavius
Nixの仕組み: Derivation編
comavius
0
69
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
830
Unsuck your backbone
ammeep
672
58k
Ethics towards AI in product and experience design
skipperchong
2
440
Bash Introduction
62gerente
615
220k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
460
Paper Plane (Part 1)
katiecoart
PRO
2
12k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
エンジニアに許された特別な時間の終わり
watany
109
250k
Building an army of robots
kneath
307
47k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Transcript
学生サークルでの集団開発に おけるNixの採用事例 こま🍁 / @comavius
自己紹介と発表の流れ
自己紹介 こま🍁 / @comavius 東京科学大学 工学院 経営工学系 2年 科学大の技術系サークルの traP
にいます Nix歴は1年とちょっと 触っている技術など: 競プロ(アルゴ青/ヒューリスティック青), Rust, Golang, TS, その他諸々 最近はPyO3というRustとPythonを連携させるライブラリがマイブームです
発表の流れ - 自己紹介と発表の流れ - プロジェクト概要と技術選定 - 開発メンバー - 実装 -
今後の課題 - 終わりに
プロジェクト概要と技術選定
競プロのジャッジサーバーを 作りたい
競プロ(競技プログラミング )とは 「xxxを入力として受け取り、yyyを出力する」ソースコードを書け、という問題が与えられ、回答としてソースコード を提出する。 例: 問題: 空白区切りの2つの整数を受け取り、和を出力せよ 回答例(python): left, right
= map(int, input().split()) print(left + right)
プロジェクト概要 ユーザーが回答の コードを提出して... バックエンドサーバーが 受け取って... ジャッジサーバーが いい感じに スケジューリングして.... ジャッジ環境で 実行される
実行環境管理の技術選定 - 要求 仕様面の要求 - 多数の言語処理系を同じコンテナ上で動かしたい - 一部の処理系が他の処理系に依存している (例: brainfxxk(bfc)とclang)
実装する人間としての気持ち - 言語のインストールと言語一覧やコンパイルコマンドなどのメタデータを統一的に扱いたい - あまりに原始的な実装はつらい
案1: Ansible 長所 - 日本語の書籍がそれなりに出版される程度にポピュラー - サークル内に結構な数の利用者がいた 短所 - 典型的でないことをしようとすると再現性が保証されないらしい
- プロジェクト内に利用者がいなかった
案2: Aqua 長所 - 学習コストが低い 短所 - すべてのツールをAquaで一元管理するコンセプトではないらしい
案3: Nix 長所 - 再現性に関して責任を負う必要がない - サークル内・プロジェクト内に利用者がいた 短所 - 学習コストが高い
選ばれたのは ... Nixでした - メタデータを簡単に記述できる - 関数型言語の経験者がそれなりにいた - 個人的に使ってみたかった
開発メンバー
開発メンバー 経験者4人・未経験者2人で開始 現在は経験者2人・元未経験1人で開発
実装
実装 言語ごとに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)
実装 各言語のファイルにコンパイル時・実行時コマンドやその他メタデータを記述 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)
実装 各言語のメタデータをJSONとして出力 (languageSettings.nix 長いので省略) (traP-jp/traO-Judge-docs develop ./exec-container)
実装 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)
課題
Mac上でビルドできない 開発メンバーの開発環境の Mac上で一部のderivationがビルド出来ず、デプロイ先が Linuxのため対応のコスト を払いたくない →Dockerコンテナ内でビルドをするようにして解決
GitHub Actionsを使えない Actionsの記憶容量制限(5GB)に引っかかってCI/CDを回せない →しかし、いずれ超えてしまうため、GitHub Larger RunnerあるいはSelf Hosted Runnerの使用を検討中 スライド作成中に確認したところ Standard
Runnerの容量が増えていて今なら回りそう
長期的な課題 - 継続的にメンテナンス・オンボーディングができるか? - Nixpkgsのアップデートに追従できるか? - Nix側のエコシステムが弱い一部の言語をどうするか? - サンプルコードでテストを回したい
終わりに
終わりに - 少し宣伝 traOJudge 今年4月リリース予定 いずれnix式の評価をする問題も投稿できるようになるので乞うご期待!
終わりに ご清聴ありがとうございました