NixCon 2025 Trip Report 🐝

Michael Stapelberg

NixCon 2025 参加レポート 🐝

原文は Michael Stapelberg により に公開されました。 このブログを購読する

年初めのNixOSミートアップがとても良かったのですが、その最後に今年のNixCon 2025がスイスで開催されることが告知されました。しかも場所はまったく同じ、ラッパースヴィルにある東スイス応用科学大学(OST)とのことで、行くことにしました!この参加レポートでは、この素晴らしいカンファレンスを自分がどう体験したか、ざっくりとお伝えしたいと思います :)

タイトルの蜂はNixConの内輪ネタです ;)

金曜日

雨の金曜の朝、9時30分ごろに到着し、駅からOSTの1号館へ急ぎ足で向かい、チケットのQRコードを提示してカンファレンスバッジと事前に注文しておいたカスタム名札を受け取りました。カスタム名札は名前が刻印されていて、服に留めるための強力なマグネットが付いています:

通常の名札とカスタム名札

軽く何か食べてから、オープニングセッションのためにメインの講堂へ向かいました。OSTのFarhad Mehta教授とNixCon運営チーム全員が、登録者450名を第10回NixConへ歓迎してくれました!Nixミートアップで見かけた顔も多くいましたが、「NixConが初めての人」や「そもそもスイスが初めての人」と聞かれて、多くの手が挙がっていました。

特にMehta教授には、このようなミートアップやイベントを実現してくれたことに感謝したいと思います!👏

もし大学や学校、その他部屋を確保できる組織で働いているなら、ミートアップの開催場所を提供することを検討してみてください(定期的にでも、一度きりでも構いません)!会場探しはいつも大変なので、場所を提供することはオープンソースへの素晴らしい貢献になります。

“What if GitHub Actions were local-first and built using Nix?”

その日の最初の技術トークは、ホスティング型Nixキャッシュであるcachix.orgの立役者Domen Kožar氏による「もしGitHub Actionsがローカルファーストで、Nixで構築されていたら?」でした。このトークでは、devenvを使ったNixベースのCIソリューション(GitHub Actionsのようなもの)であるcloud.devenv.shが紹介されました。

このソリューションを使えば、GitHub Actionsをローカルで簡単/完全に実行できないという問題(actについてはみんな知っていますよね)を解決でき、しかもYAMLの代わりに(?)Nixの設定を書けるようになります。

ソリューション自体は良さそうに思えましたが、発表者がスライドを行ったり来たりすることが多く、少し散漫な印象を受けました。肝心な疑問が一つ、答えられないままでした。このカスタムソリューションをどうやってGitHubプロジェクトと統合するのか、という点です。個人的には、自分のプロジェクトでGitHub Actionsのデフォルトの設定方法から外れるほどの価値は感じませんでした。人によっては違うかもしれませんが。

→ 収録を見る(46分) - media.ccc.de

“Rewriting the Hydra Queue Runner in Rust”

次は、ドイツの小規模ソフトウェア会社Helsinki SystemsのSimon Hauser氏による「HydraのQueue RunnerをRustで書き直す」でした。HydraはNixOSインフラでビルドをスケジューリングするコンポーネントです。nixpkgsに変更があったとき、実際にビルドを実行し、その成果物がcache.nixos.orgに届くまでの役割を担っています(Debianでいうbuilddに相当します)。

Simon氏は、現在のQueue Runnerのボトルネックによって、せっかくあるインフラを使い切れず遊ばせてしまっていることを説明しました。そして、場当たり的だったSSHベースの自動化を、よく設計されたgRPCプロトコルに置き換えた経緯を解説してくれました。設計の策定やレビューに多くの人が関わっていた印象で、健全なプロジェクトの良い兆候だと感じました。

残念ながら、このトークで欠けていたものが一つあります。メトリクスです。書き直されたQueue Runnerがどれだけ良くなったのかを示すグラフがあれば、とても良かったと思います。

