この記事は Nix アドベントカレンダー 2024 の1日の記事である。
2024 年を一言で表すと「 Nix 元年」と言えるだろう。 流行語大賞に選出されたことからもわかるように、Nix は今年世界的に大きく注目されたのだ。
10月末に主催した Nix meetup #1 では、 60 人近くの参加者にアンケートを取ったところ、なんと 8 割近くの方が Nix を使い始めて 1 年未満との回答があった。 さらに私が普段活動しているエディタコミュニティ vim-jp においても Nix に関する話題を扱うチャンネル #tech-nix が開設 1 年目にして単一の話題を扱うチャンネルとして最大の流速を誇っている。 まさに Nix 元年にふさわしいと言えるだろう。
Linux Desktop 元年や VR 元年のように毎年元年がやってこないことを願いつつ、 nixpkgs のメンテナーとして、そして日本の一ユーザーとして 2024 年に行ってきたことを振り返ろうと思う。
NixOS/nixpkgs での活動
私は昨年の 8 月より NixOS/nixpkgs のコミッターとして活動しており、 今年は 11 月までの期間にマージコミットも含めおよそ 2,200 のコミットを行った。
メンテナー及びコミッターとしての役割は多岐にわたるが、私は活動初期より Python のパッケージングを中心として整備を行ってきた。 日々の些細なしかし膨大な量のアップデートに加え、例えば pydantic (v1 -> v2) や numpy (v1 -> v2) などのコアパッケージのメジャーアップデートを主導したり、 Python インタープリターのアップデート、 Python 3.13 の FreeThreading 対応などを行った。 被依存の多いパッケージのメジャーアップデートを行う際には、 Python パッケージ全体、約 20,000 パッケージをビルドしながら、必要に応じてアップデートやパッチの適用、提出、さらには issue の報告などを繰り返しながらリグレッションを潰していく。 もし解決できない問題が見つかれば、それが許容できるものかどうか判断し、続行あるいは延期を決定するという一連の骨の折れる作業をこなしていく。 他にも Python ライブラリのビルダーの改善にも取り組んでおり、完了すればビルド負荷の軽減が期待される。 こうした貢献を通して、今年の夏頃より nixpkgs の Python メンテナーチームに加わることになった。
他にも nixpkgs 本体以外でもいくつかの活動を行ってきた。 例えば Rust で書かれたパッケージをビルドするためには Cargo.lock によって依存ライブラリが指定される必要があるが、 Rust 側は以前、ライブラリであれば Cargo.lock はレポジトリに含める必要はないという勧告を行っていた。 そのため、今でも Cargo.lock をコミットしていないプロジェクトが多く、その場合、パッケージのメンテナが手動でロックファイルを生成し nixpkgs にバンドルするという手法が取られている。 こうした状況は特に Python のライブラリに顕著であり、結果として自動更新の妨げとなっている。 そこでコミュニティで広く使われているツールである、 nix-update に Cargo.lock を生成する機能を追加した。もちろん Python ライブラリでない一般的な Rust 製のソフトウェアに対しても機能する。 概ね良好に動作していると思うが、もし使ってみてなにか不具合があれば私にメンションをつけて報告してほしい。
また、 RFC の shepherd team として nixpkgs の仕様の策定にも関与した。 ソフトウェアのカテゴリ分類に関するもので、提案は承認され現在は実装フェーズに移っていく段階となっている。
上記のような活動を通して初めて GitHub Sponsors を受けることができた。 特にスポンサーになっても特典はないが、寄付していただける方がいればサーバー代や電気代の足しにしようと思う。 もちろん個人に対する寄付でなく、 open collective を通じて NixOS Foundation に寄付するのも良い選択だろう。
日本のコミュニティでの活動
今年は日本における Nix の知名度が大きく向上したと感じている。 2 月時点で既に世界的に Nix の波が訪れていると記述していたが、季節を経るごとにその勢いはより増していったように思う。
私は日本の Nix コミュニティである Discord の Nix 日本語コミュニティ に約 2 年前から参加していたが、ちょうど 1 年前にテキストエディタのコミュニティ vim-jp に参加したことをきっかけにこのコミュニティ内で Nix を主テーマとするチャンネル #tech-nix を立ち上げることとなった。
vim-jp は規模が大きく、活発なコミュニケーションが行われる技術コミュニティであり、本来の主旨である Vim 以外に対しても「日本語で〇〇の話がしたいなら vim-jp の Slack が一番活発です。」と言われるほど多様な話題が提供されている。 そんななか、わずか十数人から始まった #tech-nix は、さまざまなチャンネルでのポジショントークを通じて、今では300人弱が参加し、日々 Nix に関する話題が提供され、さらには多くのミームが生まれることとなった。
ここでの活動により、改めて Nix のとっつきにくさや学習曲線の高さを痛感し、近くに気軽に聞ける存在がいなければ挫折してしまいやすいことを再度認識することとなった。 そういう私も過去何度も経験したものだ。 しかし、こうした課題が明らかになるなかでコミュニティが成長し、次々と情報を共有し、相互扶助の雰囲気が生まれたことに嬉しく思ったし、同時に羨ましくも思っている。
そして 10 月末には日本ではおよそ 6 年振りとなるミートアップ、 Nix meetup #1 を開催した。 正直どれだけ人が集まるのか不安であったが、結果的に 60 人近くの方に参加していただき、無事成功を収めることができた。 この振り返りについては後日公開予定の記事で詳細に述べようと思うが、次回の開催も考えているため楽しみにしていてほしい。
来年の抱負
コミュニティ活動としてはよりオープンなコミュニティの形成を目標とする。 今年は日本の Nix コミュニティを大きくできたと自負する一方で、普段の活動のほとんどを閉じた場所で行ってしまったことが反省点としてあげられる。 その結果、例えばこのアドベントカレンダーも広く知られているとは言い難く、前述した Nix meetup も Nix に興味のあるすべての人にリーチできていないのが現状である。 来年はもっとオープンな形で情報を共有していきたいし、そのような場を提供していきたい。
nixpkgs のメンテナーとしては自動化によるレビュー負荷の軽減と Python パッケージングのスケーリングを目標としたい。 私は現在 Python 関連のコードに対してコードオーナーになっているが、当初の試算を遥かに上回るレビューリクエストが寄せられ、かなり疲弊してしまった。 このままでは作業に支障がでてしまうため、 nixpkgs の保守ツールである nixpkgs-review、 nix-update、 nix-init の改善に投資していきたいと考えている。 また、Python のパッケージングにはまだまだ多くの課題があり、 1 年ほどペンディングしている作業も多いため、時間をとって着実に進めていく必要がある。 Python 3.13 の JIT 対応のビルドに成功していないことを思い出したため、その時間も確保しなければならない。