見出し画像

PHP開発ってどうですか?「Chatwork」を通じて見る、開発のリアル

みなさん、こんにちは!採用広報の安田です。
今回は2023年11月8日に開催した「PHP開発ってどうですか?「Chatwork」を通じて見る、開発のリアル」のイベントレポートをお届けします!後半ではイベント内でお答えできなかった質問にも回答しちゃいます✨

このnoteは2023年11月8日に実施したイベントのレポート記事です。体制や情報はイベント当時のものであり、現在と異なる場合があります。(メンバー紹介の所属・肩書きは掲載時点のものです)


メンバー紹介

田中 佑樹/執行役員 兼 コミュニケーションプラットフォーム副本部長
2013年にChatwork株式会社へジョインし、BiwaUIへの刷新プロジェクトのWebフロントエンド開発や外部向けREST API開発、メッセージ検索サーバー刷新など数多くのプロジェクトを担当。現在は執行役員兼コミュニケーションプラットフォーム副本部長として、組織改善のために尽力する。

渋谷 悠司/コミュニケーションプラットフォーム本部 サーバーサイド開発部 PHPエンジニア
大学卒業後、当時まだ黎明期のスタートアップだった株式会社EC studio(現・Chatwork株式会社)に2007年4月入社。以来、15年以上にわたりChatworkで働き続ける。キャリア初期の頃はフロントエンドからバックエンドまで幅広く担当し、キャリア中期・後期はバックエンド(PHP)を担当。現在は社内のPHP開発をリードしている。

T.H/コミュニケーションプラットフォーム本部 サーバーサイド開発部 PHPエンジニア
コンピュータサイエンス修了後、10年以上にわたり Web エンジニアとして開発業務に従事。テック系のスタートアップからメガベンチャーまで、物理インフラからスマホアプリまで広く経験してきた。バックエンド開発が得意。

それでは本編をどうぞ!

「Chatwork」の開発トップが語る!リリースから12年ChatworkとPHPの歩み

実際の開発ってどうですか?「Chatwork」10年選手×5ヶ月目が語るPHP開発現場のリアル対談

司会:「Chatwork」のベータ版から開発に携わっていた渋谷と、2023年7月に入社して現在入社5ヶ月目のT.Hの2人に、開発現場のリアルについてお話ししていただきます。最初に自己紹介を渋谷さんからお願いします。

渋谷:渋谷と申します。Chatworkの前身の会社であるEC studioの頃に新卒で入社して、働き始めてかれこれ16年になります。当初はフロントエンドからバックエンドまで担当していたのですが、最近はPHPの開発がメインとなっております。

T.H:T.Hです。元々長くWeb業界でエンジニアをしており、テック系のスタートアップベンチャーから、国内で有名なメガベンチャーまで様々な企業で仕事をしてきました。物理インフラや、スマホのアプリなどいろいろ開発してきたのですが、経歴としてはPHPエンジニアが一番長いかなと思ってます。

現在はPHPを使う仕事、特に古くからあるシステムを新しくマイグレーションしたり、「Chatwork」のバックエンドの開発などをやってます。

司会:かなり毛色の違うキャリアを歩んでいるお2人ですが、ChatworkでPHP開発に携わっている経緯を教えていただけますか?

渋谷:「Chatwork」のベータ版は今の代表の山本が作り始めたもので、人を増やして開発を加速させることになったときに、「Chatwork」を一緒に開発してみませんか?という社内公募があったのが始まりですね。

司会:T.Hさんはどんな経緯でしょうか?

T.H:元々Webエンジニアとして仕事をしていて、転職エージェントから紹介されたのがきっかけでした。「Chatwork」の存在はファーストリリース時期から知っていたんですけど、それ以来ですね。巨大なトラフィック量のプロダクトをPHPで扱っている現場を、過去にあまり経験したことがなかったので、そこに興味を持って、話を聞いていくうちに面白そうだなと思いました。

司会:実際の開発現場の全体感について、渋谷さんご説明をお願いできますか?

