Aikの技術日記

技術的な進捗とか成果とかを細々と投稿するブログです。時々雑記も。

Heroku使ってみた Part1 - 概要とチュートリアル編

はじめに

だいぶお久しぶりです…筆者です。
前回の投稿からまただいぶ期間が離れましたね…。
C97の準備したり、ふつーに仕事が忙しかったりでなかなかブログ書けない日々が続いてました。

さて、今回はOpenPaaS系サービスとして名高い『Heroku』を少しかじってきたので、色々まとめておこうかと。
jp.heroku.com

ちなみに筆者のHeroku知識はほぼ0でした…が、公式のドキュメントが非常に整っていてあまり困ることはありませんでした。
((まーほとんど英語のドキュメントですが

それでは行きましょ|д゚)

Heroku概要

早速チュートリアルを始める…前に、Herokuとはなんぞやの概要から。

Heroku はアプリの構築、提供、監視、スケールに役立つクラウドプラットフォームで、アイデアを出してから運用を開始するまでのプロセスを迅速に進めることが可能です。
また、インフラストラクチャの管理の問題からも解放されます。

Heroku公式より

簡単にまとめると、「自分の作ったアプリケーションをクラウド上に公開できるプラットフォーム」と言ったところでしょうか。
レンタルサーバーに「アプリケーションが動くプラットフォーム機能」がくっついたものと考えてもいいかもしれません。

また、Herokuは現在、Official Supportとして下記の8言語の「Build Pack」というモジュールを公開しています。

なお、Build Packとは…簡単に言うと「Heroku上でアプリケーションを構築するパッケージ」のこと。
正確には「デプロイされたコードをdynoで実行可能な形に構築する」ということらしいです…。
dynoについては別記事のHeroku関係余談記事に載っける(つもり)のでそちらを参照に。

また、上記に挙げた以外にもサードパーティ製のbuildPackを使えば、Linux環境下で動く言語ならなんでも使用できるとのこと。

ちなみに上記のように「クラウド、言語、データベースが自由に選べるPaaSサービス」を OpenPaaS というそうです。
Heroku以外だと、RedHat社が提供するOpenShiftとかが有名どころですかね。
※参考記事: クラウドの開発環境と実行環境をオープンにするOpen PaaSの登場 - Publickey
AzureやAWSと異なり、上記のように「自分の好きな言語やフレームワーク、DBを選べる」ってのがOpenPaaSのメリットだそうな…。

なお、Heroku自体は2007年に創業された企業ですが…2010年にはsalceforceに買収されてるみたいです。

概要はこんなところで…早速チュートリアルに沿って、アプリケーションを作ってみましょう!

チュートリアルをやってみる(Node.js)

今回はNode,jsでチュートリアルをやってみることに。
なんだかんだで一番親しみある&使い慣れてる言語がJavaScriptなもので…。

Heroku公式さんが提供されてるこちらの記事を参考にやってみました。
devcenter.heroku.com

英語記事ですが「非常に簡素な英語ですし」「やってることもそんなに難しくない(ターミナルからコマンドを叩いていくだけ)」 なので、ぶっちゃけそんなに難しくなかったです。
具体的にやった事を書くと:

  1. HerokuアカウントとNode.js、npmをインストール
  2. Heroku CLIをインストール※要Gitインストール
  3. Heroku公式が提供するNode.js用チュートリアルリポジトリをclone
  4. インスタンス?作成〜アプリケーションデプロイ
    1. heroku createでHerokuインスタンス?作成
    2. git push heroku masterでデプロイ
    3. heroku ps:scale web=1でWebサーバーに使うリソース量を設定
    4. heroku openでアプリケーションオープン
    5. heroku logs --tailでオープン中のアプリケーションのログも観れる
  5. heroku local webでローカル環境下でアプリケーションを実行(http://localhost:5000で見れる)
  6. heroku open [指定したページアクション]で指定したページアクションが開く
  7. heroku run bashでdynoがどのように動いてるかがわかる(個別の1度限りのdynoを作成し、その中でbashシェルを開くコマンドを実行)
  8. heroku config:set TIMES=2で設定値を自由に指定可能
    • heroku configで現在設定している設定値を見ることができる
    • 設定値の編集は.envファイルにて可能
  9. npm install pgやコードを書き換え、PostgresのDBをアタッチ※要Postgresのインストール

他にも:

  • heroku ps: アプリを動かすためのdynoがどの位動いているのか確認可能
  • Procfile: アプリを起動するために実行するコマンドを明示的に宣言できるファイル、ルートディレクトリに配置(詳しくはここ)
  • Node.jsでHerokuアプリケーションを稼働させると「Heroku側はpackage.jsonを参照してアプリケーションを構築する」
    • アプリがデプロイされると「Herokuはこのファイルを読み取り、npm installコマンドを使用して、依存関係とともに適切なノードバージョンをインストール」する

…ということもわかりました。

やってみてわかったのは、「実際に触ってみないと分からない」こと。
そういう意味では、ここまで分かりやすいチュートリアルが公式から提供されているのはいいことですなぁ。

余談: 無料のWeb dynoについて

ちなみに、Heroku無料プランだと「無料のWeb dyno」が付与されるみたいですが…。
heroku openでアプリを稼働しっぱなしだと無料枠が食いつぶされる」…なんてこともなく。

dynoが30分間Webトラフィックを受信しない場合、自動スリープしてくれるみたいです。
※参考記事: Free Dyno Hours | Heroku Dev Center

試しに、heroku openで稼働しっぱなしだったアプリケーションに対しheroku psをかけてみると…:

$ heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== web (Free): node index.js (1)
web.1: idle 2020/01/24 21:25:51 +0900

…と、dynoサーバーが「idle」状態になってるのがわかります。
いちいち稼働状態かどうかを気にしたりしなくていいのはすごく楽ですね( ˘ω˘ *)

最後に

今回はこんなところで終わっておこうかと。
これからは…:

…とかとかを行い、Herokuのことを知ったり…。
せっかくNode.jsでのWebアプリケーション構築のこともかじれたので:

  • Express × Postgresを使ってローカル環境下でWebページを構築してみる
  • 作成したアプリをHerokuにデプロイ

…とかとかもやっていこうかと!
あと、それとは別に余談記事も…。
((dynoや本チュートリアルで使用したnpmパッケージについてまとめていく予定です

それでは|д゚)