非開発者のための IT 常識 #3 サーバー、クラウド、そしてデプロイ
前の二つの記事で、ユーザーの目に見えないバックエンドと API を見てきました。ところが、一つ疑問が残ります。そのバックエンドと API は、いったいどこで実行されているのでしょうか。開発者のノートパソコンが消えていても、私たちは夜中の三時にアプリを開いて注文ができます。だとすれば、そのプログラムはどこか別のところで、ずっと動き続けているということになります。
そのどこかこそがサーバーです。そして、開発者が作ったコードをそのサーバーに載せてユーザーに公開する仕事を、デプロイと呼びます。「サーバーが落ちました」「今デプロイ中です」「本番に反映されました」といった言葉は、すべてこの話です。今回の記事では、サーバー、クラウド、デプロイという三つの単語を順に解きほぐしていきます。
今回のシリーズは 非開発者のための IT 常識 の全 5 編で構成されます。
- #1 ウェブサイトは何でできているのか — フロントエンド・バックエンド・データベース
- #2 API とは何か — サービス同士が会話する約束
- #3 サーバー、クラウド、そしてデプロイ ← この記事
- #4 バグ、ホットフィックス、ロールバック — 開発者が障害に対応する方法
- #5 Git とバージョン管理 — 複数人で一つのコードを直す方法
サーバーは常に動き続けているコンピュータです #
サーバーという言葉は大げさに聞こえますが、その本質はコンピュータです。私たちが使うノートパソコンやデスクトップと同じコンピュータで、役割が違うだけです。サーバーは、他のコンピュータのリクエストを受けて処理してあげる仕事を専門に担うコンピュータです。サーバーという名前そのものが「提供する側」という意味です。
前回の記事で見たバックエンドのプログラムが、まさにこのサーバーの上で動きます。ユーザーのアプリが API でリクエストを送ると、サーバーで動いているバックエンドがそのリクエストを受けて処理し、レスポンスを返します。ユーザーが世界のどこにいても、夜中でも真っ昼間でもリクエストを送れるようにするには、このサーバーが眠らずに動き続けていなければなりません。
ここで、自分のノートパソコンとの違いがはっきりします。自分のノートパソコンは、閉じれば消えますし、一度に使うのは自分一人だけです。一方でサーバーは、24 時間動いたまま、何千、何万人ものリクエストを同時に受け止めなければなりません。そこで、なるべく止まらないように、そして多くのリクエストに耐えられるように別に用意したコンピュータを、サーバーと呼びます。
そのサーバーを直接買わずに借りるのがクラウドです #
それでは、このサーバーは誰が用意するのでしょうか。以前は、会社が自分でサーバーコンピュータを買い、サーバールームに置いて管理していました。しかし最近はほとんどがクラウドを使います。クラウドは、巨大なデータセンターのコンピュータを必要なだけ借りて使い、使った分だけ料金を払う方式です。
自分でサーバーを買うと、高価な設備をあらかじめ揃え、故障や管理まで抱え込まなければなりません。クラウドを使えば、数分でサーバーを立ち上げ、ユーザーが集まれば数を増やし、暇なときは減らせます。だからこそ、今日の多くのサービスのバックエンドは、クラウドから借りたサーバーの上で動いています。
クラウドが何なのかをもっと詳しく知りたい方は、クラウドとは結局のところ他人のコンピュータを借りること の記事をまず読んでみることをおすすめします。この記事では「バックエンドが実行されるサーバーをクラウドから借りて使う」という程度にとどめておきます。
デプロイは作ったコードをサーバーに載せて公開する仕事です #
いよいよデプロイの番です。開発者はたいてい自分のコンピュータでコードを書き、試します。しかし、そのコードが開発者のコンピュータの中だけにあると、ユーザーは使えません。作ったコードを、ユーザーが接続するサーバーに載せて、実際に動くようにしなければなりません。この過程をデプロイと呼びます。
新しい機能を作ったり、バグを直したりしたとき、開発者はその変更をデプロイして初めて、ユーザーに反映されます。「この機能はもう作りました」と「この機能はデプロイされました」は別の言葉です。作っておいただけでデプロイしていなければ、ユーザーの画面にはまだ何も変わっていない状態です。
そこで開発の現場では、環境を分けておきます。開発者が思う存分試す開発環境があり、実際のユーザーが使う本番環境が別にあります。本番環境はプロダクションとも呼びます。新しいコードは、たいてい開発環境で十分に確認したうえで、本番環境にデプロイします。「本番に反映されました」という言葉は、変更が実際のユーザーのところまで出ていったという意味です。
実務の会話がこう解けます #
ここで、いくつかの聞き慣れた言葉が違って聞こえるはずです。
- 「サーバーが落ちました」は、バックエンドが動いていたサーバーに問題が起きて、リクエストを処理できない状態だという意味です。このときは画面も一緒に止まったり、エラーが出たりします。
- 「今デプロイ中です」は、新しいコードをサーバーに載せる作業が進行中だという意味です。デプロイのわずかな間はサービスが不安定になることがあるため、最近はユーザーが気づかないように、途切れなくデプロイする方法がよく使われます。
- 「開発では動くのに本番では動きません」は、開発環境と本番環境の違いから来る問題です。二つの環境がまったく同じではないため、しばしば起こります。
なぜ非開発者が知ると仕事が楽になるのか #
サーバーとデプロイを理解すると、スケジュールや状況を読む目が身につきます。
- 「いつ反映されますか」の答えを見積もれます。 機能をすべて作っても、デプロイという段階が残っていて、本番に安全に載せるには確認の時間が必要です。「作った」と「ユーザーに出ていった」の間にある間隔を、理解できるようになります。
- 障害の状況を落ち着いて読めます。 「サーバーの問題」なのか「さっきのデプロイのせい」なのかを区別できれば、今がどんな状況で、どれくらいかかりそうかを、あわせて見積もれます。
- コスト感覚が身につきます。 サーバーは動かしている間ずっとクラウドの料金が発生します。ユーザーが増えればサーバーも増やさなければならないので、コストも一緒に大きくなります。
まとめ #
この記事では、バックエンドが実際にどこで動いているのかを見てきました。
- サーバー は、ユーザーのリクエストを受けて処理するために、常に動き続けているコンピュータです。
- クラウド は、そのサーバーを直接買わずに借りて使う方式です。
- デプロイ は、開発者が作ったコードをサーバーに載せて、実際のユーザーに公開する仕事です。
ところで、デプロイしたコードに問題があったらどうなるのでしょうか。間違った変更が本番環境に出ていって、ユーザーが影響を受けた瞬間、開発チームは素早く対応しなければなりません。次の記事では、こうした状況で登場する バグ、ホットフィックス、ロールバック が何なのか、開発者が障害にどう対応するのかを見ていきます。