tag:crieit.net,2005:https://crieit.net/tags/HHVM/feed 「HHVM」の記事 - Crieit Crieitでタグ「HHVM」に投稿された最近の記事 2019-11-29T13:15:18+09:00 https://crieit.net/tags/HHVM/feed tag:crieit.net,2005:PublicArticle/14477 2018-07-09T06:32:47+09:00 2019-11-29T13:15:18+09:00 https://crieit.net/posts/Slack-PHP SlackはPHPっぽいもので作られているらしい <p>(※2016年に書かれた記事の翻訳ですので今とは違う情報が含まれます)</p> <p>現在業務用としても一般のコミュニティとしてもよく使われているチャットサービスのSlack。サーバーサイドはどのプログラミング言語で作られていると思いますか?</p> <p>実はPHPで作られています。(現在は恐らくHack)</p> <p>詳しくはSlackのチーフアーキテクト職の方が書かれた下記の記事に書かれています。(2016年に書かれたものです)</p> <p><a target="_blank" rel="nofollow noopener" href="https://slack.engineering/taking-php-seriously-cf7a60065329">Taking PHP Seriously – Several People Are Coding</a></p> <p>ちょっと驚きですよね。今の時代だと日本だとスタートアップ界隈ではRailsが人気ですし、そもそもチャットシステムを作るのであればWebSocketを使うためにGo, Elixir, Node.jsで実装するのが普通のような気がします。</p> <h2 id="なぜPHPを選んだのか?"><a href="#%E3%81%AA%E3%81%9CPHP%E3%82%92%E9%81%B8%E3%82%93%E3%81%A0%E3%81%AE%E3%81%8B%EF%BC%9F">なぜPHPを選んだのか?</a></h2> <p>まず最初に語られているのは、大勢の人がPHPに抱く気持ちとしては悪いイメージなのではないか、ということです。日本でもよく聞く印象です。しかし、Facebook, Wikipedia, Wordpress, Etsy, Baidu, Box, そしてSlackがPHPを使って成功しています。更にSlack社内ではPHPによる新しいプロジェクトもスタートしたとのことです。</p> <p>他の言語を使っていればもっと成功していたのか? と言われると決してそうではありません。PHPには多くの欠陥がありますが、それを十分に補えるような良い所も多くあるということです。</p> <h2 id="PHPの良い所とは"><a href="#PHP%E3%81%AE%E8%89%AF%E3%81%84%E6%89%80%E3%81%A8%E3%81%AF">PHPの良い所とは</a></h2> <h3 id="独立したステート"><a href="#%E7%8B%AC%E7%AB%8B%E3%81%97%E3%81%9F%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88">独立したステート</a></h3> <p>PHPはリクエスト毎に完全に挙動やステートが独立しています。あるリクエストがその次のリクエストに影響を与える、ということはありません。(開発者が生み出してしまうDB等との連携によって生まれる不具合等の話ではなく、言語自体の話になると思います)</p> <p>他の言語の様に他のリクエストに影響を与えてしまう可能性がある場合、DB、memcache、ファイルシステム等を混乱させる可能性が有ります。そのためリクエスト毎にヒープを分離してくれていることがプログラム上の問題の削減に役立っています。</p> <p>例えばNodeとかだと下記のようにすればリクエスト毎に出力を変えてしまう事が容易ですよね。しかも内部の値ですのでしっかりとログを出力などしないと問題が出た時の原因の把握すら困難です。</p> <pre><code class="javascript">var globalValue = 1; http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(globalValue++); }).listen(8000, '127.0.0.1'); </code></pre> <p>自分で作ったプログラムならまだしも、何かのライブラリの不具合だった場合、しかもサービスの本番環境に著しい問題が出てしまった場合など、確かに考えるだけでも恐ろしいですね…。</p> <h3 id="並行性"><a href="#%E4%B8%A6%E8%A1%8C%E6%80%A7">並行性</a></h3> <p>PHPにおいて、各リクエストは単一のPHPスレッドで実行されます。この制限はデメリットのように見えますが、Webサーバーのコンテキストでいい感じに処理してくれるため、他の言語に比べエラーに対しての復元力が強いです。</p> <p>たしかにWebサーバー自体が落ちなければ絶対動きますしね。</p> <h3 id="プログラマのワークフローが高速かつ効率的"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E3%81%8C%E9%AB%98%E9%80%9F%E3%81%8B%E3%81%A4%E5%8A%B9%E7%8E%87%E7%9A%84">プログラマのワークフローが高速かつ効率的</a></h3> <p>プログラムを修正したらブラウザ上でリロードすればすぐ確認できます。</p> <p>たしかに他の言語の場合、修正したファイルによってはサーバーリロードしたりしないといけなかったりしますよね。</p> <h2 id="PHPの問題点とそれについての考え方"><a href="#PHP%E3%81%AE%E5%95%8F%E9%A1%8C%E7%82%B9%E3%81%A8%E3%81%9D%E3%82%8C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AE%E8%80%83%E3%81%88%E6%96%B9">PHPの問題点とそれについての考え方</a></h2> <p>PHP自体はよく言われているように色々と問題点があります。元の記事にも色々書かれていますが、日本でもよく見かける話なのでとりあえず割愛します。</p> <p>これは他の言語でも同様かもしれませんが、大切なことは問題点をしっかり理解して抑えながら良い部分を活かしていくことです。</p> <h2 id="Hack、HHVMの存在"><a href="#Hack%E3%80%81HHVM%E3%81%AE%E5%AD%98%E5%9C%A8">Hack、HHVMの存在</a></h2> <p>HackというのはFacebookが開発した、PHPを拡張したPHPと同じ構文を使ったプログラミング言語です。HHVMはPHPやHackを動作させる仮想マシンです。Hackは下記のような特徴があります。</p> <ul> <li>PHPで書かれたスクリプトはHackでも動く</li> <li>型を使うことができる(一部は現在PHPにも取り入れられている)</li> <li>非同期処理(async, await)などもできる</li> </ul> <p>つまり、PHPのプロジェクトは必要に応じてHack & HHVMに移行することができる、というメリットがあるということです。</p> <p>FacebookではPHPインタープリタより11.6倍、Wikipediaは6倍のCPU効率の改善を報告しているとのことです。Slackでは既にWeb環境をHHVMに移行し、レイテンシを大幅に改善しているとのことです。</p> <p><a target="_blank" rel="nofollow noopener" href="http://karur4n.hatenablog.com/entry/2017/07/17/211508">PHPカンファレンス関西 2017 に行ってきたぞ - 大学生からの Web 開発</a></p> <p>にも書かれていますが、恐らくどんどん必要に応じてHackにも移行しているようです。</p> <p>(ちなみにHack, HHVMは実際に僕は使ったことがないので、どれだけ良いものか、今後も期待できるか、というのは不明です)</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>PHPの利点はPHPの欠点を超える価値がある、という結論のようです。</p> <blockquote> <p>翻訳しつつじっくり読んでいってるけど面白い。なんかPHP以外使うの怖くなってきた。</p> </blockquote> <p>僕が翻訳中にツイートした内容ですが、じっくり読んでいるとほんとに肌寒くなってきます。とはいえ他の言語も好きなので今後も色々使っていくと思いますが。</p> <p>あとWebSocketについての話がなかったので気になるところです。</p> <p>※当記事は元記事の筆者の許可を得て翻訳を行い取り入れています</p> だら@Crieit開発者