[Heroku] Herokuの有用な機能・サービスのご紹介


[Heroku Advent Calendar 2016](http://qiita.com/advent-calendar/2016/heroku) 22日目です。ふと見たら空いていたので、埋めるべく二度目の挑戦です。

# はじめに

Xmas目前、ACも随分と佳境になってきましたね。

私といえば、最近 MacBook を買ってしまって、Retina ディスプレイを PCで使う意義って、こんなにもあるもんだなと感じてます。こんなにソースコードが読みやすくなるなんて考えても見ませんでした。すごい。Retinaの恩恵って、画像よりも、絶対文字ですよね。ほんとプログラマな人たちには、Retinaモデルの Macbookをおすすめします。というか、Airが新しいのでないので、もうRetinaシリーズのみになるのかな。

# Heroku のメリット

今更ではありますが、半年使ってきてみて、ホント便利だな Heroku って感じます。その他の PaaSも使っていたので、Herokuの優秀なポイントは、みなさんによく理解いただいて、使っていただければそのグレート加減を体感していただけます。無償でもアプリ作って実際に deployして動かして稼働確認取れますし、クレジットカード登録すれば、無料のアドオン追加枠も広がります。できる事自体の制限は多いように見えますが、ちょっとした開発→テストであれば、無料分で十分だったりします。[Pricing](https://www.heroku.com/pricing#dyno-comparison)ページに詳細書いてありますので、どうぞご覧ください。

## 1) git コマンドで deployできる

余計なコマンド入りません。`git`のリモートリポジトリを追加して、`git push`するだけです。これ以上のメリットは、今の世の中では必要ないでしょう。

## 2) アドオンがホント簡単に使える

某社のは、標準とは別のサービスを使わないと、アドオンが利用できない形態だったり、サービス同士を明示的に組み合わせないと利用できなかったり、一筋縄ではいかない事がママあります。しかし、Heroku、そんな厄介なことを開発者には求めたりしません。必要なアドオンのインストールボタン押すだけで完了です。必要な設定情報は環境変数に格納されますし、言語ごとに必要な情報も自動的に設定されます。だから、何も考えずに `Rails`をDeployすると、必要な環境変数をすべて定義して、標準状態で PostgreSQLも利用可能な状態になってます。まっさらな状態で deployしても、ちゃんと Production環境として定義されてますし、助かります。ってそういうgem入れてるだけってのもありますが、自動的にやってくれるのほんと助かる。

PostgreSQLにかぎらず、他のアドオンもすぐに利用できるようになりますし、利用方法も一般的だったり、さらに簡単に利用できるようになっていて、オトクすぎます。

# おすすめしたい Herokuの機能・サービス

本編です。全てではありませんが「ああ、こりゃすごい」と機能やサービスをご紹介します。こいつぁすげぇぜ三本立てです。

1. Heroku Buttons
2. Pipelines
3. Portability

## Heroku Buttons

[Heroku Buttons](https://www.heroku.com/elements/buttons)という機能があります。開発者が楽をするというよりも、導入者や展開を楽にしてくれる魔法のツールです。

これは、gitのパッケージルートに `app.json`という制御情報の Jsonを書いていただいて、書式に従ってGithubの `README.MD`に記載していただければ、該当のgitパッケージを自動的に Herokuへ deploy してくれるすぐれものです。

[![Deploy on Heroku](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy?template=https://github.com/dreamhouseapp-jp/dreamhousejp-web-app)

Markdownの書式に習って記述すると、このようにボタンを貼り付けることができちゃいます。このボタンを押すと、指定されたように deployされますので、横展開がひじょーに簡単になります。

## Pipelines

Continuous Delivery を実現するための機能です。開発用のDyno、テスト用のStaging Dyno、本番のProduction Dynoと、実際に開発して本番へ適用しようと考えると、いろいろな実装環境が必要になってきますが、これをすべて Heroku Dashboard上で管理できてしまうのが、この[Heroku Pipelines](https://devcenter.heroku.com/articles/pipelines)です。

また、Githubとの連携にも対応していて、Githubで `Pull request` を上げると、それが Heroku Pipelines からも[Review](https://devcenter.heroku.com/articles/github-integration-review-apps)することができてしまう驚き。

これに限った話ではありませんが、Heroku はすべてがAPIとして公開されていますし、CLIも提供されているので、組み合わせによって CI/CDを自動化させることも可能です。[Heroku CI](https://www.heroku.com/form/ci-beta)なんてのも、出てくるみたいなので、CI/CD を Herokuで完結できるようになるのかな?

[![youtube動画](http://img.youtube.com/vi/eOdOm87AxoY/0.jpg)](http://www.youtube.com/watch?v=eOdOm87AxoY)

## Portability

可搬性です。開発したアプリケーションが、気がついたら Herokuでしか動かなくなってしまったときに、他のサービス並行できなくなることはリスクにつながります。

しかし、そもそも Herokuは、[The Twelve-Factor App](https://12factor.net/ja/)の方法論に従って開発されたアプリケーションを稼働させる環境として生まれたようなものです。この[The Twelve-Factor App](https://12factor.net/ja/)の考え方に従っていれば、大抵の環境で稼働するようなアプリケーションになるしかないと考えられますし、ある特定環境でしか稼働しない、ではなく、どこでも実行可能なアプリケーション = 可搬性の高いアプリケーションを開発することができるようになるはずです。

まぁ、実際はアドオンの仕組みやPipelinesなど、特定の機能が提供されているので、その点をどうにかする必要はありますが、それでもメインのロジック部分はどこでも動くようなアプリケーションになることでしょう。

この考え方自体は、Heroku を使うために必須というよりも、モダンなアプリケーション開発に重要な方法論の一つです。以前、Microservicesの実現に必要な項目の一つとしても、12Factor Appの考え方はアプリケーション開発に重要と説いていることと同じ理由ですね。

<iframe src="//www.slideshare.net/slideshow/embed_code/key/7nGT1gbIlPz7oz" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/sho7650/you-should-realize-the-microservices-for-infrastructure-engineers-and-developers" title="Microservicesを実現するために、インフラエンジニアと開発者がすべきこと" target="_blank">Microservicesを実現するために、インフラエンジニアと開発者がすべきこと</a> </strong> from <strong><a target="_blank" href="//www.slideshare.net/sho7650">Takashi Abe</a></strong> </div>

# さいごに

Slideshare が埋め込めるのか異常に謎ですが、やけに時間がかかって書き上げました。

まだ他に良いことも、具体的に細かいことも書きたいので、なんか１つずつ、日々書き記していくことが重要なんだなって、やっぱり思います。かしこ。