現在業務用としても一般のコミュニティとしてもよく使われているチャットサービスのSlack。サーバーサイドはどのプログラミング言語で作られていると思いますか?
実はPHPで作られています。
詳しくはSlackのチーフアーキテクト職の方が書かれた下記の記事に書かれています。(2016年に書かれたものです)
Taking PHP Seriously – Several People Are Coding
ちょっと驚きですよね。今の時代だと日本だとスタートアップ界隈ではRailsが人気ですし、そもそもチャットシステムを作るのであればWebSocketを使うためにGo, Elixir, Node.jsで実装するのが普通のような気がします。
まず最初に語られているのは、大勢の人がPHPに抱く気持ちとしては悪いイメージなのではないか、ということです。日本でもよく聞く印象です。しかし、Facebook, Wikipedia, Wordpress, Etsy, Baidu, Box, そしてSlackがPHPを使って成功しています。更にSlack社内ではPHPによる新しいプロジェクトもスタートしたとのことです。
他の言語を使っていればもっと成功していたのか? と言われると決してそうではありません。PHPには多くの欠陥がありますが、それを十分に補えるような良い所も多くあるということです。
PHPはリクエスト毎に完全に挙動やステートが独立しています。あるリクエストがその次のリクエストに影響を与える、ということはありません。(開発者が生み出してしまうDB等との連携によって生まれる不具合等の話ではなく、言語自体の話になると思います)
他の言語の様に他のリクエストに影響を与えてしまう可能性がある場合、DB、memcache、ファイルシステム等を混乱させる可能性が有ります。そのためリクエスト毎にヒープを分離してくれていることがプログラム上の問題の削減に役立っています。
例えばNodeとかだと下記のようにすればリクエスト毎に出力を変えてしまう事が容易ですよね。しかも内部の値ですのでしっかりとログを出力などしないと問題が出た時の原因の把握すら困難です。
var globalValue = 1;
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(globalValue++);
}).listen(8000, '127.0.0.1');
自分で作ったプログラムならまだしも、何かのライブラリの不具合だった場合、しかもサービスの本番環境に著しい問題が出てしまった場合など、確かに考えるだけでも恐ろしいですね…。
PHPにおいて、各リクエストは単一のPHPスレッドで実行されます。この制限はデメリットのように見えますが、Webサーバーのコンテキストでいい感じに処理してくれるため、他の言語に比べエラーに対しての復元力が強いです。
たしかにWebサーバー自体が落ちなければ絶対動きますしね。
プログラムを修正したらブラウザ上でリロードすればすぐ確認できます。
たしかに他の言語の場合、修正したファイルによってはサーバーリロードしたりしないといけなかったりしますよね。あとDockerイメージ内にgemをインストールしていると、Gemfile書き換えた場合にイメージをビルドし直さないとエラーで動かなくなったりしますよね。非常に面倒…。
PHP自体はよく言われているように色々と問題点があります。元の記事にも色々書かれていますが、日本でもよく見かける話なのでとりあえず割愛します。
これは他の言語でも同様かもしれませんが、大切なことは問題点をしっかり理解して抑えながら良い部分を活かしていくことです。
HackというのはFacebookが開発した、PHPを拡張したPHPと同じ構文を使ったプログラミング言語です。HHVMはPHPやHackを動作させる仮想マシンです。Hackは下記のような特徴があります。
つまり、PHPのプロジェクトは必要に応じてHack & HHVMに移行することができる、というメリットがあるということです。
FacebookではPHPインタープリタより11.6倍、Wikipediaは6倍のCPU効率の改善を報告しているとのことです。Slackでは既にWeb環境をHHVMに移行し、レイテンシを大幅に改善しているとのことです。
PHPカンファレンス関西 2017 に行ってきたぞ - 大学生からの Web 開発
にも書かれていますが、恐らくどんどん必要に応じてHackにも移行しているようです。
(ちなみにHack, HHVMは実際に僕は使ったことがないので、どれだけ良いものか、今後も期待できるか、というのは不明です)
PHPの利点はPHPの欠点を超える価値がある、という結論のようです。
> 翻訳しつつじっくり読んでいってるけど面白い。なんかPHP以外使うの怖くなってきた。
僕が翻訳中にツイートした内容ですが、じっくり読んでいるとほんとに肌寒くなってきます。とはいえ他の言語も好きなので今後も色々使っていくと思いますが。
あとWebSocketについての話がなかったので気になるところです。
※当記事は元記事の筆者の許可を得て翻訳を行い取り入れています