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
280
開発環境を 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
22
14k
実践ジオフェンス 効率的に開発するために
navitimejapan
PRO
3
260
安全で使いやすいCarPlayアプリの 魅せ方:HIGと実例から学ぶ
navitimejapan
PRO
1
88
見えないユーザの声はログに埋もれている! ~ログから具体的なユーザの体験を数値化した事例紹介~
navitimejapan
PRO
6
2.3k
ユーザーのためなら 『デザイン』 以外にも手を伸ばせる
navitimejapan
PRO
2
1.3k
フツーのIT女子が、 Engineering Managerになるまで
navitimejapan
PRO
3
220
不確実性に打ち勝つOKR戦略/How to manage uncertainty with OKR strategy
navitimejapan
PRO
4
3.2k
アジャイルを小さいままで 組織に広める 二周目 / Agile Transformation in NAVITIME JAPAN iteration 2
navitimejapan
PRO
4
1.2k
変更障害率0%よりも「継続的な学習と実験」を価値とする 〜障害を「起こってはならないもの」としていた組織がDirtの実施に至るまで〜 / DevOps Transformation in NAVITIME JAPAN
navitimejapan
PRO
7
5.2k
Other Decks in Programming
See All in Programming
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
230
Generative AI Use Cases JP (略称:GenU)奮闘記
hideg
1
300
3rd party scriptでもReactを使いたい! Preact + Reactのハイブリッド開発
righttouch
PRO
1
610
TypeScript Graph でコードレビューの心理的障壁を乗り越える
ysk8hori
2
1.1k
イベント駆動で成長して委員会
happymana
1
330
受け取る人から提供する人になるということ
little_rubyist
0
240
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
100
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
シェーダーで魅せるMapLibreの動的ラスタータイル
satoshi7190
1
480
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
4
1.4k
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.8k
WebフロントエンドにおけるGraphQL(あるいはバックエンドのAPI)との向き合い方 / #241106_plk_frontend
izumin5210
4
1.4k
Featured
See All Featured
Thoughts on Productivity
jonyablonski
67
4.3k
YesSQL, Process and Tooling at Scale
rocio
169
14k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
Site-Speed That Sticks
csswizardry
0
27
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
A Modern Web Designer's Workflow
chriscoyier
693
190k
It's Worth the Effort
3n
183
27k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
A Philosophy of Restraint
colly
203
16k
Bash Introduction
62gerente
608
210k
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