【TechTrainメンタリング】クラウドとオンプレミスの違いと選び方

[![tachTrainLogo_print.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317034/0852c845-d08c-c2cb-b7a7-dfaef2f77444.jpeg)](https://techbowl.co.jp/techtrain/)

みなさんこんにちは！
先日私は、エンジニアを目指す学生の間で大流行中の「[TechTrain](https://techbowl.co.jp/techtrain/)」というサービスを使ってきたので、そこで得られた学びについて共有したいと思います！

## 今回のメンター紹介となぜこの方を選んだか
TechTrainというサービスは自分の学びたい・相談したい分野や技術に合わせてメンターを選べる仕組みになっています。

私は今回小笠原純也さんをメンターとして選択しました。
小笠原純也さんは現在[株式会社マネーフォワード](https://corp.moneyforward.com/)でインフラエンジニアとしてご活躍されているエンジニアの方で、TechTrainのメンター紹介文には下記のような紹介がされています。
<img width="100%" alt="スクリーンショット 2019-07-06 23.29.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317034/c1c1b966-74da-cb03-8c23-c07571f3c5da.png">

私は下記のような理由から小笠原さんをメンターとして選びました。

- これから作るアプリケーションをクラウドで作るべきかオンプレミスで作るべきか相談したかったから
- Go言語についても詳しいエンジニアの方に話を聞きたかったから
- インフラについてこれから学びたいと考えたから

## メンタリング内容
メンタリングは30分間という制限時間の中で行われます。1秒たりとも無駄にしたくなかった私は事前に聞きたいことをリストアップしておきましたが、聞きたいことが多すぎて時間内には全ての質問をすることができませんでした。

それでもあらかじめリストアップしておいた聞きたいことに優先順位をつけて質問ができたので非常に充実した30分間を過ごすことができました。

### クラウドとオンプレミスの選択基準について
フロントエンドエンジニアの私がこれからWebアプリケーションをリリースする上で避けて通れない点として、アプリケーションを動かすためのサーバー構築があります。

あまりインフラについては勉強してこなかった私にとって、そもそもクラウドにサーバを立てるのとオンプレミスで立てるのとではどこがどんな風に違うのか分かりませんでした。そこで、オンプレミスで立てられたサーバーをクラウドに移行する作業をしていらっしゃる小笠原さんにそれぞれの違いやメリット・デメリット、どのような基準で選定すれば良いか聞いてみることにしました。

#### クラウドサービスでWebアプリケーションを公開することについて
- クラウド：クラウドで管理している数千台の中から使える物理サーバを自分用にカスタマイズして貸してくれるサービス
    - AWS
    - GCP
    - さくらのクラウド
- 基本的には従量課金制で、使ったら使った分だけ支払うというスタンス
   - プロダクトの黎明期には大幅なコスト削減になり、リスクを最小限に抑えることができる
- 物理サーバーやネットワーク環境を1から構築しなくても、煩わしいことは全て担ってくれるサービス
- 物理サーバーの故障などは全く気にせずに使える
- セキュリティについてもクラウドサービスを提供している会社がリソースを割いてレベルの高いものを提供してくれている

#### オンプレミスでWebアプリケーションを公開することについて
- 20万円くらいするパソコンなどの物理サーバーをいくつも購入してこなければならない
- サーバーが故障した時にはサーバーの購入費用やリプレイスのための作業に莫大なコストがかかる
- ハードやセキュリティなど、幅広い技術分野のスペシャリストが必要になる＝人材コストがかかる
- 初めからユーザー数が膨大になることがわかっているプロダクトやサービスの初期段階から十分なリソースを割ける場合に有効
    - 大規模なトラフィックを捌く場合にはクラウドよりもコストは抑えられる（クラウドサービスが従量課金制であるため）
    - よっぽど規模の大きなサービスを抱えている大きな企業が採用しているくらいで、スタートアップやトラフィックの少ないサービスの場合はあまり採用されない

### これから作るアプリケーションへのアドバイス
#### 実際にアプリケーションを運用するにあたっての心構え
- リリース後から徐々にユーザー数や規模を大きくしていく想定ならクラウドサービスを使うの1択！
- 自分のアプリケーションがどのような負荷がかかっているのかテストを続ける必要がある
    - **予測より計測が吉**

#### クラウド上に立てるサーバーについて
* 選択するOSは好み
    * デファクトスタンダード：CentOS, Ubuntu, Debian
    * 初めてならUbuntuをおすすめ
* コア数や容量についてはサービスやバックエンドの技術による
    * Go＝あまりメモリは使わないが並列処理をするのでメモリ少なめのコア数多め
    * Rails＝並列処理などはないのでCPUのコア数は少なめで良いが、メモリ量は多めにしておこう　　など
* リリースする前から最適なサーバーの数やクオリティはわかるはずがない
    * 初めに多めのサーバーを用意しておいて、リリース後にトラフィック数や負荷などを見て調整するのも1つの手

## まとめ
今回のメンタリングを通じてクラウドとオンプレミスでサーバーを立ち上げる際の両者の違いについて理解するができました。

簡単にまとめると、

- クラウド：プロダクトの初期フェーズなどで、人的リソースや金銭的リソースが足りない時に有効な選択肢
- オンプレミス：物理サーバの調達やセキュリティなどへの幅広い知識・運用が必要になるためコストが莫大にかかってしまうが、プロダクトのトラフィック数などが以上に多い場合やサービスを確実に安定稼働させたい場合などに有効な選択肢

であるということが理解できました！

次回のメンタリングでは、今回は時間がなくて聞けなかった

- 立ち上げたサーバー上で自分の作ったアプリケーションを動かす方法
- Dockerについて
- Webアプリケーション開発のおすすめ環境について

などについて聞こうと思っています！（TechTrainにはメンタリング制限回数もなく、お金もかからないので早速メンタリング予約入れちゃいました😆）

またそちらのメンタリングで得た学びも共有できたらいいなと考えておりますのでまた読んでください！！ではっ👋

## TechTrainについて
現役ITエンジニアから学べるプロエンジニア養成所「TechTrain」は、30歳以下のエンジニアを目指す人全てに本格的な学びを提供するためのプラットフォームです。

私はこのサービスのおかげでエンジニアとしての成長を実感できているので、絶大な信頼を寄せています。

[![tachTrainLogo_print1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317034/a1b36deb-9e60-8c67-86c5-4dc66e1b3cfb.jpeg)](https://techbowl.co.jp/techtrain/)


### TechTrainの3つの特徴
1. 30歳以下のエンジニアを目指す人は完全無料で使える！
2. 学びたい技術や一人一人の成長フェーズに合わせるため、幅広いキャリアを持った現役エンジニアを用意
3. 就活・転職などの支援、キャリアアドバイスも受けられる

<blockquote class="twitter-tweet" data-lang="ja"><p lang="und" dir="ltr"><a href="https://t.co/znB4Bbboy4">https://t.co/znB4Bbboy4</a></p>&mdash; Takuma Kurosawa (@TakumaKurosawa) <a href="https://twitter.com/TakumaKurosawa/status/1147774088896581633?ref_src=twsrc%5Etfw">2019年7月7日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


### こんな人におすすめ
- 将来エンジニアとして活躍したい
- プログラミングを始めたいけど、まず何から始めればいいかわからない
- 現役エンジニアがどんな仕事をしているか、求められる能力は何か生の声を聞きたい
- 現在エンジニアとしての就職・転職を考えている
- プログラミングで詰まっているところ・伸び悩んでいるところがある
- プログラミング学習にお金はかけたくない