$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
LaravelxHerokuによる開発・運用 / laravel_heroku_the_12_...
Search
Yusuke Kano
July 08, 2020
Programming
1
1.9k
LaravelxHerokuによる開発・運用 / laravel_heroku_the_12_factor_app
【シューマイ】Tech Lead Engineerから最新技術を学べ!Laravel編
https://shuuu-mai.connpass.com/event/179336/
登壇資料
Yusuke Kano
July 08, 2020
Tweet
Share
More Decks by Yusuke Kano
See All by Yusuke Kano
継続的デリバリーを実現するためのデプロイフローを考える / tambourine Herokuflow example
kusk
1
1.2k
Other Decks in Programming
See All in Programming
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
270
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.8k
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
160
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
710
FluorTracer / RayTracingCamp11
kugimasa
0
230
AWS CDKの推しポイントN選
akihisaikeda
1
240
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
680
Microservices rules: What good looks like
cer
PRO
0
1.4k
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
330
sbt 2
xuwei_k
0
290
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
130
ローターアクトEクラブ アメリカンナイト:川端 柚菜 氏(Japan O.K. ローターアクトEクラブ 会長):2720 Japan O.K. ロータリーEクラブ2025年12月1日卓話
2720japanoke
0
730
Featured
See All Featured
Become a Pro
speakerdeck
PRO
31
5.7k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
A Tale of Four Properties
chriscoyier
162
23k
Embracing the Ebb and Flow
colly
88
4.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
The Cult of Friendly URLs
andyhume
79
6.7k
[SF Ruby Conf 2025] Rails X
palkan
0
510
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Transcript
Laravel × Herokuによる 開発‧運⽤ . . 【シューマイ】 Tech Lead Engineerから最新技術を学べ!Laravel編
⾃⼰紹介 • 狩野 裕介 / Kano Yusuke • @usk •
株式会社タンバリン • CTO (兼 開発チームマネージャー) )5.-ɾ$44ͷ੍࡞͔Β'MBTIʹΑΔΠϯλϥΫςΟϒͳίϯςϯπ੍࡞ʹؒؔΘͬͨ͋ͱɺΤ ϯδχΞδϣϒνΣϯδɻͦͷޙɺ)FSPLVΛར༻ͨ͠1)1ɾ-BSBWFMͷΞϓϦ։ൃɺ4BMFTGPSDF Λར༻ͨ͠"1*ɾγεςϜͷ։ൃͳͲɺόοΫΤϯυશൠʹܞΘΓ·ͨ͠ɻ ݱࡏɺגࣜλϯόϦϯʹͯ$50݉ΫϥυΠϯςάϨʔγϣϯ෦େࡕϚωʔδϟʔͱͯ͠ɺΤ ϯδχΞϝϯόʔͷ։ൃڥΛྑ͘͠ɺձࣾͷੜ࢈ੑΛ্ͤ͞ΔͨΊʹʑฃಆ͍ͯ͠·͢ɻ
Laravel × Herokuによる 開発‧運⽤
None
Herokuとは? • アプリの構築、提供、監視、スケールに役⽴つ クラウドプラットフォーム • 安全性とスケーラビリティに優れた DaaS (サービスとしてのデータ ベース)
→ インフラなどの管理をおまかせし、アプリの開発に集中できる IUUQTKQIFSPLVDPNXIBU
Why Heroku? IaaS アプリ スケーラビリティ ログ モニタリング オーケストレーション セキュリティ CI
/ CD ユーザー権限 OS 仮想化 ネットワーク ストレージ サーバー管理 開発するところ
• 2012年にHerokuの開発者によって提唱された • Herokuはこの考え⽅に則って作られている • Herokuを使うことで知らず知らずのうちに12factor appに沿った作りになって いる IUUQTGBDUPSOFUKB
5XFMWF'BDUPS"QQɺ࣍ͷΑ͏ͳ4PGUXBSFBTB4FSWJDFΛ࡞Γ্͛ΔͨΊͷํ๏Ͱ͋Δɻ • セットアップ⾃動化のために 宣⾔的な フォーマットを使い、プロジェクトに新しく加わった開発者が要する時間とコスト を最⼩化する。 • 下層のOSへの 依存関係を明確化 し、実⾏環境間での
移植性を最⼤化 する。 • モダンな クラウドプラットフォーム 上への デプロイ に適しており、サーバー管理やシステム管理を不要なものにする。 • 開発環境と本番環境の 差異を最⼩限 にし、アジリティを最⼤化する 継続的デプロイ を可能にする。 • ツール、アーキテクチャ、開発プラクティスを⼤幅に変更することなく スケールアップ できる。 IUUQTGBDUPSOFUKB
1.コードベース (Codebase) 2.依存関係 (Dependencies) 3.設定 (Config) 4.バックエンドサービス (Backing Services) 5.ビルド、リリース、ラン(Build,
release, run) 6.プロセス (Processes) 7.ポートバインディング (Port binding) 8.並⾏性 (Concurrency) 9.廃棄容易性 (Disposability) 10.開発/本番⼀致 (Dev/prod parity) 11.ログ (Logs) 12.管理プロセス (Admin processes) IUUQTGBDUPSOFUKB
実例
設定 (Config)
設定 (Config) • Laravelでは.env で環境変数を設定するが、 GitHubにアップしない⽅が好ましい • HerokuではGUIで環境変数を設定 (コマンドでも設定可能) •設定を環境変数に格納する
設定 (Config) 設定画⾯による設定 Heroku CLIを利⽤したコマンドによる設定
プロセス (Processes) 並⾏性 (Concurrency)
プロセス (Processes)、並⾏性 (Concurrency) • アプリケーションを1つもしくは複数のステートレスなプロセスとして実⾏する • プロセスモデルによってスケールアウトする
プロセス (Processes)、並⾏性 (Concurrency) w )FSPLVͰ༻͞ΕΔίϯςφʮEZOPʯͱݺΕΔ w ίʔυͱґଘؔϑΝΠϧ͕ύοέʔδͱͯ͠ίϯςφʹ֨ೲ ͞ΕΔ w %ZOPͷछྨ
w 8FC%ZOP w 8PSLFS%ZOP w 0OF0⒎%ZOP w %ZOPͷىಈͳͲͷઃఆ1SPDpMFͰߦ͏ IUUQTKQIFSPLVDPNEZOPT
プロセス (Processes)、並⾏性 (Concurrency) w 8FC%ZOP BQBDIFͷ8FC%ZOPΛ্ཱͪ͛Δ߹্هͷΑ͏ʹ͢Δ ଓ͚ͯυΩϡϝϯτϧʔτͷઃఆΛॻ͘ -BSBWFMͰ௨ৗɺQVCMJD͕υΩϡϝϯτϧʔτ
w 8PSLFS%ZOP プロセス (Processes)、並⾏性 (Concurrency) όοΫάϥϯυͷॲཧΛࢦఆ ্ه-BSBWFMͷΩϡʔॲཧΛىಈ͢ΔͨΊͷઃఆ
w 0OF0⒎%ZOP プロセス (Processes)、並⾏性 (Concurrency) )FSPLV4DIFEVMFSͱ͍͏ެࣜΞυΦϯΛར༻ ࢦఆͨ࣌ؒ͠ʹॲཧΛ࣮ߦ͢ΔόονɺͳͲʹར༻
w εέʔϧΞτ プロセス (Processes)、並⾏性 (Concurrency) %ZOPΛ૿͢͜ͱͰεέʔϧΞτՄೳ ઃఆը໘ͰεϥΠμʔͰಈ͔͚ͩ͢
コードベース (Codebase) 廃棄容易性 (Disposability) 開発/本番⼀致 (Dev/prod parity)
コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity) • バージョン管理されている1つのコードベースと複数のデプロイ • ⾼速な起動とグレースフルシャットダウンで堅牢性を最⼤化する •
開発、ステージング、本番環境をできるだけ⼀致させた状態を保つ • GitHub連携 • Heroku FlowでのPipeline管理 • Review Apps
コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity)
コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity)
コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity)
コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity) w (JU)VC্ͰϓϧϦΫΤετΛग़͢ͱ 3FWJFX"QQT͕ࣗಈతʹىಈ w Ϛʔδ͞ΕΔͱOFYUSFMFBTF͕
ࣗಈ%FQMPZ͞ΕΔ w ϨϏϡʔΞϓϦࣗಈͰআ͞ΕΔ
コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity) w ຊ൪ͷϦϦʔεɺ1SPNPUFϘλϯΛΫϦοΫ͢Δͱ ίϯςφ͕ͦͷ··ίϐʔ͞ΕɺϦϦʔε͞ΕΔ
1.コードベース (Codebase) 2.依存関係 (Dependencies) 3.設定 (Config) 4.バックエンドサービス (Backing Services) 5.ビルド、リリース、ラン(Build,
release, run) 6.プロセス (Processes) 7.ポートバインディング (Port binding) 8.並⾏性 (Concurrency) 9.廃棄容易性 (Disposability) .開発/本番⼀致 (Dev/prod parity) 11.ログ (Logs) 12.管理プロセス (Admin processes) IUUQTGBDUPSOFUKB
最後に なぜ、そのような構造や作りとなっているのか、を考える。 単にやり⽅を覚えるだけではなく、その理由を知る。 原理原則を知ることでより良いものを作れるようになる。
ご清聴ありがとうございました