「デプロイしたので確認お願いします」
エンジニアではない人から、「デプロイってなんですか?」と聞かれることがあります。
こういうとき、エンジニアあるあるだと思うのですが、うまく説明できないことが多く、この記事はその言語化能力を鍛えるために書いてます。
「さっきデプロイしたので、確認お願いします」
「あれ、デプロイ反映されてなくない?」
「すみません、いまデプロイ中なので少し待ってください」
エンジニアじゃない人にとって、「デプロイ」はかなり不思議な言葉です。文脈からすると「公開する」みたいな意味らしい。でも、じゃあ「公開」と言えばいいのに、なぜわざわざ「デプロイ」と言うのか。リリースとは何が違うのか。ビルドって何なのか。
こうした言葉は、エンジニア自身もうまく説明できないことが多いし、そもそもエンジニアじゃない人にはあまり知られていません。
この記事では、そんな「デプロイ」という言葉を、書道にたとえて説明してみます。おそらく小さい頃に授業で書道をしたことがある人が多いと思うので、その記憶を借りれば、エンジニアじゃない人にもなんとなくイメージが掴めるんじゃないかと思います。
先に対応関係を表にまとめておきます。
| 書道 | ソフトウェア開発 |
|---|---|
| 半紙に何度も書いて練習する | ローカル開発 |
| 「これだ」という一枚を選ぶ | リリース候補の確定 |
| 額縁に入れる | ビルド |
| 会場までの運搬手段 | デプロイ方法(CI/CDなど) |
| 展示会場に掛ける | 本番デプロイ |
| 前の作品に掛け替える | ロールバック |
それぞれの対応について、順番に見ていきましょう。
デプロイの本質は、書道家の制作プロセスと同じ
いきなり結論から言うと、ソフトウェアのデプロイとは、書道家が作品を展示会場に掛けるまでの一連の流れと、構造的にほとんど同じです。
1. 半紙の山 = ローカル開発
書道家は、いきなり本番の一枚を書いたりしません。
机の上に半紙を広げて、何度も何度も同じ字を書きます。墨の濃さを変えてみたり、筆の運び方を試してみたり。書き損じは机の脇にどんどん積み上がっていきます。
エンジニアの仕事も、これとほぼ同じです。自分のパソコン(これをローカル環境と呼びます)の中で、コードを書いて、動かしてみて、うまくいかなくて、書き直して……ということを延々と繰り返しています。
このとき手元にある書き損じの山=書きかけのコードを、まったく誰にも見せないわけではありません。「こんな感じで良さそうですか?」と、書きかけの一枚を見せて感想を聞くことはよくあります。
ただし、見せられるのはあくまで机の上にあるその瞬間の状態だけです。会場にはまだ運ばれていないので、感想をくれた相手が後から自分の目で確かめに行くことはできません。ソフトウェア開発で言うと、これは「画面を見せて確認してもらったけれど、まだ反映されていないので開発環境では見れない」という状態にあたります。
また、机の上は書道家にとって自由に試せる場所でもあります。ここでどれだけ墨をこぼしても、書き損じても、会場に展示されている作品には一切影響しません。エンジニアにとってのローカル環境も同じで、本番に影響しないからこそ、気兼ねなく好きなように試行錯誤できる場所だと捉えています。
2. 「これだ」という一枚を選ぶ = リリース候補の確定
何枚も書いていると、ある瞬間「お、これは良いな」という一枚が出てきます。
書道家はその一枚を選んで、他の書き損じとは分けて取り扱います。エンジニアの世界でも同じで、「これでいける」と思ったコードを、本番に出す候補として選び取ります。
ここで初めて、机の上の山から「これは見せられるもの」が一枚、抜き出されるわけです。
3. 額縁に入れる = ビルド
ところで、選んだ一枚の半紙を、そのまま展示会場に持っていって壁にピンで留める……なんてことはしませんよね。
きちんと額縁に入れる必要があります。あるいは表装して掛け軸にする。とにかく、半紙のままでは展示できる状態ではないので、「展示できる形」に仕立て直す工程が必要です。
これがエンジニアの世界で言うビルドです。
人間が書いたコードは、そのままではコンピュータが実行できません。コンピュータが理解できる形に変換し、必要な部品をまとめ、一つの「実行できる塊」に仕立て直す。これがビルドです。
額縁にも色々な種類があるように、ビルドにも色々な設定があります。本番用にはピシッとした立派な額縁を、開発中の確認用にはとりあえず仮の枠を、という具合です。
4. 運搬手段 = CI/CD(デプロイの方法)
額装が終わりました。さて、この作品を展示会場までどうやって運ぶか。
選択肢は色々あります。
- 自分で抱えて持っていく:軽い作品なら、書道家本人が電車で運ぶこともできる。手軽だけど、本人が風邪をひいたら運べない。
- 軽トラを借りて運ぶ:少し大きい作品ならこれ。慣れた人がいないと積み方を間違えて作品を傷つけるかもしれない。
- 専門の美術品配送業者に頼む:プロが梱包から搬入まで全部やってくれる。確実だけど、契約や手順を整える最初の手間がかかる。
- 空輸する:海外の展覧会ならこれ。早いけど高い。
ソフトウェアのデプロイにも、まったく同じバリエーションがあります。エンジニアが手作業でサーバーに送り込むこともできるし(自分で抱えていく方式)、簡単なスクリプトを使うこともできるし(軽トラ)、CI/CDと呼ばれる仕組みを整えて自動でやらせることもできます(専門配送業者)。
「CI/CD」というのは、コードが完成したら自動で額装して、自動で会場まで運んで、自動で掛けてくれる仕組みだと思ってください。最初に仕組みを整えるのは大変ですが、一度整えてしまえば、書道家は「これだという一枚」を選ぶことだけに集中できるようになります。
5. 展示会場に掛ける = 本番デプロイ
会場に運び込まれた作品は、いよいよ壁に掛けられます。
ここで初めて、お客さんがその作品を見られるようになります。逆に言うと、掛けるまではどんなに良い作品でも誰にも見えていないわけです。
これがまさに「本番デプロイ」です。サーバーに作品(コード)が掛けられた瞬間に、世界中のユーザーがそれを使えるようになる。
「デプロイしたので確認お願いします」というのは、**「会場に掛けたので見に来てください」**と言っているのと、ほぼ同じ意味です。
6. 掛け替え = ロールバック
掛けたあとに、ヒヤッとすることが起こります。
「あれ、落款の位置がおかしくない?」
「字、間違ってない?」
そんなときどうするか。前に掛けてあった作品に、いったん戻します。新しい作品はいったん下ろして、修正してから掛け直す。
これをエンジニアの世界ではロールバックと呼びます。「デプロイしたら不具合が見つかったので、ロールバックします」と言っていたら、それは「いま掛けた新作にミスがあったので、前の作品に掛け替えます」と言っているのと同じです。
「デプロイ反映されてなくない?」と誰かが言っていたら、まだ掛け替えが終わっていないか、あるいはロールバックされた可能性があります。
まとめ
「デプロイ」という言葉が出てくるたびに、書道家が額装した作品を会場の壁に掛けている光景を思い浮かべてみてください。それだけで、なんとなく会話の風景が掴めるようになるはずです。
もし明日、Slackで「デプロイ完了しました」という通知が流れてきたら、心の中でこう翻訳してみましょう。
「作品、無事に壁に掛かりました」
それだけのことなんです。