Slide 1

Slide 1 text

devenvに入門した 2023/08/17 ひむら ともひこ

Slide 2

Slide 2 text

自己紹介 ひむら ともひこ 最近趣味で遊んでるもの ● Nix ● GNU Emacs

Slide 3

Slide 3 text

devenvに入門した

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

こういうことありませんか?

Slide 6

Slide 6 text

リポジトリをクローンしてきたけど ビルドや実行するまでに いろいろインストールしなきゃいけない

Slide 7

Slide 7 text

開発するのに VagrantやDockerなど起動しないといけない

Slide 8

Slide 8 text

つらい

Slide 9

Slide 9 text

そこでdevenvですよ

Slide 10

Slide 10 text

devenvとは何か

Slide 11

Slide 11 text

devenv知ってる人 1人

Slide 12

Slide 12 text

devenv使ってる人 0人

Slide 13

Slide 13 text

開発環境構築ツール デプロイ用コンテナイメージ作成ツール

Slide 14

Slide 14 text

https://devenv.sh/

Slide 15

Slide 15 text

devenvが導入されてる環境で使ってみる

Slide 16

Slide 16 text

devenvの設定ファイルがあるプロジェクトで $ devenv up # 開発サーバーやデータベースサーバーなどが起動する $ devenv shell # 開発するのに必要なコマンドがそろった環境に入る

Slide 17

Slide 17 text

実例

Slide 18

Slide 18 text

devenv.nix { pkgs, ... }: { env.GREET = "devenv"; packages = [ pkgs.git ]; scripts.hello.exec = "echo hello from $GREET"; enterShell = '' hello git --version ''; languages.javascript.enable = true; languages.javascript.package = pkgs.nodejs_20; processes.watch.exec = "npm run watch:build"; processes.test.exec = "npm run test --watch"; processes.storybook.exec = "npm run storybook"; }

Slide 19

Slide 19 text

devenv.yaml inputs: nixpkgs: url: github:NixOS/nixpkgs/nixpkgs-unstable

Slide 20

Slide 20 text

設定ファイル ● devenv.nix ○ nix言語を用いて設定やインストールするパッケージのカスタマ イズができる ● devenv.yaml ○ パッケージマネージャ自体の設定をする ○ 外部のdevenvの設定を読み込みする

Slide 21

Slide 21 text

devenvのinstall方法

Slide 22

Slide 22 text

ここでは説明したくない

Slide 23

Slide 23 text

nixがインストールされていれば $ nix-env -if https://install.devenv.sh/latest

Slide 24

Slide 24 text

もうちょっと詳しく

Slide 25

Slide 25 text

devenvの環境はシステムとは別途隔離されている ● プロジェクトルートの .devenv/profileに環境が作られる $ find .devenv/profile/ | head -n 20 .devenv/profile/ .devenv/profile//bin .devenv/profile//bin/git-jump .devenv/profile//bin/git-receive-pack .devenv/profile//bin/git-credential-netrc .devenv/profile//bin/git-upload-archive .devenv/profile//bin/.honcho-wrapped .devenv/profile//bin/honcho .devenv/profile//bin/git-credential-osxkeychain .devenv/profile//bin/git-cvsserver .devenv/profile//bin/hello .devenv/profile//bin/git-shell .devenv/profile//bin/node .devenv/profile//bin/corepack .devenv/profile//bin/git-upload-pack .devenv/profile//bin/scalar .devenv/profile//bin/npx .devenv/profile//bin/git-http-backend .devenv/profile//bin/npm .devenv/profile//bin/git

Slide 26

Slide 26 text

正確にはシンボリックリンクでnixで包括的に管理される $ ls -l .devenv/profile .devenv/profile -> /nix/store/qsvm027f4kv1qzldzm40bzrjpzgfmdi0-devenv-profile

Slide 27

Slide 27 text

devenv upで起動するのはprocess-manager ● 有名なものでいうとforeman(ruby) ● デフォルトで使われるのはhoncho(python) ○ 出力に色もつかない ● 他に選択できるもの ○ hivemind(go) ■ 環境によってはうまくうごかないことがある(おそらくdevenvで使ってる人が少ない) ○ overmind(go + tmux) ■ tmuxを使えるならいろいろ便利 ○ process-compose(go) ○ ■ TUI付きでリッチ

Slide 28

Slide 28 text

いくつか備え付けのpre-commit hookがあるよ ● https://github.com/cachix/pre-commit-hooks.nix ● PHP ○ php-cs-fixer, phpcbf, phpcs ● JavaScript/TypeScript ○ deno fmt, deno lint, eslint, rome ● Golang ○ go fmt, go test, govet, revive, staticcheck ● Rust ○ rustfmt, clippy, cargo check

Slide 29

Slide 29 text

editorとの連携は…つらいかもしれない ● おそらくdirenv を連携してなんとかすることになる ● .envrc に以下を書いとけばきっと… source_url "https://raw.githubusercontent.com/cachix/devenv/d1f7b48e35e6d ee421cfd0f51481d17f77586997/direnvrc" "sha256-YBzqskFZxmNb3kYVoKD9ZixoPXJh1C9ZvTLGFRkauZ0=" use devenv

Slide 30

Slide 30 text

まとめ

Slide 31

Slide 31 text

devenvまとめ ● 仮想化技術を使わずとも ○ VagrantやDockerをつかった開発環境に近いものを作れる ■ 同じくらいcleanに使える (ただしnixが必要) ○ ansibleやdockerfile不要 (近いものをnixが内蔵) ● 設定されているリポジトリならお手軽に使える ○ 使うには nix が必要 ○ 設定するには nix力が必要