Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20年以上続く PHP 大規模プロダクトを Kubernetes へ ── クラウド基盤刷新プ...

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

20年以上続く PHP 大規模プロダクトを Kubernetes へ ── クラウド基盤刷新プロジェクトの4年間

PHPerKaigi 2026の発表資料です
https://fortee.jp/phperkaigi-2026/proposal/9dec43e0-0dd2-49cc-90b9-113d7749e153

- MASH弦楽団
https://mashdjango.com/

- 基盤側のNecoプロジェクト概要
https://blog.cybozu.io/entry/ever-lasting-neco

- 2022年にPHP Conferenceでの発表資料
https://speakerdeck.com/oogfranz/garoon-on-kubernetes

- 山本の公理
https://www.slideshare.net/slideshow/cybozucom-14446847/14446847

- Garoonにおけるジョブキュー切り替えの挑戦
https://blog.cybozu.io/entry/2024/08/19/155441

- DIコンテナの導入について
https://speakerdeck.com/ynkt/sok-gai-shan-shi-bai-karaxue-bu-regasipurodakutonili-tixiang-kautimuzuo-ri?slide=23

- PHP-FPMからOpenMetrics形式でメトリクス取得するときに遭遇した落とし穴と外部ツールを使った場合との比較
https://blog.cybozu.io/entry/2025/09/29/170000

- 開発者が運用を理解するための第一歩 -PHPのスローログを観測可能にしてみた-
https://blog.cybozu.io/entry/2025/10/20/170000

- 倍速会議
https://baisoku-kaigi.plural-reality.com/

Avatar for Yuichi Sugiyama

Yuichi Sugiyama PRO

March 21, 2026
Tweet

More Decks by Yuichi Sugiyama

Other Decks in Technology

