blog.ryota-ka.me

Nix flake から private なリソースにアクセスする

Keywords:

HERP では,開発体験の向上のため,順次 flakes の導入を進めている.「次世代の Nix」とでも呼ぶに相応しい flakes は,未だ実験的な機能と位置付けられているものの,従来の Nix では保証し切れなかったより高いビルドの再現性や,統一的なインタフェースの規定,刷新されたコマンド体系など,様々な改良が盛り込まれている.

再現性への追求に対する代償として,flakes は純粋性に関して従来よりも厳しい制約を設けている.特に netrcImpureEnvVars が利用できないため,private なリソースにアクセスしたい場合に前回の記事で紹介した方法が利用できない.そこで本稿では,flake から private なリソースにアクセスする方法を紹介する.

続きを読む

HERP における Nix 活用

Keywords:

HERP における開発では Nix が広く活用されている.Nix は非常に便利な代物なのだが,ドキュメントの貧弱さ,急峻な学習曲線,企業における採用事例の乏しさなどが相まって,広く普及しているとは言い難く,ましてや国内企業での採用事例を耳にする機会はほとんどない.しかし,Nix の利便性は,複数人での開発においてこそ,その本領が発揮されると考えている.この記事は,HERP における活用事例の紹介を通じて,Nix の利便性ならびに企業での活用可能性について紹介することを目的としている.

続きを読む

Nix でのビルド時に private なリソースにアクセスする

Keywords:

HERP では多くの成果物が Nix を用いてビルドされている.例として,アプリケーションの Docker image,npm ライブラリの tarball,Helm chart を元にした Kubernetes の manifest ファイルなどが挙げられる.

"purely functional package manager" である Nix を利用すると高い再現性を持ったビルドを実現できるが,purely functional であるがゆえに,private なリソースに依存したビルドには一工夫が必要になる.private なリソースにアクセスするためには概して何らかの credential が必要になるからだ.そのような credential はビルド手順*1に残したくないし,仮に残したとしても,一定時間で expire したりするのでいずれにしても再現性が得られない.

もちろん,ビルド時に private なリソースを利用できないのでは営利企業内で利用するのは難しい.そこで,部分的に再現性を諦めるための抜け道が用意されている.本稿では fetchurl 関数の netrcPhasenetrcImpureEnvVars オプションを利用する方法を紹介する.

なお,本稿で単に fetchurl と書いた場合には,builtins.fetchurl ではなく NixOS/nixpkgs リポジトリに定義されている fetchurl 関数を指すものとする.

続きを読む

dotfiles を Nix + Home Manager に移行した

「ゴミの収集が止まる年末に大掃除をするのは非合理だ」という言説を見かけた.「一理ある」と感じたので,特に家の大掃除などはしないことに決め,代わりに dotfiles の大掃除をすることにした.プロたるもの,日頃から*1自らの仕事環境に対する投資を惜しんではならない.

筆者は Nix ユーザであるため,この年末年始の休暇を用いて Home Manager を導入したいと考えており,実際に移行を行った.

この記事では,Home Manager の利点や導入手順,実際の導入にあたって取った選択や tips を紹介する.

なお,筆者が用いているのは Intel および ARM プロセッサの macOS Monterey で,Zsh, Neovim, tmux などの上で生活している.もちろん Nix は GNU Linux にも対応しているので,仮に今後 Linux マシンをセットアップする機会があっても,滞りなく開発環境を構築できることが期待される.

続きを読む

Nix Expression Language で遅延リストを作ってみる

この記事は CAMPHOR- Advent Calendar 2018 15日目の記事です.14日目の記事は @Rtm6Lgoとある研究室の運営のエモいお話 でした.

Nix Expression Language を用いて遅延リストを作る.普段は「ジェネレータを作ったり、遅延評価してみる」だが,Nix Expression Language は基本的に純粋なので,mutable な state をもつイテレータや,それを生成するジェネレータという概念はなじまない.

続きを読む