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
96
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
380
バイナリ読むのにElixirしてみた
eiel
0
59
アジャイルはさておきMake People Awesomeしたい
eiel
0
160
レビューは最優先にするようにしている
eiel
0
290
再考 Fourkeys メトリクス
eiel
2
660
Test mockをSnapshot testする
eiel
0
120
関数プログラミングの考え方
eiel
1
310
逆コンウェイ作戦はフィードバックループを作るために 逆向きの流れをつくること (5分版)
eiel
0
410
組織のパフォーマンスを高めるために 第1話 学習と文化
eiel
0
240
Other Decks in Technology
See All in Technology
Kiroと学ぶコンテキストエンジニアリング
oikon48
6
9.8k
Autonomous Database - Dedicated 技術詳細 / adb-d_technical_detail_jp
oracle4engineer
PRO
4
10k
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
8.7k
roppongirb_20250911
igaiga
0
190
20250903_1つのAWSアカウントに複数システムがある環境におけるアクセス制御をABACで実現.pdf
yhana
3
530
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
490
AWSを利用する上で知っておきたい名前解決のはなし(10分版)
nagisa53
9
2.9k
2025年夏 コーディングエージェントを統べる者
nwiizo
0
130
S3アクセス制御の設計ポイント
tommy0124
2
180
La gouvernance territoriale des données grâce à la plateforme Terreze
bluehats
0
150
これでもう迷わない!Jetpack Composeの書き方実践ガイド
zozotech
PRO
0
260
Rustから学ぶ 非同期処理の仕組み
skanehira
1
130
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Making Projects Easy
brettharned
117
6.4k
Six Lessons from altMBA
skipperchong
28
4k
Bash Introduction
62gerente
615
210k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
187
55k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Designing for Performance
lara
610
69k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.8k
The Art of Programming - Codeland 2020
erikaheidi
55
13k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
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力が必要