Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ChatWorkとPHPと私
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
tan-yuki
October 08, 2017
Technology
16k
14
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ChatWorkとPHPと私
PHPConference 2017
ChatWork株式会社 田中佑樹
tan-yuki
October 08, 2017
More Decks by tan-yuki
See All by tan-yuki
モノリスから小さなシステムへ / Chatworkシステム移行の現在地と今後について@開発生産性カンファレンス
tanakayuki
3
7k
2024-03-16 社員30人 → 300人のフェーズを経験し見えてきた、 エンジニアとして成長するための考え方
tanakayuki
5
6.8k
リリースから12年! Chatworkの過去をふりかえり ~ ChatworkとPHPの歩み ~
tanakayuki
0
1.5k
フィーチャーチーム化への取り組みと、それを支える組織マネジメント体制
tanakayuki
2
26k
運用について - 2020 Chatwork サマーインターンシップ
tanakayuki
0
1.1k
Chatworkから学ぶインフラサービス提供の心得.pdf
tanakayuki
0
1.8k
開発者からみたCloudSearch
tanakayuki
2
2.8k
git
tanakayuki
3
620
Other Decks in Technology
See All in Technology
Incremental HTTP
kazuho
4
1.7k
Confitura 2026
logico_jp
0
110
Kiro Meetup #8 Kiro アップデート (2026/3/21〜2026/9/24)
katzueno
1
310
TiDBファミリーにDWHが新登場!! TiDB最新情報 / TiDB update 202609
yoshiakiyamasaki
0
160
10年欲しかった音楽管理アプリを、AIと一緒に作りはじめた
judau
1
190
Making AI Agents Safe and Fast- Jev, Obsidian, and the Meta-Harness
x5gtrn
PRO
0
170
spanner-autoscalerに学ぶ CRD設計パターン 〜自動化と緊急時対応を両立する Kubernetesコントローラーの作り方〜
tkuchiki
0
210
20260930_Gemma4_Hands-on
tsho
0
180
音声コミュニティを守るAI監視基盤_ 90%以上の入力削減を支えたServerless設計と運用判断
shuheioka123
0
120
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
250
SQL Server 2025 最適化されたロック
odashinsuke
0
100
Terraformを用いたJamf Pro構成のIaC, GitOps化への挑戦
yukun
0
120
Featured
See All Featured
How to make the Groovebox
asonas
2
2.5k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Evolving SEO for Evolving Search Engines
ryanjones
0
300
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
350
The Curious Case for Waylosing
cassininazir
1
550
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Color Theory Basics | Prateek | Gurzu
gurzu
1
480
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
400
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
470
Music & Morning Musume
bryan
48
7.4k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Transcript
ChatWorkͱPHPͱࢲ PHPConference 2017
© ChatWork ✔ Java ✔ JavaScript ✔ PHP ɹScala ✔
Vim ాத༎थ ChatWorkגࣜձࣾ ɹɹtan-yuki ɹɹtan_yuki ɹ৽ׁग़ ɹChatWork͔Ε͜Ε5 ɹೣ͕1ඖ
© ChatWork ▸ ຊൃϏδωενϟοτ ▸ λεΫཧϏσΦ௨͕Մೳ ▸ ಋೖاۀ150,000ࣾʢ※20179݄࣌ʣ
© ChatWork ChatWorkͷΠϝʔδ
© ChatWork ▸ Scala͚ͩ͡Όͳ͍ΑʂPHPͬͯΔΑʂ ࣮ࡍ
© ChatWork ͜ͷεϥΠυͷత ▸ ͜Μͳਓͨͪʹฉ͍ͯΒ͍͍ͨ ▸ ϨΨγʔ͔Β٫͍ͨ͠ͱࢥ͍ͬͯΔ ▸ ֦େͭͭ͋͠Δاۀɾ৫ ▸
͜Μͳ͜ͱ͕Θ͔Δ ▸ ϨΨγʔ٫ͷͨΊͷઓུͷҰྫ ▸ ϨΨγʔ٫Λઓͨ͠ਓͨͪͷྺ࢙
© ChatWork ྺ࢙܁Γฦ͢ ▸ ࣦഊͱޭͷ܁Γฦ͠ ▸ ྺ࢙͔Βֶ΅͏
© ChatWork ChatWorkͱPHPͷྺ࢙
© ChatWork ChatWorkͷੜ 1 2 3
© ChatWork νϟοτϫʔΫ͕Ͱ͖Δ·Ͱ ▸ 2000 ▸ EC studioۀ ʢͱͱChatWorkͱ͍͏ձࣾͰͳ͔ͬͨʣ ▸
தখاۀ͚ͷιϦϡʔγϣϯΛఏڙ
© ChatWork νϟοτϫʔΫ͕Ͱ͖Δ·Ͱ ▸ 2010 ▸ ࣾπʔϧͱͯ͠ͷνϟοτϫʔΫΛ։ൃ ▸ Skypeͷෆຬͩͬͨ෦Λվྑ ▸
ͨ·ͨ·UstreamͰެ։ͨ͠ͱ͜Ζɺେڹʂ ▸ 2011 ▸ ਖ਼ࣜͳϓϩμΫτͱͯ͠ϩʔϯν͢Δ
© ChatWork ࣾπʔϧ࣌ͷόʔδϣϯ
© ChatWork ॳظϦϦʔεόʔδϣϯ
© ChatWork νϟοτϫʔΫϦϦʔε࣌ͷঢ়گ ▸ ͓͔͛͞·ͰαʔϏεٸ ▸ νϟοτϒʔϜͷ͋ΓɺޱίϛͰେ͖͕͍ͬͯ͘͘ ▸ େاۀͷಋೖਐΉ ▸
໊ࣾΛChatWorkגࣜձࣾมߋɺࣾӡΛṌ͚Δ֮ޛΛܾΊΔ
© ChatWork ੵΈॏͳ͍ٕͬͯ͘ज़తෛ࠴ ▸ ͱʹ͔͘εϐʔυॏࢹ ▸ ։ൃɺ։ൃɺ։ൃɾɾɾ ▸ ޙΖΛৼΓฦΒͳ͍ ▸
ਓһ૿Ճ ▸ ૿͑ଓ͚Δ҉ ▸ ࢲ͜͜ΒΜͰೖࣾʢ20134݄ʣ ▸ Ҏલ͔Β༻͍ͯͨ͠ಠࣗϑϨʔϜϫʔΫΛݩʹ։ൃΛ͢͢ΊΔ
© ChatWork ಠࣗϑϨʔϜϫʔΫ ▸ ECFʢEC Frameworkʣ ▸ ࣾͷಠࣗϑϨʔϜϫʔΫʢPHP4ϕʔεʣ ▸ ಈతͳWebϖʔδΛαΫοͱ࡞Δ͜ͱΛతͱ͍ͯ͠Δ
▸ શ෦ೖΓɺAll in OneͳϑϨʔϜϫʔΫ ▸ Smarty template, QueryBuilder, Validator, scaffolding, Form ▸ TestFramework, Mail, i18n, ….
© ChatWork υΩϡϝϯτॆ࣮͍ͯ͠Δ
© ChatWork ChatWork on ECF ▸ EC studioͷͯ͢ECFͰ࡞ΒΕ͍ͯͨ ▸ νϟοτϫʔΫྫ֎Ͱͳ͍
▸ ECF؆୯ͳಈతϖʔδΛ࡞ΔͨΊʹಛԽ͠ ͨϑϨʔϜϫʔΫ ▸ AjaxલఏͷνϟοτπʔϧͷఆͳΜͯͳ͍
© ChatWork ςετ on ECF ▸ Ϣχοτςετ͕GUIͰ༻ҙ͞Ε͍ͯͨ ▸ νΣοΫϘοΫεʹνΣοΫɺϘλϯΫϦοΫͰ࣮ߦ ▸
શ෦νΣοΫ࣮ͯ͠ߦ͢ΔͱམͪΔʢҰͭҰͭͳΒಈ͘ʣ
© ChatWork ECFҎલʹ ▸ νϟοτϫʔΫͱͱࣾπʔϧͱͯ͠։ൃ͍ͯͨ͠ ▸ େنͳνʔϜ։ൃߴτϥϑΟοΫͳαʔϏεͷߟྀ͕͞Ε͍ͯͳ͍ ▸ σʔλઃܭ͕େྔσʔλΛѻ͏࡞ΓͰͳ͍
© ChatWork ͳΜͱ͔ͤͶɾɾɾ
© ChatWork ͱΓ͋͑ͣϢχο τςετ ▸ ͱʹ͔͘ɺϢχοτςετΛॻ͖͍ͨ͘͢͠ ▸ ແҋʹϦϑΝΫλͯ͠ɺςετ͕ਏ͍ ▸ ࣾϝϯόʔखಈςετͰͷݶքΛײ͓ͯ͡Γɺ
ςετʹର͢ΔԹײߴ͔ͬͨ
© ChatWork Ϣχο τςετͰಘΒΕΔͷ ▸ ؆୯ͳϛε͕ଈ࠲ʹΘ͔Δ ▸ ಛʹPHP࣮ऀ͕ҙࣝ͠ͳ͍ͱܕʹकΒΕͳ͍ ▸ ॲཧΛׂ͠ͳͯ͘Ϣχοτςετॻ͖ͮΒ͍
ͷͰɺΛׂ͢Δ͔͠ͳ͍ ▸ ڊେϝιο υ͕࡞ΒΕʹ͘͘ͳΔ ▸ ࣗ৴Λ࣋ͬͯϦϑΝΫλͰ͖Δ
© ChatWork Ϣχο τςετͰಘΒΕͳ͍ͷ ▸ खಈςετΛશʹͳ͘͢͜ͱ΄΅ແཧ ▸ ϢχοτςετखಈςετΛʮָʹ͢Δʯ͚ͩ ▸ खಈςετΛͮ͠Β͍෦ΛϢχοτςετͰ୲อ
͢ΔͱɺՁ͕ߴ͍
© ChatWork ςετΛॻ͖͘͢͢ΔͨΊʹ ▸ ݱঢ়ͩͱΫϥεɾϝιουͷ͕େ͖͗ͯ͢Ϣχοτςετ͕ॻ͖ͮΒ͍ ▸ 500ߦΛ͑ΔϩδοΫͷڽΓݻ·ͬͨϝιου ▸ 1ສߦΛ͑ΔਆΫϥεͷଘࡏ ▸
PSR४ڌͷύοέʔδΛ৽ͨʹ࡞ͬͨ ▸ ECFϕʔεͷΞϓϦέʔγϣϯ͔ΒPSR४ڌͷύοέʔδΛݺͼग़͢ܗ Ҡߦ͍ͯͬͨ͠
© ChatWork PSRඪ४ύοέʔδʹׂ ৽ػೳ ECFͷίʔυ PSRඪ४ύοέʔδͷҠߦ ςετ ςετ
© ChatWork ύοέʔδׂͷϝϦοτ ▸ શ෦࡞Γม͑Δඞཁͳ͘ɺہॴతʹมߋ͢Δ͜ͱ͕Ͱ͖Δ ▸ ςετͮ͠Β͍ߏ͔Βςετ͍͢͠ߏͷΠϯΫϦϝϯλϧͳϦϑΝ ΫλϦϯά͕Մೳ
© ChatWork ύοέʔδׂͷσϝϦοτ ▸ Ͱɺ݁ہECFʹΛͭͿ͍ͬͯΔ͚ͩ ▸ ࠜຊղܾͰͳ͍ ▸ ਏ͍ͱ͜ΖΓͦ͏
© ChatWork ChatWorkظɾసظ 1 2 3
։ൃڥ MAMP Vagrant, Ansible ϦϦʔε खಈσϓϩΠ (SFTP) Jenkins όʔδϣϯཧ SVN
Git, Github CI - TravisCI ϨϏϡʔख๏ આ໌ PullRequestϕʔε © ChatWork ։ൃͷঢ়گʢ2014ࠒʣ
© ChatWork ·͊·͊ Ϟμϯʹͳ͖ͬͯͨ
© ChatWork ͕ɺαʔόʔμϯ͕૬͙࣍ ▸ ϦϑΝΫλΛਐΊ͍ͯΔͱ͍͑ɺࠜຊతͳ෦ͦͷ·· ▸ Ϣʔβʔ૿Ճɺແཧͳҧ๏ݐங͕ੵΈॏͳΓαʔόʔμϯ͕૬͍࣍ͩ ▸ αʔϏεͷੑ্࣭ɺαʔϏεΛࢭΊΔͱϢʔβʔͷࣄ͕ࢭ·ͬͯ͠·͏
© ChatWork Internet GAE (Comet) ▸ εέʔϧ͠ʹ͍͘ઃܭ ▸ ݻఆαʔόʔ ▸
΄ͱΜͲશͯͷ͜ͱΛWebαʔόʔͰ ಉظతʹॲཧ͍ͯ͠Δ ▸ ϑΝΠϧΞ οϓϩʔυ͕WebαʔόʔΛ ܦ༝ͯ͠S3Ξοϓϩʔυ͍ͯ͠Δ Tokyo S3 RDS(MySQL) ELB EC2 EC2 (groonga) 1 2 3 1 2 3
© ChatWork ଧͪख ▸ AutoScalingಋೖʹΑΓμϯλΠϜ͕େ෯ʹݮগ ▸ NewRelicͷಋೖɺPHPͷॏ͍ͨॲཧDBͷΫΤϦΛݟ͢ ▸ SQSΛ༻͍ͨඇಉظͳॲཧ ▸
WebαʔόʔͰ͋·ΓࣄΛͤ͞ͳ͍ 1 2 3
© ChatWork Internet Tokyo ߏਤ ʢରࡦޙʣ GAE (Comet) BigQuery (API
Logs) 2 Auto Scaling EC2 (Web Server) ElastiCache (Session) DynamoDB (Flags) S3 (Logs) RDS(MySQL) S3 Direct Upload / Download ELB CloudSearch Index EC2 (Worker) Get SQS (Task Queue) Push Glacier 2 3 1
© ChatWork ͔͠͠ɺࠜຊղܾͰͳ͍ ▸ ίʔυϕʔεґવͱͯ͠ݹ͍·· ▸ ͦͦͷઃܭతʹ͕͋Δ ▸ ٸ͢ΔαʔϏεɺ૿͑ΔϢʔβʔ ▸
͜ͷ··ͩͱ؇͔ʹࢮΛͭͷΈɾɾɾ
Α͠ɺγεςϜΛϦϓϨΠε͠Α͏
© ChatWork ࠶࣮Λܾஅ ▸ ίʔυϕʔεΛഁغ͢Δ͜ͱΛܾஅ ▸ θϩϕʔεͰߟ͑ɺνϟοτϫʔΫΛߏங͢Δʹ Ͳ͏͍ͬͨݴޠɾઃܭɾFW͕ద͔Λߟ͑Δ ▸ ࠷దͳઃܭͰ࠶ઓͰ͖Δ
© ChatWork ٕज़ͷબఆ ▸ ΞʔΩςΫνϟબఆ߹॓Λ։࠵ ▸ ͍͔ͭ͘ͷνʔϜʹผΕɺͦΕͧΕͰ ৽͍͠ݴޠɾFWͰԾ࣮ͯ͠ΈΔ ▸ Python
/ Flask ▸ Scala / Play framework ▸ PHP / Laravel ▸ ͪͳΈʹࢲPHPνʔϜ
© ChatWork ߹॓ͷ෩ܠ ▸ ֤νʔϜ͝ͱʹ։ൃɾൃදΛߦ͍ɺͲͷݴޠ͕ྑͦ͞͏͔Λબఆ
© ChatWork ScalaΛબఆ ▸ ڠٞͷ݁ՌɺScalaΛ࠾༻͢Δ͜ͱΛܾఆ ▸ େنPJ։ൃͰͷ੩తܕ͚ͷԸܙΛड͚͍ͨ ▸ ٕज़қతʹͦ͜·Ͱϋʔυϧ͕ߴ͍ͷͰͳ͍ ▸
͡ΊͯScalaΛ৮ͬͨਓͰʮΘΓͱ͍͚Δʯͱ͍͏ධՁ ▸ ؔܕͬΆ͘։ൃ͢Δ͔ɺΦϒδΣΫτࢦͬΆ͘։ൃ͢Δ͔ࣗ༝
© ChatWork ϦϓϨΠεͷൣғ ▸ ݱߦAPIΛScalaʹஔ͖͑Δ͜ͱΛඪͱ͢Δ ▸ νϟοτϫʔΫʹؔΘΔશػೳ͕ϦϓϨΠεର ▸ طଘͷAPIͱฒߦͯ͠ӡ༻͢Δ͜ͱΛఆ ▸
֤ΫϥΠΞϯτ͖ͳλΠϛϯάͰ৽APIҠߦ͢Δ ▸ APIͷIOେ͖͘มΘΔͷͰɺ͜ͷλΠϛϯάͰΫϥΠΞϯτଆେ͖͘ ৽
© ChatWork Scalaͷ࠾༻Ճ ▸ Ճ౻५Ұ͞Μʢ2014ೖࣾʣ ▸ ຊScalaϢʔβʔζάϧʔϓൃىਓͷ ͻͱΓ ▸ DDD͓͡͞Μ͓ʹ͍͞Μ
▸ ΞʔΩςΫνϟઃܭɾScala/DDDͷࣾ ܒ ࣸਅࠨͷਓ
© ChatWork ϦϓϨΠεମ੍ ▸ Scalaଆ ▸ ࠾༻2໊ɺۀҕୗ2໊ɺࣾһ߹Θͤͯܥ5໊ମ੍ ▸ PHPଆʢ෦APIɺͦͷଞϦϓϨΠεͷͨΊͷվमʣ ▸
5໊ମ੍ <- ࢲ͜͜ʹଐ ▸ طଘͷӡ༻ฒߦ
© ChatWork ৽γεςϜҠߦΞʔΩςΫνϟ ▸ ϥΠϒϚΠάϨʔγϣϯͱ͍͏ํ๏Λબͨ͠ ▸ ݱߦͷσʔλετΞͱ৽͍͠σʔλετΞʹಉ࣌ʹॻ͖ࠐΉ ▸ ݱߦσʔλ؇͔ʹҠߦ͍ͯ͘͠ ▸
બఆཧ༝ ▸ ϝϯςφϯεʹΑΔ࣌ؒͷγεςϜμϯ͕ڐ͞Εͳ͍ ▸ طଘγεςϜͷӨڹΛ࠷খݶʹ͢ΔͨΊ
© ChatWork ৽γεςϜҠߦΞʔΩςΫνϟ
४උͬͨ ͋ͱલਐΉͷΈ
© ChatWork ։࢝ͯ͠…
© ChatWork ·ͩͰ͖ͳ͍ ▸ ݟ͍͑ͯͳ͔ͬͨվमϙΠϯτ͕ͨ͘͞Μݟ͑ͯ͘Δ ▸ ऴΘΓ͕ݟ͑ͳ͍ঢ়گ͕ଓ͘ ▸ ͜͜·Ͱͬͨͷ͔ͩΒɺ͜ͷ··Ҿ͖Լ͕ΔΘ͚ʹ͍͔ͳ͍ɾɾɾɻ
© ChatWork ։࢝ͯ͠1…
© ChatWork ·ͩͰ͖ͳ͍ ▸ ͦͦͷΞʔΩςΫνϟతͳઃܭ্ͷݟ͑࢝ΊΔ ▸ KeyValueετΞͰͷσʔλઃܭ ▸ LiveϚΠάϨʔγϣϯʹΑΔଟྔͳΠϕϯτͷॲཧɺແཧͳΞʔΩςΫ νϟ
▸ ͕͔ͩ͠͠ɺΑ͏͘։ൃͷऴΘΓݟ͑ͯ͘Δ ▸ ͜ͷ··Ҿ͖Լ͕ΔΘ͚ʹ͍͔ͳ͍ɾɾɾɻ
© ChatWork ։࢝ͯ͠1…
© ChatWork ·ͩͰ͖ͳ͍ ▸ ։ൃ͕΄΅ऴྃɺεςʔδϯάڥࡌͤͯͰ ಈ͔ͯ͠ΈΔ ▸ ύϑΥʔϚϯε্ͷେ͖ͳ͕ݟ͔ͭΔ ▸ DynamoDbͷ՝͕ۚଌఆෆೳ
▸ ͜ͷ··ͰAWSͷ՝͕ۚɾɾɾɻ
© ChatWork ϦϓϨΠεΛҰ࣌அ೦ ▸ ͜͜ʹདྷͯύϑΥʔϚϯε্ͷେ͖ͳ͕ൃ֮ ▸ ࣾһؚΊͨνʔϜϝϯόʔͷർฐ͕͔ͳΓߴ·͍ͬͯͨ ▸ ϦϓϨΠεʹ͚ͯಥ͖ਐΜͰ͍͕ͨɺݶք͕དྷ͍ͯͨ ▸
ձࣾͱͯ͠ͷେ͖ͳܾஅΛͤ͟ΔΛಘͳ͔ͬͨ
© ChatWork Կ͕͔ͩͬͨ ▸ େ͖͘ϓϩδΣΫτϚωδϝϯτମ੍ͷͱݴ͑Δ ▸ ʮશ෦ϦϓϨΠεͯ͠Δʂʯͱ͍͏ҙؾࠐΈͷͱ࢝·͕ͬͨɺείʔ ϓ͕͋·Γʹ͗ͨ͢ɻͦΕ͚ͩγεςϜ͕͍ͯͨ͠ͱݴ͑Δɻ ▸ είʔϓΛڱΊɺεέδϡʔϧ͕ݟ͑ΔൣғͰͷϦϓϨΠεʹཹΊΔ͖
ͩͬͨ
© ChatWork Կ͕͔ͩͬͨ ▸ ύϑΥʔϚϯε՝ۚͷ͜ͱΛޙճ͠Ͱߟ͑ͯ͠·ͬͨ ▸ ϦεΫཧ͕Ͱ͖͍ͯͳ͔ͬͨ ▸ ͜͜ΒΜϓϩδΣΫτϚωδϝϯτମ੍ͷ
© ChatWork Ҿ͖ฦͤͳ͍ ▸ ్தͰҾ͖ฦ͢͜ͱՄೳͩͬͨ ▸ ͔͠͠ɺҾ͖ฦ͢ͱ͍͏͜ͱࠓ·ͰੵΈ্͛ͯ ͖ͨͷΛશͯແʹ͢Δͱ͍͏ҙຯ ▸ ޙʹͳΕͳΔ΄ͲɺҾ͖ฦͤͳ͍ঢ়گʹ
▸ ͦͯ͠ɺޙʹͳΕͳΔ΄ͲɺҾ͖ฦͨ͠ͱ͖ͷ μϝʔδେ͖͍
© ChatWork ৼΓฦΓޙɺ࠶ઓ ▸ ͏͜ΕҎ্ϢʔβʔΛͨͤΔ͜ͱͰ͖ͳ͍ ▸ είʔϓΛݶఆ͠ɺνʔϜϝϯόʔΛ͚ͨ ▸ γεςϜҠߦ͢ΔνʔϜ ▸
ݱߦγεςϜͷػೳ։ൃΛ͢ΔνʔϜ ▸ Ͳ͜ΛγεςϜϦϓϨΠε͢Δ͔Λ࠶ఆٛ͢Δ
© ChatWork ϝοηʔδϯάγεςϜΛ࠶ߏங ▸ ͜ͷ࣌ɺ٤ۓͷ՝ͱͳ͍ͬͯͨͷ͕ϝοηʔδͷ૿Ճ ▸ ͜ͷ··ͩͱintͷ࠷େΛ͑Δʢ21ԯʣ ▸ ϝοηʔδσʔλMySQLʢRDSʣ֨ೲ͍ͯͨ͠ ▸
idܕunsigned int ▸ ͋ͱ2ഒͰऴྃ ▸ ૿Ճͷ৳ͼ͔Βͯ͠ɺͦΜͳઌͷͰͳͦ͞͏
© ChatWork ϝοηʔδϯάγεςϜΛ࠶ߏங ▸ νϟοτγεςϜͷࠜװΛͳ͢ػೳͳͷͰϏδωεతͳՁ͋Γͦ͏ ▸ είʔϓ͍͍ײ͡ʹݶఆͰ͖͍ͯΔ
͍͟ɺ࠶ग़ൃ
© ChatWork ࠶ग़ൃͷ͘ͳΔͷͰলུ ▸ ৄ͘͠ԼهεϥΠυΛࢀߟʹ͍ͯͩ͘͠͞ ▸ https://speakerdeck.com/j5ik2o/chatworkfalsexin- metusezingusisutemuwozhi-eruji-shu ▸ ʮChatWork
ϝοηʔδϯάγεςϜʯͰݕࡧ
© ChatWork ͬ͘͟Γ͍͏ͱ ▸ ेͳίϯηϓτݕূʢPoCʣͷظؒΛ͞Έɺٕज़બఆΛ͓͜ͳͬͨ ▸ Akka, HBase, KafkaΛϕʔεͱͨ͠ΞʔΩςΫνϟ ▸
1Λ͔͚ͯϝοηʔδϯάγεςϜΛϦϓϨΠε ▸ 201612݄ɺؒ࡞ۀʹͯϦϦʔε
© ChatWork Ұ୴ɺϦϓϨΠεऴྃ ▸ ͓ർΕ༷Ͱͨ͠ ▸ ߹ܭͰ2͔͔ͬͨ
© ChatWork ChatWorkͷݱࡏͱࠓޙ 1 2 3
© ChatWork Ұ෦ஔ͖͚͑ͨͲ ▸ ґવͱͯ͠େ͖ͳίʔυϕʔεͦͷ··ͷঢ়ଶ ▸ શͯΛஔ͖͑Δ͜ͱࠔ ▸ ܦݧࡁΈ ▸
طଘͷϨΨγʔίʔυͱͲ͏͖߹͍͔ͬͯ͘
© ChatWork ϦϓϨΠε vs ϦϑΝΫλϦϯά ▸ ଟ͘ͷ߹ϦϑΝΫλϦϯάΛଓ͚Δ΄͏͕ྑ͍ ▸ ͦͷϨΨγʔίʔυʹɺ͍ͭ͘ͷվળͷ݁Ռ͕٧Ίࠐ·Ε͍ͯΔ ▸
ͦͷϨΨγʔίʔυʹɺ͋ͳͨͷΒͳ͍Α͏ͳػೳ͕Ӆ͞Ε͍ͯΔ ▸ ϦϓϨΠε͢Δʹɺ͋·Γʹଟ͘ͷ͕͔͔࣌ؒΔ
© ChatWork ϦϓϨΠε vs ϦϑΝΫλϦϯά ▸ ҎԼͷ߹ϦϓϨΠε͕͍͍͔͠Εͳ͍ ▸ ϦϓϨΠεର͕খ͍͞ɺ͋Δ͍খ͘͞Ͱ͖Δ ▸
σʔλઃܭɺࠜຊతͳͱ͜Ζʹ͕͋Δ ▸ ϦϓϨΠε͢Δ߹ग़དྷΔݶΓہॴతʹ͢Δ΄͏͕Α͍
© ChatWork ࠓޙͷChatWorkͲ͏͍͔ͯ͘͠ ▸ ෦తʹϦϓϨΠε͍ͯ͘͠ ▸ ͨͱ͑ɺAPIͷΤϯυϙΠϯτ୯Ґ ▸ ϚΠΫϩαʔϏεԽҰͭͷखஈ ▸
σʔλઃܭతʹແཧͳՕॴɺେྔͷσʔλΛѻ͏ՕॴʢAkka/Actor͕ಘ ҙͳ෦ʣ ▸ ͨͩ͠ɺશͯΛϦϓϨΠε͠ͳ͍ɺPHPͱ͍͓͖߹͍Λ͍ͯ͘͠ ▸ ݱࡏPHPόʔδϣϯΞοϓΛݕ౼தʢݱঢ়5.6ʣ
© ChatWork PHP7 vs HHVM ▸ ඇৗʹ·͍͠બ
© ChatWork εϧʔϓοτൺֱ ▸ abʹΑΔ؆୯ͳϕϯνϚʔΫ ▸ ҎԼϩάΠϯॲཧͷൺֱ runtime -c 10
-c 50 -c 100 php 5.6 19.27 req / s 18.78 req / s 19.74 req / s php 7.1 151.44 req / s 161.81 req / s 161.20 req / s hhvm 3.15 143.16 req / s 161.31 req / s 162.61 req / s ▸ େ͖ͳҧ͍ͳͦ͞͏
© ChatWork ϝϞϦ༻ྔൺֱ ▸ ԼهؔΛ༻͍ͯ༻ྔൺֱ ▸ memory_get_peak_usage — PHP ʹΑׂͬͯΓͯΒΕͨϝϞϦͷ࠷
େΛฦ͢ ▸ ୈҰҾʹtrueΛࢦఆͯ͠ܭଌɻҧ͍ҎԼɻ ࢀߟʣhttp://php.net/manual/ja/function.memory-get-peak-usage.php ͜ΕΛ TRUE ʹઃఆ͢ΔͱɺγεςϜׂ͕Γ࣮ͯͨࡍͷϝϞϦͷେ͖͞Λऔಘ͠·͢ɻ লུͨ͠Γ FALSEΛઃఆͨ͠Γ͢Δͱɺ emalloc() ͕༻͢ΔϝϞϦͷΈΛใࠂ͠·͢ɻ
© ChatWork runtime API A API B API C php
5.6 9,961,472 12,582,912 17,039,360 php 7.1 2,097,152 2,097,152 4,194,304 hhvm 3.15 396,328 427,544 889,568 ϝϞϦ༻ྔൺֱ ▸ 3छྨͷAPIͰͦΕͧΕܭଌ ▸ HHVM͕ܶతʹΑ͘ݟ͑Δ͕ɺPHPͱHHVMಈ࡞Ϟσϧ͕ҟͳΔͨΊɺ औಘͰ͖Δ͕ҟͳΔ ▸ Ϛϧνϓϩηεͱγϯάϧϓϩηε+ϚϧνεϨου ࢀߟʣhttps://github.com/facebook/hhvm/issues/2257
© ChatWork ݴޠػೳൺֱ ▸ HHVM (Hack) ▸ Generics, Nullable, Collections,
Lambda, Tuple, … ▸ ϚϧνεϨουʹΑΔඇಉظॲཧ ▸ PHP7 ▸ TypeHinting͕Ճ ▸ Hackͷͷͱൺֱ͢Δͱऑ͍͔
© ChatWork ίʔυվमྔ ▸ ͻͱͭͷAPIΛPHP7, HHVM্Ͱಈ͔͢·ͰͷมߋྔΛൺֱ ▸ ฐࣾͷ߹ɺґଘ͍ͯ͠ΔύοέʔδΛߋ৽͢Δඞཁ͕͋ͬͨͨΊ PHP7ͷํ͕มߋྔଟ͘ͳͬͨ ▸
ͨͩ͠ɺHHVMͷ΄͏ϥϯλΠϜ͕ҟͳΔͨΊɺϋϚϦϙΠϯτ͕ େ͖ͦ͏ ▸ ϢχοτςετΛ௨ͨ͠ͱ͖ʹɺͬͯࢮΜͰ͍ͨ
© ChatWork ͦͷଞࢀߟใ ▸ Symfony ▸ ࣍ͷόʔδϣϯͰ͋ΔSymfony4HackΛαϙʔτ͠ͳ͍͜ͱΛൃද ▸ https://symfony.com/blog/symfony-4-end-of-hhvm-support ▸
HHVM͕PHP7ͷαϙʔτΛ͓͜ͳΘͳ͍͜ͱΛൃද ▸ http://hhvm.com/blog/2017/09/18/the-future-of-hhvm.html
© ChatWork ChatWork with PHP7 ▸ ChatWorkPHP7Λબ ▸ ੑೳࠩʹ͍ͭͯେ͖ͳҧ͍ͳͦ͞͏ ▸
PHPίϛϡχςΟͷେ͖͞ɺࠓޙͷ֤ϥΠϒϥϦͷαϙʔτঢ়گΛצ Ҋ͠PHP7ΛબΜͩ ▸ HHVM৽͍͠ϥϯλΠϜͷͨΊɺֶशίετΠϯϑϥͷඋɺଟগ ͷίετ͔͔Δ ▸ PHP7ͷTypeHintingͰɺݱঢ়ͱൺΕेڧྗ
© ChatWork PHP7ͷҠߦઓུ ▸ ग़དྷΔݶΓϏοΫόϯϦϦʔεආ͚͍ͨ ▸ ػೳ͝ͱʹมߋ͍ͨ͠
© ChatWork PHP7ͷҠߦઓུ ▸ ΤϯυϙΠϯτ͝ͱʹPHP7ͱPHP5.6ʹذͤ͞Δ ▸ ಉҰαʔόʔʹͯPHP7ɺPHP5.6Λڞଘͤ͞Δ ▸ ຊདྷͰ͋ΕPHP7ͱPHP5.6༻ͷαʔόʔΛ༻ҙͯ͠ALBͰذ ͤ͞Δͷ͕ྑ͍
▸ ͔͠͠ɺ͍·ͷCDͷΈʹ͔ͬΔΑ͏ͳߏʹ͢ΔͨΊɺ͋͑ͯ ͜ͷΑ͏ͳߏʹ͍ͯ͠Δ
© ChatWork ߏਤ
© ChatWork · ͱ Ί
© ChatWork ▸ ϨΨγʔίʔυͷվमඇৗʹɺඇৗʹɺඇৗʹେม ▸ ٕज़తෛ࠴ܭըతͳฦࡁΛ ▸ ҰؾʹϦϓϨΠε͢Δͷɺख़ߟ্ͨ͠Ͱ ▸ ϦϓϨΠεʹ͓͍ͯPoCΛߦ͍৻ॏͳݕূΛ͖͢
▸ ػೳ୯ҐͳͲɺͰ͖Δ͚ͩখ͘͞ϦϓϨΠε͍ͯ͘͠ͱΑ͍ ·ͱΊ
© ChatWork ΤϯδχΞืूத http://corp.chatwork.com/ja/recruit/ ▸ ओମੑΛ࣋ͪɺࣗΒߦಈͰ͖Δ ▸ ଞऀΛೝΊɺଚॏͰ͖Δ ▸ ใΛूΊɺڞ༗Ͱ͖Δ
ͱ͍͏ํΛܴ͠·͢ʂ