この記事のポイント
microtime関数は、Webアプリケーション開発において非常に重要な関数の一つです。この記事では、初心者の方でも理解できるよう丁寧に解説していきます。
- マイクロ秒単位での正確な時間取得が可能
- 処理時間測定やパフォーマンス分析に必須の機能
- 戻り値の形式を理解して適切に活用する方法
以下の内容を順番に学ぶことで、microtime関数を効果的に使いこなせるようになります。
microtime関数とは?
microtime関数は、現在時刻をマイクロ秒(100万分の1秒)単位まで取得できる組み込み関数です。通常のtime関数が秒単位でしか時間を取得できないのに対し、microtime関数ははるかに精密な時間測定が可能です。
この関数は主にプログラムの実行時間測定やパフォーマンス分析において重要な役割を果たします。戻り値は文字列形式または浮動小数点形式で取得でき、用途に応じて使い分けることができます。
【関連】
PHPをもっと詳しく学ぶならpaizaラーニング
基本構文
microtime関数の基本的な使い方を理解するために、まずは簡単なコード例から見ていきましょう。この関数には引数として真偽値を渡すことができ、戻り値の形式を制御できます。
<?php
// 文字列形式で取得
$timeString = microtime();
echo "文字列形式: " . $timeString;
?>
出力結果(例)
文字列形式: 0.62905700 1755600241
※現在時刻をマイクロ秒 秒の文字列形式で表示
<?php
// 浮動小数点形式で取得
$timeFloat = microtime(true);
echo "浮動小数点形式: " . $timeFloat;
?>
出力結果(例)
浮動小数点形式: 1755600282.4133
※秒とマイクロ秒を合わせた浮動小数点数を表示
引数にtrueを渡すと浮動小数点形式で、何も渡さない(またはfalse)と文字列形式で時間が取得されます。計算処理には浮動小数点形式が便利で、ログ出力などには文字列形式が適している場合があります。
実用例
ここからは、microtime関数の具体的な活用方法について、実際のコード例を交えながら詳しく解説していきます。各サンプルコードでは、実際の開発現場でよく使われるパターンを紹介し、どのような場面で活用できるかも併せて説明します。
処理時間の測定から始まり、データベースアクセスやファイル操作など、さまざまな用途での使用例を通じて、microtime関数の実用性を理解していただけるでしょう。
処理時間の測定
最も基本的な使用例として、簡単な処理の実行時間を測定するコードを実行してみましょう。開始時刻と終了時刻の差を計算することで、処理にかかった時間を正確に把握できます。
<?php
$startTime = microtime(true);
// 何らかの処理
for ($i = 0; $i < 1000000; $i++) {
$animal = "ネコ";
}
$endTime = microtime(true);
$executionTime = $endTime - $startTime;
echo "処理時間: " . $executionTime . "秒";
?>
出力結果(例)
処理時間: 0.0062539577484131秒
※出力ごとに実行結果は変わります
このように開始と終了の時間差を計算することで、ループ処理などの実行時間を正確に測定できます。パフォーマンスチューニングの第一歩として非常に有用な手法です。
ループ処理のパフォーマンス計測
配列処理など、繰り返し処理のパフォーマンスを比較する際にmicrotimeが威力を発揮します。以下は異なるアルゴリズムの実行時間を比較することで、最適な処理方法を選択できる例となります。foreachとforループのパフォーマンスの違いを定量的に把握できます。大量のデータを扱う場合には、このような差が重要になってきます。
<?php
$animals = array_fill(0, 100000, "イヌ");
$start = microtime(true);
foreach ($animals as $animal) {
$result = $animal . "が走る";
}
$time1 = microtime(true) - $start;
$start = microtime(true);
for ($i = 0; $i < count($animals); $i++) {
$result = $animals[$i] . "が走る";
}
$time2 = microtime(true) - $start;
echo "foreach: " . $time1 . "秒\n";
echo "for: " . $time2 . "秒";
?>
出力結果(例)
foreach: 0.0023009777069092秒
for: 0.0031001567840576秒
※出力ごとに実行結果は変わります
このような比較測定により、foreachとforループのパフォーマンスの違いを定量的に把握できます。大量のデータを扱う場合には、このような差が重要になってきます。
データベースクエリの実行時間測定
データベースアクセスの最適化において、クエリの実行時間測定は欠かせません。どのクエリが重く、最適化が必要なのかを特定するために活用する例となります。データベースクエリの実行時間を測定することで、ボトルネックとなっているクエリを特定し、インデックスの追加や書き換えなどの最適化を行う指標となります。
<?php
// PDOでの例(実際のDB接続は省略)
$start = microtime(true);
// 仮想的なデータベースクエリ
$animals = ["ウサギ", "カメ", "キツネ"];
$queryResult = array_filter($animals, function($animal) {
usleep(1000); // 1ms待機でDB処理をシミュレート
return strlen($animal) > 2;
});
$end = microtime(true);
$queryTime = $end - $start;
echo "クエリ実行時間: " . number_format($queryTime, 4) . "秒";
?>
出力結果(例)
クエリ実行時間: 0.0032秒
※出力ごとに実行結果は変わります
ファイル読み書きの時間計測
ファイル操作は処理時間にばらつきが生じやすいため、実行時間の監視が重要です。特に大きなファイルを扱う場合には、処理時間の把握が欠かせません。ファイル操作の処理時間を測定することで、システムのI/O性能を把握し、必要に応じてファイル処理の最適化を行うことができる例となります。
<?php
$fileName = "animals.txt";
$content = "ゾウ\nライオン\nキリン\nサル\nパンダ";
$start = microtime(true);
file_put_contents($fileName, $content);
$writeTime = microtime(true) - $start;
$start = microtime(true);
file_get_contents($fileName);
$readTime = microtime(true) - $start;
echo "書き込み時間: " . $writeTime . "秒\n";
echo "読み込み時間: " . $readTime . "秒";
unlink($fileName); // テストファイル削除
?>
出力結果(例)
書き込み時間: 7.7962875366211E-5秒
読み込み時間: 2.0027160644531E-5秒
※出力ごとに実行結果は変わります
複数処理の比較測定
異なる処理方式の性能を比較する際に、microtime関数を使って客観的な判断材料を得ることができる例となります。どの手法が最も効率的かを数値で確認できます。
<?php
$animals = ["トラ", "クマ", "オオカミ", "シカ", "イノシシ"];
// 方法1: implode使用
$start1 = microtime(true);
$result1 = implode(", ", $animals);
$time1 = microtime(true) - $start1;
// 方法2: foreach使用
$start2 = microtime(true);
$result2 = "";
foreach ($animals as $animal) {
$result2 .= $animal . ", ";
}
$time2 = microtime(true) - $start2;
echo "implode: " . $time1 . "秒\n";
echo "foreach: " . $time2 . "秒";
?>
出力結果(例)
implode: 9.5367431640625E-7秒
foreach: 5.9604644775391E-6秒
※出力ごとに実行結果は変わります
メモリ使用量と実行時間の同時計測
処理の最適化では、実行時間だけでなくメモリ使用量も重要な指標です。microtime関数と組み合わせて総合的なパフォーマンス分析を行う例となります。実行時間とメモリ使用量を同時に計測することで、処理の効率性を多角的に評価し、最適なアルゴリズムを選択する判断材料とすることができます。
<?php
$startTime = microtime(true);
$startMemory = memory_get_usage();
// メモリを消費する処理
$bigArray = [];
for ($i = 0; $i < 10000; $i++) {
$bigArray[] = "動物番号" . $i . ":カンガルー";
}
$endTime = microtime(true);
$endMemory = memory_get_usage();
$executionTime = $endTime - $startTime;
$memoryUsed = $endMemory - $startMemory;
echo "実行時間: " . $executionTime . "秒\n";
echo "メモリ使用量: " . $memoryUsed . "バイト";
?>
出力結果(例)
実行時間: 0.0011000633239746秒
メモリ使用量: 1168360バイト
※出力ごとに実行結果は変わります
ランダム処理の時間測定
乱数生成や配列のシャッフルなど、実行時間が変動しやすい処理の平均的な実行時間を把握するために、複数回の測定を行う例となります。
<?php
$animals = ["アルパカ", "ラマ", "ヤク", "バイソン"];
$totalTime = 0;
$iterations = 1000;
for ($j = 0; $j < $iterations; $j++) {
$start = microtime(true);
shuffle($animals);
$randomAnimal = $animals[array_rand($animals)];
$end = microtime(true);
$totalTime += ($end - $start);
}
$averageTime = $totalTime / $iterations;
echo "平均実行時間: " . $averageTime . "秒\n";
echo "選ばれた動物: " . $randomAnimal;
?>
出力結果(例)
平均実行時間: 1.4328956604004E-7秒
選ばれた動物: ラマ
※出力ごとに実行結果は変わります
まとめ
microtime関数は、Webアプリケーション開発における性能測定と最適化に欠かせない重要な関数です。マイクロ秒単位での精密な時間測定により、プログラムの実行時間を正確に把握することができます。この記事で紹介したコード例を参考に、実際のプロジェクトでパフォーマンス測定を行い、より効率的なプログラムの開発に役立ててください。
microtime関数の活躍する場面
- データベースクエリの実行時間測定と最適化
- ファイル操作やAPI通信の応答時間監視
- 異なるアルゴリズムの性能比較と選択
重要なポイント
- 引数trueで浮動小数点形式、falseで文字列形式を選択
- 開始時刻と終了時刻の差分計算で処理時間を算出
- 処理時間や性能測定に利用できる
microtime関数を適切に活用することで、システムのボトルネックを特定し、ユーザー体験の向上につながるパフォーマンスチューニングが可能になります。継続的な計測と改善により、高品質なWebアプリケーションの開発を実現しましょう。
レベルを更に上げたい方はpaizaプログラミングスキルチェックへ