Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
LaravelxHerokuによる開発・運用 / laravel_heroku_the_12_factor_app
Yusuke Kano
July 08, 2020
Programming
1
850
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
kusk
1
780
Other Decks in Programming
See All in Programming
standfm
0
210
loleg
0
190
attsumi
1
350
ken3ypa
0
150
cwozaki
1
1.6k
line_developers_tw
0
350
nauleyco
0
200
kubode
0
170
akatsukinewgrad
0
130
dictoss
0
160
anchorcable
1
120
masayaaoyama
4
520
Featured
See All Featured
phodgson
87
3.9k
jlugia
216
16k
jonyablonski
14
1.1k
ddemaree
274
31k
eitanlees
111
9.9k
jponch
103
4.9k
3n
163
22k
revolveconf
200
9.6k
chriscoyier
499
130k
trallard
13
640
afnizarnur
176
14k
colly
66
3k
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
最後に なぜ、そのような構造や作りとなっているのか、を考える。 単にやり⽅を覚えるだけではなく、その理由を知る。 原理原則を知ることでより良いものを作れるようになる。
ご清聴ありがとうございました