特盛!Heroku

2013/09/05
株式会社 FLECT
小西俊司
 Herokuで開発をする際に知っておいた方が良いこと
はだいたい書いたつもり
◦ 初版は2012年12月
◦ Herokuは機能アップデートが頻繁にあるし、自分の理解が
進んだ部分もあるので全面改稿
◦ 古い情報を残してもしょうがないのでスライドは置き換え
 基本Java(Play)での開発経験をベースに書いている
が他の言語を使用する場合でもほとんど変わらない
 Heroku内部のアーキテクチャについては半分想像
だが中の人と話してもそんなに外してない
 各種言語で構築したWebアプリケーションを実行するプラット
フォーム
 標準サポート言語
◦ Ruby
◦ Node.js
◦ Clojure
◦ Python
◦ JVM(Java, Gradle, Grails, Scala, Play)
 標準サポートではない言語もカスタムbuildpackを使用するこ
とで利用可能
◦ PHPは標準サポートではないがFacebook連携のデフォルトとなって
いるため山ほど使われている
 プラットフォーム全体がEC2上にある
◦ 現在はUS-EASTとEUリージョンがある
◦ Tokyoにはいつ来るんだー
 Git
◦ ソースコードのやり取りはすべてgit経由
 Dyno
◦ Herokuがユーザーアプリケーションを実行する環境のこと
◦ 役割によってWebDyno, WorkerDynoのように呼ばれることもある
◦ 課金の単位でもある
 Slug
◦ Dynoに転送されるアプリケーションの塊(最大300MB)
◦ これが大きければ大きいほどDynoの起動に時間がかかる
 Stack
◦ DynoのベースとなるOS環境
◦ 過去にはStackの違いを意識する場面もあったが、Cedar(Ubuntu)
がデフォルトになって以降、それ以外を使用することはまずない
 Buildpack
◦ RubyやJavaなどの各種言語毎の実行環境を構築するモジュール
実際のところHeroku固有の用語や独自の技術はほとんどない。
トリッキーなことはせずに標準技術のみで実装されている。
 http://www.heroku.com/
◦ まずはアカウント作成
◦ 必要な情報はメールアドレスだけ
 https://toolbelt.heroku.com/
