こんにちは。iOS / Mac 開発担当の金内です。
使って幸せなアプリには、サクサクとした動きが欠かせませんね。自分たちで作っているアプリが「サクサク」でなく「もっさり」と言われてしまうと残念な気持ちになりますが、反面「よし。こうなったら超最適化して超サクサクなハイパフォーマンスアプリを目指す!」と誓いを立てるよい機会でもあります。
そんな誓いを立てたあなたにピッタリのツールが Xcode に付属している Instruments(インストゥルメンツ)です。フェンリルのウェブブラウザ Sleipnir for Mac や Sleipnir Mobile for iPhone / iPad の開発でも大活躍しています。
Instruments は、一般的にはプロファイラという種類のツールにあたります。プロファイラは、どのオブジェクトがどれくらいメモリを消費しているとか、どのメソッドにどれくらい時間がかかっているとか、外から動きを見ていてもわからない動作情報を集めてくれます。
その情報をもとに例えば NSString の検索が遅いとか UIView の描画が遅いなどの問題を特定できれば、そこを高速化することでアプリがどんどんサクサクになっていくわけです。
アプリがサクサク。ワクワクしてきますね。では Instruments の使い方から簡単にご紹介していきましょう。
まずは起動
Instruments はその役割の重要さにも関わらず、ちょっと目立たないところにあるので知らない人がいてもおかしくないほどです。Xcode から起動するには”Xcode” メニューから “Open Developer Tool” のサブメニューを辿った先にようやく “Instruments” があります。超重要ツールなのに、こんなとこに置いたら気付かないっすよ。
他には Product メニューや実行ボタンから “Profile” を選ぶと、アプリをビルドしてから Instruments が起動して、プロファイルが始まります。
起動したら Dock に表示されるので、いつでも起動できるように「Dock に保存」しておくのもおすすめです。
計測できるものはいろいろ
アプリのパフォーマンスに大きく関わってくるものが「メモリ」「CPU」「I/O(入出力)」「グラフィクス」です。
Instruments は、これらのカテゴリに分けて、さまざまなインストゥルメント(計測機材)のセットを用意してくれています。それぞれの機材がメソッドの実行時間やメモリの消費量を計測してくれるわけです。
まずは Time Profiler あたりを試してみるのをおすすめします。ご自身のアプリのどの処理に時間がかかっているのか、一目瞭然です。他にも Allocations や Leaks は、メモリ使用量の削減やメモリリークの撲滅に欠かせません。
Instruments の Tips
Instruments の使いはじめには気付きにくいものを中心にいくつかのヒントをご紹介します。
Instruments Library で組み合わせ計測
プリセットされた機材の組み合わせだけでなく、Library を開いて必要な機材をドラッグ&ドロップで追加すれば、たとえばメモリと I/O のような複数の側面から同時に計測できてしまいます。
Extended Detail を活用しよう
Allocations で表示されている身に覚えのないオブジェクトがどこでどうやって生成されているかや、Core Data の時間のかかる fetch はどこから呼び出されているのかなどは、Extended Detail という右側のペインを開くと表示されます。この存在を知らずにいると、どこで呼び出されているのかを想像をふくらませて考えるしかないので気をつけましょう。
下の図の赤丸のところを押すと、右側の Extended Details が表示されます。
深いツリーはオプション+クリックで一撃全展開
Time Profiler にはメソッド呼び出しがツリー状に表示されます。システムライブラリの深い位置にあるメソッドの呼び出しのツリーは 20〜30 階層になっていることも珍しくありません。そこに辿り着くまで1階層ずつ三角アイコンをクリックして展開していると指が疲れるので、オプションキーを押しながら三角アイコンをクリックしてサブツリーを一発で全展開してしまいましょう。
なお、このオプション+クリックでツリーを展開するのは他のアプリでも使える Mac 標準の操作です。
Mac でのグラフィクス関連チューニングは別ツールで
機器によっては特定プラットフォームでしか使えなかったりもします。たとえば Core Animation の機材は iOS デバイスのみ対応なので、Mac 用のアプリ開発では使えません。
Mac でのグラフィックス関連のチューニングには Quartz Debug を使いましょう。Quartz Debug は Instruments を起動した “Xcode” メニューの “Open Developer Tool” から、さらに “More Developer Tools…” を辿って Apple のサイトから “Graphics Tools for Xcode” をダウンロードすると中に含まれています。遠いなぁ。
iOS でのアニメーション最適化については別記事で
iOS でのアニメーション(Core Animation)最適化については、以前別記事で取り上げたことがあるのでそちらを参考にしてください(後述)。
Instruments サイコー!
先ほど「Instruments はプロファイラ」と書きましたが、単なるプロファイラではなく「超優秀なプロファイラ」です。さまざまな側面からアプリの動作情報を計測でき、しかも結果をわかりやすくビジュアルに表示してくれ、分析機能にも優れています。
これほどのツールが無料で利用できてしまうわけです。Xcode が無料なのもスゴいことですが、そこに Instruments ほどのツールが付属しているのは同じくらいスゴいことだと言えます。こうした優秀なツールが、iOS や Mac で動く素晴らしいアプリたちの開発を支えてくれているわけですね。
Sleipnir の開発でも Instruments を活用して着々とパフォーマンスを向上させています。これからもみなさんから「超サクサク!」と言ってもらえるようにがんばるので応援よろしくおねがいします! Instruments サイコー!
Instruments で絶賛チューニング中Sleipnir for Mac はこちら
Instruments でなめらかアニメーションSleipnir Mobile for iPhone / iPad はこちら
Sleipnir for Mac は紹介ビデオも用意しているので、まだご覧になっていない方はこの機会にぜひどうぞ。
参考リンク
Instruments について詳しく知るには使ってみるのがいちばんですが、ドキュメントや本ブログの関連記事も参考にしてみてください。
- Instruments User Guide (日本語版PDF)
- WWDC 2012 Session Videos(要ログイン。Instruments 関連のセッションのビデオや資料があります)
- Sleipnir for Mac のパフォーマンスを大幅に改善するためにしたこと
- iPhone / iPad アプリのアニメーションをなめらかにするためのポイント3つ