LaravelxHerokuによる開発・運用 / laravel_heroku_the_12_factor_app

LaravelxHerokuによる開発・運用 / laravel_heroku_the_12_factor_app

【シューマイ】Tech Lead Engineerから最新技術を学べ!Laravel編
https://shuuu-mai.connpass.com/event/179336/
登壇資料

68663b313774993493e7bae8cf26353e?s=128

Yusuke Kano

July 08, 2020
Tweet

Transcript

  1. Laravel × Herokuによる 開発‧運⽤ . . 【シューマイ】 Tech Lead Engineerから最新技術を学べ!Laravel編

  2. ⾃⼰紹介 • 狩野 裕介 / Kano Yusuke • @usk •

    株式会社タンバリン • CTO (兼 開発チームマネージャー) )5.-ɾ$44ͷ੍࡞͔Β'MBTIʹΑΔΠϯλϥΫςΟϒͳίϯςϯπ੍࡞ʹ਺೥ؒؔΘͬͨ͋ͱɺΤ ϯδχΞ΁δϣϒνΣϯδɻͦͷޙɺ)FSPLVΛར༻ͨ͠1)1ɾ-BSBWFMͷΞϓϦ։ൃɺ4BMFTGPSDF Λར༻ͨ͠"1*ɾγεςϜͷ։ൃͳͲɺόοΫΤϯυશൠʹܞΘΓ·ͨ͠ɻ ݱࡏ͸ɺגࣜλϯόϦϯʹͯ$50݉Ϋϥ΢υΠϯςάϨʔγϣϯ෦େࡕϚωʔδϟʔͱͯ͠ɺΤ ϯδχΞϝϯόʔͷ։ൃ؀ڥΛྑ͘͠ɺձࣾͷੜ࢈ੑΛ޲্ͤ͞ΔͨΊʹ೔ʑฃಆ͍ͯ͠·͢ɻ
  3. Laravel × Herokuによる 開発‧運⽤

  4. None
  5. Herokuとは? • アプリの構築、提供、監視、スケールに役⽴つ
 クラウドプラットフォーム • 安全性とスケーラビリティに優れた DaaS (サービスとしてのデータ ベース)
 


    → インフラなどの管理をおまかせし、アプリの開発に集中できる IUUQTKQIFSPLVDPNXIBU
  6. Why Heroku? IaaS アプリ スケーラビリティ ログ モニタリング オーケストレーション セキュリティ CI

    / CD ユーザー権限 OS 仮想化 ネットワーク ストレージ サーバー管理 開発するところ
  7. • 2012年にHerokuの開発者によって提唱された • Herokuはこの考え⽅に則って作られている • Herokuを使うことで知らず知らずのうちに12factor appに沿った作りになって いる IUUQTGBDUPSOFUKB

  8. 5XFMWF'BDUPS"QQ͸ɺ࣍ͷΑ͏ͳ4PGUXBSFBTB4FSWJDFΛ࡞Γ্͛ΔͨΊͷํ๏࿦Ͱ͋Δɻ • セットアップ⾃動化のために 宣⾔的な フォーマットを使い、プロジェクトに新しく加わった開発者が要する時間とコスト を最⼩化する。 • 下層のOSへの 依存関係を明確化 し、実⾏環境間での

    移植性を最⼤化 する。 • モダンな クラウドプラットフォーム 上への デプロイ に適しており、サーバー管理やシステム管理を不要なものにする。 • 開発環境と本番環境の 差異を最⼩限 にし、アジリティを最⼤化する 継続的デプロイ を可能にする。 • ツール、アーキテクチャ、開発プラクティスを⼤幅に変更することなく スケールアップ できる。 IUUQTGBDUPSOFUKB
  9. 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
  10. 実例

  11. 設定 (Config)

  12. 設定 (Config) • Laravelでは.env で環境変数を設定するが、
 GitHubにアップしない⽅が好ましい • HerokuではGUIで環境変数を設定 (コマンドでも設定可能) •設定を環境変数に格納する

  13. 設定 (Config) 設定画⾯による設定 Heroku CLIを利⽤したコマンドによる設定

  14. プロセス (Processes) 並⾏性 (Concurrency)

  15. プロセス (Processes)、並⾏性 (Concurrency) • アプリケーションを1つもしくは複数のステートレスなプロセスとして実⾏する • プロセスモデルによってスケールアウトする

  16. プロセス (Processes)、並⾏性 (Concurrency) w )FSPLVͰ࢖༻͞ΕΔίϯςφ͸ʮEZOPʯͱݺ͹ΕΔ w ίʔυͱґଘؔ܎ϑΝΠϧ͕ύοέʔδͱͯ͠ίϯςφʹ֨ೲ ͞ΕΔ w %ZOPͷछྨ

    w 8FC%ZOP w 8PSLFS%ZOP w 0OF0⒎%ZOP w %ZOPͷىಈͳͲͷઃఆ͸1SPDpMFͰߦ͏ IUUQTKQIFSPLVDPNEZOPT
  17. プロセス (Processes)、並⾏性 (Concurrency) w 8FC%ZOP BQBDIFͷ8FC%ZOPΛ্ཱͪ͛Δ৔߹͸্هͷΑ͏ʹ͢Δ ଓ͚ͯυΩϡϝϯτϧʔτͷઃఆΛॻ͘ -BSBWFMͰ͸௨ৗɺQVCMJD͕υΩϡϝϯτϧʔτ

  18. w 8PSLFS%ZOP プロセス (Processes)、並⾏性 (Concurrency) όοΫάϥ΢ϯυͷॲཧΛࢦఆ ্ه͸-BSBWFMͷΩϡʔॲཧΛىಈ͢ΔͨΊͷઃఆ

  19. w 0OF0⒎%ZOP プロセス (Processes)、並⾏性 (Concurrency) )FSPLV4DIFEVMFSͱ͍͏ެࣜΞυΦϯΛར༻ ࢦఆͨ࣌ؒ͠ʹॲཧΛ࣮ߦ͢ΔόονɺͳͲʹར༻

  20. w εέʔϧΞ΢τ プロセス (Processes)、並⾏性 (Concurrency) %ZOPΛ૿΍͢͜ͱͰεέʔϧΞ΢τՄೳ ઃఆը໘Ͱ͸εϥΠμʔͰಈ͔͚ͩ͢

  21. コードベース (Codebase) 廃棄容易性 (Disposability) 開発/本番⼀致 (Dev/prod parity)

  22. コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity) • バージョン管理されている1つのコードベースと複数のデプロイ • ⾼速な起動とグレースフルシャットダウンで堅牢性を最⼤化する •

    開発、ステージング、本番環境をできるだけ⼀致させた状態を保つ • GitHub連携 • Heroku FlowでのPipeline管理 • Review Apps
  23. コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity)

  24. コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity)

  25. コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity)

  26. コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity) w (JU)VC্ͰϓϧϦΫΤετΛग़͢ͱ
 3FWJFX"QQT͕ࣗಈతʹىಈ w Ϛʔδ͞ΕΔͱOFYUSFMFBTF͕


    ࣗಈ%FQMPZ͞ΕΔ w ϨϏϡʔΞϓϦ͸ࣗಈͰ࡟আ͞ΕΔ
  27. コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity) w ຊ൪΁ͷϦϦʔε͸ɺ1SPNPUFϘλϯΛΫϦοΫ͢Δͱ
 ίϯςφ͕ͦͷ··ίϐʔ͞ΕɺϦϦʔε͞ΕΔ

  28. 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
  29. 最後に なぜ、そのような構造や作りとなっているのか、を考える。 単にやり⽅を覚えるだけではなく、その理由を知る。 原理原則を知ることでより良いものを作れるようになる。 

  30. ご清聴ありがとうございました