現在、新しいQueue RunnerはすでにNix Communityのビルドで使われていますが、NixOS本体の本番環境ではまだ使われていません。ただ、そう遠くないうちに使われることを期待しています!

→ 収録を見る(27分) - media.ccc.de

“You can’t spell “devshell” without “hell””

このトークは、Nixベースの開発環境ソリューションであるFloxのZach Mitchell氏によるものでした。これまで自分はnix-shellnix developDevelopment shells with Nix: four quick examplesを参照)を使ってきたので、どんなことが学べるのか興味がありました。

Zach氏によると、nix-shellnix developも、もともとは汎用的な開発環境を提供するためではなく、Nixパッケージのビルドをデバッグするために作られたものだそうです。ユーザーにとっては、好きなシェルが使えないという形で現れます——nix developはBashしかサポートしていないのです。nix develop -c exec <shell>という方法を目にすることがあるかもしれませんが、これは誤りです。なぜならシェルのRCファイルがNixのセットアップに実行され、セットアップの一部を壊してしまう可能性があるからです。

面白い学びの一つは、Nixのガベージコレクタが実行中のプロセスがまだ必要としているNixストアのパスを削除しないように、/procをスキャンしているということでした。

Zach氏はhttps://github.com/zmitchell/proctraceにも触れていました。これはbpftraceベースのプロファイラで、fork/execを追跡し、タイミングのガントチャート構文を生成するものです。面白そうですが、残念ながら今は壊れているようで…?残念です。

→ 収録を見る(45分) - media.ccc.de

“The Nix Binary Cache and AWS”

この炉辺談話(ファイヤーサイドチャット)では、Tarus Balog氏が20年間のオープンソース活動を経てAWSに行き着いた経緯や、彼のチームがコミュニティにどのように恩返ししたいと考えているかが語られました。その具体的な方法の一つが、cache.nixos.orgのホスティングです。

→ 収録を見る(24分) - media.ccc.de

“Nix-based development environments at Shopify (reprise)”

ShopifyのJosh Heinrichs氏が、ShopifyがどのようにNixを(再び!)導入したかを共有してくれました。こうした実際の企業導入ストーリーはとても興味深いと思います。

要約すると、Shopifyには2016年からdevコマンドがあり、宣言的な設定を提供しつつ、裏側ではapt(Linux)やhomebrew(macOS)にディスパッチしていました。Nixへの移行の最初の試みでは、安定した基盤まで到達できず(一部の人がまだ使えない状態でした)、そこへ会社全体でクラウド開発への移行が起こり、より簡単な「とりあえずubuntuを使おう」という解決策が選ばれました。

数年が経ち、クラウド開発環境にあまり満足していない声が出てきた頃、ShopifyのCEOであるTobias Lütke氏がdevenvを見つけます。これはShopifyのdevと驚くほどよく似たNixベースのソリューションでした。そこでTobi氏はあるサービスでdevenvを採用し、Nixの利用を後押しするようになります。今回は、組織内での展開を成功させるためにより多くの時間をかけ、段階的な導入や、すべてのステークホルダーを巻き込むことなどを徹底したそうです。

教訓は、一つの具体的でしっかりサポートされたユースケースが導入の推進力になり得るということ。そして開発環境を一度Nixベースのソリューションに乗せれば、エコシステムの他の部分もより容易に導入できるようになるということです。

→ 収録を見る(19分) - media.ccc.de

“My first Nix Aha!: A Newcomer’s Perspective”

Shopifyのトークと同様の趣旨で、ASMLのKavisha Kumar氏が、同僚がnix-shellを使ってクリーンな開発シェルを得ているのを見て、どのようにNixに入門したかを共有してくれました。

Kavisha氏はASMLで他の人たちにNixを使う理由や方法を教えるのに多くの時間を費やしました。ビデオゲームを題材にした分かりやすい比喩でNixのコンセプトを説明してくれたのが印象的でした。

多くの人がNixにワクワクしながらも、その興奮を他の人にうまく伝えられずにいると思います。Kavisha氏は、自分にとってうまくいった良い方法を見せてくれました。

