Webアプリケーションを作ってみて、インターネット上に公開したいと思っても「どこで公開したらいいのだろう?」と悩みますよね。
作成したアプリケーションがRails製だろうとLaravel製だろうとDjango製だろうと、それらのデプロイ先としてのおすすめは個人的に同じです。
この記事では個人で作成したWebアプリケーションをデプロイするにはどれを使ったらいいのか?ということを書いていきます。
- デプロイ先の種類(VPS・Heroku・クラウド)
- おすすめのデプロイ先
- それぞれのデプロイ先の特徴
せっかく使ったアプリケーションならインターネット上に公開して使えるようにしたいですよね。
今まで色々公開してきたので、それらの経験も踏まえて書いていきたいと思います。
Webアプリケーションのデプロイ先4種
デプロイ先として悩むのは主に以下なんじゃないかなと思います。
- VPS
- Heroku
- AWSやGCP、Azureなどのクラウド
- Firebase
それぞれ特徴があるので、この記事ではこれらのデプロイ先について書いていきます。全部使ったことがあるのでそれなりには参考になるんじゃないかな。
静的なWebサイトなら無料で公開可能
HTML/CSS/JavaScriptだけで作られたような、バックエンドが絡まないWebページであれば、以下のようなものを使うことで無料で公開することができます。
- Netlify
- AWS S3でホスティング
- Vercel
もし静的なWebページで簡単に無料で公開したい!っていうのであれば、上記のようなものを使えばいいです。
ただデプロイしたいものはおそらくデータベースなどが絡んだものですよね。そうであれば、そう簡単にはいかないので読み進めていって欲しいです。
おすすめのWebアプリのデプロイ先はVPS
個人で作ったアプリケーションを公開するのに一番おすすめはVPSです。VPSっていうのがいまいちピンとこないかもしれないけど、「1台自由に使える仮想サーバーを貸してあげるよ」っていうサービス。
root権限があるので、自分の好きなようにWebサーバーをインストールして設定したりすることができます。例えば、OSはUbuntuにしてNginx入れてLaravel入れてデータベースはMySQL入れて・・・っていうことができる。
簡単にアプリケーションを公開する時の流れはこんな感じです。
- OSを選択してサーバー構築
- サーバーにSSH接続
- 好きなライブラリをインストールして環境構築
- Webサーバーやアプリケーションサーバーをインストール・設定してアプリケーション公開
VPSはクラウドみたく色々難しいところが少ないので、個人で開発したものを公開するにはやりやすいと思います。申し込んだらサーバーが用意されるので、後はそのサーバー内でアプリケーションが動く環境を作っていくだけです。
どういった流れでVPSを使ってWebアプリケーションを公開することができるか?っていうのは以下の記事なんかが参考になるかと。
クラウドとの違い
VPSはクラウドと比べると機能性や拡張性は劣ります。
- VPSはクラウドほどのリソース増減の柔軟性はない
- VPSはクラウドほどの機能性はない
クラウドの場合はインスタンスの種類がたくさんあって、かなり柔軟にそれらを変更することができるっていうのが魅力だけど、VPSの場合はクラウドほど柔軟にスペックの変更はできません。
また機能的にもクラウドは様々な機能があるけど、VPSはそれと比べると機能はかなり少ないです。(AWSにはたくさんの機能があるけど、VPSはその中のEC2だけみたいなイメージ)
VPSの料金
料金は1000円以下から使えるものが多くて、月額上限料金も決まっているからクラウドのようにクラウド破産の心配もありません。
個人で使うなら月額上限の料金が決まっているって結構安心ですよね。クラウドより安く使えると思います。
Webアプリの公開におすすめのVPSは以下の記事で書いているので、もしVPS良いなって思ったらこの記事を見終わった後にでも見てみてください。
Herokuを利用する
Herokuは比較的簡単にアプリケーションを公開することができるのが魅力です。自分でサーバー内にアプリケーションが動く環境を1から構築する必要がありません。
HerokuはPaaSなので最初からアプリケーションが動く環境が用意されています。クラウド(EC2やGCE)やVPSの場合は自分でWebサーバー入れてMySQL入れて設定して・・・っていうことが必要だけど、Herokuはそれが必要ない。
例えばHeroku スターターガイド (Laravel)を見てみると、Procfileを作成してコードをデプロイすればそれで動くというかなりの楽さです。
Herokuの料金
Herokuは無料プランがなくなってしまったのが残念ですが、最安で月あたり5ドルで利用可能です。
もし気になったらEco・Basicから始めてみるといいでしょう。
Herokuの拡張はアドオンで行う
HerokuはPaaSのため、自分でサーバーに入ってコマンドを色々いじるっていうことはせず、必要な機能が欲しかったらアドオンを探して追加することで利用します。
MySQLを使うのにもアドオンが必要だったりして、以前使った時にはそのMySQLのバージョンが古くてPostgres使ったような記憶もある。
Herokuは比較的簡単に公開できるけど、自分で色々設定できない分こういうアドオンとか使って環境作っていかないといけないのは面倒っていうのがあります。
勉強のためならHerokuでなくVPS使おう
Herokuは自分でWebサーバーやMySQLをコマンド使ってインストールして、設定して・・・ということをやりません。公開目的だけならいいですが、勉強目的も含めるならVPSを使うのが良いです。
VPSなら自分で色々インストールして構築するっていう一連の流れを体験できるので。(クラウドも体験できるけど、ちょっと難しいです。)
AWSやGCPなどのクラウドを利用する
クラウドというと、浮かんでくるのは大きく3つでしょうか。
- AWS・・・Amazonのクラウド
- GCP・・・Googleのクラウド
- Azure・・・Microsoftのクラウド
クラウドといってもかなり多くの機能があって一概には言えないけど、結構な知識が求められます。初めてアプリケーションを公開するっていう場合は、間違いなく絶望するのでおすすめしません。
逆にクラウドの知識をつけたいんだ!とかVPSでアプリケーション公開したことある!とかならいいでしょう。
リソース増減を気にしたい人におすすめ
クラウドの場合はサーバーのインスタンスの種類がかなりたくさんあります。そのため、自分のアプリケーションのスペックや利用量に応じて柔軟に選ぶことができる。
リソースの増減を気にしたいならおすすめしますが、アプリケーションのスペックや利用量なんてことを考える人は個人では一握りぐらいでしょう。
クラウドは知識が求められることは覚悟しよう
クラウドは機能が多すぎてやれることの幅もとても広いです。Webアプリケーションを公開したい!という要望1つとっても、どの機能を使って公開しようかな?と迷うはずです。
AWSで何か公開しようと思っても以下のようなことが浮かんでくる。
- Webアプリケーション動かすならとりあえずEC2かな?
- APIだけLambdaにしてフロント部分は他でホスティングしようかな?
- いやそもそもECSとかでDocker使ってやろうか?
- 楽したいからElasticBeanstalkでとりあえずやってみるか?
上で書いたような単語がさっぱりならクラウドはやめておきましょう、死んでしまいます。
Firebaseを利用する
Firebaseっていう便利なものもありますよね。FIrebaseはホスティングもできるし、データベースやストレージも用意されていて利用も簡単なのが魅力です。
ただサーバーを起動させておくようなアプリケーションはデプロイして動かせないので、向いていません。
使い方としてはフロントメインで作っているけど、データベースもちょっと使いたいっていう人にはいいんじゃないかな。
Firebaseの料金
Firebaseは無料で使うことのできるSparkプランがあります。
無料だとその分使える容量とかも少なかったりするけど、もし使うとなったらまずは無料で試してみるといいです。
Firebaseのデメリットを理解しておこう
Firebaseは手っ取り早くアプリケーションを動かすのに便利なんだけど、やっぱり使用用途としては限られてきます。
- FirebaseはLaravelやRailsのようなサーバーを動かすものではない
- FirebaseのデータベースはNoSQL
Firebaseはあくまでフロントをメインで作っている人が、バックエンドの機能もちょっと欲しいっていう時に力を発揮するものです。例えばチャットアプリで使うDBだけ欲しいとかなんかには良いです。
また、データベースはNoSQLなのでMySQLやPostgresのようにリレーションを組むことができません。
Firebaseはフロントメインのアプリケーションをデプロイするならあり
Firebaseはフロントで画面作っているけど、認証機能だけ欲しいとかデータベースの機能だけ欲しいとか、あくまでフロントメインで考えた時に使いやすいサービスです。Firebaseにデプロイも簡単ですしね。
もしバックエンドが絡んでいるのであれば、CloudFunctionと組み合わせるとかっていう方法も取れますが、あくまでAPI的な利用になります。
LaravelやRails、Express、Djangoなどのアプリケーションの場合は選択肢から外してしまいましょう。
まとめ
いくつかWebアプリケーションをデプロイするサービスを見てみました。
- VPS
- AWS、GCPなどのクラウド
- Heroku
- Firebase
VPSはクラウドほど難解ではなく、自分でWebサーバーやデータベースなどをインストールして環境を作ることができるのが良いです。勉強にもなりますしね。
Webアプリケーションの公開におすすめのVPSは以下で書いているので、気になったら参考にしてみてください。