##はじめに
以前から、ふんわりと存在は知っていたけど、殆ど使ったことがなかったInstrumentsを使って遊んでみました。
##そもそもInstrumentsって?
Instrumentsでは、instrumentと呼ばれる各種の専用ツールを使って、プロセスの振る舞いをさまざまな視点からトレースできます。また、OS Xユーザインターフェイス上の一連の操作を記録しておき、 これを繰り返し再現しつつ、instrumentをいくつか使ってデータを収集することも可能です。
参考:
https://developer.apple.com/jp/documentation/InstrumentsUserGuide.pdf
##実際に使ってみた
###前準備
まず、Xcodeで何かプロジェクトを開きます。(とりあえず、InstrumentsTestというプロジェクトを作ってみました。)
次に、一度そのプロジェクトを検証したい実機またはシミュレータにビルドします。(私はシミュレータに入れました。)
###Instruments起動
Xcodeから起動するには、
"Xcode">"Open Developer Tool">"Instruments"
と辿っていって下さい。
Instrumentsを起動すると、以下のようなウィンドウが開きます。
とりあえず、よく名前を目にする"Time Profiler"を使ってみることにしました。
※"Time Profiler"はシステムのCPUがどのプロセスを実行しているか、時間軸に沿って調べることができます。オーバーヘッドもあまりありません。
起動したら、以下のように先程プロジェクトをビルドした実機またはシミュレータを設定します。
###トレースしてみよう
みなさん、すでに気になっていると思いますが、Instrumentsウィンドウの左上にある赤い「●」。これをクリックすると、検証端末の中のアプリが起動し、トレースがはじまります。
ちなみに、とりあえず作ったアプリはこんな感じです。(ただラベルを表示しているだけ。)
何度か起動すると、こんな感じで過去ログも見れます。
これだけではあまり面白くないので、他にも何かトレースしてみましょう。
###ちなみに
InstrumentsをXcodeでデバッグしつつ使いたい場合は、以下のように、
"Product">"Profile"
を実行して下さい。
##新たなLibraryを追加してみよう
Instrumentsは一度に複数のデータを計測することができます。
Instrumentsウィンドウの右上にある「+」ボタンをクリックすると、Libraryリストが表示されます。
個人的にメモリ関連が気になるので、"Allocations"と"Leaks"を追加してみました。(追加したいLibraryをダブルクリックする。)
※"Allocations"はヒープメモリの使用量を、割り当て処理(クラスによるオブジェクトの割り当てを含む)を追跡することにより測定します。また、仮想メモリの状況も、その統計情報をリージョンごとに記録します。
※"Leaks"はメモリ総使用量を計測し、メモリリークが起こっていないか確認し、クラスによるオブジェクト割り当ての統計情報を提供し、さらに、アクティブな割り当てやリークしたブロックすべてのアドレス履歴を示します。
一度にCPUだけでなく、ヒープメモリの使用量とメモリリークの確認ができるようになりました。だいぶ便利そうです。
##せっかくだし、もっと遊んでみよう
ただラベルを表示させているだけではつまらないので、ちょっと無茶してみました。
###プロジェクトの修正
こんな感じなら、表示が面白くなるはずです。
###実行してみた
ヒープメモリの使用量ががんがん上がっていっています。
##まとめ
Instrumentsは、CPUやメモリ使用量などのデータを可視化し、アプリのパフォーマンス改善に役立つツール群です。
今回はメジャーな"Time Profiler"と"Allocations"と"Leaks"しか使いませんでしたが、他にも様々なLibraryがあるので、興味のある方は調べてみて下さい。
今回の例だけではまだなんとも言えませんが、大きなプロジェクトで使ってみたらもっと恩恵に与れると感じました。