→ 収録を見る(19分) - media.ccc.de

Lightning Talks

その日の残りはライトニングトークで埋め尽くされていました。

Determinate SystemsのCole Mickens氏が、彼らの下流ディストリビューション「Determinate Nix」で現在提供している機能について説明しました(いずれは上流に取り込まれる予定です):lazy trees(Flakeの評価を高速化する最適化)、parallel evaluation(評価時間を16秒から7秒に短縮)、そしてMac向けのネイティブLinuxビルダーです。次はFlake Schemasが控えているそうですが、まだ読んでいません。

NixとDevOpsのコンサルティング会社NumtideのYvan Sraka氏は、友人や家族のLinuxマシンをNixOSでどう管理しているかを示しました。彼はNixOSの上に独自の設定レイヤーを載せ、システム自体はベースとしてのみ使っています。実際のアプリケーションの多くはAppImageやFlatpak、envfsnix-ld経由で使っています。後ろの二つは、/usr/binなどの標準的な場所が存在することを前提とするFHSベースのプログラムを、NixOSのような非FHSシステムで動かすためのソリューションです。nix-ldは以前から知っていましたが、envfsは知りませんでした。

NixcademyのJacek Galowicz氏は、systemd-sysupdateとsystemd-repartを使ってNixOSとsystemdでA/Bスタイルのアップデートを実現する方法を示しました。この手法がどんどん主流になってきているのは素晴らしいことだと感じます。自分もgokrazyでA/Bスタイルのアップデートをうまく使っているからです。

土曜日

土曜日の天気はずっと良かったので、チューリッヒ湖が見える席を確保しました:

湖の眺め!

“The bikes have been shed: The official Nix formatter”

このトークでは、Tweag所属で今回のNixConの主要なオーガナイザーの一人でもあるSilvan Mosberger氏が、.nixファイル用の公式フォーマットツールがどのように生まれたかを解説しました。

gofmtというGoの公式フォーマッタが着想源として挙げられたのを聞いて嬉しくなりました。他の言語エコシステムと同様、統一されたフォーマットを導入することで、コーディングスタイルを巡るコードレビューでの時間のかかるやり取りがなくなります。残念ながら、フォーマットチームはgofmtの成功の鍵となる一つの側面を再現しませんでした。gofmtにはオプションがない、という点です。有名なGoの諺にあるように:

gofmtのスタイルは誰のお気に入りでもない、だがgofmtはみんなのお気に入りだ!

→ 収録を見る(20分) - media.ccc.de

“Mastering NixOS Integration Tests: Advanced Techniques for Fast and Robust Multi-VM Tests”

この2時間のワークショップでは、Nixの講師であるだけでなくNixOS統合テストドライバのメンテナでもあるNixcademyのJacek Galowicz氏が、わずか数行のNixとPythonで複雑な統合テストを書く方法を見せてくれました。

Jacek氏は統合テストの例として、トラッカー、クライアント、ファイアウォール、複数のネットワークからなるBittorrentサービスを紹介しました!nixpkgsには1000を超えるこのような統合テストが含まれており、自分のノートPCで実行するのも簡単です。

テストをデバッグする様々な方法もとてもクールでした。ポートフォワーディングの代わりにvsockを使ったり、失敗したテストをハングさせてデバッグ待ち状態にするデバッグフックを有効にしたりできます。

素晴らしい概要だったと思いますし、Jacek氏は引き込まれる教え方をする講師でした。彼のクラスを受講することをおすすめします!

“When Not to Nix: Working with External Config and SOPS Nix”

Ryota氏が、どんなときにNixを使い、どんなときに使わないべきかについて話しました。例えば、dotfiles(設定ファイル)をNixで管理することもできますし、あえてそうしないという選択もできます。最近、ますます多くのマシンや設定をNixに移行してきた自分としては、このトークには共感しました。宣言的に管理する設定と状態を持って管理する設定のそれぞれで何が得られるのか、どちらのアプローチがどんなときに優れているのかを理解することが重要だという点です。

