405 Views
October 19, 25
スライド概要
[Nix meetup #4](https://nix-ja.connpass.com/event/369476/)の登壇資料
commit hash: https://github.com/Omochice/nix-slides/commit/ca01fa6b3ea26540ea70b3711b942e7f0697ba3c
チームで nix を使うために考えて いること(仮) 2025-10-18 Nix meetup #4 Omochice
チームで nix を使うために考えていること(仮) Who are you? { Omochice = { hobby = [ "Vim" "Renovate" "GitLab CI" "GitHub Actions" "Build optimization" ]; role = [ "frontend" "backend" "mobile" ]; }; } 1/8
Nix をおしごとで使いたい! (実際どれぐらい使えてますか?)
Nix をおしごとで使いたい! • 環境の羃等性 • numtide/treefmt-nix がべんり
採用事例あるん?
チームで nix を使うために考えていること(仮) 採用事例の話をしよう • GitLab CI Component ‣ Renovate をいいかんじに 動かすやつ . ├── .envrc ├── CHANGELOG.md ├── CONTRIBUTING.md ├── flake.lock ├── flake.nix ├── README.md ├── renovate.json5 └── templates ├── auto-merge │ ├── Dockerfile │ ├── go.mod │ ├── go.sum │ ├── main.go │ └── template.yml ├── renovate.yml └── validate-config.yml 2/8
チームで nix を使うために考えていること(仮)
flake.nix
{
default = gitlab ++ renovate;
outputs =
{ self, nixpkgs, treefmt-nix, flake-utils, nur, }:
flake-utils.lib.eachDefaultSystem (
system:
let
# 略
treefmt = treefmt-nix.lib.evalModule pkgs (
# 略
);
devPackages = rec {
# keep-sorted start block=yes
gitlab = [
pkgs.gitlab-ci-ls
pkgs.gitlab-ci-verify
pkgs.glab
];
renovate = [
pkgs.renovate
];
# keep-sorted end
};
in
{
# keep-sorted start block=yes
# 略
checks = { formatting =
treefmt.config.build.check self; };
devShells =
devPackages
|> pkgs.lib.attrsets.mapAttrs (name:
buildInputs: pkgs.mkShell { inherit buildInputs; });
formatter = treefmt.config.build.wrapper;
# keep-sorted end
}
);
}
3/8
満を持して導入するぞ
• 関数型言語むずかしいよ
• 関数型言語むずかしいよ • ツールのバージョンがわからない
• 関数型言語むずかしいよ • ツールのバージョンがわからない • devcontainer があるリポジトリでどう する
🙃
チームで nix を使うために考えていること(仮) 本音 • 関数型言語むずかしいよ ‣ 頑張って覚えてほしい • ツールのバージョンがわからない ‣ https://search.nixos.org/packages を見てほしい • devcontainer があるリポジトリでどうする ‣ Vim から使うのが大変なのでやめたい 4/8
そう言うと進まないので
devbox を使ってみる Devbox is a command-line tool that lets you easily create isolated shells for development. You start by defining the list of packages required for your project, and Devbox creates an isolated, reproducible environment with those packages installed. — https://www.jetify.com/docs/devbox
devbox を使ってみる Devbox creates isolated, reproducible development environments that run anywhere. No Docker containers or Nix lang required — https://www.jetify.com/devbox
🤔 No Docker containers or Nix lang required — https://www.jetify.com/devbox
🤔 それを すてるなんて とんでもない!
🤔 それを すてるなんて とんでもない! とはいえいきなり nix 言語読めってなったらつらいのかも
json の功罪
{
• 知名度、普及率は高い
‣ おおよその人が読めて、だいたいの
人が書ける(要出典)
– コメント、ケツカンマ etc
‣ 特段の設定なしに renovate が更新
できる
• コマンド経由で書き換えるならいいが
手で書くものではない
"$schema": "https://raw.githubusercontent.
com/jetify-com/devbox/0.16.0/.schema/devbox.
schema.json",
"packages": ["[email protected]"],
"shell": {
"init_hook": [
"echo 'Welcome to devbox!' > /dev/null"
],
"scripts": {
"test": [
"echo \"Error: no test specified\" &&
exit 1"
]
}
}
}
• 関数型言語むずかしいよ • ツールのバージョンがわからない • devcontainer があるリポジトリでどうする
devcontainer があるリポジトリ でどうする ただの devcontainer なら base image を nixos/nix にしてしまってもいいかも Docker out of Docker をしてると面倒だった
チームで nix を使うために考えていること(仮) DooD https://github.com/Omochice/devbox-devcontainer-dood . ├── .git ├── .devcontainer │ ├── devcontainer.json │ └── Dockerfile ├── devbox.json └── devbox.lock 5/8
チームで nix を使うために考えていること(仮) Dockerfile(devbox 入れるまで) FROM debian:12.12 RUN apt-get update -y \ && apt-get install -y --no-install-recommends \ ca-certificates \ curl \ sudo \ && rm -rf /var/lib/apt/lists/* ARG DEVBOX_VERSION=0.16.0 RUN ARCH=$(uname -m | sed "s/aarch64/arm64/" | sed "s/x86_64/amd64/") \ && curl -fsSL -o /devbox.tar.gz https://github.com/jetify-com/devbox/releases/download/ ${DEVBOX_VERSION}/devbox_${DEVBOX_VERSION}_linux_${ARCH}.tar.gz \ && tar xf /devbox.tar.gz \ && chmod +x /devbox \ && mv /devbox /usr/local/bin/ \ && rm /devbox.tar.gz \ && yes | devbox cache info 6/8
チームで nix を使うために考えていること(仮) Dockerfile(起動 shell 関連) ARG USERNAME=vscode ARG USER_UID=1000 ARG USER_GID=$USER_UID RUN groupadd --gid $USER_GID $USERNAME \ && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \ && echo $USERNAME ALL=\(root\) NOPASSWD:ALL >/etc/sudoers.d/${USERNAME} \ && chmod 0440 /etc/sudoers.d/$USERNAME \ && chown -R $USERNAME /nix USER $USERNAME WORKDIR /tmp/devbox RUN mkdir -p /tmp/devbox && chown ${USERNAME}:${USERNAME} /tmp/devbox COPY --chown=${USERNAME}:${USERNAME} devbox.json devbox.json COPY --chown=${USERNAME}:${USERNAME} devbox.lock devbox.lock RUN devbox shellenv >>/home/${USERNAME}/.bashrc 7/8
チームで nix を使うために考えていること(仮) Help wanted • debian 系でないと動かない ‣ “This Feature should work on recent versions of Debian/ Ubuntu-based distributions with the apt package manager installed.” • 公式の curl -fsSL https://get.jetify.com/devbox | bash だと 上手くいかない ‣ -s -- --force とかでいけそうな気はするが • devcontainer の postStartCommand で devbox shell すると vscode の統合 terminal がこわれる 8/8
👈👷🐈
👈👷🐈 間に合わなかった
• Nix をおしごとで使いたいので採用事例を増やし たいよ • devbox なら初見でもやれそうな見た目をしてる ので導入しやすいかも ‣ あわよくば沼に引き摺り込みましょう • devcontainer わからん