この記事は筆者が6月1日に、大阪・さくらインターネット本社でおこなわれた「さくらの夕べ WordPress感謝祭」で披露したLT(ライトニング・トーク:5分間のショートプレゼン)『WordPressが16倍? ホントにはやいの? さくらちゃん!』でお話したネタを再構成したものです。

見てみよう「はやいよ、さくらちゃん」のCMムービー

5月から公開されたさくらインターネットのキャンペーンサイト「はやいよ、さくらちゃん」。皆さまもうご覧になってますでしょうか。もし見ていないなら今すぐに見るべきです。紺野彩夏さん扮するさくらちゃんの「はやさ」がいろんなシチュエーションで体感できるムービーたち。あなたもきっと見た瞬間に「はやすぎる」さくらちゃんに恋してしまうことでしょう。

その中でも私のお気に入りはなんといっても『告白篇』。まあ、なにも言わずにまずはご覧あれ。

さくらちゃん「ごめん、待った? 話って…なに…?」
私「さくらちゃん、俺、キミn」
さくらちゃん「わたしも! …わたしも…(照)」

はやい。はやすぎるんですさくらちゃん。
そしてその後のはにかみ顔の尊み…アレか、女神か、あなたがそうなのか。

CMに謳われている「はやい」は事実なのか

まあ紺野彩夏さんの可愛さはもはや証明するまでもない事実だと思うんですけど、その「はやさ」にはまだまだ疑問符がつきます。

このキャンペーンCMが推しているサービスはおなじみ「さくらのレンタルサーバ」。わたし自身も実に9年前からずっとお世話になっているサービスです。圧倒的コスパで他の方にオススメすることも多いのですが、やはり「速度はお値段なり」というイメージがありました。とくにWordPressのようなウェブページを動的に生成するようなCMSで利用するときに「速度にこだわりたい」という方にはちょっとオススメできないなーと思っていたわけです。

その「さくらのレンタルサーバ」がはやくなった! これは検証してみるしかありません。
新しいさくらちゃんのお手並み拝見です。

さくらちゃんに告白すると、彼女は素数を数えだす

どうやってさくらちゃんの「はやさ」を証明したらいいんだろう…デザイナーの私にはその方法が思いつきません。そんなときに横にいたエンジニアの方が声をかけてくれました。「負荷をかけるテストってことですよね…たくさんの素数を数えさせたらいいんじゃないですかね」。

素数!
数学ぜんぜんできない私でも聞いたことある、素数!
あの漫画にも出てきた素数!

落ち着くんだ… 『素数』を考えて落ち着くんだ… 『素数』は1と自分の数でしか割ることのできない孤独な数字…わたしに勇気を与えてくれる(荒木飛呂彦『ジョジョの奇妙な冒険PART6 ストーンオーシャン』 6巻より)

さくらちゃんはきっと僕が告白をしはじめた瞬間を捉えて1000分の1秒単位の速さで慌ててしまうのです。そして膨大な数の素数を数えあげ、勇気がふりしぼって僕にこう返してくれる…

「わたしも! …わたしも…」

以下にさくらちゃんの思考をPHPで表現しました。

<?php 
function eratosthenes($max) {
	$lists = array();
	$primeLists = array();
	
	// maxの平方根
	$sqrt = floor(sqrt($max));
	
	for ($i=2; $i<=$max; $i++) {
		$lists[$i] = $i;
	}
	
	while ($val = array_shift($lists)) {
		$primeLists[] = $val;
		// maxの平方根に達したら終了
		if ($val > $sqrt) {
			break;
		}
		foreach ($lists as $key2 => $val2) {
			if ($val2 % $val === 0) {
				unset($lists[$key2]);
			}
		}
	}
	$primeLists = array_merge($primeLists, $lists);
	return $primeLists;
}
?>
<div style="text-align:center">
	<h1 style="font-size:72px;">さくらちゃんに告白してみる</h1>
	<form action="index.php" method="post">
		<input type="submit" name="kokuhaku" value="告白する!" />
	</form>
	<?php
		// ボタンが押されたら処理開始
		if(isset($_POST['kokuhaku'])) {
			// タイマー計測開始
			$time_start = microtime(true);
			// 上記素数のリストアップを3回繰り返す処理
			for ($i=0; $i<3; $i++ ) { 
				$a = eratosthenes(200000);
			}
			// タイマー計測終了〜出力
			$time = microtime(true) - $time_start;
			echo "<p>お返事にかかった時間は…<br><strong>{$time} 秒</strong></p>";
			echo('<audio src="sakura.wav" autoplay>わたしも!…わたしも…</audio>');
		}
	?>
</div>

彼女に告白した(formの[告白する!]のボタンを押した)その瞬間、彼女は20万以下の素数をリストアップ(※1)して変数aに代入することを3回繰り返し、その処理を終えてからaudioタグを生成、「わたしも!…わたしも…」とお返事をしてくれます(ついでにボタンを押してから素数を数え終わるまでの時間も出力してくれる都合のいい機能つき)!

(※1)素数の演算部分、関数eratosthenesについては、以下のページのコードを利用させていただきました。ありがとうございます。
PHPでエラトステネスの篩で素数判定をやってみる ベーシック エンジニアブログ Basic->deploy(‘blog’); 

