WEB

PHPer必見!最強PHPerになれると噂の「新言語Hack」を試してみよう!

PHPer必見!最強PHPerになれると噂の「新言語Hack」を試してみよう!

こんにちは、お昼はもっぱら社内のキッチンで料理をしているエンジニアののびすけです。

LIGではメインの開発言語にPHPを使っていて、僕はPHPが大好きなのですが、昨今のWeb業界ではPHPなんて…(ry とか言う輩が少なくないです。
※気になる人は「PHP Dis」でググってみるといいかも

そんな声に負けずにPHPの新たな可能性を感じるFacebook製の「新言語Hack」を紹介します!

なお、今回の記事はPHPer界隈で話題になっていた「新言語Hackで最強PHPerになろう!」という記事を元に、初心者向けの内容にしたものです。

参考:新言語Hackで最強PHPerになろう!

それでは、はじめます!

目次

「新言語Hack」とは

Hackとは2014年3月20日にFacebookがHHVM(後述)向けに発表した新言語です。ホントについ最近ですね。

Facebook曰く、「PHPの開発スピードと、静的型付言語の統制性を調和させ、他の現代プログラミング言語に共通する多くの特徴を付加した」言語となっています。PHPと互換性があるため、PHPのコードをほぼそのままHackとして利用できます。
FacebookはもともとPHPを開発言語としていましたが、パフォーマンスを上げるために独自でPHPの実行環境を開発し、そこで動作するHackを開発したという経緯であるようです。Facebook社内では2013年からPHPコードのほぼ全体をHackに移行させ、大きな成功を収めているといいます。

Hackの特徴

一言で言うと「PHPより速いPHP」です。

  • 静的型付言語

PHPは動的型付言語ですが、Hackでは変数の型宣言を静的に行うことで速度向上をしています。動的の特徴であるスピーディーな特徴に加えて、静的の特徴であるエラーハンドリングの行いやすさなど兼ね備えたハイブリッドな言語になっています。

  • HHVM上で動作

PHP(言語)はPHP(実行環境)上で動作しますが、HackはHHVMという実行環境上で動作します。HHVMがPHPよりも高速なので、Hackも必然的にPHPより速くなります。

  • PHPとの互換性

Hackは既存のPHPのコードほぼそのまま使うことができます。HackはPHPで構築されたシステムの中に共存することを想定した設計になっているため、Hackへ移行する場合でも競合せずに段階的に移行することが可能です。

  • PHPには無い機能が使える
    • Generics
    • Nullable Type
    • Collection
    • Lambda
    • Async
    • Await
    • Tuple
    • Override Attribute
    • Type aliasing

これらが使えるようになります。各機能の詳細な紹介は省略しますが、なんとなくJavaに近づけている印象がありますね。

参考:Nullable 型 (C# によるプログラミング入門)

参考:ジェネリックス – Java 入門

参考:Facebook Hack Programming Language – Business Insider

参考:速くて安全:フェイスブック、HHVM向けの新プログラミング言語「Hack」を発表 – @IT

HHVM(HipHop Virtual Machine)とは

正式名称はHipHop Virtual Machineと言います。

PHP(言語)のコードの実行を、現在標準的に使われているPHP(実行環境)よりも高速化することを目的として作られています。

実行環境としてのPHPっていう表現にピンと来ない人もいると思いますが、例えばScalaという言語はJVM(Java Virtual Machine)上で動作します。同じように今回紹介しているHackという言語はHHVM上で動作します。

一方、PHPは言語と実行環境が同じ呼び方という感じです。

言語と実行環境の対応

言語と実行環境の対応

つまるところ、HHVMはPHPよりも早くPHPを実行可能な環境ということになります。

PHPとHHVM

先程の話でHHVMはPHPをより高速に実行することを目的にしていることが分かりましたが、実際どれくらい違いがあるのでしょう。

実行環境としてのPHPとHHVMの比較を行ったサイトを見つけたので紹介します。

PHP5.5.7とHHVM2.3.1が比較対象となっています。

1秒間にさばけるリクエスト数PHPが88.80、HHVMは196.14となっており、HHVMの方が倍以上のリクエストをさばけることが分かります。

また、1回のリクエストに対してかかる実行時間PHPが約0.04秒、HHVMでは約0.02秒となっており、HHVMの方がPHPの倍の速度でさばけることが分かります。

このデータだけで一概に判断はできませんが、平均的にHHVMの方がPHPを倍以上の速度で実行できるようです。

環境によっては10倍以上速度の差も出るという報告もありました。

参考: Drupal 7: HHVM vs. PHP 5.5 + Zend Opcache | web-rocker.de

HHVMとHackを試してみよう!

お待たせしました! それではCentoOSにHHVMをインストールをしてHackでHello Worldするまでを紹介します。

環境

CentOS release 6.5 (Final) (GMOクラウドのVPS)
こちらはほぼ何も入ってないクリーンな状態です。

HHVMのインストール

それではHHVMをインストールしてみましょう。sudoなどの記述は省略して書いています。

$ yum -y install http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ yum -y upgrade
$ cd /etc/yum.repos.d/
$ wget http://www.hop5.in/yum/el6/hop5.repo
$ yum install -y hhvm
・
・
Complete!

※私の場合は、最後のhhvmのインストールでエラーが発生しました。

Error: Package: gcc-java-4.4.7-4.el6.x86_64 (@base)
 Requires: gcc = 4.4.7-4.el6
 Removing: gcc-4.4.7-4.el6.x86_64 (@base)
 gcc = 4.4.4-15.el6
 gcc = 4.4.7-4.el6
 Updated By: gcc-4.8.2-8.el6.x86_64 (hop5)
 gcc = 4.8.2-8.el6
 Available: gcc-4.6.3-2.el6.x86_64 (hop5)
 gcc = 4.6.3-2.el6
 Available: gcc-4.8.2-7.el6.x86_64 (hop5)
 gcc = 4.8.2-7.el6
Error: Package: libgnat-devel-4.4.7-4.el6.x86_64 (@base)
 Requires: libgnat-4.4.so()(64bit)
 Removing: libgnat-4.4.7-4.el6.x86_64 (@base)
 libgnat-4.4.so()(64bit)
 Obsoleted By: gcc-4.8.2-8.el6.x86_64 (hop5)
 Not found

理解してないけど参考ブログのようにgcc-javaとlibgnat-develを削除してみました。

$ sudo yum remove -y gcc-java
$ sudo yum remove -y liggnat-devel

その後インストール再チャレンジしたら上手くいきました!

$ yum install -y hhvm
・
・
Complete!

おお、成功した!

HHVMのインストールが完了したら確認してみましょう。

$ hhvm --version
HipHop VM 3.0.1 (rel)

HHMVでPHPを実行

上記の手順でhhvmコマンドが使えるようになっているので、phpファイルを作成してhhvmで動かしてみましょう。

$ echo '<?php echo "hello hhvm\n";' >> hello.php
$ hhvm hello.php
hello hhvm

コンソールにhello hhvmの文字が表示されれば成功です!
phpコマンド以外でphpを実行したのは初体験です。笑

ちなみにサーバーにphpがインストールされていなくても動作します。

$ php -v
-bash: php: コマンドが見つかりません

phpのファイルがphpをインストールしてなくても動くのですね。なんか不思議な感じですね(,,゚Д゚)

Hackを使ってみる

hhvm上でphpの実行ができたので、いよいよhackを動かしてみましょう!と言ってもphpのコードを少し変更するだけでhackになるので簡単です。

先程のhello.phpのファイル名をリネームしてhello.hhにしましょう。

次にhello.hhの中を編集してphpタグのphphhにすればOKです。

$ cp hello.php hello.hh
$ vi hello.hh
<?php echo "hello hhvm\n";
↓
<?hh echo "hello hhvm\n";

それではさっきと同じようにhhvmコマンドで実行してみましょう。

$ hhvm hello.hh
hello hhvm

再度hello hhvmが表示されれば成功です

Webから実行してみる

PHPということでやはりWeb上から実行したいですね。hhvmでサーバーを立ち上げてウェブブラウザから確認してみましょう。

コンソール上でそのまま確認する場合はcurlコマンドを使って確認します。

$ hhvm -m server
$ curl localhost/hello.php
hello hhvm

ブラウザからアクセスする場合はhttp://localhost/hello.phpにアクセスして「hello hhvm」と表示されれば成功です。

以上、簡単でしたがHHVMとHackの体験ができましたね。

 

参考:CentOS6.5にHHVMを入れる時のTips – 生涯未熟

まとめ

今回はFacebookが開発した「新言語Hack」についてと実際の利用の紹介をしました。簡単にまとめると以下のようになります。

  • Facebookが開発
  • PHPよりも”性能”が良い
  • PHPからHackへの移行はとても簡単

ちなみに、この記事は「いわてPHPカンファレンス」というイベントに参加した際のHackについてのライトニングトーク内容をまとめた感じです。

何かと言われがちなPHPですが、Hackの登場でまた新たな方向性が見えて来たのではないかと思います。

世界最大のSNSであるFacebookで開発され、利用されているということは、今後かなりの期待ができるのではないでしょうか。

PHPerの皆さんや、そうでないエンジニアの皆さんにおかれましては、ぜひ選択肢の1つとして考えつつ、一度Hackを体験してみてください。

Hackはまだ公開されて間もないので、今から始めれば国内Hack市場ではかなりのアーリーアダプターになれると思います!それでは!

参考:Hack

参考:HHVM

この記事を書いた人

のびすけ
のびすけ バックエンドエンジニア 2014年入社
岩手から上京してきました。

ギークハウスを経て、現在は0円シェアハウスに住んでいます。

好きなスポーツはフットサル/雪合戦/わんこそばです。

2015年は東京Node学園で登壇してみたいです。

・milkcocoa公認エバンジェリストになりました。(https://mlkcca.com/)
・gihyo.jpで記事書いてます (http://gihyo.jp/dev/feature/01/milkcocoa-baas)
・html5experts.jpで記事書いてます。(https://html5experts.jp/n0bisuke/)