chrome extensionを使って業務効率化

狩野 テックブログ KV

こんにちは! エンジニアインターンの狩野悟です。Chrome Extensionを用いて業務効率化を行った経験を今回は紹介したいと思います。

  1. 業務上の課題
  2. Chrome Extensionを利用した解決策
    1. Chrome Extensionについて
  3. レポートのダウンロード方法
    1. サイトへの自動ログインができない場合
    2. サイトへの自動ログインができる場合
  4. まとめ

業務上の課題

社内での業務上の課題として、毎日ダウンロードしなければならないレポート類が多く、そのダウンロードに工数がかかってしまうというものがありました。

Chrome Extensionを利用した解決策

この課題を解決する手段としてChrome Extensionを用いました。これらの課題をChrome Extensionを用いて解決するメリットとして大まかに下記二つが挙げられます。

  • サーバーを立てる必要がない
  • 対象サイトのログイン情報をサービス側で管理する必要がない


1つ目に関しては、Chrome Extensionを用いることでレポートダウンロードなどを行うためのサーバーを用意する必要がなくなりサーバーを用意する負担の削減、サーバー運用コストの削減という二つの面でメリットがあります。

2つ目に関しては、複数サイトからのレポート自動ダウンロードを実行するためには、それぞれのサイトのid, passwordを管理する必要がありますが、Chrome Extensionを用いることで、それらの管理をローカルマシーン内で完結させることができます。

Chrome Extensionについて

Chrome Extensionとは、Chrome上で使うことのできる拡張機能です。これを用いることで、Chrome上でJavascriptの実行を行いwebサイトの情報の制御やchrome Extensionの各種APIを利用が可能になります。

Chrome Extensionでは、popup, content_scripts, service_workerという3つのJavascriptを実行させる方法があります。

popupとはユーザーからの入力を受け取ることなどができるユーザーインターフェイスです。今回の場合は、レポートの対象期間などの入力をここから受け取って処理を行なっています。

content_scriptsとはブラウザ上でJavascriptを実行できる環境で、開いているページの制御などを行うことができます。

service_workerとはブラウザ上とは別にバックグラウンドでスクリプトを実行する環境です。ただし、service_workerではDom操作を行うことやXHRを使うことができないなどの制約があります。

これら3つの環境は相互に通信することが可能で、popupで受け取った情報をcontent_scriptsに送信しそこで処理を行うなどといったことができます。

chrome extension 図


ここではChrome Extensionについてこれ以上の説明は省略するので、詳しく知りたい方はこちらを参照してください。

レポートのダウンロード方法

今回の課題において、レポートのダウンロードのためにはサイトへのログインが必要であり、reCAPTCHAなどが使われているサイトへのスクリプトを用いたログインは困難なので、スクリプトを用いたログインができる場合とできない場合でレポートダウンロードの実装方法を二つに分けました。

サイトへの自動ログインができない場合

自動ログインができない場合は、ログインをChrome Extensionの利用者に任せて、その後スクリプトを実行することでレポートのダウンロードをするという方法を採用しました。ログイン後に受け取ったCookieをcontent_scriptsでそのまま利用することができるので、サイトへのリクエストを自由に行うことができます。

この場合の実装の概要は以下のようになります。

  1. popupでレポートの対象期間などの情報を受け取る
  2. 受け取った情報をcontent_scriptsへと送信する
  3. content_scriptsからレポートダウンロードのためのリクエストを送信してレポートをダウンロード


上記の実装では、一つのサイトで複数のレポートダウンロードのための操作が必要な場合、その工数を削減することができます。

サイトへの自動ログインができる場合

自動ログインができる場合は、それぞれのサイトのid, passwordをlocal_storageで保存し、その情報を利用してサイトへのログイン、レポートのダウンロードを一括して行うことができます。しかし、この解決策には下記二つの問題点がありました。

  • ログインのリクエストやダウンロードのリクエストがcors policyに引っかかる
  • Chrome Extensionではsecureなlocal_storageの提供が行われていない


1つ目の問題点は、サイトへのリクエストをservice_workerを用いて行うことで解決しました。Chrome Extensionでは、manifest.json内のhost_permissionにリクエスト先のホスト名を入れることで、service_workerでクロスオリジン間の通信が可能になります。

2つ目の問題点は、Extension側でid, passwordの暗号化を行うことで解決しました。id, passwordの暗号化後に、Chrome ExtensionのstorageAPIを用いてid, passwordのブラウザへの保存を行うことでid, passwordの保護を行いました。ただし、今回のケースでは、Chrome Webストアへの公開方法が限定公開だったためこの方法を用いることができましたが、Chrome Webストアへの公開を行い、不特定多数の人がExtensionを使う場合、ソースコードから暗号化のロジックを知ることができるため、安全なid, passwordの管理方法ではなくなってしまうことに注意してください。

この場合の実装の概要は以下のようになります。

  1. popupでレポートの対象期間などの情報を受け取る
  2. 受け取った情報をservice_workerへと送信する
  3. service_workerからそれぞれのサイトへログインとレポートダウンロードのリクエストを送る
  4. 受け取ったレポートのデータをcontent_scriptsへと送信する
  5. content_scripts上で受け取ったレポートのデータをダウンロード


service_workerで受け取ったレポートのデータをcontent_scriptsへと送信して、content_scriptsでデータのダウンロードをすることでブラウザでデータをダウンロードする挙動を再現することができます。

まとめ

今回は、Chrome Extensionを用いて業務効率化を行った経験について紹介しました。この記事が業務効率化ツール作成のアイデアの一助になれば幸いです。

※2023年6月9日時点

Techブログ 新着記事一覧