Skip to main content
Heroku Javaで12-Factor App
Mitsuhiro Okamoto
Senior Developer Evangelist
Salesforce.com
@mituhisro
岡本 充洋
Salesforce.com
Senior Developer Evangelist
Java歴約10年
(内5年ぐらいSalesforce系へ留学中)
@mitushiro
意外と知らない方が多いですが
​HerokuはSalesforce.comファミリー
Salesforceのプラットフォームアプローチ
​
業務のエキスパート自身が、
プログラマーの手を借りずに
業務アプリを開発できる
プログラマーの生産性を最大化 革
新的なアプリを開発にリソースを集
中できる
Herokuが考えるアプリケーション開発の姿
​あらゆる領域において、アプリケーションの重要度が高まっている今、サーバーやデー
タベース環境構築を迅速に行い、運用コストを最小限に抑える必要があるとHerokuは
考えています。
​開発者はサーバーやオペレーティングシステムの事は考える必要はなく、インフラの管
理業務ではなくアプリケーション開発に集中するべきです。
​アプリケーション開発で頻繁に利用される機能は、一から作る必要はありません。オー
プンソースを梃子のように使うことで、アプリケーション開発にかかる期間とコストを最小
化できます。
​
アプリ実行環境
Dyno(ダイノ):
あらゆる開発言語で
作られたアプリを実行可能な
Linuxベースのコンテナ
データベース:
信頼性の高い
クラウドデータベース
拡張機能(アドオン):
140以上の拡張機能
モニタリング、ビッグデータ
ログ管理、など
Herokuの構成要素
​顧客アプリを開発、運用、拡張するためのプラットフォーム・アズ・ア・サービス(PaaS)
Ruby
Node.jp
Java
PHP
Python
Scala
Clojure
ビッグデータ
SSL
Email
SMS
検索
分析
モニタリング
ロギング
24/7/365 運用
セキュリティ
ヘルスチェック
高可用性
暗号化
ロールバック
Heroku Connect:
Salesforceとの
シームレスな接続
The Twelve Factor App
​現代的なアプリケーションを設計、構築、運用するための12の方法論
​Heroku創業者のアダム・ウィギンスがプラットフォームサービス上で
稼働する数百のアプリの特性から得た知見をまとめたもの
​(原文)http://12factor.net/
​(日本語訳)http://12factor.net/ja/
The Twelve Factor App
​I. コードベース
​バージョン管理されている1つのコードベースと複数のデプロイ
​II. 依存関係
​依存関係を明示的に宣言し分離する
​III. 設定
​設定を環境変数に格納する
​IV. バックエンドサービス
​バックエンドサービスをアタッチされたリソースとして扱う
​V. ビルド、リリース、実行
​ビルド、リリース、実行の3つのステージを厳密に分離する
​VI. プロセス
​アプリを1つもしくは複数のステートレスなプロセスとして実行
​VII. ポートバインディング
​ポートバインディングを通してサービスを公開する
​VIII. 並行性
​プロセスモデルによってスケールアウトする
​IX. 廃棄容易性
​高速な起動とグレースフルシャットダウンで堅牢性を最大化
​X. 開発/本番一致
​開発、ステージング、本番環境をできるだけ一致させる
​XI. ログ
​ログをイベントストリームとして扱う
​XII. 管理プロセス
​管理タスクを1回限りのプロセスとして実行する
Gitを利用したアプリケーションデプロイ
Slugコンパイル
アプリ実行環境
の判別
依存ライブラリ
などのインストール
/セットアップ
Herokuでのアプリケーションデプロイ
$ git push heroku master
Counting objects: 4, done.
Delta compressionusing up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 367 bytes | 0 bytes/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Node.js app detected
remote:
remote: -----> Creating runtime environment
remote:
remote: NPM_CONFIG_LOGLEVEL=error
…
remote: -----> Building dependencies
remote: Pruning any extraneous modules
remote: Installing node modules (package.json)
remote:
…
remote: -----> Launching... done, v4
remote: https://agile-meadow-8177.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy.... done.
To https://git.heroku.com/agile-meadow-8177.git
777c350..6219ad4 master -> master
アプリ実行環境の判別
依存ライブラリ
などのインストール/セットアップ
アプリの起動
アプリケーションコードの同期
Javaを利用した場合も考え方は同じ
Slugコンパイル
アプリ実行環境
の判別
依存ライブラリ
などのインストール
/セットアップ
pom.xml
build.gradle
Demo
The Twelve Factor App
​I. コードベース
​バージョン管理されている1つのコードベースと複数のデプロイ
​II. 依存関係
​依存関係を明示的に宣言し分離する
​III. 設定
​設定を環境変数に格納する
​IV. バックエンドサービス
​バックエンドサービスをアタッチされたリソースとして扱う
​V. ビルド、リリース、実行
​ビルド、リリース、実行の3つのステージを厳密に分離する
​VI. プロセス
​アプリを1つもしくは複数のステートレスなプロセスとして実行
​VII. ポートバインディング
​ポートバインディングを通してサービスを公開する
​VIII. 並行性
​プロセスモデルによってスケールアウトする
​IX. 廃棄容易性
​高速な起動とグレースフルシャットダウンで堅牢性を最大化
​X. 開発/本番一致
​開発、ステージング、本番環境をできるだけ一致させる
​XI. ログ
​ログをイベントストリームとして扱う
​XII. 管理プロセス
​管理タスクを1回限りのプロセスとして実行する
​Pull Requestから自動的にブランチビルドを作成
PipeLineによるアプリケーションのレビュー
GithubのPull Requestと連携
Demo
The Twelve Factor App
​I. コードベース
​バージョン管理されている1つのコードベースと複数のデプロイ
​II. 依存関係
​依存関係を明示的に宣言し分離する
​III. 設定
​設定を環境変数に格納する
​IV. バックエンドサービス
​バックエンドサービスをアタッチされたリソースとして扱う
​V. ビルド、リリース、実行
​ビルド、リリース、実行の3つのステージを厳密に分離する
​VI. プロセス
​アプリを1つもしくは複数のステートレスなプロセスとして実行
​VII. ポートバインディング
​ポートバインディングを通してサービスを公開する
​VIII. 並行性
​プロセスモデルによってスケールアウトする
​IX. 廃棄容易性
​高速な起動とグレースフルシャットダウンで堅牢性を最大化
​X. 開発/本番一致
​開発、ステージング、本番環境をできるだけ一致させる
​XI. ログ
​ログをイベントストリームとして扱う
​XII. 管理プロセス
​管理タスクを1回限りのプロセスとして実行する
多くのFortune 500企業やスタートアップがHerokuを利用
みずほ、三菱UFJ、SMBC、セールスフォースより投資され注目されるフィンテック
アプリダウンロード数80万以上の運用を、数名のスタッフで運用
Heroku Performance Dyno上で顧客管理を行い、Heroku PostgresやRedisにデータを集約
日本初の取引、残高を分析してくれるお金の一括管理アプリ
Herokuを活用し、拡張性の高い
お金の一括管理アプリを運用
​プログラム言語別のチュートリアル資料が掲載
Heroku開発者向けドキュメント
devcenter.heroku.com
thank y u