【備忘】Herokuとは？AWSとの比較

## Herokuとは
アプリケーションの開発から実行、運用までをクラウド上で管理できるPaaS
※Passについては、以下をご参照ください。
https://www.itmanage.co.jp/column/saas-paas-iaas/

### 特徴
特徴としては以下3点

**1. アプリケーションのデプロイまでが非常に簡単**
herokuは、クラウドプラットフォームであるため開発者は自分でサーバをセットアップしたり、管理したりという手間が不要。
GitHubのリポジトリを作成すればアプリケーションのデプロイをgit pushするだけで簡単にできる。

開発者は、アプリのデプロイにあたって難しいファイアウォール、データベース、リバースプロキシ、SSL証明書などのインストールや設定、インフラ管理について触れる必要がなく、さらにherokuc CLI（コマンドラインツール）を使うことで様々な操作を簡単にコマンドを使って行うことが可能。
※参考：[Git を使用したデプロイ](https://devcenter.heroku.com/ja/articles/git)

**2. 自動でスケール**
herokuには、web dynoのオートスケーリングの機能がある。
herokuのアプリケーションにたくさんの人が同時にアクセスをすると処理が遅くなってしまい、そのような状況に自動的に対応してくれる機能が実装されている。

herokuが自動的に応答時間を監視し、その95%が設定された値を超えた時にherokuは自動スケールを起動させる。
また、アドオンを利用することで、herokuの自動スケールのメトリックを変えることが可能。
そのため、開発者は応答時間や待ち時間を監視したり、予測したりする必要がない。

利用可能なプランは、Performance-tier dynosとPrivate Spacesで実行されているdynoで、さらに追加料金なしで自動スケール機能が利用可能となる。

参考：[Autoscalling](https://devcenter.heroku.com/articles/scaling#autoscaling)

**3. マーケットプレイスのアドオンが充実している**
herokuのheroku Elements マーケットプレイスでは、第三者の事業者がherokuのアドオンを提供している。
なお保守は、アドオン提供者かherokuのどちらか。

herokuを使い始めた時には、基本的な機能しか備わっていないため、開発しているアプリケーションのニーズに合わせて必要なアドオンを購入することが可能。

例）herokuにはアプリケーション内からメールを送信する機能がないため、アプリに登録したユーザーへの登録完了メール、パスワード変更メール、購入完了メールなどアプリの運営に必要なメールを送るためにはアドオンを購入する必要がある

参考：[Marketplace](https://elements.heroku.com/)

### Herokuを使用するメリット
**プラットフォームの使用しやすさ**
直感的に見やすく操作しやすいUIとなっており、アプリケーションの開発から運用までをストレスなくアシスト可能

**構築が簡単**
ウェブ上で全てが完結するため、インターネットさえあればすぐに使うことが可能なため、面倒な環境構築が必要なく、開発に取り組むことが可能。
さらには、ワンクリックでコード生成やデプロイが可能なボタン機能が実装済み＋充実したアドオンやビルドパックのおかげでカスタマイズ性が高いため、アプリケーションのアップデートもしやすく、保守性も高くなる。


## AWSとの比較
AWSやHerokuなど環境構築に一定の制約はあるものの、独自のアプリケーションの構築や運用を行うことが可能となる。
今回は、「**使用可能プログラミング言語**」「**価格**」「**サービスの種類**」「**対象者**」の観点で比較してみる

### 使用可能プログラミング言語
| AWS          | Heroku       |
|--------------|--------------|
| Java         | Java         |
| PHP          | PHP          |
| Python       | Python       |
| Ruby         | Ruby         |
| Go           | Go           |
| C++          | Node         |
| .NET         | Scala        |
| JavaScript   | Clojure      |

### 価格
| AWS          | Heroku       |
|--------------|--------------|
| 従量課金      | 定額制       |

#### 詳細
**＜AWS＞**
Amazon EC2やAmazon S3など最低限のコンピューティング・データベースの100種類にも及ぶ無料枠が用意されており、無料か小額から試してみたいという方にはメリットがある。
ただし、無料枠をすぎてしまうと自動で課金が発生するため、うっかり無料枠以上に使っているとある日急に請求書が届くという事態にも陥りやすい料金体系になっている状況。

従量課金制は利用料に応じてスケールするため、**大規模なシステム開発**にも用いることができます。

**＜Heroku＞**
以前まで無料枠がありましたが2022年11月28日を持って無料枠が廃止された。
Eco・Basic、プロダクション、アドバンスド、エンタープライズの4つのプランがあり、それぞれ月定額で利用可能なリソースの上限が決まっている。

最低価格のEco・Basicプランは$5から利用可能で、大規模システム開発に用いるエンタープライズプランでは、価格は別途問い合わせが必要となる。

従量課金制のAWSよりも価格の柔軟性は低いものの、事前に発生する費用の見積もりがしやすいというメリットがある。

### サービスの種類
**＜AWS＞**
AWSでは230個を超えるサービスを提供しており、ニーズに合わせて各種サービスを組み合わせることが可能。
例としてAWSにて選択可能なデータベースは、MySQL、PostgreSQL、MariaDB、Oracle BYOL、SQL Serverの選択ができる。

そのため、AWSでは選択肢が多く自由度も高い一方で、適切なサービスの選択・設定には専門的な知識が必要となる

**＜Heroku＞**
Herokuでは、200を超えるアドオンを柔軟に組み合わせることで、システム開発、運用に必要となるサービスを提供している。
Herokuの機能はAWSに比べるとシンプルで、アプリの開発やリリースを迷うことなく手軽に行うことが可能。

しかし、シンプルが故に使用できるツール等限られてしまうというデメリットもあり。
例としてHerokuにて選択可能なデータベースは、PostgreSQLのみ。


### 対象者
**＜AWS＞**
AWSはシステムが大きくスケールする可能性のある大企業や、AWSの知識を有したエンジニアの人材が確保できる企業に適している。
⇒システム開発では専門知識を要する一方で拡張性に非常に優れている

**＜Heroku＞**
環境構築や保守作業にできるだけ時間をかけたくない、一定の規模のサービス展開を目指している企業に適している。
⇒アプリケーションの構築からデプロイまでを簡単に行うことができるのが特徴

## まとめ
Herokuは、アプリケーション開発を簡単に実施することができるPass製品である。
AWSと比較し、わかりやすい一方でシンプルが故に使用できるツール等限られてしまうというデメリットもある。


### 参考情報
https://jp.heroku.com/
https://mailertogo.jp/blog/heroku-vs-aws