こんにちは、だいきです。
Rubyでサービスを開発すると、AWS(アマゾンウェブサービス)とHerokuどっちで公開するか悩む人は多いのではないでしょうか。僕も初めてサービスを公開しようと考えているとき、かなり悩みました。
そこで、今回は実際に使用しているからこそ分かるHerokuのメリットとデメリットについて説明していきたいと思います。
Herokuとは、PaaS(Platform as a Servise)と呼ばれるサービスです。簡単説明すると、アプリケーションを実行させるためのプラットフォームなのです。
PaaSは、レンタルサーバーの進化版だと思っていただいても大丈夫です。
PassSの便利な点として、以下のステップがなくても、サービスをリリースできると言う点です。
などなどです。
これらを構築するには、かなりの知識が必要になります。そのため、Webアプリケーションを作り切っても、なかなか市場に出すことができないのです。
しかし、これらの作業をHerokuは行なってくれているため、Webアプリケーションを作れば、すぐにネットに公開することができ、いち早く市場に出すことができます。
自社でサーバーを管理していると、24時間365日サーバーを監視する必要があります。もし、1月1日にサーバーが止まると、サーバーを動かすために、サーバー室へいく必要があります。
そのような管理は全て、Herokuが行なってくれます。極論、何もしなくてもずっと勝手に動き続けています。
また、友達の話によると、管理にかかる時間は、AWSと比べると10分の1程度だそうです。
スケールアウトとは、ユーザーの増加等で、処理能力を上げる必要があるときに、サーバーの台数を増やし、システム全体の全体の処理能力を向上させることです。
Herokuでサービスを公開していると、ユーザーが多くなってきたとき、コマンド1つでスケールアウトが可能になります。
一般的にスケールアウトを行う時は、最初からある程度スケールアウトが可能なように設計をしておく必要があったり、ややこしい手続きや処理が必要になったりします。
初期段階のサービスにこれだけの時間をかけるのはなかなか難しいと思いますので、Heroku のスケールアウトが簡単なことはかなりのメリットだと思います。
Heroku は、デプロイごとに、バージョンを管理してくれています。
そのため、デプロイ後にバグを発見した場合は、コマンド1つで前のバージョンに戻すことができます。バグを発見するたびに、サービスを停止していると、利便性が下がります。
しかし、このようにバージョンを戻すことができれば、サービスを運営させることができるので、利便性は下がりにくいと思います。
Heroku には、SSL、エラー通知、メール配信、画像保存、動画保存、パフォーマンスチェック、DBの自動バックアップなどなど多くの拡張機能があります。
これらの拡張機能を使うことで、ウェブアプリケーションだけに集中することができるため、開発全体の速度や精度が上がり、よりよいものをつくることができると思います。
また、自ら実装するとバグやセキュリティーなど問題が起きそうな部分を拡張機能に任せることで、より安全なアプリケーションを作ることができます。
僕が作っているサービスも、バグが起こりやすい部分は拡張機能で実装をしています。
Herokuは、無料の範囲内であればアクセス数などに関わらず無料で使えます。そのため、無料でデモ用や開発用、本番環境などを作ることができます。
AWSだと、2つの環境を作ると、2つ分の費用が掛かってしまうます。これはHerokuの大きな利点ではないかと思います。
AWSと比べると、Herokuはいじれる範囲が少ないため、自社のサービスにあった環境を構築するのは難しいと思います。初期の段階では感じませんが、サービスが大きくなると、Herokuでは実装でいない箇所がでてくるので、他のサービスに乗り換える必要があると思います。
もちろん、乗り換える必要がないサービスもありますので、一概には言えませんが、このようなデメリットがあるのはたしかです。
東京のリージョンに対応していないので、少し遅いと言われています。僕はあまり感じませんが、遅いそうです。
あまりHeroku に関する記事はなかったので、今回はHeroku のメリットとデメリットについて書いてみました。
初めてアプリケーションをリリースする方はHeroku がいいと思います。そして、ある程度サービスがでかくなったときに、どうしていくかを考えていくといいのではないかと思います。
以上、だいきでした。