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
開発環境を Immutable infrastructure にした話
Search
NAVITIME JAPAN
PRO
June 20, 2017
Programming
0
310
開発環境を Immutable infrastructure にした話
開発環境を Immutable infrastructure にした話
NAVITIME JAPAN
PRO
June 20, 2017
Tweet
Share
More Decks by NAVITIME JAPAN
See All by NAVITIME JAPAN
つよつよリーダーが 抜けたらどうする? 〜ナビタイムのAgile⽀援組織の変遷〜
navitimejapan
PRO
23
15k
実践ジオフェンス 効率的に開発するために
navitimejapan
PRO
3
640
安全で使いやすいCarPlayアプリの 魅せ方:HIGと実例から学ぶ
navitimejapan
PRO
1
210
見えないユーザの声はログに埋もれている! ~ログから具体的なユーザの体験を数値化した事例紹介~
navitimejapan
PRO
6
2.8k
ユーザーのためなら 『デザイン』 以外にも手を伸ばせる
navitimejapan
PRO
2
1.5k
フツーのIT女子が、 Engineering Managerになるまで
navitimejapan
PRO
3
340
不確実性に打ち勝つOKR戦略/How to manage uncertainty with OKR strategy
navitimejapan
PRO
4
3.5k
アジャイルを小さいままで 組織に広める 二周目 / Agile Transformation in NAVITIME JAPAN iteration 2
navitimejapan
PRO
4
1.3k
変更障害率0%よりも「継続的な学習と実験」を価値とする 〜障害を「起こってはならないもの」としていた組織がDirtの実施に至るまで〜 / DevOps Transformation in NAVITIME JAPAN
navitimejapan
PRO
7
5.5k
Other Decks in Programming
See All in Programming
エンジニア向け採用ピッチ資料
inusan
0
160
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
260
[初登壇@jAZUG]アプリ開発者が気になるGoogleCloud/Azure+wasm/wasi
asaringo
0
130
Elixir で IoT 開発、 Nerves なら簡単にできる!?
pojiro
1
150
アンドパッドの Go 勉強会「 gopher 会」とその内容の紹介
andpad
0
270
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
160
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
250
XSLTで作るBrainfuck処理系
makki_d
0
210
GraphRAGの仕組みまるわかり
tosuri13
8
490
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
260
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
230
C++20 射影変換
faithandbrave
0
540
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
220
Building Adaptive Systems
keathley
43
2.6k
Speed Design
sergeychernyshev
32
1k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
A better future with KSS
kneath
239
17k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Site-Speed That Sticks
csswizardry
10
660
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Agile that works and the tools we love
rasmusluckow
329
21k
Transcript
株式会社ナビタイムジャパン 経路探索エンジン開発グループ 開発環境を Immutable Infrastructure にした話 1
アジェンダ C++ の開発環境構築と その上での課題と改善方法について 2
C++ 開発環境の構築 3
抱える問題 C++ にはパッケージ管理システムがない Java でいうところの これがない世界を想像できますか? 4
課題になること C++ ライブラリのインストール 1. インストール手順をドキュメントにまとめる 2. それを見ながら各自でコンパイル 3. 問題にぶつかる 4.
作業が続行できない 非効率ですよね 5
解決したいこと Maven のような仕組みがほしい Linux にはそれに近いものがある CentOS: yum Ubuntu: apt 6
しかし yum, apt だけでは不十分 yum, apt で提供されていないライブラリもあるため 7
さらに問題になること CI 環境の構築も煩雑 CI 環境の管理者にインストール依頼を出すのが煩雑 8
では、どうする? 9
そうだ Docker 使おう! 10
開発環境をコンテナ化 Dockerfile でライブラリのインストール これが手順のコード化につながる CI 環境には Docker さえ入っていれば大丈夫 11
うまく行ってそう、なのだが…… 12
Docker の不便なところ 開発環境がコンテナ上にできていると 開発環境が CUI プログラムのデバッグがしづらい GUI/IDE をコンテナで用意するのは大変 開発時はホストマシン上に環境を構築したい 13
まとめると ローカル開発環境 ホストマシン上に構築したい CI 環境 コンテナ上に構築したい 両環境が同じ手順で構築できれば…… 14
そこで Ansible がありますね 15
ホスト上の環境構築 Ansible を使う コンテナの構築 Ansible Container を使う 16
Ansible Container? 17
Ansible Container Ansible の純正ツール コンテナの構築手順を Playbook で管理できる 2016 年に誕生したばかり github.com/ansible/ansible-container
18
Ansible Container はまだ若い バグを踏むことも……(当時 v0.2.0 ) サイズの大きなコンテナイメージの作成に失敗する docker commit がタイムアウトするのが原因
(報告して解決済み) 19
Ansible Container Ansible を使えば…… 構築対象 Docker Ansible ホスト NO YES
コンテナ YES YES コンテナ・ホストの構築差分が無くせる! 20
解決したこと Ansible を使うと環境構築は楽になる 21
残課題 開発マシンの管理は どうやっていこう? 22
開発マシンの管理 23
開発マシンの管理 環境は時間が経てば元の状態から遠ざかる 各々が設定を自由にいじる 新規にライブラリをインストールする 「私のところでは動くけど、君のところでは動かないの?」 という問題が起こる 24
Immutable Infrastructrue を推進しよう 25
抑えておくこと 開発環境の構築はデプロイの一種である (The Twelve-Factor App より) なのでプロダクション環境と同じように Immutable 性を追求する 26
必要なもの Vagrant 仮想環境構築ツール 環境のスナップショットが容易に取れるため Immutable 性を実現しやすい 27
開発マシンは Immutable に 開発環境はこう作れ! 1. Vagrant でベース Linux 仮想マシンを用意 2.
Ansible で環境構築 3. それ以上はいじらない 28
寄せられる質問 いじるなと言うけど…… Q. 新規ライブラリを入れたい時はどうするの? Q. 開発ソースが保存できないのでは? 29
Q. 新規ライブラリを入れたい時は どうするの? 30
A. 普通に入れて下さい ただしスナップショットを取ってから 1. 仮想マシンの状態を保存しておく 2. ライブラリをインストール 3. 満足したら仮想マシンを元に戻す $
vagrant snapshot push $ vagrant snapshot pop 31
4. 最後に Ansible Playbook を作る! 32
Immutable 性を保つ努力 Playbook にするほどじゃない場合 本当にちょとだけ環境をいじりたい場合は Playbook を作ることがオーバースペックになることも そういう時は小さな仮想化をしてあげる 33
小さな仮想化の例 pyenv, rbenv, nvm Python, Ruby, Node.js のバージョン切り替えツール ホームディレクトリ配下にインストールされるので 環境が汚れにくい
autoenv, direnv あるディレクトリにいるときだけ 環境変数の設定やスクリプトの実行を行う stow ローカルインストールしたファイルを システムワイドに使えるようシンボリックリンクを張る 34
Immutable Infrastructrue の原則 好きな状態にできる(戻せる)ことが重要 35
設定変更は基本 Playbook で 環境を変えられるのは Ansible だけにする いますぐ開発環境を破壊できるか? それが重要 36
環境をいじるスコープが狭ければ 多少は安全 グローバルに設定を変えなければもとに戻しやすい 小さな仮想化で対応 37
開発環境を git リポジトリのように 好きな状態にできるようにしておく 38
Immutable Infrastructrue は 不変な基盤というより ある状態であることを保証する基盤 39
Q. 開発ソースが保存できないのでは? 40
A. ホスト上に保存、そしてマウント ホストマシン ソースコードを保存 仮想マシン ホストマシンにマウント ホストマシンのソースコードを参照 41
変化するデータは外部から参照する それが Immutable Infrastructrue 42
まとめ 開発の流れ 1. Vagrant で Linux 仮想マシンを用意 2. Ansible で仮想マシンの環境構築
3. Immutable Infrastructrue の思想で開発 4. コミット 5. CI 環境で Ansible を使いコンテナ作成 6. ビルド・テスト 43
今日の話を図で説明 44
C++ はかなり開発しづらい言語 だけど Immutable Infrastructrue で 綺麗に整備されました 45
Thank You! 実際に使っている Vagrantfile, Playbook github.com/rinatz/ubuntu-desktop-ja 46