新旧さくらちゃんのスペックを比較する

今回は私が9年間ずっと付き合いつづけてきたさくらちゃんと、新しく契約したさくらちゃん(どちらもさくらのレンタルサーバスタンダードプラン)に上記のphpファイルと音声ファイルをアップロードし、それぞれに告白を試みてみます。

ふるいさくらちゃんのスペック

  • Intel Xeon E312xx (Sandy Bridge)
  • メモリ容量: 18GB
  • PHP 5.6(CGI版)
  • MySQL5.5

以前から慣れ親しんでいるさくらちゃんのスペックは以下の通り。もろもろの事情があってPHPのバージョンが5.6のままとなっています。さくらインターネットウェブサイトでの「WordPressが最大16倍」の広告における比較もPHP5.6とPHP7.1の比較ですので問題なしとしましょう。

あたらしいさくらちゃんのスペック

  • CPU: Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz
  • メモリ容量: 48GB
  • PHP 7.1(モジュール版)
  • MySQL 5.7

そしてこちらが新しいさくらちゃんのスペック。
注目すべきはPHPが7.1であることだけでなく「モジュール版」になっていること。これまでのCGI版に比べて、かなり高速にPHPを処理することができる、との触れ込みです。またMySQLのバージョンも最新版の5.7であることにも注目です。CPU・メモリもかなりグレードアップしています。

いざ、告白

ということで、それぞれのさくらちゃんに告白してみました。
まずは9年来慣れ親しんださくらちゃんに…いざ、告白!(2018年6月1日の実際のLTの模様です)

はい、告白開始から3〜4秒程度でしょうか、私のセリフに対してちょっと間が空いたタイミングでのお返事でした。ちょっと考える間があったのでしょう、かわいいですね。

つづいて新しいさくらちゃんに告白してみます。

私「さくらちゃん、僕、k」
さくらちゃん「わたしも! …わたしも…」

はやい! まったくあのCMそのままに、告白開始から1秒たらずで私にお返事をくれたさくらちゃん。
20万以下の素数の数え上げを3回繰り返し私にお返事をくれたさくらちゃん。
まさに「はやいよ、さくらちゃん」であります。

事実。あたらしいさくらちゃんは、はやかった

ということで、さくらちゃんが素数の数え上げを開始してから音声ファイルの再生までの平均時間(※2)

  • ふるいさくらちゃん:4.379秒
  • あたらしいさくらちゃん:0.602秒

という結果になりました。歴然の差です。PHP5.6とPHP7.1の差は大きいとはいえ、ここまでハッキリと差が出るとは思っていませんでした。

念の為、おなじPHP7.1のCGI版とモジュール版、それぞれのさくらのレンタルサーバ(スタンダードプラン)でWordPressのダッシュボード表示までのサーバ側の処理時間の平均(※3)も比較計測してみましたら、結果は以下の通りでした。

  • CGI版PHP7.1(ふるいさくらちゃん):2.043秒
  • モジュール版PHP7.1(あたらしいさくらちゃん):0.543秒

おなじPHP7.1でも実際にこれだけの差が出ることがわかりました。
こちらはWordPressでのテストなので、MySQLのバージョンの違いも大きく影響しているのかもしれませんね。

(※2)それぞれの環境にて10回計測した平均時間。演算部の読み込み開始から、音声の再生までの時間。
(※3)おなじくそれぞれの環境で10回計測した平均時間。requestStart〜responseStartまでのパート時間(サーバ側にリクエストを送信してからレスポンスが返ってくるまでの時間)を計測しました。

さあ、あなたもレッツ告白

新旧のさくらちゃんに実際にそのPHPと音声ファイル(※4)を上げていますので、この記事をお読みのみなさまもぜひ告白してみてください。走っているのは同じPHPファイルですが、まったくはやさが違うことが実感できると思います。

(※4)大人の事情により、こちらの音声ファイルはオリジナルのさくらちゃんの声ではございません。各自脳内補完のほど、よろしくお願い申し上げます。そしてありがとう奥さん。ごめんよ奥さん。

モジュール版PHPの提供状況について

このモジュール版PHPの提供は、2018年6月現在ではさくらのレンタルサーバのプレミアム以上のプランか、最近契約されたスタンダードプラン(2018年4月18日以降の契約・サーバ番号www3701〜)での提供となっています。

将来的にはすべてのスタンダードプランのレンタルサーバで適用が可能になる予定ですが「今すぐに、はやすぎるさくらちゃんを試してみたい!」というライトプラン・スタンダードプラン契約中の方には、さくらインターネットよりレンタルサーバの新規契約時に使える1ヶ月無料クーポンを配布中とのこと(配布時期は契約者様によって異なります)。乗り換えにはファイルやDBの引っ越し、ドメインの割当変更などの引っ越し作業は必要ですが、試してみる価値は高いです。

詳しくは下記のサイトをご覧ください。
さくらのレンタルサーバ | Webサイトを速くする、新生さくらのレンタルサーバ

さあ、あなたもぜひ生まれ変わった、はやすぎるさくらちゃんを試してみてはいかがでしょうか。
そして私と同じようにモニタの前で叫びましょう。「はやいよ、さくらちゃん!」