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
360
開発環境を 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
16k
実践ジオフェンス 効率的に開発するために
navitimejapan
PRO
3
930
安全で使いやすいCarPlayアプリの 魅せ方:HIGと実例から学ぶ
navitimejapan
PRO
1
260
見えないユーザの声はログに埋もれている! ~ログから具体的なユーザの体験を数値化した事例紹介~
navitimejapan
PRO
6
3.2k
ユーザーのためなら 『デザイン』 以外にも手を伸ばせる
navitimejapan
PRO
2
1.8k
フツーのIT女子が、 Engineering Managerになるまで
navitimejapan
PRO
3
400
不確実性に打ち勝つOKR戦略/How to manage uncertainty with OKR strategy
navitimejapan
PRO
4
3.8k
アジャイルを小さいままで 組織に広める 二周目 / Agile Transformation in NAVITIME JAPAN iteration 2
navitimejapan
PRO
4
1.5k
変更障害率0%よりも「継続的な学習と実験」を価値とする 〜障害を「起こってはならないもの」としていた組織がDirtの実施に至るまで〜 / DevOps Transformation in NAVITIME JAPAN
navitimejapan
PRO
8
5.9k
Other Decks in Programming
See All in Programming
CSC307 Lecture 07
javiergs
PRO
1
560
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
6
690
CSC307 Lecture 01
javiergs
PRO
0
690
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
CSC307 Lecture 08
javiergs
PRO
0
670
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
110
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
290
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
Gemini for developers
meteatamel
0
100
並行開発のためのコードレビュー
miyukiw
1
1.3k
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
66
37k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
120
Raft: Consensus for Rubyists
vanstee
141
7.3k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
120
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Deep Space Network (abreviated)
tonyrice
0
67
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Evolving SEO for Evolving Search Engines
ryanjones
0
130
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
Tell your own story through comics
letsgokoyo
1
810
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