デプロイとプロビジョニングの違い
友人のid:karronoli君がデプロイとプロビジョニングの違いってなんだろうと言い始めた。
(なんでもいいじゃんと思ってしまう自分には、こういう子供のような"なんで?"が出てくる友人はいい刺激になる)
「そりゃー、デプロイは開発中のソフトを配置するやつで、プロビジョニングはサーバとかインストールするもんでしょ」
とは言ってみたものの、英単語的には(多少違うようにみえるけど)どっちも配置だし、明確な違いを言えなかったので、友人と話し合いながら(一応)結論を出してみた。
そのメモ書き。
id:karronoli君の記事はこちら:
デプロイとプロビジョニングの単語の違いを言えますか? - karronoliの日記
まずは英単語的にはどう違うのか。
英和だとよく違いがわからなかったので英英でしらべてみた。
wiktionary-deploy
http://en.wiktionary.org/wiki/deploy
"To prepare and arrange (usually military unit or units) for use."
"To unfold, open, or otherwise become ready for use."
"to install, test and implement a computer system or application."
「使うために(部隊を)準備したり配置すること」
「使えるように展開したり状態を変更すること(でいいかな・・・)」
とか、ミリタリーってあたり、OFP(古い方)好きな自分には好みな単語だな。
3つ目の「コンピュータシステムとかアプリケーションをテストしたり実行したりするためにインストールする」ってのがソレっぽい。
wiktionary-provision
http://en.wiktionary.org/wiki/provision
"An item of goods or supplies obtained for future use."
"Money set aside for a future event."
(他にもあるけど省略)
将来のために手に入れておく、とか、将来のためにお金を蓄えておくとか、
deployとprovisionの大きな違いはfutureがついてるところっぽい。
とはいえ、futureがどこまでの範囲なのかはわからないけど、
deployもprovisionも準備とか配置ってあるし、
違いはあるけど具体的な例えが思いつかずに友人と共にうなることに。
このときの考えはこんな感じ
provision→将来的に準備するもの。目的達成のために準備するもの。(ECサイトをオープンする目的なら、オープンするための土台をつくる)
deploy→すぐに使うものを使えるようにすること(ECサイトのページとかを配置する)
でも、プロビジョニングしたものだってすぐに使うものがあるし、将来的って言われてもピンとこないよね、って友人の指摘。
うーん・・・。
じゃあ、何かに例えてみようってことで、2つの例えをしてみた。
1つ目は、militaryってあるし、サバゲで例えてみた。
プロビジョニングってインフラ周りって感じがするし、
provisionするのはサバゲを将来的に行うためのもの(サバゲーフィールド)、
deployするのはサバゲを実現・実行するもの(プレイヤー)って考えてみた。
んん!それっぽい!
でも、サバゲを実現するときは隠れるための土嚢とか建物とかも必要だし、その切り方だと境界が曖昧かも・・・。
2つ目は料理にたとえてみた。
provisionは台所や調理器具を用意する行為。
deployは実際に調理(という行為を実現)する行為。
ここで友人が、包丁とか買うのも調理を実現するためのものだし、deployじゃない?との指摘。
ここでおかしいって話になってることとして、
「deployするものと、provisionするものの境界がわからない」
というのが問題になってた。
なので、どこまでが「将来的に手に入れる」かを考えてみた。
まずは料理。
料理は食べるものを作るって目的で、包丁や台所を用意するのも目的ではある。
だけど、毎回台所や包丁を用意したり買ったりするのか。
さすがに台所は毎回用意しない。(家にあるし)
包丁は、料理によってはパン切り包丁、刺身包丁、中華包丁って必要だけど、そんなに頻繁には買わない。
食材は毎回、食べたり、失敗して捨てちゃう。
お?なんとなく見えてきた。
少なくとも台所は調理するにあたって、将来的に(にも)使うものだ。
食材や、場合によっては包丁は毎回用意するもの。
(作る料理によっては包丁は将来的にも使うもの)
じゃあ、サバゲは?
台所のときと同じで、フィールドは(稀に面積の増減や地形の変化はあっても)将来的に(にも)使うもの。
プレイヤーや、場合によっては土嚢や建物は毎回用意するもの。
(配置がそんなに変わらないなら、土嚢や建物は将来的にも使うもの)
ここでなんとなくprovisionが言ってた「将来的に」の意味がわかってきたかも。
ここでコンピュータの世界に持っていくと、
インフラやミドルウェア、サーバアプリは将来的にも使うもの。
開発中Webサイトはバグ修正や変更があるから、毎回用意するもの。
と考えると、
provision→ネットワーク機器といったインフラから、Apacheみたいなサーバ周り
deploy→開発中のアプリ
ってなんとなく納得がいった。
インフラやサーバだってアップグレードするだろ!ってツッコミもあるけど、
包丁やサバゲフィールドのオブジェクトと同じく、そんな頻繁じゃないだろうし、
例えばサーバが頻繁にアップグレードが必要なら、
その上に乗っかるアプリケーションとかWebサイトとセットで1つのパッケージになるんじゃない?って思った。
一応むりやりながらも「将来的」をキーワードにprovisionとdeployの違いを見つけることができたし、
だから
プロビジョニング→インフラ周り(あまり変更しないところ)
デプロイ→アプリ(頻繁に変更を加えるところ)
って流れなんだなーって納得することができた。
ただ、この記事のオチかつ、考えるにあたって最大の問題点が、プロビジョニングしたことないっていう。