Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
開発環境を Immutable infrastructure にした話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
NAVITIME JAPAN
PRO
June 20, 2017
Programming
420
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
開発環境を Immutable infrastructure にした話
開発環境を Immutable infrastructure にした話
NAVITIME JAPAN
PRO
June 20, 2017
More Decks by NAVITIME JAPAN
See All by NAVITIME JAPAN
株式会社ナビタイムジャパン 会社紹介資料2026
navitimejapan
PRO
1
2.6k
つよつよリーダーが 抜けたらどうする? 〜ナビタイムのAgile⽀援組織の変遷〜
navitimejapan
PRO
23
16k
実践ジオフェンス 効率的に開発するために
navitimejapan
PRO
3
1.1k
安全で使いやすいCarPlayアプリの 魅せ方:HIGと実例から学ぶ
navitimejapan
PRO
1
310
見えないユーザの声はログに埋もれている! ~ログから具体的なユーザの体験を数値化した事例紹介~
navitimejapan
PRO
6
3.5k
ユーザーのためなら 『デザイン』 以外にも手を伸ばせる
navitimejapan
PRO
2
2k
フツーのIT女子が、 Engineering Managerになるまで
navitimejapan
PRO
3
480
不確実性に打ち勝つOKR戦略/How to manage uncertainty with OKR strategy
navitimejapan
PRO
4
4.1k
アジャイルを小さいままで 組織に広める 二周目 / Agile Transformation in NAVITIME JAPAN iteration 2
navitimejapan
PRO
4
1.6k
Other Decks in Programming
See All in Programming
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
170
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
2
290
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
650
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
780
Security issues being discussed on Web Platforms
petamoriken
0
690
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
信頼性の目標を誰も求めてない
shubox
0
500
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
140
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
660
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
130
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
450
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
300
Tell your own story through comics
letsgokoyo
1
1.1k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
680
Code Reviewing Like a Champion
maltzj
528
40k
4 Signs Your Business is Dying
shpigford
187
23k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
290
For a Future-Friendly Web
brad_frost
183
10k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
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