Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Laravel × Herokuによる 開発‧運⽤

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Herokuとは? • アプリの構築、提供、監視、スケールに役⽴つ
 クラウドプラットフォーム • 安全性とスケーラビリティに優れた DaaS (サービスとしてのデータ ベース)
 
 → インフラなどの管理をおまかせし、アプリの開発に集中できる IUUQTKQIFSPLVDPNXIBU

Slide 6

Slide 6 text

Why Heroku? IaaS アプリ スケーラビリティ ログ モニタリング オーケストレーション セキュリティ CI / CD ユーザー権限 OS 仮想化 ネットワーク ストレージ サーバー管理 開発するところ

Slide 7

Slide 7 text

• 2012年にHerokuの開発者によって提唱された • Herokuはこの考え⽅に則って作られている • Herokuを使うことで知らず知らずのうちに12factor appに沿った作りになって いる IUUQTGBDUPSOFUKB

Slide 8

Slide 8 text

5XFMWF'BDUPS"QQ͸ɺ࣍ͷΑ͏ͳ4PGUXBSFBTB4FSWJDFΛ࡞Γ্͛ΔͨΊͷํ๏࿦Ͱ͋Δɻ • セットアップ⾃動化のために 宣⾔的な フォーマットを使い、プロジェクトに新しく加わった開発者が要する時間とコスト を最⼩化する。 • 下層のOSへの 依存関係を明確化 し、実⾏環境間での 移植性を最⼤化 する。 • モダンな クラウドプラットフォーム 上への デプロイ に適しており、サーバー管理やシステム管理を不要なものにする。 • 開発環境と本番環境の 差異を最⼩限 にし、アジリティを最⼤化する 継続的デプロイ を可能にする。 • ツール、アーキテクチャ、開発プラクティスを⼤幅に変更することなく スケールアップ できる。 IUUQTGBDUPSOFUKB

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

実例

Slide 11

Slide 11 text

設定 (Config)

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

プロセス (Processes)、並⾏性 (Concurrency) w )FSPLVͰ࢖༻͞ΕΔίϯςφ͸ʮEZOPʯͱݺ͹ΕΔ w ίʔυͱґଘؔ܎ϑΝΠϧ͕ύοέʔδͱͯ͠ίϯςφʹ֨ೲ ͞ΕΔ w %ZOPͷछྨ w 8FC%ZOP w 8PSLFS%ZOP w 0OF0⒎%ZOP w %ZOPͷىಈͳͲͷઃఆ͸1SPDpMFͰߦ͏ IUUQTKQIFSPLVDPNEZOPT

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity) • バージョン管理されている1つのコードベースと複数のデプロイ • ⾼速な起動とグレースフルシャットダウンで堅牢性を最⼤化する • 開発、ステージング、本番環境をできるだけ⼀致させた状態を保つ • GitHub連携 • Heroku FlowでのPipeline管理 • Review Apps

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

コードベース (Codebase)、廃棄容易性 (Disposability)、開発/本番⼀致 (Dev/prod parity) w ຊ൪΁ͷϦϦʔε͸ɺ1SPNPUFϘλϯΛΫϦοΫ͢Δͱ
 ίϯςφ͕ͦͷ··ίϐʔ͞ΕɺϦϦʔε͞ΕΔ

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

最後に なぜ、そのような構造や作りとなっているのか、を考える。 単にやり⽅を覚えるだけではなく、その理由を知る。 原理原則を知ることでより良いものを作れるようになる。

Slide 30

Slide 30 text

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