Skip to main content
Python開発者のための
Heroku⼊入⾨門
Salesforce Developer Web セミナー
tabe@salesforce.com
@sho7650
​ 阿部  崇 (Takashi Abe)
​ Platform Specialist
Forward-Looking Statements
​ Statement under the Private Securities Litigation Reform Act of 1995:
​ This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize or
if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the
forward-looking statements we make. All statements other than statements of historical fact could be deemed forward-looking, including any
projections of product or service availability, subscriber growth, earnings, revenues, or other financial items and any statements regarding strategies
or plans of management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or technology
developments and customer contracts or use of our services.
​ The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for
our service, new products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate of
growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of any litigation, risks associated with completed
and any possible mergers and acquisitions, the immature market in which we operate, our relatively limited operating history, our ability to expand,
retain, and motivate our employees and manage our growth, new releases of our service and successful customer deployment, our limited history
reselling non-salesforce.com products, and utilization and selling to larger enterprise customers. Further information on potential factors that could
affect the financial results of salesforce.com, inc. is included in our annual report on Form 10-K for the most recent fiscal year and in our quarterly
report on Form 10-Q for the most recent fiscal quarter. These documents and others containing important disclosures are available on the SEC
Filings section of the Investor Information section of our Web site.
​ Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and may
not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are currently
available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-looking statements.
本⽇日のセミナー内容
内容
•  Herokuのとは何かを理理解し、Pythonで作ったアプリをデプロイしてみよう
•  Herokuの便便利利な機能をご紹介
対象者
•  Pythonで開発経験のある⼈人
•  ターミナルでコマンド操作ができる⼈人
•  Github を使ったことがある⼈人
•  Heroku に興味がある⼈人
•  Salesforce が好きな⼈人
ゴール
•  Python開発者が、Heroku とはだいたい何であるかを理理解し、Pythonで開発
した  Web アプリケーションを公開できるようになること
今日の流れ	
Heroku概要/
サインアップ
Python  +
Django
on  Heroku
Heroku
Dashboardの
解説
Heroku  Pipeline
による継続的
デプロイ(CD)
ü 最後に質問への回答の時間を設けます
ü 質問はいつでも送ってもらってOKです
    今⽇日の解説者
阿  部    崇 (Takashi Abe)
Platform Specialist (@sho7650)
アプリエンジニア  à HWエンジニア  à インフラエンジニア
à アーキテクト兼ITコンサル  à 現職
ライブと熱帯⿂魚が好き: Perfume/BABYMETAL/稲川淳⼆二
Heroku  概要
​ “作る”と”動かす”両⽅方に効くクラウドサービス
Webアプリの開発・運用(安定稼働)には悩みも多い	
アプリ開発者 アプリ利利⽤用者
アプリ
(本番稼働中)
アプリ
(開発中)
•  ちゃんと動いているか、OS/ミドル
ウエア/アプリそれぞれ監視しない
といけないよね…
•  ミドルウェアにセキュリティホール
が⾒見見つかった?早くパッチ当てなき
ゃ…
•  アプリで使うライブラリやソフト
ウェアなどミドルウェアを準備す
るの⾯面倒だ…
•  本番環境の他に、ステージング環
境とか開発環境とか構築しないと
いけないよね…
継続的な機能追加・改修・デプロイ
これらを”うまく”まわす仕組みを⾃自前で構築・運⽤用管理理していくのは⼤大変
“作る”と”動かす”両⽅方に効く  Heroku  の特徴を「信頼性」「拡張性」  「開発⽣生産性」の3つの観点で解説
【動かす:信頼性】