渋谷:全体感としてこんな感じでPHPがコアにあって、サブシステムにScalaがあるっていう構成になっています。

ユーザーはインターネット越しにPHPやScalaのAPIを介して、データをやり取りするイメージになります。我々のPHPの開発においては、このピーク部分を担当してます。

この図だとPHPはコアだけど領域が小さく見えるかもしれませんが、その小さい中にすごくいろんな機能が詰まっているので、体感として実質PHPが7割、Scalaは3割で動いてるみたいな全体感になります。

「Chatwork」の開発現場について

渋谷:そもそも「Chatwork」ってPHPで開発が始まったということもあり、いろんな領域がPHPで作られてます。一方Scalaで作られている部分は、「Chatwork」のメッセージをやり取りする機能やモバイルプッシュ通知など、サブシステムとして切り出せる部分です。そのため、お客様からのリクエストを受け取って処理する部分は、ほとんどPHPで動いている状態になっています。

司会:T.Hさんからも、この補足はあるでしょうか?

T.H:実際にユーザーが見ている画面は、大体PHPで動作していますね。なので先ほど話していた通りScalaは本当にごく一部だけど、「Chatwork」として重要な部分を担っています。

司会:開発環境やチームの話になるとどうでしょうか?

渋谷:コロナ禍になってかなり変わりまして、最近はハイブリッドな勤務形態になっています。オフィスやリモート、様々な働き方で業務をしています。ただ弊社のエンジニアは日本各地に散らばって生活してるので、結局はリモートで仕事することが多いですね。

司会:T.HさんとしてはChatworkの開発環境はどんなふうに思われてますか?

T.H:普段の開発面でいうと先ほどの話の通り、リモートメインで私も実際にオフィスに行ったことは一度しかないぐらいです。大阪や九州にもメンバーがいるので、「Chatwork」でのテキストコミュニケーションが多いですね。「話したほうが早い」となったときにはすぐにオンライン会議に集まって、会話して、終わったら解散、みたいな進め方です。

オンラインだから仕事がやりづらいとかそんなことは全くなくて、いい感じに順応できています。

それに便利なツールがあれば積極的に使っていく文化が社内に根付いていて、例えばGatherが向いている場面ではそれを使ったり、Code with meで画面を共有しながらレビューしたり、チームにはペアプロ、モブプロの文化もあるので、すごくうまく回っているなと思ってます。

司会:チームで一緒に仕事をしていくに当たって、雰囲気だったり、メンバーについては、どんな感じでしょうか。

渋谷:チームの雰囲気っていうところで言うと、仲がいいんじゃないかなと思っています。僕が仕事をスムーズに進める上で重要だと思ってるのが関係性を作ることなんですよね。例えば仕事をお願いしたいなって思ったときに、その人がどういう人かわからないと依頼しにくいですけど、信頼関係を築くことで、かなりやりやすくなるなと思ってます。今の部署でいうと、近くの部署の人たちを集めて、週2で雑談をする時間を作って、いつでも気軽に相談できる人間関係を作るみたいな、そういう取り組みをやってます。

司会:確かに関係性によって仕事のやりやすさが変わってきそうですね。
T.Hさんも同じように感じていますか?

T.H:そうですね。この会社に入って一番びっくりしたのが、相手が誰でもミーティングが始まって5分ぐらいはみんな雑談してるんですよ。いい関係を築こうという姿勢があるのかなと思っていて、それが会社のカルチャーとして、ちゃんと根付いてるのかなって思います。

司会:確かに部署に限らず、全体的にそんな感じはしますね。

自慢みたいな話になっちゃうんですが、最近、Chatworkにジョインされた方が、「Chatworkっていい人が多いですね」と言っていて、まさにそういう人たちが集まってきてるんだろうなとは思いますね。

PHP開発のメリット・デメリット

