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をもつイテレータや,それを生成するジェネレータという概念はなじまない.

続きを読む