まだDockerの話にはなりません・・
前提
インフラ?そんなの仕事じゃないよ?
な方へ向けた記事です。
正確な説明や絶妙な比喩よりも、わかりやすさを優先します。
構成管理って
Dockerが注目されている理由やメリットを理解するためには
ここでいったん、仮想化とはちょっと違った視点で
構成管理
にも触れなければなりません。
構成管理とは、簡潔すぎて微妙な言い方をすれば
ソフトウェアのインストールと設定を管理すること
です。
インストール・設定問題、山積
「ホームページ作って !」と言われたら Apache
かNginx
あたりをググりましょう。
でも「Ruby使いたい 」とか「Pythonで書いてね 」と続いたら
そのプログラミング言語やWebフレームワーク1の用意が必要です。
これ、いざやろうとすると悩ましいことばかり。
たとえば
- PHPはどのバージョンを使おう
- そのPHPと相性のいいApacheのバージョンはどれだろう
- データベースには何を使おう、MySQLだとしてバージョンはどれがいいのだろう
- タイムゾーン2や文字セット3はどうやって管理すればいいのだろう
そして、悩んで決めて、インストールがうまくいっても、
将来誰かに引き継いだり、新人さんの環境を作ろうとすると
...。
こんな悲劇を未然に防ぐのが構成管理ツール
です。
構成管理ツール
有名どころは3つ Chef
、Puppet
、Ansible
です6。
いずれも、あらかじめ定義した
「いつの」「何を」「どこから」「どうやって」設定するかという手順に従い
ソフトウェアを
いい感じにコンピュータにインストールしてくれる
優れものです。
もしソフトウェアをどこかにインストールすることになったら
どれかを使ってみるのお勧めします。
なぜなら
- プロジェクトに必要なソフトウェアとそのバージョン、取得先を明示できる
- 設定の何をどう変えたかも含め、すべての定義や作業が
履歴管理
7できる! - 冪等という素晴らしい状態が得られる!!・・かもしれない8
- 一度定義が完成すれば、
環境のコピーがワンクリック
並みの手軽さでできる - 何より人間が作業しないので、人為的なミスが確実にゼロになる!!
からです。
一方で、構成管理の難しさ
これすごい!よさげ!!なわけですが
一方で
- インストールしたいコンピュータの
OSによっては動かない
。Windowsとかね - 同じ定義書を利用しても、隣の人とまったく同じ環境になる保証がない9
- ひとつのプロジェクトで、複数バージョンのソフトウェア10を同時に使うのは依然困難
- そもそもプロジェクトごとに定義書作るのはやっぱり大変11
だったりはします。
難しいところはあり、万能ではないと把握しつつも
やはり強力なツールであることは間違いありません。
そこで、前回お話しした仮想化を組み合わせてみましょう。
構成管理を知った上で仮想化再び
さて前回の01.仮想化では、仮想化いいよねー が結論でした。
しかし実は、開発環境を仮想化するにあたっては
この構成管理ツールを併用することで、もっと便利なことが起こります。
構成管理ツールを使って、アプリ開発に必要な環境を作ることを
プロビジョニング
と言いますが、Vagrantは Chefや Puppetなどを
プロビジョニングツールとしてサポートしています。
ターミナルから
$ vagrant up
と仮想環境を起動するように命令するだけで
内部で構成管理ツールが動き、Macでも Windowsでも
誰がやっても同じような環境を作ることができるのです。
本番サーバのセットアップ
同様に
あなたの作ったサービスを稼働させる本番用のサーバでも
(Vagrantは使いませんが)構成管理ツールでプロビジョニングすれば
期待通りのソフトウェアがインストールされ、設定されるのです。
これは画期的ですね!!
インフラ業界でいう Infrastructure as Code
の始まりです
プロビジョニングに冪等性があり、
環境が正しくセットアップされたことたしかめるテストも
ソースコードで自動化12されたのなら時代は 2014年。かなり今っぽい!
今回のまとめ
開発環境のセットアップを Wikiや Excelに手順書としてまとめるのは止め、
仮想環境+構成管理ツールの手法に変えてみませんか?
Windowsでももちろん可能です。
しかも今や、インフラもプログラマブルな時代です。
スキルを生かして便利な仕事環境を作りましょう!
Docker入門なのに、Dockerに今回も至らずすいません・・
-
Webサーバをかんたんに作るためのライブラリ・ソースコード集 ↩
-
日本で動かすサービスならAsia/Tokyo一択ですけどね ↩
-
文字セットはUnicodeとしても、エンコーディングはDBまわりが意外とアレ ↩
-
どこのリポジトリを使ったのかわからない、とも ↩
-
もしくは「どのExcelが最新ですか?」問題 ↩
-
私はAnsibleに落ち着きました ↩
-
バージョン管理。GitやSubversionがない世界にはもうもどれませんね ↩
-
冪等になれば幸せですが、ちゃんと作るのはけっこう大変 ↩
-
実行前のコンピュータの状態やインストールされる細かいバージョン差異など・・ ↩
-
異なるバージョンの依存ライブラリ、というケースの方が多いか ↩
-
git管理上横展開されたファイル・・コピペ職人とメンテナの戦い・・ ↩
-
Serverspecなどを使います ↩