渋谷:既存のコードの自動テストやユニットテストについて課題感を感じている部分があるので、その話をしたいです。「Chatwork」は元々社内ツールを前提に作られてたり、スピード優先で作られたという背景があるので、当初テストコードはあまり重要視されてなかった歴史があります。そうなると必然的にテストが書きやすい構造になっていないので、クオリティを担保する方法が手動でテストする程度という時代が続いていました。

今ではかなり意識が変わり、テストを書くことが当たり前の文化になっています。でも歴史が長いこともあって、昔書いたコードを修正・拡張しようとすると、うまくテストが書けないこともあります。そうなったときには、抜本的に直す方向に動くこともありますし、手動テストでその場を凌いだりして対応しています。でもそういうところをいつでもリプレースできる、基盤的なものを整えていきたいと考えています。

T.H:「Chatwork」のPHPには、いくつか大変なところがあるなと思っています。例えばコードが巨大なモノリスになっていて、一つのリポジトリが巨大で、それをいろんなチームが触っていたり。「Chatwork」というプロダクトが生まれてからもう十数年経っていて、当時の当たり前が今の当たり前とは乖離しているところがあったりします。

最近はチームやサービスの成長もあって乖離ポイントが目立つようになってきたので、直さないといけないものがたくさんあります。例えば、先ほど渋谷が話した通り、テストが書きづらかったり、関数やクラスの責務が分離されていなかったり、DIでテストを書きやすい工夫がなかったり。開発当時はそれで正解でしたけど、今の正解は違うところにあって、そのギャップがたくさんあるのが大変です。

司会:ITサービスを長期的に運用するとなると、世の中に合わせて一緒に変わっていかなければいけないんだなっていうのをひしひしと感じますね。

渋谷:あとはPHPって動的言語なので、実行されるまでエラーに気付けないっていうのがよく言われていたことですね。そこでChatworkではここ1年くらいで“PHPStan”という静的解析ツールを利用するようになりました。実行する前にCIでPHPStanで構文間違いや変更漏れを教えてくれるので、以前に比べたら安心して変更できるようになったなと感じていて、すごく嬉しいなって思っています。

Q&A

Q.社内で採用する技術スタックが分化していく中でのPHPというか、長く利用している要素技術の位置付けや優位性などについて教えてください

田中:僕たちの会社の目線でのPHPの優位性は、多くのエンジニアが在籍しPHPの知見を持っているっていうところだと思っています。もう10年以上運用しているシステム、アプリケーションのコードなので、一定の知見は既に獲得できていますし、社内にPHPエンジニアが多数いるというところも強みかなと思っています。

一方で最近Go言語やRust言語などいろんな言語が登場する中で、社外に目を向けたときのPHPの優位性については悩むところです。Chatworkで利用している言語の選択肢の一つとしてはかなり優位なものにはなると考えていますが、新規開発をするときに、PHPに関する知見がない状態で採用するかというと、それは人によるんじゃないかという感じがしてますかね。

T.H.:PHPには一定の優位性はありますが、それは他の言語にも同じことが言えるし、言語だけじゃなくてフレームワークにも同じことが言えると思っています。なので事業とか、プロダクトとか、組織課題とか、世の中のトレンドとか、そういうのを総合的に考えて、今のベストを選択すればいいと思います。

今このタイミングでPHPから何に書き換えるかって言われたら、そのままPHPだろうなと思ってます。しかしそれが1年後どうなっているかは、正直そのときにならないとわからないっていうのが答えです。私は言語やフレームワークにこだわりはなくて、言語はあくまでも手段だと思っています。その手段や方法が現場の人たちで合意ができていれば、別にPHPでもPHPじゃなくてもいいかなって思います。

Q.なぜScalaという言語を選んだのでしょうか。

田中:2014年の全社合宿で決めたのですが、そのときの決め方としてはある程度選択肢を絞って、PHPとScalaとPythonでチームを作って、各言語の使用感などをチームの中でレビューして、それぞれ発表をしました。

そういったワークを通じてScalaに決定しました。それ以前にScalaが静的型付け言語であることだったりとか、強力な型付けシステムであるというところが、「Chatwork」のような大規模なアプリケーション開発にかなり向いてるんじゃないかなと考えてそういう選択をしました。

