Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
devenvに入門した
Search
Tomohiko Himura
September 13, 2023
Technology
0
100
devenvに入門した
devenvというnixをベースした開発環境と本番用のコンテナイメージを作れるツールを紹介しました。
https://devenv.sh/
Tomohiko Himura
September 13, 2023
Tweet
Share
More Decks by Tomohiko Himura
See All by Tomohiko Himura
Marpでmermaidは簡単だときいたけど
eiel
0
740
バイナリ読むのにElixirしてみた
eiel
0
63
アジャイルはさておきMake People Awesomeしたい
eiel
0
170
レビューは最優先にするようにしている
eiel
0
290
再考 Fourkeys メトリクス
eiel
2
670
Test mockをSnapshot testする
eiel
0
120
関数プログラミングの考え方
eiel
1
320
逆コンウェイ作戦はフィードバックループを作るために 逆向きの流れをつくること (5分版)
eiel
0
420
組織のパフォーマンスを高めるために 第1話 学習と文化
eiel
0
240
Other Decks in Technology
See All in Technology
From Natural Language to K8s Operations: The MCP Architecture and Practice of kubectl-ai
appleboy
0
200
SOTA競争から人間を超える画像認識へ
shinya7y
0
170
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
44k
ローカルLLMとLINE Botの組み合わせ その2(EVO-X2でgpt-oss-120bを利用) / LINE DC Generative AI Meetup #7
you
PRO
1
160
IoTLT@ストラタシスジャパン_20251021
norioikedo
0
130
入院医療費算定業務をAIで支援する:包括医療費支払い制度とDPCコーディング (公開版)
hagino3000
0
110
個人でデジタル庁の デザインシステムをVue.jsで 作っている話
nishiharatsubasa
3
5k
まだ間に合う! 2025年のhono/ssg事情
watany
3
660
Kubernetes self-healing of your workload
hwchiu
0
510
OTEPsで知るOpenTelemetryの未来 / Observability Conference Tokyo 2025
arthur1
0
200
アウトプットから始めるOSSコントリビューション 〜eslint-plugin-vueの場合〜 #vuefes
bengo4com
3
1.8k
AWS UG Grantでグローバル20名に選出されてre:Inventに行く話と、マルチクラウドセキュリティの教科書を執筆した話 / The Story of Being Selected for the AWS UG Grant to Attending re:Invent, and Writing a Multi-Cloud Security Textbook
yuj1osm
1
130
Featured
See All Featured
How GitHub (no longer) Works
holman
315
140k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Docker and Python
trallard
46
3.6k
KATA
mclloyd
PRO
32
15k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Transcript
devenvに入門した 2023/08/17 ひむら ともひこ
自己紹介 ひむら ともひこ 最近趣味で遊んでるもの • Nix • GNU Emacs
devenvに入門した
None
こういうことありませんか?
リポジトリをクローンしてきたけど ビルドや実行するまでに いろいろインストールしなきゃいけない
開発するのに VagrantやDockerなど起動しないといけない
つらい
そこでdevenvですよ
devenvとは何か
devenv知ってる人 1人
devenv使ってる人 0人
開発環境構築ツール デプロイ用コンテナイメージ作成ツール
https://devenv.sh/
devenvが導入されてる環境で使ってみる
devenvの設定ファイルがあるプロジェクトで $ devenv up # 開発サーバーやデータベースサーバーなどが起動する $ devenv shell #
開発するのに必要なコマンドがそろった環境に入る
実例
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"; }
devenv.yaml inputs: nixpkgs: url: github:NixOS/nixpkgs/nixpkgs-unstable
設定ファイル • devenv.nix ◦ nix言語を用いて設定やインストールするパッケージのカスタマ イズができる • devenv.yaml ◦ パッケージマネージャ自体の設定をする
◦ 外部のdevenvの設定を読み込みする
devenvのinstall方法
ここでは説明したくない
nixがインストールされていれば $ nix-env -if https://install.devenv.sh/latest
もうちょっと詳しく
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
正確にはシンボリックリンクでnixで包括的に管理される $ ls -l .devenv/profile .devenv/profile -> /nix/store/qsvm027f4kv1qzldzm40bzrjpzgfmdi0-devenv-profile
devenv upで起動するのはprocess-manager • 有名なものでいうとforeman(ruby) • デフォルトで使われるのはhoncho(python) ◦ 出力に色もつかない • 他に選択できるもの
◦ hivemind(go) ▪ 環境によってはうまくうごかないことがある(おそらくdevenvで使ってる人が少ない) ◦ overmind(go + tmux) ▪ tmuxを使えるならいろいろ便利 ◦ process-compose(go) ◦ ▪ TUI付きでリッチ
いくつか備え付けの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
editorとの連携は…つらいかもしれない • おそらくdirenv を連携してなんとかすることになる • .envrc に以下を書いとけばきっと… source_url "https://raw.githubusercontent.com/cachix/devenv/d1f7b48e35e6d ee421cfd0f51481d17f77586997/direnvrc"
"sha256-YBzqskFZxmNb3kYVoKD9ZixoPXJh1C9ZvTLGFRkauZ0=" use devenv
まとめ
devenvまとめ • 仮想化技術を使わずとも ◦ VagrantやDockerをつかった開発環境に近いものを作れる ▪ 同じくらいcleanに使える (ただしnixが必要) ◦ ansibleやdockerfile不要
(近いものをnixが内蔵) • 設定されているリポジトリならお手軽に使える ◦ 使うには nix が必要 ◦ 設定するには nix力が必要