NixCon 2025 Trip Report 🐝

Michael Stapelberg

NixCon 2025 参加レポート 🐝

今年の初めに開催されたNixOSミートアップがとても気に入ったのですが、その最後に今年のNixCon 2025がスイスで開催されると告知がありました。場所はなんとまったく同じ、ラッパースヴィルにあるUniversity Of Applied Sciences OSTとのことだったので、行くことに決めました!この参加レポートでは、素晴らしいカンファレンスを私がどう体験したのか、その雰囲気をざっくりとお伝えしたいと思います :)

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

金曜日

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

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

軽く何か食べてから、オープニングセッションのためメインの講堂へ向かいました。Prof. Dr. 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氏による「What if GitHub Actions were local-first and built using Nix?」でした。トークでは、devenvを使ったNixベースのCIソリューションであるcloud.devenv.shが紹介されました(GitHub Actionsのようなものです)。

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

ソリューション自体は良さそうでしたが、発表者がスライドをあちこち行き来していたため、少し散漫な印象を受けました。肝心な疑問が一つ未回答のままでした。どうやってこのカスタムソリューションをGitHubプロジェクトに統合するのか、という点です。私のプロジェクトに関して言えば、GitHub Actionsの標準的な設定方法から外れるメリットはあまり感じられませんでした。もちろん人によりますが。

→ 録画を観る(46分) media.ccc.de

“Rewriting the Hydra Queue Runner in Rust”

次は、ドイツの小さなソフトウェア会社Helsinki SystemsのSimon Hauser氏による「Rewriting the Hydra Queue Runner in Rust」です。HydraはNixOSインフラでビルドをスケジュールするコンポーネントです。nixpkgsに変更があると、このコンポーネントがビルドを実行し、その成果物がcache.nixos.orgに置かれます(Debianでいうbuilddに相当します)。

Simon氏は、現在のキューランナーのボトルネックによってインフラが遊休状態になっていると説明しました。使えるマシンがあるのに十分に活用できていないのです。そこで、古びたSSHベースの自動化を、よく設計されたgRPCプロトコルに置き換えた経緯が紹介されました。設計には複数の人が関わり、レビューを重ねた印象を受け、健全なプロジェクトの良い兆候だと感じました。

残念ながら、このトークで欠けていたのはメトリクスでした。書き換え後のキューランナーがどれだけ改善したのか、グラフで見られると良かったと思います。

現在、新しいキューランナーはNix Communityのビルドではすでに使われていますが、NixOS本体ではまだ本番導入されていません。ただ、近々導入されることを期待しています!

→ 録画を観る(27分) media.ccc.de

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

このトークは、Nixベースの開発環境ソリューションを提供するFloxのZach Mitchell氏によるものでした。これまで私はnix-shellnix developを使ってきたので(Development shells with Nix: four quick examplesをご覧ください)、このトークで何が学べるか楽しみにしていました。

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

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

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氏が、どのようにNixを(再び!)導入したかを共有してくれました。こうした企業での実際の導入事例はとても興味深いと思います。

まとめると、Shopifyには2016年からdevコマンドがあり、宣言的な設定を提供しつつ、裏側ではapt(Linux)やhomebrew(macOS)に処理を振り分けていました。Nixへの移行の最初の試みでは、安定して使える状態に至らず(一部の人はまだ使えませんでした)、その後会社全体でクラウド開発へ移行する流れになり、「とりあえずubuntuを使えばいい」という手軽な解決策が選ばれました。

数年経つと、クラウド開発環境にあまり満足していないという声が出てきたそうです。そんなある日、ShopifyのCEOであるTobias Lütke氏がdevenvを見つけます。これはNixベースのソリューションで、Shopifyのdevと驚くほど似ていました。そこで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

ライトニングトーク

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

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を通じて使っています。後ろの二つは、FHSベースのプログラム(/usr/binなどの標準的なパスが存在することを前提とするもの)を、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ファイル用の公式フォーマッタがどのように生まれたかを説明してくれました。

インスピレーション源として、Goの公式フォーマッタであるgofmtが挙げられていたのを聞いて嬉しくなりました。他の言語エコシステムと同様に、統一されたフォーマットを導入すれば、コーディングスタイルをめぐるコードレビューでの時間のかかるやり取りがなくなります。残念ながら、フォーマットチームは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

ライトニングトーク

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

  • 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メーカーです。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 スイスチョコレート

原文は Michael Stapelberg により に公開されました。

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