「おま環」を 1 ファイルで共有する — Mimicry のタイムトラベルモック

Mimicry の再生ビューア。録画した画面録画と API 通信ログをタイムスタンプで同期再生する様子です。

はじめに

QA から「この画面で落ちました」と言われても、自分の環境では再現しないことがあります。サーバーの状態が変わっていたり、特定のレスポンスでしか起きない不具合だったり、切り分けに時間がかかる場面は少なくありません。

Mimicry のタイムトラベルモックは、こうした「再現できない問題」を 1 つのファイルにまとめて共有するための機能です。

タイムトラベルモックとは

Mimicry のタイムトラベル機能は、API 通信・画面録画・デバイス情報を 1 つの .mimicry ファイルにパッケージ化する機能です。

録画したファイルはそのまま再生してモックとして利用でき、サーバーが停止していても同じ通信を何度でも再現できます。ファイルを共有すれば、受け取った人も全く同じ通信環境を再現できます。

録画する

通信ログ画面の録画ボタンから開始します。録画モードは「通信のみ」と「通信 + 画面録画」の 2 種類です。画面録画は iPhone 実機(iPhone ミラーリング経由)、iOS シミュレーター、Android 実機、Android エミュレーターに対応しています。

録画開始ダイアログ

停止すると .mimicry ファイルとして保存されます。

.mimicry ファイルの中身

.mimicry に入っているのは、リクエストとレスポンスの全データ(URL・メソッド・ヘッダー・ボディ・ステータスコード)、通信とタイムスタンプで同期されたデバイス画面の mp4、そしてデバイスの種類(実機 / シミュレーター)・モデル名・OS バージョンといったデバイス情報の 3 つです。

HAR エクスポートとの違いは、通信ログのテキストだけでなく、そのまま再生用モックとして使える点です。画面録画とデバイス情報まで 1 ファイルに収まります。

再生してモックとして使う

録画ライブラリから録画を選んで再生すると、Mimicry が録画データからレスポンスを返すモックサーバーとして動作します。アプリ側はサーバーに繋いでいるつもりで通信しますが、実際には Mimicry がローカルで応答を返します。

録画ライブラリ

マッチングは URL とメソッドの一致で判定されるため、操作順序が録画時と多少違ってもレスポンスが正しく返ります。

専用の再生ビューアでは、録画した画面と通信ログを同期再生できます。タイムラインバーで各リクエストの発生タイミングが可視化され、再生速度も 0.5x / 1x / 1.5x / 2x の 4 段階で切り替え可能です。

ファイルを共有する

.mimicry は単なるファイルなので、AirDrop、Slack、Git、メールなど普段使っている手段でそのまま共有できます。受け取った側はダブルクリック、または Mimicry にドラッグ & ドロップするだけで開けます。

サーバーの状態やネットワーク環境に依存しないので、受け取った人のローカル環境だけで録画された通信をそのまま再現できます。

使いどころ

バグ再現の共有が一番大きな用途です。QA が録画した .mimicry をチケットに添付すれば、開発者はファイルを開くだけで同じ状態を再現できます。

サーバー停止時の開発にも使えます。バックエンドのメンテナンス中や API 未実装の時期でも、過去の録画でフロントエンド開発を続けられます。

コードレビューにも便利です。動作確認用の .mimicry を PR に添付すれば、レビュアーが画面と通信を同期再生しながら挙動を把握できます。

まとめ

タイムトラベルモックは、不具合の状態をそのまま持ち運べるようにする機能です。「自分の環境では再現しない」で消耗している方は、よければ試してみてください。

参考リンク