アプリ実行基盤は Heroku が管理・運用	
ミドルウェア	
DBMS	
OS	
仮想化	
サーバー	
ストレージ	
ネットワーク	
施設	
アプリケーション	
オンプレミス	
アプリケーション	
ミドルウェア	
DBMS	
OS	
仮想化	
サーバー	
ストレージ	
ネットワーク	
施設	
IaaS
(Infrastructure as a Service)	
アプリケーション	
ミドルウェア	
DBMS	
OS	
仮想化	
サーバー	
ストレージ	
ネットワーク	
施設	
SaaS
(Software as a Service)	
アプリ開発/サービス提供者管理	
クラウドベンダー管理	
凡例例
アプリケーション	
ミドルウェア	
DBMS	
OS	
仮想化	
サーバー	
ストレージ	
ネットワーク	
施設	
PaaS
(Platform as a Service)	
①  24時間/365⽇日の
グローバルな運⽤用体制
②  ⼤大規模インフラ運⽤用の
豊富なナレッジ蓄積
③  規模の原理理を活かした
対応・対策への投資
④  稼働実績の公開
他クラウドベンダーの
IaaSを利利⽤用
【動かす:拡張性】
開発アプリのキャパシティを容易易に拡張できる
構成要素 説明 拡張⽅方法
Dyno 作成したプログラムを
動かすコンテナ
平⾏行行稼働するDynoの数
を増やす
Data データを管理理・保管す
る領領域
より⼤大容量量・⾼高性能な
プランにデータを移し
切切り替える
Add-ons 便便利利な追加機能群 クリックやコマンドで
機能を追加し環境変数
を設定する
Payments
Email
SMS
Search
Analytics
Monitoring
Logging
Ruby
Node.js
Java
Python
Python
Scala
Clojure
Postgres
Redis
Kafka
まず理理解する  Heroku  の構成要素と拡張の仕⽅方
そんな簡単に拡張できるものなの?
これらのコンセプトに即し
設計開発されたアプリなら
The  Twelve  Factor  App
マイクロサービス
【作る:開発⽣生産性】
継続的な開発→デプロイの実⾏行行に役⽴立立つ機能を提供
項⽬目 説明
バージョン管理理 •  Git / Githubとの強⼒力力な連携・統合
品質を⾼高める開発
プロセス準拠
•  Pipeline機能によりレビュー >
ステージング > 本番  それぞれの
環境をスムーズに移⾏行行
環境複製 •  Forkコマンドで、稼働環境のクロー
ンを容易易に作成
エンタープライズ⽤用途にも対応できる機能/サービスを提供
項⽬目 説明
Private Spaces •  DynoやDataなど、Herokuのアプリ実⾏行行環境をネット
ワーク的に分離離された環境に構築
•  ⽇日本国内のデータセンター利利⽤用も可能
エンタープライズ
サポート
•  技術的な質問やトラブル時のサポートチケットに対して、
重要度度に応じた応答時間のSLAを提供
•  ⽇日本語でのサポート対応を提供
•  導⼊入時のアーキテクチャデザインやAdd-on選定といった
ご相談に⽇日本⼈人技術者が対応
Heroku Connect •  Salesforceのオブジェクトとの双⽅方向データ同期機能を
提供
Private Spaces
Heroku Connect
Postgres
Heroku
オブジェクト
Salesforce
お客様の声
動かす 期待通りのPaaS •  ⾃自社でのインフラ回りの運⽤用が⼀一切切不不要に
•  ハード起因の障害/ミドルウェア系のセキュリティアップデート等も任せて
おける
充実したサポート •  ⽇日本語での技術問合せは⽇日本⼈人スタッフが対応
•  アドオンに対するサポートもワンストップで実施
東京リージョン •  当初約1.0秒要していた⾃自社サーバーとのAPI通信が0.2秒に短縮(海外リー
ジョンから東京リージョンに変更更)
作る 充実したアドオン •  通常は個別契約が必要な外部サービスを「Heroku提供のサービス」として
容易易に活⽤用可能(PostgreSQL / SendGrid / Cloudinary等)
⾼高い開発⽣生産性 •  アプリのリリースがコマンド⼀一発、ロールバックも画⾯面からワンクリック
•  Webアプリをコマンド⼀一発で複製(fork)。アドオンを含む殆どの設定も
複製可能
Python開発でHeroku  を使うには
​ とにもかくにも、サインアップしましょう
Python on Heroku : 利利⽤用前提条件
​ Heroku はアカウントがあれば、いつでもどこでも利利⽤用できます
• Heroku アカウントを持っていること (このあと、取得の仕⽅方をご説明します)
• git コマンドが利利⽤用可能なこと
• (あると良良い)Heroku CLI コマンドが利利⽤用可能なこと
ソースコードを落落としてきて、デプロイする
だけなら、Heroku アカウントと gitコマンド
があれば、⼤大抵は⼤大丈夫!
Heroku の事前準備
​ Heroku のアカウントを作成しましょう。まずは、“Sign up” から始めます
https://www.heroku.com/home
Heroku の事前準備	
​ 利用者の情報を入力して、 “FREE ACCOUNT” を作りましょう
Heroku の事前準備
​ Heroku を操作するための “Heroku CLI” を導⼊入しましょう
https://devcenter.heroku.com/articles/heroku-‐‑‒cli
Python+Djangoon  Heroku
​ Pythonアプリ/WebページをHerokuにデプロイ
Herokuへアプリ/Webページをデプロイする⼀一般的な流流れ
アプリを開発したら、必要なアドオンを追加して “git push” するだけ!
起動確認デプロイアドオン追加Herokuアプリ追加アプリ準備
アプリ開発
git clone
アプリ準備 heroku create
データベース
ログ出⼒力力
監視ツール
ファイル保管
などなど
:
git push heroku logs
150以上も!?
Django を利用した Python アプリケーションをデプロイ	
​ Django テンプレートを使って、手間なくデプロイしてみましょう
Heroku  Dashboard
​ GUI  で各種操作ができるお⼿手軽ツール
Heroku Dashboard とは
​ Heroku の持つコア機能へアクセスするための Webインターフェイス
Heroku Dashboard: apps
​ 登録済み Heroku アプリを⼀一覧できます
アプリやパイプ(後述)の作成
アプリ⼀一覧
アプリの情報
Heroku Dashboard: Overview
​ Heroku アプリの概要を表⽰示します
導⼊入済みアドオン
導⼊入済みDyno
開発者たち
作業ログ
アプリログ
Dynoのリスタート
Heroku Dashboard: Resources
​ Dyno とアドオンの構成を確認できます
Dynoの詳細
導⼊入済みアドオン
Dynoの変更更
スケールが可能
アドオンの導⼊入
Heroku Dashboard: Metrics
​ アプリケーションの性能、リソースの利利⽤用状況などが可視化されます
メモリ使⽤用状況
アプリの応答速度度
アプリの
スループット
Heroku Dashboard: Access
​ アプリケーションごとに開発者のロール制御が可能です
開発者⼀一覧
各開発者の
ロール制御
Heroku Dashboard: Settings
​ Heroku アプリの種種雑多な設定の確認と変更更が可能です
アプリ名
環境変数群
アプリの情報
buildpack
SSL  と  ドメイン
権限の移譲
メンテナンスモード
アプリの削除!
Heroku Pipelines + Pull request
​ Continious Delivery(CD)を実現するための便便利利なワークフロー
https://devcenter.heroku.com/articles/pipelines
Pull Request が
⾒見見える!!
デプロイ状況が、画⾯面で
⼀一望できるね
作ったアプリケーションを Heroku Button で配布する
​ 1click で、Heroku⽤用のアプリケーションを、カンタン deploy
https://devcenter.heroku.com/articles/heroku-button
1CLICK  でアプリケーションが
デプロイできた!!
参考: app.json を準備して、⾃自動化しよう
​ Heroku Button や Pipeline を使う場合には app.json が必要です
{
"name": "heroku_python_0419",
"scripts": {
"postdeploy": "python manage.py migrate”
},
"env": {
"APP_KEY": {
"value": "”
}
},
"formation": { },
"addons": [ "heroku-postgresql:hobby-dev” ],
”buildpacks": [
{ "url": "heroku/python” }
]
}
  app.json  の例例
デプロイ後に実⾏行行する
スクリプト
環境変数の定義
(特定のキーは⾃自動作成可能)
導⼊入するアドオンも
指定できます
buildpack  も指定する
ことができますよ
Python  with  Django  注意事項
​ 素の状態から、加筆修正の必要なこと
Python with Djangoと Heroku での注意事項
• 標準的なデータベースは  PostgreSQL
• settings.py
• runtime.txt
• Procfile
• requirements.txt
• デプロイする時の注意事項
• 環境変数についての考慮事項
• その他、Heroku としての注意事項
​ デプロイに向けての下準備と、考慮しておくべき事項について
標準的なデータベースは PostgreSQL
​ ⼀一般的に、Heroku では PostgreSQL を使います。sqlite3 はローカルのみで。
アドオンで多くのデータベースを準備し
ているので、⽤用途に合わせて選べるよ
settings.py
​ Heroku では、環境変数 “DATABASE_URL” に接続情報が登録されているよ
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
  DATABASE_̲URL  と連携するsettings.py
要修正
runtime.txt
​ 実⾏行行する Python のバージョンを指定しよう
python-3.6.1
例例えば、3.6.1  環境で実⾏行行する場合
Procfile
​ Python で Django を動作させる場合には、設定が必要!
web: gunicorn herokuwebinar.wsgi
gunicorn で起動する
Python  では、
Procfile  必須だよ!
requirements.txt
​ Python のライブラリを利利⽤用する場合は requiements.txt を記述しよう
dj-database-url==0.4.1
Django==1.10.4
gunicorn==19.6.0
psycopg2==2.6.2
whitenoise==3.2
requirements.txt の一例
Django や gunicorn は必須!!
デプロイする時の注意事項
​ DBを使うなら Migration が必要だよ!
heroku run python manage.py migrate
Django  で  Migration  する場合
環境変数についての考慮事項
Djangoテンプレート利利⽤用時には、主に ‘settings.py’ 内で設定するよ
TZ Asia/Tokyo
  必要に応じて、登録が必要になるもの
DATABASE_URL
  事前に登録されているもの
その他、Heroku としての注意事項
•  Dyno は、24時間+α で⾃自動的に勝⼿手に再起動されます
•  セキュリティパッチが、最⼤大 24時間で適⽤用されることを⽰示しています
•  ファイルを永続的に保管することや、セッション情報を維持できなくなりますから、データ・ファイル・セッション
情報などを維持したい場合は、データベースや外部オブジェクトストレージなどで、永続化しましょう
•  ログも保管されません。必要であれば、アドオンなどでログを退避・運⽤用しましょう
•  Web アクセスは 30秒で強制的に切切断されます
•  例例えばバッチ処理理など、処理理に時間のかかるものは、⾮非同期処理理としてバックグラウンドで処理理させよう
•  アプリケーション開発における原理理原則は、Twelve Factor App(https://12factor.net/ja/)に従っているの
で、興味がある開発者の⽅方は、どうぞそちらもご覧ください
​ Heroku では、安全性や不不測の事態に備えて珍しい制限があります
詳しくはこちらへどうぞ
https://devcenter.heroku.com/articles/limits
今⽇日のまとめ
​ Heroku  は開発者の皆さまを、様々なしがらみから開放します
Heroku とは •  インフラをまとめて⾯面倒⾒見見てくれる便便利利なプラットフォーム
Heroku の機能は
•  Web アプリケーションサーバとバッチ処理理機能を持つ
•  GUIで管理理できるDashboard と CLIを提供
アプリのデプロイは •  アプリのソースコードを準備したら、 “git push” するだけ
次のステップへ...Trailhead
Heroku  Enterpriseの基礎
Heroku  Enterpriseをいつ
どのように使⽤用するかに
ついての基礎を学習します
SalesforceとHerokuの  
インテグレーション
Herokuのアプリケーションを
Salesforceに統合するための
パターンと⽅方法を学びます
https://trailhead.salesforce.com/ja
Thank Y u
44  |  ©2016  Salesforce