2019」において、サイバーエージェントはダイアモンドスポンサーを務め、5名が登壇しました。)が発表した「カスタムInstrumentsでアプリをピカピカに!」のトークについて、同じく「Ameba(アメーバ)」のiOSエンジニアの仙石が解説します。JapanInstrumentsについてInstrumentsは、Xcodeに組み込まれている「実行時にさまざまな情報を収集し分析・可視化してくれるツール」です。アプリの動作やパフォーマンスを可視化することができて、デバックやパフォーマンス改善に役立ちます。以下のケースでの使用が便利だと感じています。基本的な使い方XcodeでのInstrumentsの起動方法は2通りの方法があります。起動することができます。Instrumentsからも起動することができます。I)からアプリがセットされた状態でInstrumentsを起動することができます。Profilerテンプレートでパフォーマンスの計測をすることが多いです。Transferを選択することで、実行中のアプリにInstrumentsをAttachして実行することができるので、デバッグ中に気になったらすぐにInstrumentsを実行できます。赤丸の「Record」ボタンをクリックで計測を開始します。Area」には時系列で計測結果がグラフで表示されます。Area」で指定した範囲の計測結果の情報が表示されます。Area」では、結果をソートすることも可能です。Area」で選択した行についてスタックトレースなどの詳細情報が表示されます。Tree」と「メソッドジャンプ」の機能をよく使用しています。Treeをタップすると、チェックボックスが現れます。チェックボックの該当項目にチェックをつけることで表示されるデータをフィルターすることができます。Function」にチェックをつけることで、アプリのコードのみが表示されます。Area」に表示されているメソッドをダブルクリックすることで、Xcodeのエディタの該当のコードに遷移することができます。InstrumentsのテンプレートトークではInstrumentsの多くのテンプレートからいくつかが紹介されました。Profilerがあります。Leaksでは、メモリー使用量とリークの発生の有無が表示されます。リークを検知する間隔を変更することも可能です。メモリー使用量を確認することきには、スパイクが発生していないかを確認して、突発的なメモリー使用によるクラッシュ箇所を検知することができます。Profilerでは、CPUのコアやThreadごとの使用率を可視化することができ、それらが効率よく使われているかを確認することができます。メソッドの処理時間や呼び出し回数を確認することができ、重たいメソッドを特定することもできます。導入された計測に役立つマーカーです。上でグラフィカルに実行タイミングを表示することができます。具体的には下記のように計測したい処理をos_signpostで囲みます。spid)Instrumentのos_signpostで、結果を見ることができます。Instrumentにも表示されます。Areaでは、実行回数や平均の実行時間などが表示されるので処理のパフォーマンス計測がはかどります。カスタムInstrumentsInstrumentは自分で作成することも可能です。Packageを選んでプロジェクトを作成します。デフォルトで.instrpkgファイルが作られるので、そこにXMLで、Instrumentsに必要なModelerやスキーマを記述していきます。配布するときには、Archiveを行い、生成された.instrdstを配布します。.instrdstをダブルクリックしてインストールすることで、作成したカスタムInstrumentsを使うことができます。サンプルコード(Ridwy/iosdc19-custom-instruments)として2つのカスタムInstrumentsが用意されており参考になります。1つはos_signpostの内容をより見やすくし、アプリの状況を把握しやすくするもの、もう1つは後述するユーザーの行動ログの可視化とエラー検知を行うものです。セッションも参考になります。プロダクトでのカスタムInstrumentsの活用事例として以下があります。API通信の可視化ユーザーの行動ログの実装確認トークの最後にはカスタムModelerの作り方についても触れられました。Modelerの記述にはエキスパートシステムを作成するためのCLIPSという言語を使います。エキスパートシステムは専門家の判断能力をエミュレートするもので、発生したfact(事実)をルール(専門家の経験則など)に従って処理していきます。例として、行動ログの実装ミスを検知する方法が提案されました。Areaに表示されるようになっていました。Instruments上で他の計測結果と一緒に、ログの実装ミスを検知できるのは便利だと思います。CLIPSを使うことでロジックを記述することができるので、Instrumentsの利用の幅が広がると思います。Modelerの記述方法までが紹介されました。アプリの状態を可視化することができるInstrumentsを積極的に使って、定期的にアプリの品質を向上できればと思います。使用画像はスライドから引用AmebaiOSiOSエンジニアレポートsengoku2018年新卒入社のiOSエンジニア。現在はAmebaブログのプロダクトを担当。