→ 収録を見る(19分) - media.ccc.de

Lightning Talks

その日の残りはライトニングトークで過ごしました。中にはスポンサー枠のトークもありました。順不同で、こんなことを学びました:

  • Cloud Hypervisor。qemuのようなKVMベースのハイパーバイザーですが、Rustで書かれています。
  • nixbuild.net。追加のビルドキャパシティをレンタルできる従量課金サービスです。日曜日には、ある人が自分の会社でnixbuild.netを使っていてとてもスムーズだと言っているのを耳にしました。
  • NixCI。Nixベースのホスト型CIです。つまり、金曜日に聞いたcloud.devenv.shのサービスは、このサービスの競合ということになります。
  • Nix in the Wildは、Floxによる取り組みで、Nixの成功事例について45〜60分のインタビューを行っています。組織内の人々を説得するのに役立つかもしれません。
  • clanはフリート管理ソリューションです。
  • NovaCustomは一人で運営されているノートPC/PCメーカーです。ノートPCにはcorebootが搭載されており、NixOSで動作します。
  • ExpressVPNが社内のサーバー構成(TrustedServer)をDebianからNixOSに移行中です!105か国以上で毎週デプロイしています。
  • ドイツ企業のCyberusが、EUサイバーレジリエンス法の義務に準拠したNixOSのLTSリリースを提供しています。
  • David氏によるstyxプロジェクトは、NixOSアップデートのためのより帯域効率の良いダウンロード機構です。EROFSを使っており、SquashFSイメージの興味深い代替となりそうです。

すべてのトークの後、外に集まって集合写真を撮り、その後湖畔でバーベキューをしました:

NixCon 2025 集合写真

NixCon 2025 撮影: Arik Grahl。CC BY-SA 4.0でライセンスされています。

日曜日

カンファレンスの前は、日曜日(ハックデー)にわざわざ来るべきか迷っていましたが、当日になると「もちろん行くに決まってる!」という気分になり、来て大正解でした!

多くの人がまだ残ってそれぞれのプロジェクトに取り組んでいました。どんなNixの質問への答えも、チャットで一言聞けばすぐに返ってくるような感覚でした——プロジェクトの様々な分野の専門家や助けてくれる人たちがそこにいました。

これまでオンラインでのやり取りしかなかった数人ともついに会うことができ、ミートアップについてもたくさん話しました。その結果、複数のミートアップで登壇のお誘いまでいただきました :D

おわりに

素晴らしいカンファレンスでした!運営チームとすべてのコントリビューターが素晴らしい仕事をしてくれました!

いつものことですが、ラッパースヴィルのOSTはオープンソースイベントにとって最高の会場です。

チケット販売やトークの応募・スケジューリングには、オープンソースシステムであるPretixPretalxが使われており、自分がPretixにコントリビュートしてきたことを誇りに思います。

トークのセレクションも素晴らしかったです。深くテクニカルなもの、人間的な側面だけを扱うもの、そしてその中間のものまで様々でした。自分が見た発表者は皆、自分のテーマに心から情熱を持っているという印象で、全体の雰囲気もとても良かったです!

(トークの収録はmedia.ccc.de: NixCon 2025で視聴できます。)

トーク以外でも、多くのフレンドリーな交流や興味深い会話がありました。Nixへの関心と導入が広がっているのを感じられて、とても嬉しく思います!

こんなにもボランティア主導のイベントでありながら、カンファレンスの制作レベルは非常に高くありました。例えば、トークの合間に流れていたとてもクールな休憩音楽は、NixConのために特別に作られたものでした。tonstr.studioによる“Lava”です。同様に、ウェルカムバッグにはNixConのために特別に作られたダークスイスチョコレートが入っていました(下の写真参照)。自分はダークチョコレートが苦手なのですが、これは美味しかったです!

改めて、すべてのヘルパーの皆さんに感謝します。またすぐに戻ってこられることを楽しみにしています!

NixCon 2025 スイスチョコレート

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント