Seleniumとは?

2021年1月21日

Seleniumはオープンソース

 Selenium(セレニウム)はWebアプリケーションのブラウザ操作を自動化するソフトです。クリック、キーボード入力、画面情報の取得など、画面操作を自動で行うことができます。
Webアプリの自動テストツールとして長年の実績があり、人間が行う操作をシミュレートできるので、RPAとしても十分に利用可能です。

Selenium動作イメージ
動作イメージ

Seleniumを勧める理由

Seleniumは本来RPAソフトではありません。システム開発において、Webサイトのテストを自動化するツールです。主にIT技術者が使ってきました。

もともとWebテスト用のツールなので、Selenium自体はブラウザの操作しかできません。しかしながらRPAソフトのように単独で動くのではなく、シナリオの作成にプログラム言語を用います。ですからプログラム言語側で他のアプリケーションを動かすことが可能です。
例えばベース言語にPythonを使うのであれば

import xlwings

と書くことで、あとはExcel VBAのような感じで、シート操作やセルの入出力ができます。

 Seleniumは何年にも渡り開発現場で使われてきましたので、使い方やQ&Aサイトなど、情報の充実度はRPAソフトの比ではありません。日本フォーラムもありますし、多くの情報が日本語で手に入ります。

Seleniumのメリット

小さく始められる

RPAは全体最適ではなく、部分最適に過ぎません。
安く、小さく始めるのがコツです。

 Seleniumはオープンソースなので無料で使用できます。Seleniumでシナリオを作成するためのプログラム言語もJava、Python、Ruby、JavaScriptは無料です(C#のみ一定規模以上の法人が使用する場合は有償になります)

 商用RPAソフトですと、最低でも100万円ですから、しかるべき部署への稟議が必要となります。(中小企業ですと社長の決済が必要かもしれません)

  • 「RPAとは?」の説明
  • 得られるメリット
  • 予算の確保
  • 要員の確保 など

企画書を作り、ひとつひとつ説明してハードルをクリアしていかなければなりません。まして失敗しようものなら...

 一方、Seleniumは無料ですから、現場レベルの判断で導入可能です。仮に失敗しても大事にはなりません。

  • あなたが担当者なら、目標面談などで今期の目標に掲げれば、少しは作業時間の確保も可能でしょう。
  • あなたが現場の上司なら、コツコツ作業ができる若手に調査を命じてみましょう。

そして企画書ではなく、まずは動くものを作ります。
 実際にRPAとはどういうものか、そしてRPAの威力を見せることができれば、上役の理解も得られやすいですし、口頭や書面で説明するのと、どちらが説得力があるでしょうか?
 理解が得られれば大々的に作業時間を確保できます。小さく始めて大きく育てることが可能です。

使っても無料、使わなくても無料

 RPAのメリットの1つは人間と違い、どれだけ働かせてもコストが一定で変わらないということです。しかしながら、有償のRPAですとライセンス費用が発生しますので、休ませている間もコスト(減価償却)が発生します。よって、いかに稼働率を上げるかが重要になります。ROI(Return On Investment:投資利益率)を上げるために有効活用しなければならないという点では人を雇うのと変わりありません。
 それに対し、Seleniumは無償ですので、使用している間はもちろん、休ませている時もコストが発生しません。必要な時だけ使用して、あとは休ませておいても、費用対効果は変わりません。
有償ソフトでは一定規模以上の利用が見込めないと、コストを回収できませんが、Seleniumは費用対効果を考えずにRPAを導入することができます。

Seleniumは情報が多い

SeleniumはRPA以前から長年に渡り世界中で使用されてきました。

  • インストール手順
  • 機能と制約(できること、できないこと)
  • 操作方法の解説
  • エラー時の対処

など、多くのノウハウが蓄積され、ネットで公開されています。
国内での使用も多く、多くの情報を日本語で入手できます。

ブラウザ入力に特化

 Seleniumはブラウザ以外のWindowsアプリケーションを操作することはできません。
なぜなら、ブラウザの画面項目(コントロール)はHTMLソースの内容を分析して取得するのに対し、WindowsアプリのコントロールはOSが提供する識別ID(ウィンドウハンドル)で取得するからです。
WebアプリとWindowsアプリでは項目を取得するためのメカニズムが異なります。
 Seleniumはブラウザ操作に特化している分、使用する命令の種類が限られ、覚える内容も少なくて済みます。

ライブラリを利用できる

 一方、Excelとの連携などSeleniumにできない部分は、シナリオを作成するプログラム言語の機能で実現することになります。特定のRPAソフトに依存する独自のライブラリではなく、プログラム言語が持つ豊富なライブラリ群を利用することができます。

外部スクリプトが不要

 RPAソフトの場合、ソフトで対処できない処理は、スクリプトを組んで対応することになります。結局プログラムを書くことになりますし、スクリプト言語を学ぶ必要があります。
 Seleniumはシナリオのプログラム内に処理を埋め込みますので、外部スクリプトが不要です。そしてシナリオ作成のベースとなるプログラム言語を学んでおけば、新たにスクリプト言語を学ぶ必要がありません。

マルチOS、マルチブラウザ

 RPAとして使う場合は少ないかもしれませんが、MacやLinuxでも動きます。Linuxはフリーですから、仮想化技術を活用して、1台のマシンに何台ものLinux(最近はコンテナですね)を入れてSeleniumを動かすことも可能です。

 ブラウザもWindowsの主要なブラウザ(IE、Edge、Chrome、Firefox)に対応していますし、MacであればSafariにも対応しています。
基本的に同じシナリオコードで動きますし、業務上の理由でIEしか使えない環境でも使用できます。

Selenumブラウザ対応状況
https://www.selenium.dev/documentation/ja/webdriver/driver_requirements/より抜粋
ブラウザー サポートOS ドライバ提供元
Google Chrome Windows/macOS/Linux Google
Firefox Windows/macOS/Linux Mozilla
Edge Windows 10 Microsoft
Internet Explorer Windows Selenium Project
Safari macOS El Capitan and newer Apple
Opera Windows/macOS/Linux Opera

IE以外は、ブラウザの製造元がドライバを提供しています。Seleniumが製造元も認めるメジャーなソフトであることが理解していただけると思います。

ヘッドレスモード

SeleniumはChrome・Firefox・Edge(※)で、画面を非表示にして動作する機能(ヘッドレスモード)を利用することができ、画面を表示した場合に比べ、高速で安定した操作をすることができます。
※Microsoft EdgeはChomium版のみ、Legacy版はヘッドレスモードなし

シナリオ生産性が高い

 画面でシナリオを作成するソフトには決してマネできない、プログラムコードのコピー&ペーストができます。

  1. ネットで情報を検索
  2. サイトからコピー
  3. 必要箇所を書き換え

プログラミングよりも、必要な情報を集めてきて、組み合わせることが重要になってきます。

なぜSeleniumは生産性が高いか?

外注が可能

 RPAは社内にノウハウを蓄積するためにも、内製化をお勧めしますが、仮に外注する場合、無料で実行環境を構築できるので、外注先に環境を用意することができます。商用RPAソフトですと、有償なので外注先にもライセンスを供与するというのは、コスト面で難しいと思います。
 またSeleniuはIT技術者の中では比較的使われていますので、(与信面をクリアできれば)クラウドソーシングで依頼することも可能です。

将来なくならない

 現在、多くのRPAソフトが販売されていますが、数年後にどれだけ残るでしょうか?
これから競争にさらされ淘汰されていくRPAソフトに対し、Seleniumはすでに競争に勝ち残ったソフトです。オープンソースですので販売停止の心配もありません。現在も有志による改良が続けられています。
覚えたことが無駄になるリスクは極めて小さいでしょう。

Pythonを使うメリット

Selenium+Pythonが最強コンビ

 Seleniumのシナリオ作成には、主要なところでJava、C#、Python、Ruby、JavaScript(Node.js)とあります。C#以外はオープンソースなので無料ですが、もしこれから始めるのなら断然Python(パイソン)をお勧めします。
プログラム初心者にとって取り掛かりやすく、シナリオ作成の生産性も高いからです。

手続き型のスクリプト言語である

 Pythonはクラスの知識(オブジェクト指向の考え方)がなくてもシナリオを作成できます。JavaやC#はプログラム自体がクラスの集合体であり、クラスの知識が必須です。

 ところがRPAの場合は、操作を順番に実行していきます。マシンに命令を順番に処理させる(手続き型)ため、シナリオ作成においてクラスの知識は必要ありません。
Pythonであれば、クラスの知識がなくともシナリオを作ることができ、初心者には入りやすいと言えます。
(もちろんPythonでもクラスを用いることはできますし、必要に応じてクラスを使用することで、より良いプログラムを作成できます)

記述の自由度が高く、コードが見やすい

 Pythonでは変数の宣言、型指定が不要です。
JavaやC#では変数に値を持たせるためには、まず変数を宣言し、型指定(整数か?小数か?文字か?)を行う必要があります(JavaScriptは変数宣言のみ必要で型指定は不要、RubyはPythonと同じく両方不要)
 この場合、『どこでどんな変数を使うか』をあらかじめ考えておく必要があります。
プログラミングに慣れていれば、大した作業ではないのですが、慣れていないと『どの変数にどんな値が入るか』を考えるのは骨が折れます。

 Pythonでは、あらかじめ宣言しなくても必要になった場面で変数を使うことができます。
画面に出力された値を変数に確保するような場合、前もって宣言しなくとも、その場で変数に代入することができます。

 もっとも、変数の宣言が不要ということは、プログラムの途中で突然見ず知らずの変数が放り込まれたりしますし、型指定が不要ということは、思わぬ値が入る(数値だと思っていたら文字が入っていた)ことになります。
 RPAのシナリオは比較的小規模で、制御構造もシンプルなので、それほど問題にならないかもしれませんが、大規模開発で多人数が関係する場合は副作用が大きくなると思います。

 また、Pythonの大きな特徴として、制御ブロックをインデント(字下げ)で表します。
記述が見やすく、プログラム規則が少々ゆるい(自由度が高い)ので、初心者にとって理解しやすい言語です。プログラム言語を学ぶ最初の候補として、多くのサイトで上げられています。

 Rubyも初心者にとってオススメの言語として上げられることが多いです。変数の宣言、型指定が不要ですし、コードを直感的に書けるので、他のプログラム言語よりもプログラムコードが短くなると言われています。
 Rubyでは、すべてのデータはオブジェクトとして扱われるので、各クラス属性が持つ便利な機能(メソッド)を使用できます。その分だけ覚えることが増えますが、使いこなせれば生産性が上がります。
 ネット上の情報や書籍はPythonの方が多いです。ただRubyの開発者は日本人(まつもとゆきひろ氏)ですので、本人が監修した解説書があり、少々分厚いですが、きちんと読みこなせれば初心者でも理解できる内容になっています。

参考として、プログラム言語による書き方の違いを記載します。

サイト情報が充実

 Seleniumと同じくPythonもサイト情報が豊富にあります。とりわけ初心者向けの情報が多いのが特徴です。個人がブログを持てるようになってから普及した言語なので、多くの人がブログに習得過程を残しています。

ライブラリが豊富

 Seleniumの箇所でも述べましたが、Pythonには、本当に多くのライブラリ(共通機能を提供する汎用プログラム)があります。そして多くの協力者により日々発展しています。

結局のところ

 私自身はJavaやC#の方が厳密に記述でき、しかもC#は.NET(Microsoftが提供するWindows用のライブラリ群)が使えるので好みです。
 しかしSeleniumに関しては、Pythonの方が作りやすく、情報も多く、コードもはるかに見やすいのでPythonを使用しています。

Seleniumのデメリット

 これまでメリットを取り上げてきました。無料でこれだ充実しているというのは、Seleniumが年月を経て多くの有志によって発展、維持されてきたからです。しかしながら限界、デメリットもあります。

ブラウザ操作しかできない

 最大の弱点と言っていいでしょう。ExcelについてはPythonライブラリが使用できますので大丈夫ですが、WindowsアプリケーションはSeleniumでは対処できません。

ブラウザ以外の操作は、VBAや他のRPAソフト(無料ならSikuliXなど)を使用してSeleniumと組み合わせるか、Seleniumの導入自体をあきらめた方が良い場合もあります。

サポートがない

 オープンソースなのでサポートがありません。参考サイトが多いので、自力でシナリオを作成できますが、自分で学習してプログラムを組む覚悟が必要です。労力と時間はかかりますが、得られたノウハウは、あなたのキャリアになります。

現在でも、給与計算ソフトや会計ソフトの知識は履歴書に書けますので、将来はRPAソフトの経験も履歴書に記載できるようになるでしょう。

もう10年もすれば学校でプログラムを勉強した社員が入ってきます。その時、あなたはどうしますか?

2021年1月21日

Posted by sj