Transcript

  1. cybozu.com • αΠϘ΢ζ͕ఏڙ͢Δɺ • kintone • Garoon • αΠϘ΢ζ Of

    fi ce • ϝʔϧϫΠζ • Λ҆શ͔ͭԁ׈ʹར༻͢ΔͨΊͷ BtoBͷ Ϋϥ΢υج൫ • 2011೥ఏڙ։࢝ 
  2. Forestͱ͸ • 2011೥ʹαʔϏε։࢝ ͨ͠cybozu.com༻ͷࣗࣾσʔληϯλʔ • 10୆ఔ౓ͷVMΛ1ηοτʹͯ͠ߏ੒ ʢApplication, DB, ϑΝΠϧαʔό…ʣ •

    1ηοτʹෳ਺ͷυϝΠϯΛऩ༰ʢϚϧνςφϯτʣ • ߏஙʹܞΘͬͨ৿̋͞Μͷ໊લ͔ΒForestͱݺ͹ΕΔ 
  3. Forestͷߏ੒  "1 "1 (BSPPOɹ .Z42- LJOUPOFɹ .Z42- ϑΝΠϧ αʔό

    &MBTUJDTFB SDI "1 "1 (BSPPOɹ .Z42- LJOUPOFɹ .Z42- ϑΝΠϧ αʔό &MBTUJDTFB SDI "1 "1 (BSPPOɹ .Z42- LJOUPOFɹ .Z42- ϑΝΠϧ αʔό &MBTUJDTFB SDI "1 (BSPPOɹ .Z42- ϑΝΠϧ αʔό
  4. Forest ͷ՝୊ • εέʔϥϏϦςΟ͕௿͍ • ϝϯςφϯεੑ͕௿͍ • Ϧιʔεޮ཰͕ѱ͍ • ։ൃͱӡ༻ͷؒʹน

    • αʔϏεͷߏ੒มߋ͕ࠔ೉  Ϣʔβʔ૿Ճʹͱ΋ͳ͍ӡ༻ͷݶք͕ݟ͍͑ͯͨ
  5. VMͰͷΦϖϨʔγϣϯ 9 4FSWJDF" 4FSWJDF# • ୯ʹService BΛࢭΊΔͯߋ৽͢Δͱɻɻɻʁ • Service AʹΞΫηε͕͋ΔͱService

    A͕ࢭ·Δ 4FSWJDF#ͷӡ༻ͷͨΊʹ͸ 4FSWJDF"͕࢖͍ͬͯΔ͜ͱΛ஌Βͳ͍ͱμϝ αʔϏε͕ͨ͘͞Μ͋ͬͨΒʁ
  6. Forest ͷ՝୊ • εέʔϥϏϦςΟ͕௿͍ • ϝϯςφϯεੑ͕௿͍ • Ϧιʔεޮ཰͕ѱ͍ • ։ൃͱӡ༻ͷؒʹน

    • αʔϏεͷߏ੒มߋ͕ࠔ೉  Ϣʔβʔ૿Ճʹͱ΋ͳ͍ӡ༻ͷݶք͕ݟ͍͑ͯͨ /FDPͰ͢ɻΑΖ͓͘͠Ͷ͕͍͠·͢ɻ
  7. Deployment • Pod ͷ਺ͱঢ়ଶΛ؅ཧ • ࢦఆͨ͠਺ͷ Pod ͕ৗʹಈ͘Α͏ʹ͢Δ • Pod

    ͕յΕΔͱ ࣗಈͰ৽͍͠ Pod Λ࡞Δ • ϩʔϦϯάΞοϓσʔτ΋ߦ͏ 
  8. GitOps • Kubernetes ͷઃఆΛ͢΂ͯ Git ʹอଘ • Πϯϑϥઃఆͷมߋ͸ Git ΁ͷ

    Pull Request Ͱߦ͏ • ಛఆͷϒϥϯνʹϚʔδ͞ΕͨΒɺࣗಈͰΠϯϑϥͷ ઃఆ͕ߋ৽͞ΕΔ 
  9.  Middleware ϦϙδτϦ php-fpmΠϝʔδ nginx Πϝʔδ Garoon ϦϙδτϦ garoon-apps ϦϙδτϦ

    GaroonΠϝʔδ - PHPϏϧυ - PHP֦ுϏϧυ - php-fpm ઃఆ - Garoonͷίʔυ௥Ճ - Garoon༻ͷઃఆ GaroonΠϯϑϥίʔυ Garoon Πϝʔδͷόʔδϣϯ nginx Πϝʔδͷόʔδϣϯ Πϝʔδ
  10.  Middleware ϦϙδτϦ php-fpmΠϝʔδ nginx Πϝʔδ Garoon ϦϙδτϦ garoon-apps ϦϙδτϦ

    GaroonΠϝʔδ - PHPϏϧυ - PHP֦ுϏϧυ - php-fpm ઃఆ - Garoonͷίʔυ௥Ճ - Garoon༻ͷઃఆ GaroonΠϯϑϥίʔυ Garoon Πϝʔδͷόʔδϣϯ Nginx Πϝʔδͷόʔδϣϯ Πϝʔδ (BSPPOͷΠϝʔδ͕/FDPͰಈ͍ͨʂ
  11. Architecture Decision Record (ADR) • TsukimiνʔϜͰ͸GaroonͷNecoҠߦʹ͓͍ͯɺ େ͖ΊͷҙࢥܾఆΛADRͱͯ͠ه࿥ • େখ߹Θͤͯ60Ҏ্ͷADRΛه࿥ •

    Forest࣌୅ͷߏ੒͸ͳͥͦ͏ͳͬͨͷ͔ɺͷه࿥͕ࢄҳ • NecoҠߦϓϩδΣΫτ͕ਐΜͩ͋ͱ΍ɺ ৽ϝϯόʔ͕ೖ͖ͬͯͨͱ͖ʹ΋ࢀরͰ͖ΔΑ͏ʹ 
  12. 

  13. NecoʹҠߦ͢ΔͨΊʹߦͬͨλεΫΛ঺հ ͢Δͥʂ  1. δϣϒΩϡʔͷҠߦ 2. ઈରʹఀࢭͤ͞ͳ͍Kubernetes V.S. ઈରʹఀࢭ͍ͤͨ͞ϝϯςφϯε 3.

    αʔϏεσΟεΧόϦʔରԠ 4. ো֐ͷӨڹൣғΛݶఆ͢ΔόϧΫϔουͷಋೖ 5. ϩάͷճऩͱվम 6. ؂ࢹػೳɾμογϡϘʔυͷ࡞੒ 7. ElasticsearchͷNecoҠߦ 8. Neco্ͷ؀ڥΛଞͷGaroon։ൃϝϯόʔ͕͔ͭ͑ΔΑ͏ʹ 9. ো֐ରԠ܇࿅
  14.  DZCP[VDPNͷ ςφϯτ؅ཧαʔϏε (BSPPO .JHSBUPS %#؅ཧ αʔϏε (BSPPO"1 (BSPPO .Z42-

    HBSPPOBQQT ϝϯςφϯεϞʔυ΁ MySQLϢʔβʔͷݖݶΛୣ͏ Migrator, APͷߋ৽ DBεΩʔϚͷߋ৽ ϝϯςφϯεϞʔυ͔Βग़Δ εΩʔϚߋ৽༻ͷMySQLϢʔβʔΛར༻ MySQLϢʔβʔͷݖݶΛ໭͢
  15.  DZCP[VDPNͷ ςφϯτ؅ཧαʔϏε (BSPPO .JHSBUPS %#؅ཧ αʔϏε (BSPPO"1 (BSPPO .Z42-

    HBSPPOBQQT ϝϯςφϯεϞʔυ΁ MySQLϢʔβʔͷݖݶΛୣ͏ Migrator, APͷߋ৽ DBεΩʔϚͷߋ৽ ϝϯςφϯεϞʔυ͔Βग़Δ εΩʔϚߋ৽༻ͷMySQLϢʔβʔΛར༻ MySQLϢʔβʔͷݖݶΛ໭͢ ϝϯςφϯεϞʔυ΁ ҰൠMySQL UserͷݖݶΛണୣ
  16.  DZCP[VDPNͷ ςφϯτ؅ཧαʔϏε (BSPPO .JHSBUPS %#؅ཧ αʔϏε (BSPPO"1 (BSPPO .Z42-

    HBSPPOBQQT ϝϯςφϯεϞʔυ΁ MySQLϢʔβʔͷݖݶΛୣ͏ Migrator, APͷߋ৽ DBεΩʔϚͷߋ৽ ϝϯςφϯεϞʔυ͔Βग़Δ εΩʔϚߋ৽༻ͷMySQLϢʔβʔΛར༻ MySQLϢʔβʔͷݖݶΛ໭͢ garoon-appsΛߋ৽͠ APͱMigratorΛߋ৽
  17.  DZCP[VDPNͷ ςφϯτ؅ཧαʔϏε (BSPPO .JHSBUPS %#؅ཧ αʔϏε (BSPPO"1 (BSPPO .Z42-

    HBSPPOBQQT ϝϯςφϯεϞʔυ΁ MySQLϢʔβʔͷݖݶΛୣ͏ Migrator, APͷߋ৽ DBεΩʔϚͷߋ৽ ϝϯςφϯεϞʔυ͔Βग़Δ εΩʔϚߋ৽༻ͷMySQLϢʔβʔΛར༻ MySQLϢʔβʔͷݖݶΛ໭͢ DBεΩʔϚΛεΩʔϚߋ৽༻ͷ MySQLϢʔβʔͰߋ৽
  18.  DZCP[VDPNͷ ςφϯτ؅ཧαʔϏε (BSPPO .JHSBUPS %#؅ཧ αʔϏε (BSPPO"1 (BSPPO .Z42-

    HBSPPOBQQT ϝϯςφϯεϞʔυ΁ MySQLϢʔβʔͷݖݶΛୣ͏ Migrator, APͷߋ৽ DBεΩʔϚͷߋ৽ ϝϯςφϯεϞʔυ͔Βग़Δ εΩʔϚߋ৽༻ͷMySQLϢʔβʔΛར༻ MySQLϢʔβʔͷݖݶΛ໭͢ ϝϯςφϯεϞʔυ͔Βग़Δ
  19. Forestͷߏ੒ʢ͓͞Β͍ʣ  "1 "1 (BSPPOɹ .Z42- LJOUPOFɹ .Z42- ϑΝΠϧ αʔό

    &MBTUJDTFB SDI "1 "1 (BSPPOɹ .Z42- LJOUPOFɹ .Z42- ϑΝΠϧ αʔό &MBTUJDTFB SDI "1 "1 (BSPPOɹ .Z42- LJOUPOFɹ .Z42- ϑΝΠϧ αʔό &MBTUJDTFB SDI "1 (BSPPOɹ .Z42- ϑΝΠϧ αʔό
  20. NecoͰͷߏ੒  (BSPPOɹ .Z42- ϑΝΠϧ αʔό (BSPPOɹ "1 (BSPPOɹ "1

    (BSPPOɹ "1 (BSPPOɹ .Z42- ϑΝΠϧ αʔό "1͸ঢ়ଶΛ࣋ͨͳ͍ͷͰ ϦΫΤετ͝ͱʹ ೚ҙͷ1PEΛར༻Մೳ
  21. NecoͰͷߏ੒  (BSPPOɹ .Z42- ϑΝΠϧ αʔό (BSPPOɹ "1 (BSPPOɹ "1

    (BSPPOɹ "1 (BSPPOɹ .Z42- ϑΝΠϧ αʔό %#΍ϑΝΠϧαʔόʔ͸ Ϣʔβʔ͝ͱʹར༻͢Δ΋ ͷ͕ҟͳΔ
  22. is_forest() ஍ࠈ • ύοέʔδ൛͔Forest͔ͷݟ෼͚͸ɺ ઃఆϑΝΠϧͱ؀ڥม਺ͷ஋Λࢀর • is_forest() ϝιου͕͢Ͱʹ਺ඦϲॴॻ͔Ε͍ͯΔ  if

    (is_forest()) { $validate = new ValidateFileIdentifierOnForest($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ } else { $validate = new ValidateFileIdentifierOnpremise($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ }
  23. is_forest() ஍ࠈ • ύοέʔδ൛͔Forest͔ͷݟ෼͚͸ɺ ઃఆϑΝΠϧͱ؀ڥม਺ͷ஋Λࢀর • is_forest() ϝιου͕͢Ͱʹ਺ඦϲॴॻ͔Ε͍ͯΔ  if

    (is_forest()) { $validate = new ValidateFileIdentifierOnForest($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ } else { $validate = new ValidateFileIdentifierOnpremise($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ } JT@OFDP ϝιουΛ࡞Δͷ͸ඇݱ࣮త
  24. DIίϯςφ • ґଘؔ܎ʢDependency) Λ֎͔Β஫ೖʢInjectionʣ • MySQLͷconnectionΠϯελϯεͷ࡞੒ॲཧΛ DIίϯςφͰղܾͤ͞Δ • NecoͰ͋Δ͔Ͳ͏͔͸DIίϯςφͷొ࿥෦෼ʹӅṭ •

    GaroonͰ͸2020೥͋ͨΓʹಋೖ͞Εͨ͹͔Γͩͬͨ  https://speakerdeck.com/ynkt/sok-gai-shan-shi-bai-karaxue-bu- regasipurodakutonili-tixiang-kautimuzuo-ri?slide=23
  25. DIίϯςφ • ґଘؔ܎ʢDependency) Λ֎͔Β஫ೖʢInjectionʣ • MySQLͷconnectionΠϯελϯεͷ࡞੒ॲཧΛ DIίϯςφͰղܾͤ͞Δ • NecoͰ͋Δ͔Ͳ͏͔͸DIίϯςφͷొ࿥෦෼ʹӅṭ •

    GaroonͰ͸2020೥͋ͨΓʹಋೖ͞Εͨ͹͔Γͩͬͨ  JT@OFDP Λ࡞Βͣʹ/FDPҠߦΛ׬ྃ https://speakerdeck.com/ynkt/sok-gai-shan-shi-bai-karaxue-bu- regasipurodakutonili-tixiang-kautimuzuo-ri?slide=23
  26. NecoͰͷߏ੒ʢ࠶ܝʣ  (BSPPOɹ .Z42- ϑΝΠϧ αʔό (BSPPOɹ "1 (BSPPOɹ "1

    (BSPPOɹ "1 (BSPPOɹ .Z42- ϑΝΠϧ αʔό "1͸ঢ়ଶΛ࣋ͨͳ͍ͷͰ ϦΫΤετ͝ͱʹ ೚ҙͷ1PEΛར༻Մೳ
  27. NecoͰͷߏ੒ʢ࠶ܝʣ  (BSPPOɹ .Z42- ϑΝΠϧ αʔό (BSPPOɹ "1 (BSPPOɹ "1

    (BSPPOɹ "1 (BSPPOɹ .Z42- ϑΝΠϧ αʔό ͋Δ1PE͕ো֐ʹͳΔͱ શϢʔβʔ͕ো֐Λड͚Δ
  28. NecoͰͷߏ੒ʢ࠶ܝʣ  (BSPPOɹ .Z42- ϑΝΠϧ αʔό (BSPPOɹ "1 (BSPPOɹ "1

    (BSPPOɹ "1 (BSPPOɹ .Z42- ϑΝΠϧ αʔό 1PEΛյ͢Α͏ͳΞΫηε͕͋Δͱɺ ଞͷ͢΂ͯͷϢʔβʔʹӨڹ
  29. όϧΫϔου  (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1

    (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1 Ϣʔβʔ͝ͱʹར༻͢Δ "1Λݻఆ
  30. όϧΫϔου  (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1

    (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1 ো֐͕ى͖ͯ΋Өڹ͕ Ұ෦ͷϢʔβʔʹݶΒΕΔ
  31. όϧΫϔου  (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1

    (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1 (BSPPOɹ "1 1PEΛյ͢Α͏ͳΞΫηε͕͋Ε͹ɺ ͦͷυϝΠϯ͚ͩΛ ผͷόϧΫϔουʹ
  32. ϩάͷߏ଄Խ • 1ߦ 1JSON ΦϒδΣΫτʹ • "topic" ͱ͍͏ϑΟʔϧυͰɺ͍··ͰͷϑΝΠϧ໊૬౰ͷ ߜΓࠐΈΛͰ͖ΔΑ͏ʹ •

    JSON Λѻ͏πʔϧ jq ͳͲͰௐࠪΛߦ͍΍͘͢ • ೚ҙͷύϥϝʔλΛ௥ՃՄೳʹ͠ɺूܭ΋΍Γ΍͘͢ͳΔ  {"topic": "mail", "message": "received", "logged_at":"2026-03-16T04 {"topic": "database", "message": "transaction rollback", "logged_at":" {"topic": "php_error", "message": "A fatal error occurred", "logged_at
  33. ϩάͷߏ଄Խ • 1ߦ 1JSON ΦϒδΣΫτʹ • "topic" ͱ͍͏ϑΟʔϧυͰɺ͍··ͰͷϑΝΠϧ໊૬౰ͷ ߜΓࠐΈΛͰ͖ΔΑ͏ʹ •

    JSON Λѻ͏πʔϧ jq ͳͲͰௐࠪΛߦ͍΍͘͢ • ೚ҙͷύϥϝʔλΛ௥ՃՄೳʹ͠ɺूܭ΋΍Γ΍͘͢ͳΔ  {"topic": "mail", "message": "received", "logged_at":"2026-03-16T04 {"topic": "database", "message": "transaction rollback", "logged_at":" {"topic": "php_error", "message": "A fatal error occurred", "logged_at ύοέʔδ൛ͷαϙʔτίετ΋݁ՌతʹԼ͛ΒΕͨ
  34. GaroonͰ༻ҙͨ͠μογϡϘʔυ • APͷՔಇঢ়گ • όϧΫϔου͝ͱͷՔಇঢ়گ • ϨεϙϯελΠϧͷ95ˋλΠϧ • 5xxΤϥʔɺPHPΤϥʔͷൃੜঢ়گ •

    APͷϦιʔεʢCPU, Memory, Volumeʣͷར༻ঢ়گ • δϣϒΩϡʔͷͭ·Γঢ়گ  /FDPҠߦ࣌ɾҠߦޙʹ໰୊͕͋Ε͹ Կ͔͠Βݕ஌Ͱ͖ΔΑ͏ʹ
  35. Ξϥʔτ • ໰୊͕͋Ε͹Slackʹϝʔϧ͕ಧ͘Α͏ʹ • CRITICAL / ERROR / WARNING ʹ෼ྨ

    • CRITICALͷ΋ͷ͸ɺPagerDutyͰ ো֐ରԠϝϯόʔʹి࿩Λඈ͹͢Α͏ʹ 
  36. ERROR / WARNINGͷΞϥʔτ • PHP-FPMͷϫʔΧʔϓϩηεʹ౸ୡෆೳͳঢ়ଶ͕ ᮢ஋Ҏ্ͷ࣌ؒܧଓ • PHP-FPMͷmax_childrenʹ౸ୡ͍ͯ͠Δ • ArgoCD͕SyncedͰͳ͍ঢ়ଶ͕ᮢ஋Ҏ্ͷ࣌ؒܧଓ

    • δϣϒΩϡʔͷ஗Ԇ͕ᮢ஋Ҏ্ͷ࣌ؒൃੜ • Pod ͷ࠶ىಈ͕ᮢ஋Ҏ্ͷ࣌ؒ܁Γฦ͍ͯ͠Δ  Ϣʔβʔ͕·ͬͨ͘࢖͍͑ͯͳ͍Θ͚Ͱ͸ͳ͍͕ɺ ͳʹ͔͠Βͷ໰୊͕ൃੜ͍ͯ͠Δ΋ͷΛ ίϯϙʔωϯτ͝ͱʹ؂ࢹ
  37. ᶄϢʔβʔॻ͖ࠐΈ࣌ʹɺForest, NecoͷEs྆ํͷΠ ϯσοΫεΛߋ৽͢ΔΑ͏ʹ͢Δ (BSPPOɹ "1 Forest Es (BSPPOɹ .Z42- •

    ΫϩʔϦϯά͕׬͍ྃͯ͠Ε͹ɺForestͱNecoͷΠϯσοΫε͕ ಉ͡಺༰ʹͳΔ  Neco Es
  38. ᶄϢʔβʔॻ͖ࠐΈ࣌ʹɺForest, NecoͷEs྆ํͷΠ ϯσοΫεΛߋ৽͢ΔΑ͏ʹ͢Δ (BSPPOɹ "1 Forest Es (BSPPOɹ .Z42- •

    ΫϩʔϦϯά͕׬͍ྃͯ͠Ε͹ɺForestͱNecoͷΠϯσοΫε͕ ಉ͡಺༰ʹͳΔ  Neco Es
  39. ։ൃ؀ڥͰ͸ • ௨ৗͷ։ൃͰ͸ΠϯϑϥΛࡉ͔͘ઃఆ͍ͨ͜͠ͱ͸ك • ςετ͕ऴΘͬͨΒ࡟আͯ͠جຊతʹ͸໰୊ͳ͍ • CI্ͰϘλϯͻͱͭͰ kubectl ίϚϯυ͕࣮ࢪ͞Εɺ খϦιʔεͷGaroon։ൃ؀ڥ͕࡞੒͞ΕΔΑ͏ʹ

    • Ұఆظؒͨͬͨ؀ڥ͸ࣗಈ࡟আ • ࡉ͔͍ઃఆ͕ඞཁͰ͋ͬͨΓɺ։ൃ؀ڥΛ࢒͓͖͍ͯͨ࣌͠͸ɺ એݴతʹgaroon-appsʹઃఆΛ͔͚ΔΑ͏ʹ 
  40. 

  41. 

  42. NecoʹҠߦ͢ΔͨΊʹߦͬͨλεΫΛ঺հ ͢Δͥʂ  1. δϣϒΩϡʔͷҠߦ 2. ઈରʹఀࢭͤ͞ͳ͍Kubernetes V.S. ઈରʹఀࢭ͍ͤͨ͞ϝϯςφϯε 3.

    αʔϏεσΟεΧόϦʔରԠ 4. ো֐ͷӨڹൣғΛݶఆ͢ΔόϧΫϔουͷಋೖ 5. ϩάͷճऩͱվम 6. ؂ࢹػೳɾμογϡϘʔυͷ࡞੒ 7. ElasticsearchͷNecoҠߦ 8. Neco্ͷ؀ڥΛଞͷGaroon։ൃϝϯόʔ͕͔ͭ͑ΔΑ͏ʹ 9. ো֐ରԠ܇࿅
  43. NecoʹҠߦ͢ΔͨΊʹߦͬͨλεΫΛ঺հ ͢Δͥʂ  1. δϣϒΩϡʔͷҠߦ 2. ઈରʹఀࢭͤ͞ͳ͍Kubernetes V.S. ઈରʹఀࢭ͍ͤͨ͞ϝϯςφϯε 3.

    αʔϏεσΟεΧόϦʔରԠ 4. ো֐ͷӨڹൣғΛݶఆ͢ΔόϧΫϔουͷಋೖ 5. ϩάͷճऩͱվम 6. ؂ࢹػೳɾμογϡϘʔυͷ࡞੒ 7. ElasticsearchͷNecoҠߦ 8. Neco্ͷ؀ڥΛଞͷGaroon։ൃϝϯόʔ͕͔ͭ͑ΔΑ͏ʹ 9. ো֐ରԠ܇࿅ ͍Α͍Α/FDPҠߦͰ͖Δ͔ɾɾɾʂʁ