
Swiftで「この処理に何秒かかるのかを調べたい」と思ったことはありませんか?
アニメーションやファイル読み込み、画像の加工など、ユーザー体験に直結する処理の重さを可視化するためには「正確な時間測定」が重要です。
そんなときに便利なのが、Swift標準の measure という機能です。
この記事では measure の基本的な意味や使い方、主要な引数の意味、活用シーン、注意点までをわかりやすく丁寧に解説します。
measureとは?
measure は Swiftの ContinuousClock 型に備わっているメソッドで、「ある処理にどのくらい時間がかかったか?」をナノ秒レベルで正確に計測できる関数です。
つまり、クロージャで囲んだ処理を実行し、その所要時間を Duration 型で返してくれる便利な測定ツールです。
UIKitやFoundationでも Date() を使って経過時間を手動で計測する方法はありますが、measure を使えばもっと簡潔で読みやすいコードになります。
具体例:処理時間を測定する
例えば「ループ処理にどのくらい時間がかかるか」を計測したいときは、以下のように書けます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import SwiftUI struct ContentView: View { @State private var result = "まだ計測していません" var body: some View { VStack(spacing: 20) { Text(result) .font(.headline) Button("処理時間を計測する") { let clock = ContinuousClock() let duration = clock.measure { for _ in 0..<1_000_000 { _ = UUID().uuidString } } result = "処理にかかった時間: \(duration)" } } .padding() } } |
このコードでは、100万回のループにかかる時間をミリ秒単位で出力しています。
クロージャの中に「測定したい処理」を入れるだけなので、非常にわかりやすく、Swift初心者にも扱いやすい構文です。
主要な引数とその意味
measure 自体に複雑な引数はありませんが、使いこなすには周辺の要素を押さえておくことが重要です。
ここで登場する要素とその役割を整理しておきましょう。
| 要素名 | 型 | 説明 |
|---|---|---|
| ContinuousClock | 構造体 | 時間の測定やスリープ処理などに使えるSwiftのクロック |
| measure() | メソッド | クロージャの処理にかかった時間を測定し、Duration型で返す |
| Duration | 構造体 | ナノ秒精度の時間を保持。componentsプロパティで秒・msなどに変換可能 |
| components | DurationComponents | attoseconds(アト秒)などの単位で分解できるプロパティ群 |
指定の仕方
measureの記法はとても簡潔です。
ContinuousClock をインスタンス化し、その measure { } の中に時間を計測したい処理を書く形になります。
|
1 2 3 4 5 |
let clock = ContinuousClock() let duration = clock.measure { // ここに計測したい処理 } |
measureの活用シーン
measureは以下のような場面で活躍します。
- アプリの動作が重い部分を特定したいとき
- ストップウォッチ的に処理の所要時間を可視化したいとき
- ネットワークやファイルIOなど重たい処理の時間測定
- パフォーマンスチューニングやベンチマーク用の計測コード
- ユーザーの操作にかかる時間をログ出力する分析用途
例えば、アプリ内で「学習問題を生成する処理」に時間がかかっていないかを計測したり、画像合成の重さをユーザーに見せたりといった場面で非常に有効です。
Timerとの違い
一見同じ機能に見える Timer と measure ですが、役割はまったく異なります。
Timer は「〇秒後に処理を実行する」ための仕組みであり、measure は「この処理に何秒かかったか」を知るための測定機能です。
違いを整理すると以下のようになります。
| 項目 | Timer | measure (ContinuousClock) |
|---|---|---|
| 目的 | 一定時間後に処理を行う | 処理時間の測定 |
| 使い方 | Timer.scheduledTimer などで開始 | クロージャで処理を囲むだけ |
| 戻り値 | なし(処理が実行される) | Duration型(時間情報) |
| 精度 | ミリ秒程度 | ナノ秒レベル |
| 用途 | カウントダウンや定期処理など | パフォーマンス測定やログ用 |
つまり、Timerは「未来の処理のため」、measureは「過去の処理時間の可視化のため」に使うものです。
使うときの注意点
measureは非常にシンプルなAPIですが、使う際に気をつけておくべきポイントもあります。
- 非同期処理(async/await)には直接使えない(同期処理のみ)
- ユーザーインターフェースのレスポンス時間を測るにはメインスレッドに注意
- 計測した処理に副作用があると、測定のたびに結果が変わることもある
非同期処理の時間を測りたいときは、now や duration.since() などを組み合わせる工夫が必要になります。
まとめ
今回は Swiftの measure メソッドについて詳しく紹介しました。
- measure は ContinuousClock に備わる高精度な時間測定機能
- 処理をクロージャで囲むだけで、かかった時間をDuration型で取得可能
- ストップウォッチ的な使い方やパフォーマンスの分析に向いている
- Timerとの違いを正しく理解して、用途に応じて使い分けることが大切
Swiftアプリの動作検証や、ユーザーに「処理時間」をフィードバックしたい場合などにも使える便利な機能です。
初心者でも取り入れやすいので、ぜひ measure を活用してアプリの品質向上やパフォーマンス改善に役立ててみてくださいね!

