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
270
開発環境を Immutable infrastructure にした話
開発環境を Immutable infrastructure にした話
NAVITIME JAPAN
PRO
June 20, 2017
Tweet
Share
More Decks by NAVITIME JAPAN
See All by NAVITIME JAPAN
ユーザーのためなら 『デザイン』 以外にも手を伸ばせる
navitimejapan
PRO
1
630
フツーのIT女子が、 Engineering Managerになるまで
navitimejapan
PRO
3
63
不確実性に打ち勝つOKR戦略/How to manage uncertainty with OKR strategy
navitimejapan
PRO
4
2.8k
アジャイルを小さいままで 組織に広める 二周目 / Agile Transformation in NAVITIME JAPAN iteration 2
navitimejapan
PRO
4
1.1k
変更障害率0%よりも「継続的な学習と実験」を価値とする 〜障害を「起こってはならないもの」としていた組織がDirtの実施に至るまで〜 / DevOps Transformation in NAVITIME JAPAN
navitimejapan
PRO
6
4.5k
こうしてふりかえりは終わってしまった / A Demise of a retrospective
navitimejapan
PRO
42
25k
もーひとつの時間がない症候群 / Yet Another SOT Syndrome
navitimejapan
PRO
1
2k
シーズン2〜スクラムチームのバトンを渡す〜 / Season 2 -pass the button of a scrum team-
navitimejapan
PRO
2
2.7k
チームのパフォーマンスを引き出す、ワクワクするプロダクトゴール、OKR / Waku-waku Product Goal and OKR
navitimejapan
PRO
16
17k
Other Decks in Programming
See All in Programming
TCAの Shared Stateって どういう仕組みになってんの?
yimajo
0
330
孤独のCTOグルメという やや奇抜な企画をやった目的と効果
shoheimitani
3
1k
Material 3で Material 2ぽい見た目にする
numeroanddev
2
250
自作ソフト(VMagicMirror)がVRMA対応してる話+実装のTips
bakudreameater
0
110
導入から5年が経って見えた Datadog APM 運用の課題
bgpat
2
540
OpenTelemetry のサービスという概念について
azukiazusa1
1
390
Honoとhtmx
yusukebe
6
1.2k
Introduction for Open Source Swift Workshop
giginet
PRO
0
180
Building a Smaller App Binary
kateinoigakukun
2
200
AppDeveloperCon 2024 EU: Building polyglot developer experiences in 2024
salaboy
0
380
WinUI 3デモ - "CommunityToolkit.Mvvm"NuGetパッケージ編
andrewkeepcoding
0
130
Parallel Socket Communication in Swift
s_shimotori
0
220
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
28
12k
How GitHub (no longer) Works
holman
301
140k
The Art of Programming - Codeland 2020
erikaheidi
40
12k
The Mythical Team-Month
searls
214
42k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
67
38k
In The Pink: A Labor of Love
frogandcode
137
21k
Designing the Hi-DPI Web
ddemaree
275
33k
Visualization
eitanlees
135
14k
Debugging Ruby Performance
tmm1
68
11k
Statistics for Hackers
jakevdp
789
220k
BBQ
matthewcrist
78
8.7k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
113
18k
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