こんにちは、プロダクトチームの野村です。
今回はWebアプリケーションのブラウザ操作を自動化するSelenium というフレームワークを紹介したいと思います。弊社内でも業務効率化を行うために一部の処理をSeleniumu で行うようにしました。
Selenium とは
Selenium とは、Webアプリケーションのブラウザ操作を自動化するためのテストフレームワークです。2004年にUIテストを自動化することを目的に開発され、実際にブラウザ上での挙動が仕様通り(UIテストシナリオ通り)になっているかをテストするツールとしても利用されています。
Selenium の特徴
柔軟性の高いブラウザ操作
Selenium によるブラウザ操作には、UI要素を検索、特定、期待値と実際のアプリケーションの動作結果を比較し、期待値と違った場合はそれ以下の作業を停止するなど、さまざまなメソッドやオプションが用意されています。
さまざまな言語に対応
Selenium は、Java やJavaScript 、Python といったさまざまな言語に対応しています。自分がすでに学習済みの言語や、理解しやすい言語で、Selenium を用いたブラウザ操作の自動化を行うことができます。
非エンジニアでも簡単に使える
個人で日常的に行っている作業(ブラウザ上)を自動化したい、でもプログラミングは怖い、という方でも、Selenium とWebDriver をインストールし、Selenium の基本的な使い方を理解すれば、低い学習コストで使えるようになります。
コンビニ決済のフローにSelenium を使い始めた話
そんなSelenium を使って、コンビニ決済の自動化を行いました。
弊社ではコンビニ決済のために SmartPit というコンビニ収納代行サービスを利用しています。
これまでの運用方法は以下のような手動の運用でした。
- ユーザーが「コンビニ決済」を選択し、購入手続きステップを完了したら担当者にメールでコンビニ決済で購入申込みがあったことを通知
- 通知を確認した担当者がブラウザ上でSmartPitの請求登録ページにアクセスし、手作業で必要な情報を入力、スマートピット番号(コンビニで決済を行うための番号)を発行
- スマートピット番号の発行通知メールが担当者に届くので、必要な内容をコピーして該当ユーザーのメールアドレスに送信
手動運用ですので、営業時間にしか対応ができず、またコンビニ決済の購入申込み通知を確認するまでの時間にばらつきがありました。そしてなにより、購入者であるユーザーに対してコンビニ決済に必要な情報の通知がすぐに行われないのはUXとして良くありません。
SmartPit によるコンビニ決済の運用・管理をかんたんに自動化する方法はなさそうだったので、ブラウザ上のGUIの操作をSelenium を使って自動化することにしました。
スマートピット番号の発行にSelenium を使う
今回、Selenium を用いた弊社のコンビニ決済のレシート発行、入金確認処理の自動化のゴールは、コンビニ決済の入金確認以外のステップをすべて自動化することでした。
まずは「スマートピット番号の発行作業の自動化」にSelenium を使ってみることにしました。
上の図はSelenium の稼働部分のフローを簡易的に表したものです。
「コンビニ決済での購入申込み」をトリガーとしてSelenium によるブラウザ操作が実行され、SmartPit 側に「スマートピット番号」の発行を依頼する処理を自動化しています。
「スマートピット番号」の発行申請のステップでは、購入商品の情報の他に、弊社サーバ側で発行したスマートピット番号がどの購入申込みレコードに該当するかを照合するための情報も持たせています。Selenium の実行ファイルには予め情報引き渡しのための変数を設定し、実行時に弊社サーバから必要な情報を渡すようにしています。
ちなみに、Seleniumは、AWS Lambda 上で稼働させています。
意図せず実行途中でエラーが発生したり、予期せぬ形で適切に情報をSelenium に渡せなかった場合に、エラーを通知したり、フローを強制終了させる仕組みも実装しました。
自動化してから今日まで
すでにSelenium をフローに組み込んでから数ヶ月が経っていますが、現状、Selenium の働きにかなり満足しています。
担当者の手動作業が発生するのは、コンビニ決済(支払い)がユーザーによって行われ、「入金確認待ち」ステータスの内容を確認するときだけになりました(ここは目視確認をした方がいいと判断してあえて自動化しないままにしています)。
今回のコンビニ決済の手動作業の自動化を通じて、社内の他の業務に関しても、Selenium などを駆使して自動化できるんじゃないかと思えるようになりました。
そのような視点で違う部署の業務内容を見てみると、改善できることがたくさんあるような気がしています。自動化による業務フローの改善を実際に体験することができ、新しい視点を持てるようになったことは、私にとって大きな成果です。
APIが充実しているサービスを利用するというのもいいですが、与えられた状況でどうやってゴールを達成するかを考えるのも、後から思えばとてもいい学びだったと思っています。
最後に
今回はSeleniumを使った話にフォーカスしましたが、「コンビニ決済の入金確認以外のステップをすべて自動化すること」のゴールを達成するために、Selenium 以外に、AWS Lambda 、Zapier(タスク自動化ツール)、Mandrill(MailChimp ユーザー向けのトランザクション メール API )など他のツールやアプリケーションも使いました。
こういったツールを使えば、エンジニアでなくても、少しの学習コストで大幅に業務を効率化できたり、自分の仕事にさらなる付加価値を加えられるようになると思います。ぜひ一度、「どれどれ、非エンジニアの我にどこまで価値を感じさせてくれるんかいな」といった目線でこういったツールをいじってみてください。
(野村)