はじめてのAutifyathon

去る2023年末、Autify社内で、はじめてのAutifyathonが実施されました。Autifyathonとは、Autifyのエンジニアが個々人の自由な裁量で好きなプロジェクトに取り組める、エンジニアのエンジニアによるエンジニア(と、もちろん顧客)のためのHackathonです。その目的は:

  • エンジニア発のイノベーションを促進すること
  • ふだん関ることのないチーム外メンバーとのコラボレーションを促進すること

であり、枠組みは以下のような感じでした:

  • 4日間、通常の開発業務を一切停止して行う
  • ただし、システムのモニタリングやすでに入っている採用面談などは通常通り行う
  • 参加は自由で、事前にチームを募り、内容の擦り合わせや予備調査などなど行っておく
  • 開発は基本オンラインで行う
  • 1人チームでもOK

ほぼ一週間好きなことに取り組めるという、なんとも野心的な試みです。結果としては、計13プロジェクト(チーム)が編成され、最終日にそれぞれの行った取り組みについて発表しました。

どのチームも、PoCとして、限られた時間内でなんらかの発表できる成果を出していました。普段の業務で抱えている改善点だったり、Autifyのプロダクトに関連して試してみたいアイデアがほとんどでした。表彰式の後は、みんなで取り組んだ成果を祝し、オフィスで打ち上げを行って、イベントは閉幕となりました。

たとえばこんなプロジェクトが…

実際にAutifyathonで実施されたプロジェクトを2つほどご紹介します。どちらもAutify for Mobile関連なのは、記事を書いているのがAutify for Mobileの中の人だから(技術的に正確に説明できるため)です。

Autify for Mobile Desktop Recorder

Autify for Mobileには、長年抱えている根本的な課題があります。それは、VM上での実行という制約のため、テストシナリオ作成環境の起動に時間がかかることです。Autify for MobileのiOS用テストシナリオ作成は、クラウド上のmacOSで、毎回新しいシミュレーターを起動して行いますが、この初期化処理が大変重いのです。これはセキュリティー上の懸念から、毎回クリーンな環境を準備していることにも起因します。

このプロジェクトでは、Electronで実装されたデスクトップアプリを作成し、クラウドではなくエンドユーザーの環境でシミュレーターを起動することで、高速なテストシナリオ作成の実現を目指しました。また、これが実現すればVM環境の維持に必要な費用を削減できる可能性もあります。

従来の環境では、次の図のように、クラウド上で動作しているiOSシミュレーター上のモバイルアプリケーションを、ウェブアプリケーションを介して操作します。

デスクトップ方式では、次の図のように、シミュレーターをユーザー環境で直接起動するため、セキュリティー上の懸念なくシミュレータープロセスを再利用できます。そのため、2度目以降のシナリオ作成環境起動が爆速になります。

結果として、一部の機能をPoCとして実装し、この方式によりプロダクトを改善できることを実証できました。

Yet Another iOS Test Driver

Autify for Mobileは、Appium というサードパーティーツールを使ってiOSのネイティブモバイルアプリのテストを実行しています。テスト対象要素(ボタンやフォームなど)を特定するために、ページソースと呼ばれるUI構造の記述されたXMLファイルをAppiumから取得しますが、複雑なモバイルアプリでは、この取得時間が極端に遅くなることがあります。これが原因で、Autify for Mobileにおけるテストシナリオ作成のユーザー体験が悪くなるという問題があります。

ページソースの取得は、Appiumの内部で使われているAppium WebDriverAgent というソフトウェア(実態は、リモート操作可能なXCTestプロセス)で行われます。このプロジェクトでは、WebDriverAgentに変わるテストドライバーを開発することで、遅いページソースの問題を改善できるのではないかと考え、まずは、WebDriverAgentの内部でどの部分に時間がかかっているのかのボトルネックを調査することにしました。チームは、プロジェクトを次のステップで進めました:

  1. はじめにWebDriverAgentを使って実験と計測ができるように開発環境を構築し、
  2. そして、ソースコードにログを仕込んだりしつつ、ボトルネックの調査を行いました

結果としてわかったのは、要素特定に不可欠の属性値取得にほとんどの時間を費している、つまり、無駄な処理に時間が費されているわけではないため、素直に高速化するのは難しいということでした。(取得する属性の数を最小限にすることで、いくらかのパフォーマンス向上ができることはわかりましたが、インパクトはそれほど大きくなさそうです)

一方で、このプロジェクトが、思わぬところでプロダクトの改善に繋がるという偶然もありました。Autify for Mobileでのシミュレーター環境起動の際に、複数のシミュレータープロセスを同時にスタンバイ状態にしておくことで、どのiOSバージョンでも高速にシナリオ作成環境を準備できるのが理想でしたが、Appiumの制約により、同時起動が困難でした(シミュレーター起動が直列に行われてしまうため、現実的ではなかった)。

しかし、プロジェクト開始時に行ったWebDriverAgentの開発環境構築の過程で、この制約を回避する方法を発見し、これにより複数OSサポートで深刻な問題になっていた起動時間の問題が解決できる目処が立ちました。プロダクトへのインパクトの大きい発見として、このチームでは、当初の射程からゴールを変更し、起動時間短縮をメインの成果として発表しました。

まとめ

Autifyでは、Autifyathonというエンジニア主体の社内Hackathonを開催し、13ものチームが、4日間、PoCの実装やバグバッシュといったコラボレーションイベントに取り組みました。そこで得られた成果の多くは、プロダクトバックログという形になり、実際のプロダクトへの反映に向けて、開発チームが取り組んでいます。

Autifyでは、プロダクトの改善に取り組んでくれる仲間を募集しています。Autifyで働くことに興味のある方は、採用ページをご覧ください。