フェンリル

Developer's Blog

【iOS/Mac開発】超サクサクアプリへの必須ツール Instruments を使いこなそう

こんにちは。iOS / Mac 開発担当の金内です。

使って幸せなアプリには、サクサクとした動きが欠かせませんね。自分たちで作っているアプリが「サクサク」でなく「もっさり」と言われてしまうと残念な気持ちになりますが、反面「よし。こうなったら超最適化して超サクサクなハイパフォーマンスアプリを目指す!」と誓いを立てるよい機会でもあります。

そんな誓いを立てたあなたにピッタリのツールが Xcode に付属している Instruments(インストゥルメンツ)です。フェンリルのウェブブラウザ Sleipnir for MacSleipnir Mobile for iPhone / iPad の開発でも大活躍しています。

Instruments は、一般的にはプロファイラという種類のツールにあたります。プロファイラは、どのオブジェクトがどれくらいメモリを消費しているとか、どのメソッドにどれくらい時間がかかっているとか、外から動きを見ていてもわからない動作情報を集めてくれます。

その情報をもとに例えば NSString の検索が遅いとか UIView の描画が遅いなどの問題を特定できれば、そこを高速化することでアプリがどんどんサクサクになっていくわけです。

アプリがサクサク。ワクワクしてきますね。では Instruments の使い方から簡単にご紹介していきましょう。

まずは起動

Instruments Icon

Instruments はその役割の重要さにも関わらず、ちょっと目立たないところにあるので知らない人がいてもおかしくないほどです。Xcode から起動するには”Xcode” メニューから “Open Developer Tool” のサブメニューを辿った先にようやく “Instruments” があります。超重要ツールなのに、こんなとこに置いたら気付かないっすよ。

Launch Instruments From Xcode

他には Product メニューや実行ボタンから “Profile” を選ぶと、アプリをビルドしてから Instruments が起動して、プロファイルが始まります。

Instruments Run Profile

起動したら Dock に表示されるので、いつでも起動できるように「Dock に保存」しておくのもおすすめです。

計測できるものはいろいろ

アプリのパフォーマンスに大きく関わってくるものが「メモリ」「CPU」「I/O(入出力)」「グラフィクス」です。

Instruments は、これらのカテゴリに分けて、さまざまなインストゥルメント(計測機材)のセットを用意してくれています。それぞれの機材がメソッドの実行時間やメモリの消費量を計測してくれるわけです。
まずは Time Profiler あたりを試してみるのをおすすめします。ご自身のアプリのどの処理に時間がかかっているのか、一目瞭然です。他にも Allocations や Leaks は、メモリ使用量の削減やメモリリークの撲滅に欠かせません。

Instruments Sets

Instruments Time Profiler

Instruments の Tips

Instruments の使いはじめには気付きにくいものを中心にいくつかのヒントをご紹介します。

Instruments Library で組み合わせ計測

プリセットされた機材の組み合わせだけでなく、Library を開いて必要な機材をドラッグ&ドロップで追加すれば、たとえばメモリと I/O のような複数の側面から同時に計測できてしまいます。

Instruments Library

Extended Detail を活用しよう

Allocations で表示されている身に覚えのないオブジェクトがどこでどうやって生成されているかや、Core Data の時間のかかる fetch はどこから呼び出されているのかなどは、Extended Detail という右側のペインを開くと表示されます。この存在を知らずにいると、どこで呼び出されているのかを想像をふくらませて考えるしかないので気をつけましょう。

下の図の赤丸のところを押すと、右側の Extended Details が表示されます。

Instruments Extended Detail

深いツリーはオプション+クリックで一撃全展開

Time Profiler にはメソッド呼び出しがツリー状に表示されます。システムライブラリの深い位置にあるメソッドの呼び出しのツリーは 20〜30 階層になっていることも珍しくありません。そこに辿り着くまで1階層ずつ三角アイコンをクリックして展開していると指が疲れるので、オプションキーを押しながら三角アイコンをクリックしてサブツリーを一発で全展開してしまいましょう。

Instruments Deep Tree

なお、このオプション+クリックでツリーを展開するのは他のアプリでも使える Mac 標準の操作です。

Mac でのグラフィクス関連チューニングは別ツールで

機器によっては特定プラットフォームでしか使えなかったりもします。たとえば Core Animation の機材は iOS デバイスのみ対応なので、Mac 用のアプリ開発では使えません。

Mac でのグラフィックス関連のチューニングには Quartz Debug を使いましょう。Quartz Debug は Instruments を起動した “Xcode” メニューの “Open Developer Tool” から、さらに “More Developer Tools…” を辿って Apple のサイトから “Graphics Tools for Xcode” をダウンロードすると中に含まれています。遠いなぁ。

Instruments Developer Tools Menu

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 について詳しく知るには使ってみるのがいちばんですが、ドキュメントや本ブログの関連記事も参考にしてみてください。

Facebook コメント

コメント

Zaimのレシート読み取り機能が思いの外すごかった!他 日録 04月20日版 | Shigesato.com2013年04月20日 13:59

[...] 【iOS/Mac開発】超サクサクアプリへの必須ツール Instruments を使いこなそう (... [...]

ツカエル!ネットの話題 » Blog Archive » 04月20日 17:00版2013年04月20日 17:01

[...] 【iOS/Mac開発】超サクサクアプリへの必須ツール Instruments を使いこなそう (フェンリル | デベロッパーズブログ) [...]

日刊 あおのうま Vol.886(2013.04.21)【今年も参加して損なし!!】 | 極上の人生2013年04月22日 0:19

[...] 【iOS/Mac開発】超サクサクアプリへの必須ツール Instruments を使いこなそう (... 知らんかった!!Σ(゚д゚lll) [...]

Sleipnir 4 for Mac わたしが使えない原因 « passive GT2013年04月24日 9:37

[...] フェンリル デベロッパーズブログの「【iOS/Mac開発】超サクサクアプリへの必須ツール Instruments を使いこなそう」を読んだら、アプリをサクサクと動かすことに並々ならぬ熱意を感じた [...]

Instrumentsツールがすごい | りんごブログ2013年12月19日 15:37

[…] 以下、関連のサイトです。 Instrumentsの起動方法などなど Time Profilerについて […]

【Xcode】ARC配下でのメモリ管理関連リンク | AS blind side2014年09月08日 3:04

[…] ・Second Flush ARCへの移行のリリースノート ・infinite loop 技術ブログ Objective-Cのメモリ管理おさらいと解放tips ・私的メモ [Objective-C] メモリリークをチェックする ・ARCを使用したメモリ管理の基礎 ・ARC環境でメモリが枯渇するケース ・sirochro Objective-C: これで解決!ARCを使用しReceived memory warningが出た時の対処方法 ・Developers.IO [Xcode 5] Xcode 5のデバッグ機能 “Debug gauges” ・Instruments ユーザガイド[PDF] ・【iOS/Mac開発】超サクサクアプリへの必須ツール Instruments を使いこなそう […]

名前(必須)

メールアドレス(必須)

URL

スタイル用のタグが使えます

このコメント欄でのご質問、ご要望には、開発チームから回答できない場合があります。ご質問、ご要望は「User Community」内のフォーラムまでお寄せください。