Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ChatWorkとPHPと私
Search
tan-yuki
October 08, 2017
Technology
14
16k
ChatWorkとPHPと私
PHPConference 2017
ChatWork株式会社 田中佑樹
tan-yuki
October 08, 2017
Tweet
Share
More Decks by tan-yuki
See All by tan-yuki
モノリスから小さなシステムへ / Chatworkシステム移行の現在地と今後について@開発生産性カンファレンス
tanakayuki
3
6.5k
2024-03-16 社員30人 → 300人のフェーズを経験し見えてきた、 エンジニアとして成長するための考え方
tanakayuki
5
4.9k
リリースから12年! Chatworkの過去をふりかえり ~ ChatworkとPHPの歩み ~
tanakayuki
0
1.1k
フィーチャーチーム化への取り組みと、それを支える組織マネジメント体制
tanakayuki
2
25k
運用について - 2020 Chatwork サマーインターンシップ
tanakayuki
0
940
Chatworkから学ぶインフラサービス提供の心得.pdf
tanakayuki
0
1.7k
開発者からみたCloudSearch
tanakayuki
2
2.7k
git
tanakayuki
3
600
Other Decks in Technology
See All in Technology
Strands Agents × インタリーブ思考 で変わるAIエージェント設計 / Strands Agents x Interleaved Thinking AI Agents
takanorig
5
2.1k
SREが取り組むデプロイ高速化 ─ Docker Buildを最適化した話
capytan
0
150
事業の財務責任に向き合うリクルートデータプラットフォームのFinOps
recruitengineers
PRO
2
230
たまに起きる外部サービスの障害に備えたり備えなかったりする話
egmc
0
420
AWS運用を効率化する!AWS Organizationsを軸にした一元管理の実践/nikkei-tech-talk-202512
nikkei_engineer_recruiting
0
170
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
2
200
Strands AgentsとNova 2 SonicでS2Sを実践してみた
yama3133
1
1.9k
「もしもデータ基盤開発で『強くてニューゲーム』ができたなら今の僕はどんなデータ基盤を作っただろう」
aeonpeople
0
250
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
0
450
2025年のデザインシステムとAI 活用を振り返る
leveragestech
0
300
NIKKEI Tech Talk #41: セキュア・バイ・デザインからクラウド管理を考える
sekido
PRO
0
220
なぜ あなたはそんなに re:Invent に行くのか?
miu_crescent
PRO
0
210
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Mobile First: as difficult as doing things right
swwweet
225
10k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
78
Six Lessons from altMBA
skipperchong
29
4.1k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.4k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
93
Evolving SEO for Evolving Search Engines
ryanjones
0
77
The Cult of Friendly URLs
andyhume
79
6.7k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
67
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/ ▸ ओମੑΛ࣋ͪɺࣗΒߦಈͰ͖Δ ▸ ଞऀΛೝΊɺଚॏͰ͖Δ ▸ ใΛूΊɺڞ༗Ͱ͖Δ
ͱ͍͏ํΛܴ͠·͢ʂ