[5分でできる] Node.jsでつくったWebアプリを無料でサーバー公開する方法(前編)
Heroku(読み方: ヘロク)とかサーバーレスについてはもう知ってるよーん、って人は、[Heroku アカウントの作成] の章から読むといぃよ!(° ꈊ °)✧˖°オホッ!
■ Webアプリはできたものの、結局どこで動かせばいいのかわからない。
拙者、昨日、数少ないトモダチのひとりである、UI/UX系デベロッパーから「KoaでつくったWebアプリを鯖の上で動かしたいんだけども、どこがおぬぬめですかー?やっぱりサーバーレス?」っていう質問を受けたんす。
なぬ!最近はKoaなるフレームワークがアツいんか!と知らしめられるとともに、ふむ。この流れの激すぃ世の中、インフラ系追ってないと、確かにどこで動かすのが簡単で安いのかって、わからないなぁ。だって拙者だっていっぱいいっぱいだもん。涙。って、シミジミ思ったんす。シジミ。
それでまぁ、結論からすると、Herokuでよくね?ってことになったんだけど、なんでHerokuにしたのかな的なところをまとめちゃおっかな。うまくまとめられるかな。というのがこの記事っす。
■ まず、サーバーレスって何者?
普通、プログラムっていうのは、それを動かすためのサーバーが必要でありますです、はい。で、そのサーバーというのは、常に稼働していなければなりませぬ。ひと昔前までは、Webサイトをつくるには、レンタルサーバーを契約したりしてたよねー。あ、今も、もちろんあるけど。そんで、その鯖の上にミドルウェアインスコして、アプリを乗っけて、ワーーーーッチャチャチャチャチャチャチャチャ!ってやってたわけです。
そんな時代も今は昔。いや、今でも現役なんだけどさ。でも、やっぱ、ビッグウェーブに乗っかっていきたい拙者のまわりでは昨今、「レンタルサーバー使ってマウス!(`・ω・´)キリッ 開発言語はPHPっす(`・ω・´)キリッ」みたいなひとは減ってしまったわけだよ。
というのも、たしか、2014年ぐらいからかしら。サーバーレスなるものが台頭してきよった。このサーバーレスなるもの、なにがSUGEEのかというと、これまで必要だったサーバ動かす費用不要!実行環境(PHPとかNode.jsとかね)のインスコも不要!鯖を設定する知識も一切不要!なにそれ!インフラ系エンジニアの敵!?仕事奪う系!?いやまさか。ソースコードさえアップロードすれば、すぐに鯖として動いちゃうよん♡監視も冗長構成もなーんも考えなくっていーよ♡っていう、なにそれ、すてき!抱いて!っていう、めちゃんこいーやつだったわけで。
現状、サーバーレスの有名どころといえば、AWSの「Lambda」、グーグルの「Google Cloud Functions」、マイクロソフトの「Azure Functions」らへんかな。AWS の「S3」もWeb鯖にできるから、個人的にはサーバーレスのナカーマ。ここまでは、動いてるサーバーが見えもしない。どこで動いてるのかさえわからない。サーバーレスの定義次第だけど、「サーバーが動いてるのは見えちゃってるけど、ソースコードをウプするだけで勝手に動く」という意味で捉えれば、AWSの「Elastic Beanstalk」や、Herokuの「Heroku」もナカーマ。と、個人的には分類してる。
□ ここまでのまとめ
サーバーを立てなくても、ソースコードをアップロードするだけでWebサービスがリリースできちゃう。それが、サーバーレス!
サーバーレスは、安い!早い!ウマい!
■ で結局、どれを使えばいいの?
ぶっちゃけ、すきなものを使えばいいし、ほとんど趣味の世界なんだけど、無料でスタートしたいのであれば、無料枠が設定されているAWSの「Lambda」か、Herokuの「Heroku」がいいかな、と思う。拙者、グーグルとマイクロソフトは触ってみたことないからわかりまへん。
個人的には、AWS大好きマンなので「Lambda」でなんでもやっちまいたい。でも、セットアップとか操作の手軽さは、「Heroku」の圧勝。AWSはなんというか、こう、設定の箇所がいろいろありすぎて、そこが柔軟性があっていいところなんだけど、でもパッと見でわかりづらいんだよね。インフラ知識ゼロのデベロッパーが使いやすいモノ、っていう視点では、「Heroku」かな、って。
ただ、ある程度サービスが大きくなって、アクセスが増えたりしてきたときのパフォーマンス、安定性、費用対効果とかは、「Lambda」のほうがいいと思われ。「Heroku」は、スモールスタートにはもってこいだけど、システム障害が割と発生してるし、スケールアップしたときの費用が割高感ある。
□ ここまでのまとめ
すきなの使うにこしたことはない。けど、Herokuは無料で始められる上に、すげー簡単。一般ペーポー向け。オヌヌメ。
Lambdaも無料ではじめられるけど、設定まわりとかが、若干ややこい。どちらかと言えば、玄人向け。ただし、使いこなせるようになれば受けられる恩恵はデカい。
■ Herokuってうまいの?
正直、インフラ知識があまりない人にとっては、サイコーのサービスと思いマス。ただいくつか、事前に知っておいたほうがいいかな、ということもあるゆえ、書いておこう。
□ システム制約的な話
Herokuは手軽に始められるんすけど、デフォでサポートしているDBが、PostgreSQLなんす。もちろんMySQLも使おうと思えば使えるけど、addonを追加しないといけない。既存の環境がMySQLだったり、アプリの制約でMySQLが必須だったりすると、そのあたりが若干面倒かな、って思います。
無料で使える枠は毎月550時間、という制約があって、日に換算するとだいたい23日ぐらい。毎月の平日の日数ぐらいかな。毎日夜間はほぼアクセスがないサービスとかだと、余裕で無料枠内に収まるハズ。
無課金状態だと、アクセスがなくなってしばらくすると、自主的にお休みする。お休み中にアクセスされると、それをもって起動を始める。お目覚めの起動中のときは、すんげーレスポンスが遅くなる。
□ レイテンシー的な話
Herokuは、実はAWSの上で動いてます。リージョンは、N.Virginia。アメリカ。なので、ニッポンでリリースするサービスで、ニッポンのユーザーがターゲットの場合、毎回アメリカの鯖までリクエストが飛んでいくことになる。ゆえに、ニッポン国内に鯖がある場合と比べると、レスポンスは遅くなってしまいがち。レイテンシーがシビアなトレーディングサービスとかには向いておりませぬん。
ちなみに、めっちゃお金を積めば、Tokyoリージョンに完全にプライベートなHeroku環境を作ってもらうことも可能でやんす。ただその場合は、SalesForceというビッグな会社に何千万円かボッシュートされるみたい。
□ お金的なはなし
Herokuはスモールスタートにはもってこい!ばっちこい!なサービス。だけど前にも触れたように、実際にリリースした後に、鯖を増強させたりスケールさせたりしようとすると、費用対効果が悪くなる。辛みが深くなる。
□ ここまでのまとめ
Herokuはスモールスターター向け。DBは、PostgreSQLと相性が良い。無料で使えるのは毎月550時間まで。アクセスがないときは休眠するのでときどきすごい反応が遅いときがある。サーバーはアメリカ。スケールアップすると、かける費用に比べてあまり恩恵を受けられてない感がつのる。
今回はただのWebアプリでスモールスタートなんで、リリースが超絶簡単な「Heroku」に決めました。
■ Heroku アカウントの作成
Heroku アカウントを、https://id.heroku.com/login の [Sign Up] リンクから作成。無料でござる。
■ Heroku CLI のインストール
Herokuの操作は全てコマンドラインで行うゆえ、CLIをインスコするでござる。
MacOSで、Homebrewがインスコ済みの場合は、こうすればよろし。
$ brew tap heroku/brew && brew install heroku
$
$ which heroku
/usr/local/bin/heroku
■ Heroku CLI からHerokuにログイン
"heroku login -i" でHerokuにログイン。"-i" オプションは、インタラクティブモードの意味。このオプションをつけておくと、ターミナルの中でインタラクティブにログインを完結できる。オプションがついてないと、ブラウザが起動して、Herokuのログインを促されるから、ちょっとウザい。
$ heroku login -i
heroku: Enter your login credentials
Email: info@w0o0ps.com
Password: ************
Logged in as info@w0o0ps.com
$
□ ここまでのまとめ
HerokuにCLIでログインするときは、"-i" オプションをお忘れなきよう・・