Q.Scalaに置き換え予定の機能については順次リプレースされるかと思いますが、その順番や優先順位をどのように決めていますか

田中単純にシステム的に課題があるところですね。先ほども話した通り、非機能要件が高いアプリケーションなので、システム的な限界だったり、あるいはスループットとしてかなり高い性能を求められるところであるんですよね。そういったところについては順次優先的にリプレースしていく必要があると思っています。

Q.13年の歴史の中で一番恐ろしかったイシューを教えてください

田中:2015年くらいにかなり頻繁にシステム障害が発生していた時期があります。その中でも日中に数時間単位で止まってしまったのが、今までの歴史の中で一番の障害でした。

そのときはサーバーサイドのところをいくら元に戻しても改善されない状態がずっと続いていました。結局原因はフロントエンドのコードのバグで、サーバーサイドにかなり負荷の高いリクエストを投げるような状態になっていたことだったんですよね。それが分からないまま数時間経ってしまったっていうのが、13年間で一番大変なイシューだったなと思います。

司会:それを乗り越えて今があるわけですね。

田中:様々なイシューを通じ、PDCAを回して、今があるのかなと思っております。

番外編

時間の関係でイベントでは取り上げられなかった質問にも現場メンバーに答えてもらいました!

Q.LaravelなどのPHPフレームワークを採用しているところもあるのでしょうか?

A.OSSのフレームワークの採用はありません。独自フレームワークです。
フレームワークをどうするか、アーキテクチャをどう進化させていくのか含めて現在検討中のステータスです。

Q.Github CopilotなどのAIを利用した開発は導入や予定はありますか?

A.希望者にはGitHub Copilotのライセンスを付与し、開発に役立てています。

Q.システムとしては完成されているかと思いますが、現在の「Chatwork」開発における主な業務はどのようなものになっていますか?

A.日常的に追加機能の開発、既存機能の改善、古いシステムやコードのマイグレーションなどを行っています。加えて、サービスの成長と共に求められるRASISの水準が上がるので、それに対する対応などを行っています。

Q.「Chatwork」のベータ版を開発していたころの会社の主な事業はなんだったのでしょうか?

A.現在も事業として存在している「セキュリティ事業」が主な事業でした。

Q.PHPUnitやPHPStanなど自動化している取り組みは何がありますか?

A.開発時に動かしている仕組みとしては、PHPUnit, PHPStanに加えて、Deptrac, PHP CS Fixerがあります。基本的にデプロイ作業も自動で、デプロイ作業時はDatadogなどで監視しつつ、トリガーを押すだけです。

Q.開発環境はどのような仕組みで行われていますか?

A.ローカル開発環境はDocker Composeで構築しています。Dockerコマンドをラップする簡単なスクリプトを組んで、初期設定が1コマンドで完了するようにしています。

Q.最近は出社に戻している会社も多い中でリモートワークを上手く継続しているという印象を受けました。雑談をするなど工夫をされているとのことですが、リモートワークを上手く進めるためにどういったことを心がけていますか?

A.テキストやビデオ通話などをうまく使い分けて、絵文字で感情も伝えつつ、必要なときはオンラインやオフラインで集まるなど、チームがスムーズに動けるようにコミュニケーションを取っています。

終わりに

いかがでしたでしょうか?今後もChatworkの情報を発信していきますのでお楽しみに👀

ChatworkはPHPerKaigi 2024に協賛し、「10年以上動いているレガシーなバッチシステムを Kubernetes(Amazon EKS) に移行する取り組み」という内容で発表を行いました。
下記のアドレスから是非ご覧ください🎥

We are hiring!!

ChatworkではPHPエンジニアとして一緒に働いてくれる仲間を募集しています。少しでも興味を持ってくれた方は、ぜひご応募ください。

キャリア登録やメルマガ登録もお気軽にどうぞ!

みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!