◦ herokuクライアントのインストール
◦ 現行のインストーラではgitも一緒にインストールしてくれるらしい。
◦ Gettinng Started(https://devcenter.heroku.com/articles/quickstart)
を見るとSSHの鍵の生成とherokuへのアップロードまで半自動で
やってくれるっぽい
 Playアプリケーションを新規作成してHeroku上で動
作確認するまでの全コマンド
$ play new test
$ cd test
$ git init
$ git add .
$ git commit -m "Initial put"
$ heroku create
$ git push heroku master
$ heroku open
たったこれだけでまたひとつインターネットにゴミが増える。。。(--
(実際のところHeroku上で動いているアプリの半分はこんなんだと思う)
あとはコードを書いてはgit pushの繰り返し
• Gitでソースコードを管理する上では「.gitignore」
は常に作成した方が良いがここでは省略
• PlayのbuildpackではProcfileが存在しない場合
は自動生成されるのでなくても良い
 Buildpackはpushされたファイルの種別から選択される
◦ pom.xmlがあればJavaプロジェクトなど
◦ またはアプリ毎に明示的にGitHubにあるカスタムbuildpackを指定することもで
きる
 SlugCompilerがpushされたソースをコンパイルしてSlugを作成
 Slugサイズが大きいほどコピーは遅い
 Http(s)リクエストはHerokuRouterが受けてDynoにhttpで転送
 Dynoの数を増やすことで負荷分散が可能
 Dynoが複数ある場合単純なラウンドロビンでリクエストは割り振られる
◦ セッションは考慮されないので単一マシンからのリクエストがばらばらのDynoに
割り振られる
◦ Dyno間で情報を共有するためにはMemcache, RDB, Cookieなどを使用する
必要がある
 Dynoが30秒間レスポンスを返さない場合はHerokuRouterがClient
に503を返す
 Dyno起動時に実行するコマンドが定義されたファイル
web: play run --%web --http.port=$PORT $PLAY_OPTS
hoge: play run --%hoge --http.port=$PORT $PLAY_OPTS
fuga: play run --%fuga --http.port=$PORT $PLAY_OPTS
 [名前]: に続けて実行コマンドを記述
 上の例では引数だけ変えてすべてPlayを起動している
 $PORTはHttpRequestを受け付けるポートを定義した環境
変数(web以外ではここにリクエストが来ることはない)
 名前が「web」の定義だけは特別扱いされており、これだけが
Routerからのhttpリクエスト転送を受ける(WebDyno)
 それ以外の定義行はすべてWorkerDynoと呼ばれバックエンド
での処理を構築する際に使用する
 メールやキューをポーリングして処理を実行する、など
 Procfileに設定した各行がそれぞれWebDyno、WorkerDyno
となり個別に起動する台数を指定できる
◦ 一般的にはWebDynoは負荷によって台数を増減させ、WorkerDyno
は1台のみ起動させることが多い
◦ いずれのDynoもオートスケールはしない
 WebDyno1台のみ、WorkerDynoなしという構成の場合料金
は無料(厳密な説明は次ページ)
◦ ただし、WebDynoが1台だけの場合は1時間程度リクエストがない状
態が続いた際にDynoがシャットダウンする(次のリクエストが来た時に
Dynoをまた起動するので初回リクエストのレスポンスが遅くなる)
 WebDynoが2台以上の場合はアイドル状態によるシャットダウンはない
 WorkerDynoは1台でもアイドル状態によるシャットダウンはない
 WebDynoとWorkerDynoはコードベースとしては同じもので、
ただWebDynoはHerokuRouterからのHttpRequestの転送
を受けるという点だけが異なる。
 デフォルトでDynoでの使用可能メモリは512MB
◦ Javaアプリを動かすことを考えるとかなり少ない
 WebコンソールでDyno種別ごとにメモリを512MBで
使用するか倍の1GBで使用するかを選択できる
 今のところ1GB以上のメモリを使用することはできな
い
 ちなみにメモリを倍にすると価格も倍
 Dynoが起動している時間をDyno時間と呼ぶ
◦ 1Dyno時間は1台のDynoが1時間起動していたことを表す
 1Dyno時間の料金=0.05$
 ただし750Dyno時間までは無料
◦ つまりWebDyno1台をまる一ヶ月動かしたとしても
1 × 24 × 31 = 744Dyno時間にしかならないため料金はかからな
い
 WebDynoがアイドル状態であったとしてもDyno時間を消費す
る
 スケジューラやheroku runコマンドの実行もDyno時間を消費
する
 2XDynoは1時間の起動で2Dyno時間を消費すると考える
 これ以外にアドオンの料金がかかる
 heroku domainsコマンドで使用するドメイン名を追
加
 DNSをCNAMEで「xxx.herokuapp.com」を指すよ
うに設定すればOK
 ただしSSLを使用する場合はホスト名が変わるので要
注意
$ heroku domains:add www.xxx.com
 SSLのアドオンを追加(20$/month)
 heroku certsコマンドで証明書と秘密鍵を追加
◦ 中間証明書がある場合は証明書に追加しておく
 証明書がインストールされると新しいホスト名
「xxx.herokussl.com」が生成されるのでDNSでそのホ
ストを設定
◦ ちなみにxxx.herokussl.comの実体はELB
◦ なのでSSLではhttpの転送が1段増えていると思う
 herokuapp.comには「*.herokuapp.com」の証明書が
入っているのでSSLアドオンを使用しなくてもSSL通信自体
は可能
$ heroku addons:add ssl:endpoint
$ heroku certs:add <PEM> <KEY>
 例えば開発環境をコピーしてステージング環境を作成
したい場合は開発環境のディレクトリで。。。
 heroku createで新しいアプリを作成
 作成後にgitのURIが表示されるので適当な名前で
git remoteに登録
 その名前でgit push
$ heroku create staging-xxxx
$ git remote add staging git@heroku.com:staging-xxxx.git
$ git push staging master
heroku createコマンドはそこにあるリポジトリに
「heroku」というremote名が登録されていない
場合は自動的に登録する。
そのため、最初にアプリを作成した直後はgit
remote addを実行する必要はない
heroku forkというアプリをコピーするコマンドもあるが
課金アドオンが元と同じプランで作成されるためあまり使わない
 herokuコマンドはgit remoteに登録されたエイリア
スからアプリを判断する
◦ 「git@heroku.com」で始まるリモートリポジトリの「:」以降が
Herokuアプリケーション名
◦ Herokuのリモートリポジトリが一つだけの場合はherokuコ
マンド実行時にアプリケーション名を省略可
◦ 複数ある場合はコマンド実行時に「-a <アプリケーション名
>」を明示的に指定する必要がある
$ git remote –v
heroku git@heroku.com:prod-myapp.git (fetch)
heroku git@heroku.com:prod-myapp.git (push)
stg git@heroku.com:staging-myapp.git (fetch)
stg git@heroku.com:staging-myapp.git (push)
$ heroku logs –a staging-myapp
 環境によってアプリの動作を変えたい場合には環境
変数を利用する
 環境変数を変更した場合WebDyno、WorkerDyno
ともにすべて再起動する
heroku config
heroku config:add hoge=fuga aaa=bbb
 HerokuのGit上にmaster以外のブランチを作成して
も無視される
◦ masterへのpushをフックしてビルドプロセスが実行される
◦ ブランチ自体は普通に使えるがブランチのソースでSlugコン
パイルを行うことはできない
 チーム開発を行う場合、GitHub等の外部リポジトリ
はほぼ必須
◦ Herokuのgitはアプリのリリース専用と割り切るべき。
◦ 開発環境では検証のために「push -f」で強制上書きが必要
になることもあるかもしれない
 あんまり気が進まないので実際にはやったことはないがアリだと
は思っている
 Slugサイズが大きいとDynoへのデータ転送が遅くなり結
果として起動に時間がかかることになる
◦ JavaアプリはJDKがSlugサイズに含まれるためサイズ的には不利
◦ Play2などは最初から100MB超
 サイズの大きなファイルはgit pushしない
◦ PDFや大量の画像ファイルなどはS3などの外部ストレージに置く
 「.slugignore」ファイルを使用する
◦ ここで指定したファイルはslugに含まれない
◦ 書式は「.gitignore」とほぼ同じ(「!」など一部書式未サポート)
◦ テストでしか使用しないクラスなどSlugに必要ない物はできるだけ
指定した方が良い。
 Dynoは以下のタイミングで再起動する
◦ Git push
◦ heroku configの変更
◦ おおむね1日1度の頻度で自動的に再起動
 ここで再起動と言っているのは実際にはインスタンス
が切り替わる
◦ Herokuはマルチテナントなので一つのEC2インスタンス上に
複数のDynoが同居
◦ このためHerokuのIPはころころ変わる
WebDynoはともかくWorkerDynoが毎日再起動するのは
とても困る(--
 最初にルーティングを止めて、
 全てのDynoをシャットダウン
◦ シャットダウンの前に実行中のリクエストのレスポンスを待っている?
 その後再起動
◦ つまりコードや環境変数の異なるDynoが同時に起動しているという状態はない
 その後ルーティングを再開
◦ その間のリクエストはRouterのキューに入ると思われる
 再起動中にブラウザでF5を連打した場合レスポンスは遅いがエラーとはならない
 もちろんリクエストが多くてキューがあふれた場合はエラーになると思われる
Preboot(現在ベータ
扱い)を使用すると
DownTimeも短くなるDown
Time
 WorkerDynoは外部から現在仕事中かどうかを知る
すべがない
◦ 例えば5分おきにメールポーリングしているDynoのステータ
スは外からはわからない
◦ これに対してWebDynoはRouterから回されている仕事がな
ければアイドル中と判断できる。(もちろん作りによるけど)
 にも関わらず1日に1度容赦なく再起動がかかる
 Herokuのドキュメントには「SIGTERMを受け取ったら
10秒以内に安全にシャットダウンしろ」とか書かれて
いるが、現実には実行中のタスクのどのタイミングで
再起動が来るかわからないので対応不能。。。。(--
 HerokuAPIとは
◦ herokuコマンド相当のことをプログラムから実行するための
WebAPI
 24時間未満で自動再起動がかかることはない(多分)ので
その前でWorkerプロセスの中から自力で再起動してしまう
HerokuAPI api = new HerokuAPI(“xxxx”);//引数のAPIKeyはWebConsoleで取得
api.restartProcessByType(“yyyy”,”worker”);//heroku ps:restart worker
api.scaleProcess(“yyyy”, “worker”, 0);//heroku ps:scale worker=0
 Workerが常時動いている必要がない場合は
scaleProcessメソッドでWorkerを停止するのもアリ
◦ この場合どうやってWorkerを起動するかは別途検討が必要
 https://devcenter.heroku.com/articles/labs-
preboot
 Heroku labsは正規リリース前の機能を実験的にユーザー
に使用できるようにしたもの
 Prebootを使用すると再起動時の動作が
新Dyno起動 > ルーティングスイッチ > 旧Dyno停止
の順になり、ダウンタイムを短縮できる
◦ WebDynoにのみ適用
◦ WebDynoが2台以上起動している場合のみ適用
 Prebootを使用するとSlugサイズやアプリの起動時の重たい
処理のダウンタイムへの影響もなくなる
Dynoの再起動問題/Prebootについて別スライドあり
http://www.slideshare.net/shunjikonishi/heroku-dyno
 指定時間間隔でコマンドを実行するアドオン
◦ 間隔としては24時間毎、1時間毎、10分毎が選択できる
 実行時にはWebDynoでもWorkerDynoでもない新し
いDynoが作成され、そこでコマンドが実行される
◦ つまり自分で作ったアプリが実行できる
 スケジューラでのコマンド実行はDyno時間を消費する
 標準ではスケジューラでherokuコマンドは実行できな
い
◦ 後述のheroku-buildpack-toolbeltをいれることで実行可
能になる
 Dyno上で任意のコマンドを実行するHerokuコマンド
◦ viがないなどコマンドはかなり制限されている
◦ アプリのルートに「.profile」を作成しておくと起動時にそれが実
行される(WebDynoやWorkerDynoでも実行される)
 heroku runコマンドでも新しいDynoが作成される
◦ 既存のWebDynoやWorkerDynoに接続できるわけではない
◦ もちろんDyno時間を消費する
 「heroku run bash」とたたくと。。。
◦ telnet的な操作が可能
◦ スケジューラでどういうコマンドが実行できるかを確認するのに
便利
◦ つなぎっぱなしで放置してはいけない(Dyno時間を消費する)
 Herokuはgit pushや環境変数の変更毎にそのリビ
ジョンを保存している
$ heroku releases
v35 Add hoge config k-shunji@flect.co.jp 2013/09/03 13:28:53
v34 Deploy 8740ef9 k-shunji@flect.co.jp 2013/08/29 12:27:29
v33 Deploy 2469798 k-shunji@flect.co.jp 2013/08/23 20:25:13
 「heroku releases:rollback <リビジョン番号>」を叩くこ
とで、任意のバージョンにロールバックすることが可能
 ロールバックはS3に保存されている各リビジョンのコン
パイル済みSlugと差し替えることで実現
 ロールバック後に再度git pushするとpushされた再
度最新のソースからSlugが作成される。(git内で
revert等のロールバック操作は一切行われてない)
 2013年9月現在、US-EASTとEUの2つのリージョンが利
用可能
 リージョンはアプリ作成時に指定する(デフォルトはUS-
EAST)
◦ コードベースが同じでもリージョンが違えば別アプリになる。
 データベースやMemcacheなどのAddonは自動的に
Herokuアプリ本体のリージョンと同じになる
◦ ただし、EUリージョンに対応していないAddonもあるらしい
◦ DBを統一したいなどの理由でEUからUS-EASTのAddonを利用す
ることはできるがネットワークレイテンシ―が問題となる
 Tokyoにはいつ来るんだー
 クラウド上にあるというだけでごく普通のPostgreSQL
 制限事項
◦ パラメータを変更できない
◦ Userを作れない
◦ 接続を制限できない(URLを知っていればどこからでもアクセス可
能)
 複数のHerokuアプリから同じDBを使用しても良い
◦ この場合heroku configのDATABSE_URLをコピーする
◦ Heroku以外からも使用できるがUS-EASTなので日本からの接続
は遅い
 価格毎に土台となるEC2のインスタンスが異なる
◦ メモリ(キャッシュサイズ)の差異よりもCPUパワーの差が大きい
 pgbackups
◦ アドオンの一つ
◦ 毎日自動でバックアップを取ってくれる
◦ 無料なので必ず使うべき
◦ ただしバックアップを取る時間帯は指定できない(アクセスの少
ない夜間に、という設定はできない)
◦ heroku pgbackupsコマンドで手動でのバックアップ/リスト
ア/ダウンロードが可能
 Fork
◦ 既存のDBをコピーして新しいDBを作成
 Follow
◦ 既存のDBのレプリケーションDBを作成
◦ 本番DBの障害時に切り替えて使用することが可能(手動)
 https://dataclips.heroku.com/
 SELECT文を登録しておいてその結果をいつでも参照でき
る
◦ ExcelやCSV形式でダウンロード
◦ GoogleDocsへのExport
 GoogleSpreadsheetのURLが生成されてそこにアクセスするといつで
も最新のデータを参照できる
 グラフもそこで作れたりする
 色々と惜しい
◦ セキュリティのデフォルト設定が「URLを知っている人は誰でも使え
る」のは危険
◦ パラメータが使えない
◦ 登録したSELECT文を整理できない
不便なので代替ツールを自分で作ってみた
https://github.com/shunjikonishi/sqltool
http://www.slideshare.net/shunjikonishi/furoku-sqltool
 Localeが「en_US.UTF-8」固定
◦ このためCREATE TABLE時に「COLLATE “C”」を設定しない
と日本語列のソートがおかしくなる
◦ 何故か日本語Localeは指定できない
 実行に2秒以上かかる遅いSQLはデータ込みでログ
出力される
◦ データがログに残ることが一切NGな場合は注意が必要。
◦ 原則はそんな遅いSQLは実行しないこと(だがデータ量や負
荷によってはいかんともしがたい場合もあるので。。。(--)
◦ 別アプリでDBを作ってDATABASE_URLをコピーする運用に
したこともある。(Papertrailにログを流さないようにするため)
 Herokuのログはデフォルトで1500行しか保存され
ないのでなんらかのログAddonは必須
 ログAddonは複数あるがこれが一番使いやすかった
◦ 1年位前の評価だが他のに変える動機が無い
 機能
◦ ブラウザ上でのログ表示
◦ DailyでのS3へのログアーカイブ
◦ 監視文字列を設定してメール通知
 料金体系
◦ 1日当たりのログ出力量によって課金
◦ 10MB/日まで無料、有償版は50MB/日で月間$7から
◦ Limitに到達するとそれ以降のログは無視される
 パフォーマンス監視
 Herokuで一番使われているAddonらしい
◦ 1年半くらい前の情報
 有償版は高いので使ったことが無い
◦ Dyno数に応じた従量課金
◦ しかし無償版でも十分高機能
 Memcacheサーバー
 WebDynoを複数使用する場合はほぼ必須
 料金体系
◦ キャッシュサイズによって課金
◦ 25MBまで – 無料
◦ 100MBまで - $15
◦ …
◦ 10GBまで - $550
Papertrail, NewRelic, Memcachierの3つは
はほとんど毎回利用する鉄板Addon
 メール送信Addon
 機能
◦ SMTP/WebAPIでのメール送信
◦ Webコンソールでの送信/不達メール確認
◦ メール中のURLのクリック数カウント
 メール中のURLをSendGridが自動的にリダイレクトURLに書き換えて、
そのリクエスト数を数える
◦ メールの開封確認
 HTMLメールのみ(メール中に非表示の画像URLを埋め込むことでその
画像URLのリクエスト数を数える)
 価格体系
◦ 200通/日まで無料
◦ 有償版は40000通/月で9.95$から
 https://github.com/ddollar/heroku-
buildpack-multi
 複数のbuildpackを組み合わせることができる
buildpack
 任意のバイナリをDynoに組み込む場合に使用する
◦ ffmpegをherokuに組み込むブログ記事
http://blog.flect.co.jp/labo/2013/06/herokubuildp
ack-c488.html
 https://github.com/gregburek/heroku-
buildpack-toolbelt
 Dyno上からherokuコマンドを実行するための
buildpack
 heroku-buildpack-multiと組み合わせて使用する
 これを利用することでスケジューラからherokuコマン
ドを発行できるようになるので便利
 アクセスの少ない夜間にheroku ps:scaleでDyno数を減らしたり
とか
 各アプリに個別にこのbuildpackを組み込む必要はなく、管理用
のアプリを一つ建てておくと良い。
 HerokuAPI
◦ herokuコマンドが裏で実行しているREST API
◦ Heroku APIのJavaラッパー
https://github.com/heroku/heroku.jar
認証にはHEROKU_API_KEYを使用
 PlatformAPI
◦ Oauth経由でHerokuを操作するREST API
◦ 現在ベータ版のため、APIの変更はあと数ヶ月はかなりある
見込み
◦ APIのJavaラッパーは今のところない
 Heroku社内で優先して作っているのはRubyとNode.jsらしい
 Herokuアプリの作成はコマンドでしかできないので、課金
アカウントが個人アカウントと別な場合ちょっと面倒
◦ いつのまにかWebコンソールからアプリ作成ができるようになって
いたのでほとんどアカウントを切り替える機会はなくなった。
 https://github.com/ddollar/heroku-accounts
◦ 複数のHerokuアカウントを切り替えるプラグイン
 またはこれだけでもOK
$ set HEROKU_API_KEY=xxxxx
 この場合SSHのkeyは入れ替わらないのでgitへのアクセス
はできないがそれ以外のherokuコマンドは普通に使える
 gitも切り替える場合は「.ssh/config」で鍵の切り替えを設
定する
 Tokyoにはいつ来るんだー
1 of 41

Recommended

ドメイン駆動設計のための Spring の上手な使い方 by
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
138.1K views55 slides
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発 by
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発FlutterとSupabaseでRDBを使った サーバーレスアプリ開発
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発TylerShukert
463 views21 slides
いつやるの?Git入門 v1.1.0 by
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0Masakazu Matsushita
231.7K views211 slides
例外設計における大罪 by
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
68.6K views37 slides
チケット駆動開発の解説~タスク管理からプロセス改善へ by
チケット駆動開発の解説~タスク管理からプロセス改善へチケット駆動開発の解説~タスク管理からプロセス改善へ
チケット駆動開発の解説~タスク管理からプロセス改善へakipii Oga
4.4K views71 slides
GoによるWebアプリ開発のキホン by
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンAkihiko Horiuchi
61K views33 slides

More Related Content

What's hot

関数型プログラミング入門 with OCaml by
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCamlHaruka Oikawa
12.4K views105 slides
実運用して分かったRabbit MQの良いところ・気をつけること #jjug by
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
24.3K views49 slides
ソフトウェア設計における 意思決定とそのレビューの秘訣 by
ソフトウェア設計における 意思決定とそのレビューの秘訣ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣Yoshitaka Kawashima
4.7K views39 slides
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える by
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
65.4K views119 slides
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~ by
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
118.7K views88 slides
ペアプロするならgit-duetを使おう by
ペアプロするならgit-duetを使おうペアプロするならgit-duetを使おう
ペアプロするならgit-duetを使おうShinya Nakajima
2.6K views16 slides

What's hot(20)

関数型プログラミング入門 with OCaml by Haruka Oikawa
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
Haruka Oikawa12.4K views
ソフトウェア設計における 意思決定とそのレビューの秘訣 by Yoshitaka Kawashima
ソフトウェア設計における 意思決定とそのレビューの秘訣ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima4.7K views
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える by pospome
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome65.4K views
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~ by Miki Shimogai
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai118.7K views
ペアプロするならgit-duetを使おう by Shinya Nakajima
ペアプロするならgit-duetを使おうペアプロするならgit-duetを使おう
ペアプロするならgit-duetを使おう
Shinya Nakajima2.6K views
Java EE から Quarkus による開発への移行について by Shigeru Tatsuta
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行について
Shigeru Tatsuta840 views
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~ by apkiban
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
apkiban965 views
ID連携における仮名 by Naohiro Fujie
ID連携における仮名ID連携における仮名
ID連携における仮名
Naohiro Fujie15.9K views
Dockerfileを改善するためのBest Practice 2019年版 by Masahito Zembutsu
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu63.7K views
Modeling in the Agile Age and casual astah models by Kenji Hiranabe
Modeling in the Agile Age and casual astah modelsModeling in the Agile Age and casual astah models
Modeling in the Agile Age and casual astah models
Kenji Hiranabe1.3K views
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa... by Insight Technology, Inc.
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game... by Google Cloud Platform - Japan
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
ソフトウェアの核心にある複雑さに立ち向かう by 増田 亨
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
増田 亨10.6K views
Where狙いのキー、order by狙いのキー by yoku0825
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku082539.6K views
45分間で「ユーザー中心のものづくり」ができるまで詰め込む by Yoshiki Hayama
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama50.7K views
それはYAGNIか? それとも思考停止か? by Yoshitaka Kawashima
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima29.3K views
組み込みLinuxでのGolangのススメ(Go con版) by Tetsuyuki Kobayashi
組み込みLinuxでのGolangのススメ(Go con版)組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)
Tetsuyuki Kobayashi5.3K views
はじめてのCouch db by Eiji Kuroda
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
Eiji Kuroda3.8K views

Viewers also liked

物体認識 IoT サービスを支える技術 〜クラウドアーキテクチャから組込み深層学習まで〜 by
物体認識 IoT サービスを支える技術 〜クラウドアーキテクチャから組込み深層学習まで〜物体認識 IoT サービスを支える技術 〜クラウドアーキテクチャから組込み深層学習まで〜
物体認識 IoT サービスを支える技術 〜クラウドアーキテクチャから組込み深層学習まで〜Takashi Kaneda
10.9K views30 slides
20170728 デブサミ夏 ojima_公開 by
20170728 デブサミ夏 ojima_公開20170728 デブサミ夏 ojima_公開
20170728 デブサミ夏 ojima_公開Hideki Ojima
2.7K views51 slides
グローバルスタートアップの法務 by
グローバルスタートアップの法務グローバルスタートアップの法務
グローバルスタートアップの法務Masakazu Masujima
1.8K views6 slides
20170915 りゅうぎん コミュニティマーケティングのススメ by
20170915 りゅうぎん コミュニティマーケティングのススメ20170915 りゅうぎん コミュニティマーケティングのススメ
20170915 りゅうぎん コミュニティマーケティングのススメHideki Ojima
1.2K views68 slides
20170830 cmc meetup_at_backstage_公開 by
20170830 cmc meetup_at_backstage_公開20170830 cmc meetup_at_backstage_公開
20170830 cmc meetup_at_backstage_公開Hideki Ojima
740 views44 slides
エクイティ型クラウドファンディングの詳細ルール(初期レビュー) by
エクイティ型クラウドファンディングの詳細ルール(初期レビュー)エクイティ型クラウドファンディングの詳細ルール(初期レビュー)
エクイティ型クラウドファンディングの詳細ルール(初期レビュー)Masakazu Masujima
2.2K views4 slides

Viewers also liked(20)

物体認識 IoT サービスを支える技術 〜クラウドアーキテクチャから組込み深層学習まで〜 by Takashi Kaneda
物体認識 IoT サービスを支える技術 〜クラウドアーキテクチャから組込み深層学習まで〜物体認識 IoT サービスを支える技術 〜クラウドアーキテクチャから組込み深層学習まで〜
物体認識 IoT サービスを支える技術 〜クラウドアーキテクチャから組込み深層学習まで〜
Takashi Kaneda10.9K views
20170728 デブサミ夏 ojima_公開 by Hideki Ojima
20170728 デブサミ夏 ojima_公開20170728 デブサミ夏 ojima_公開
20170728 デブサミ夏 ojima_公開
Hideki Ojima2.7K views
グローバルスタートアップの法務 by Masakazu Masujima
グローバルスタートアップの法務グローバルスタートアップの法務
グローバルスタートアップの法務
Masakazu Masujima1.8K views
20170915 りゅうぎん コミュニティマーケティングのススメ by Hideki Ojima
20170915 りゅうぎん コミュニティマーケティングのススメ20170915 りゅうぎん コミュニティマーケティングのススメ
20170915 りゅうぎん コミュニティマーケティングのススメ
Hideki Ojima1.2K views
20170830 cmc meetup_at_backstage_公開 by Hideki Ojima
20170830 cmc meetup_at_backstage_公開20170830 cmc meetup_at_backstage_公開
20170830 cmc meetup_at_backstage_公開
Hideki Ojima740 views
エクイティ型クラウドファンディングの詳細ルール(初期レビュー) by Masakazu Masujima
エクイティ型クラウドファンディングの詳細ルール(初期レビュー)エクイティ型クラウドファンディングの詳細ルール(初期レビュー)
エクイティ型クラウドファンディングの詳細ルール(初期レビュー)
Masakazu Masujima2.2K views
大企業と技術開発型ベンチャーの連携 by Masakazu Masujima
大企業と技術開発型ベンチャーの連携大企業と技術開発型ベンチャーの連携
大企業と技術開発型ベンチャーの連携
Masakazu Masujima26.5K views
EMS_コミュニティマーケティングのススメ_AWS_20140829 by Hideki Ojima
EMS_コミュニティマーケティングのススメ_AWS_20140829EMS_コミュニティマーケティングのススメ_AWS_20140829
EMS_コミュニティマーケティングのススメ_AWS_20140829
Hideki Ojima2.8K views
20171110 dev festa_vr by Hideki Ojima
20171110 dev festa_vr20171110 dev festa_vr
20171110 dev festa_vr
Hideki Ojima1.8K views
グローバル戦略におけるクラウド活用のポイント - AWS Summit Tokyo 2014 Day 1 : Keynote by Takayuki Enomoto
グローバル戦略におけるクラウド活用のポイント - AWS Summit Tokyo 2014 Day 1 : Keynoteグローバル戦略におけるクラウド活用のポイント - AWS Summit Tokyo 2014 Day 1 : Keynote
グローバル戦略におけるクラウド活用のポイント - AWS Summit Tokyo 2014 Day 1 : Keynote
Takayuki Enomoto1.3K views
AWS初心者向けWebinar 失敗例を成功に変える AWSアンチパターンのご紹介 by Amazon Web Services Japan
AWS初心者向けWebinar 失敗例を成功に変える AWSアンチパターンのご紹介AWS初心者向けWebinar 失敗例を成功に変える AWSアンチパターンのご紹介
AWS初心者向けWebinar 失敗例を成功に変える AWSアンチパターンのご紹介
Icoトークンセールスの最新事情 by Masakazu Masujima
Icoトークンセールスの最新事情Icoトークンセールスの最新事情
Icoトークンセールスの最新事情
Masakazu Masujima8.9K views
Japan's virtual currency regulation and its recent developments by Masakazu Masujima
Japan's virtual currency regulation and its recent developmentsJapan's virtual currency regulation and its recent developments
Japan's virtual currency regulation and its recent developments
Masakazu Masujima2.5K views
AWS Black Belt Tech シリーズ 2015 - re:Invent 2015 最新アップデート速報 by Amazon Web Services Japan
AWS Black Belt Tech シリーズ 2015 - re:Invent 2015 最新アップデート速報AWS Black Belt Tech シリーズ 2015 - re:Invent 2015 最新アップデート速報
AWS Black Belt Tech シリーズ 2015 - re:Invent 2015 最新アップデート速報
デジタルエコノミーに向けた法制度のあり方について by Masakazu Masujima
デジタルエコノミーに向けた法制度のあり方についてデジタルエコノミーに向けた法制度のあり方について
デジタルエコノミーに向けた法制度のあり方について
Masakazu Masujima1.2K views
20170821 tech play_vr_公開 by Hideki Ojima
20170821 tech play_vr_公開20170821 tech play_vr_公開
20170821 tech play_vr_公開
Hideki Ojima965 views

Similar to 特盛!Heroku

Google Cloud Platformでソーシャルゲームを1本出してみた! by
Google Cloud Platformでソーシャルゲームを1本出してみた!Google Cloud Platformでソーシャルゲームを1本出してみた!
Google Cloud Platformでソーシャルゲームを1本出してみた!Hasegawa Yusuke
4.4K views25 slides
Air forandroidreader by
Air forandroidreaderAir forandroidreader
Air forandroidreaderNoboru Ootsuka
1.1K views17 slides
Datalab and colaboratory by
Datalab and colaboratoryDatalab and colaboratory
Datalab and colaboratoryHayato Yoshikawa
1.7K views15 slides
社内勉強会1 go lang by
社内勉強会1 go lang 社内勉強会1 go lang
社内勉強会1 go lang Tsuyoshi Nakamura
427 views7 slides
Google Product by
Google ProductGoogle Product
Google ProductDaisuke Sugai
2.5K views22 slides
明日から使えるgradle by
明日から使えるgradle明日から使えるgradle
明日から使えるgradlekimukou_26 Kimukou
7.7K views82 slides

Similar to 特盛!Heroku(20)

Google Cloud Platformでソーシャルゲームを1本出してみた! by Hasegawa Yusuke
Google Cloud Platformでソーシャルゲームを1本出してみた!Google Cloud Platformでソーシャルゲームを1本出してみた!
Google Cloud Platformでソーシャルゲームを1本出してみた!
Hasegawa Yusuke4.4K views
仮想マシンを使った開発環境の簡単共有方法 by Hideo Takahashi
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法
Hideo Takahashi3.4K views
開発を彩る技術たち by Oda Shinsuke
開発を彩る技術たち開発を彩る技術たち
開発を彩る技術たち
Oda Shinsuke574 views
NetBeans、FuelPHP と過ごしたこの 2 ヶ月 by suno88
NetBeans、FuelPHP と過ごしたこの 2 ヶ月NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
suno889.4K views
sbtマルチプロジェクトビルドの使いどころ by Kazuhiro Hara
sbtマルチプロジェクトビルドの使いどころsbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころ
Kazuhiro Hara1.8K views
ブラウザだけで学ぶWebアプリ開発 by schoowebcampus
ブラウザだけで学ぶWebアプリ開発 ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発
schoowebcampus5.2K views
Djangoのススメ by Alisue Lambda
DjangoのススメDjangoのススメ
Djangoのススメ
Alisue Lambda19.1K views
今流行りのウェブアプリ開発環境Yeoman by tomo_masakura
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
tomo_masakura2.8K views
Yapc2012資料 by matsuo kenji
Yapc2012資料Yapc2012資料
Yapc2012資料
matsuo kenji29.9K views
Power shellmemo by ytanno
Power shellmemoPower shellmemo
Power shellmemo
ytanno918 views
NPAPIを使ったandroid標準ブラウザの拡張方法 by Naruto TAKAHASHI
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI4.1K views
初心者がハマったWindows Azureの基礎の基礎 by Saori Ando
初心者がハマったWindows Azureの基礎の基礎初心者がハマったWindows Azureの基礎の基礎
初心者がハマったWindows Azureの基礎の基礎
Saori Ando1.6K views
インフラ運用管理ツールとGolang OSS運用管理勉強会LT by Daisuke Ikeda
インフラ運用管理ツールとGolang OSS運用管理勉強会LTインフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
Daisuke Ikeda2.2K views

More from Shunji Konishi

Salesforceのハッカソンに参加した話 by
Salesforceのハッカソンに参加した話Salesforceのハッカソンに参加した話
Salesforceのハッカソンに参加した話Shunji Konishi
2.9K views10 slides
Salesforce連携のためのOData入門 by
Salesforce連携のためのOData入門Salesforce連携のためのOData入門
Salesforce連携のためのOData入門Shunji Konishi
10K views20 slides
プロキシーを使ってテストを楽にする by
プロキシーを使ってテストを楽にするプロキシーを使ってテストを楽にする
プロキシーを使ってテストを楽にするShunji Konishi
1.8K views20 slides
Javascriptのあれやこれやをまとめて説明してみる by
Javascriptのあれやこれやをまとめて説明してみるJavascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみるShunji Konishi
3K views17 slides
MochaとChaiでやるJavaScriptテスト by
MochaとChaiでやるJavaScriptテストMochaとChaiでやるJavaScriptテスト
MochaとChaiでやるJavaScriptテストShunji Konishi
7.4K views18 slides
SendGridサンプルの紹介 by
SendGridサンプルの紹介SendGridサンプルの紹介
SendGridサンプルの紹介Shunji Konishi
4.5K views8 slides

More from Shunji Konishi(20)

Salesforceのハッカソンに参加した話 by Shunji Konishi
Salesforceのハッカソンに参加した話Salesforceのハッカソンに参加した話
Salesforceのハッカソンに参加した話
Shunji Konishi2.9K views
Salesforce連携のためのOData入門 by Shunji Konishi
Salesforce連携のためのOData入門Salesforce連携のためのOData入門
Salesforce連携のためのOData入門
Shunji Konishi10K views
プロキシーを使ってテストを楽にする by Shunji Konishi
プロキシーを使ってテストを楽にするプロキシーを使ってテストを楽にする
プロキシーを使ってテストを楽にする
Shunji Konishi1.8K views
Javascriptのあれやこれやをまとめて説明してみる by Shunji Konishi
Javascriptのあれやこれやをまとめて説明してみるJavascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
Shunji Konishi3K views
MochaとChaiでやるJavaScriptテスト by Shunji Konishi
MochaとChaiでやるJavaScriptテストMochaとChaiでやるJavaScriptテスト
MochaとChaiでやるJavaScriptテスト
Shunji Konishi7.4K views
SendGridサンプルの紹介 by Shunji Konishi
SendGridサンプルの紹介SendGridサンプルの紹介
SendGridサンプルの紹介
Shunji Konishi4.5K views
セキュリティの考え方 by Shunji Konishi
セキュリティの考え方セキュリティの考え方
セキュリティの考え方
Shunji Konishi2.2K views
一番簡単なWebSocketの試し方 by Shunji Konishi
一番簡単なWebSocketの試し方一番簡単なWebSocketの試し方
一番簡単なWebSocketの試し方
Shunji Konishi13.2K views
WebSocketでリアルタイムクイズアプリを作ってみた by Shunji Konishi
WebSocketでリアルタイムクイズアプリを作ってみたWebSocketでリアルタイムクイズアプリを作ってみた
WebSocketでリアルタイムクイズアプリを作ってみた
Shunji Konishi3.3K views
良質なコードを高速に書くコツ by Shunji Konishi
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
Shunji Konishi9.3K views
Playframework1でSeleniumテスト by Shunji Konishi
Playframework1でSeleniumテストPlayframework1でSeleniumテスト
Playframework1でSeleniumテスト
Shunji Konishi1.6K views
Heroku Dyno再起動時の振る舞い by Shunji Konishi
Heroku Dyno再起動時の振る舞いHeroku Dyno再起動時の振る舞い
Heroku Dyno再起動時の振る舞い
Shunji Konishi6.3K views
Dyno cycling behavior of Heroku by Shunji Konishi
Dyno cycling behavior of HerokuDyno cycling behavior of Heroku
Dyno cycling behavior of Heroku
Shunji Konishi3K views
Herokuで使えるRDBMS管理者ツール by Shunji Konishi
Herokuで使えるRDBMS管理者ツールHerokuで使えるRDBMS管理者ツール
Herokuで使えるRDBMS管理者ツール
Shunji Konishi1.7K views
お手軽Ajaxアプリケーションの作り方 by Shunji Konishi
お手軽Ajaxアプリケーションの作り方お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方
Shunji Konishi6K views
Herokuのログ解析ツール by Shunji Konishi
Herokuのログ解析ツールHerokuのログ解析ツール
Herokuのログ解析ツール
Shunji Konishi4.3K views

特盛!Heroku