会社支給のWindows PC と Pythonで定型レポート作成・配信業務を自動化する方法と必要なパッケージ(非IT部門向け)

本記事では、会社支給のWindows PCとPythonを使用して、マニュアル作業を自動化する方法について、筆者が実際に日々行っている方法をご紹介します。

最近では、RPA(Robotic Process Automation) などとも呼ばれ、単純事務作業の自動化を進める動きが活発なようです。RPAソフトの導入は高価なため、Pythonなどオープンソースで無料で使えるツールを用いて業務を自動化するために、Pythonの学習を始められる方も多いようです。

業務マニュアルにそってブラウザをつかってデータをダウンロードし、Excelで編集してメールに張り付けをして、決まった宛先に送信というような作業は、Pythonを使って自動化することができます。常時起動しておけるPCが1台あればスケジュールを設定して、決まった時刻に自動配信なんていうことも可能です。

しかしながら、筆者が同僚に業務の自動化をすることをおすすめしても、膨大なパッケージなどの中からどれを使用すればよいかわからないと、なかなか自動化が実現しないケースが多いです。本記事ではプログラム言語を動かすことができるけれど、どんなパッケージを使って自動化をしてよいかわからないという方を想定して、筆者の場合はこうやっているという方法をご案内します。

想定するマニュアル作業

下記のようなマニュアル作業をWindows環境下で自動実行することを想定しています。

  • 毎日更新される社内システムのデータを複数のシステムからダウンロードして、定型のExcelに張り付け、メールで決まった宛先に配信している。
    • システムから出力されるデータが、実際の管理単位の単位と合わないために、手元のExcelのマスタを用いて、VLOOKUPとピボットテーブルを用いて、マニュアル作業でグルーピングしなおしている。
    • Excelで行う処理は一部マクロで自動になっているが、社内のシステムにアクセスして、データをダウンロードしなければならないのでマニュアル作業が必要になってしまっている。

Pythonによる自動化の方法

Jupyter Notebook 形式(*.ipynb) で作成したスクリプトをpapermill を使用して、処理を実行しています。papermilは、Netflix社が提供しているパッケージでNotebook形式のスクリプトをバッチとして実行することができるパッケージです。こちらの記事では、NetflixでのNotebookを使用したバッチ処理について詳しく書かれています。papermilと、それに渡すNotebookをWindowsのタスクスケジューラに渡すことで、定期的に自動実行することもできます。

ブラウザ作業はSeleniumをつかって、自動化することができます。ブラウザでクリックをしたり、IDやパスワードを入力してログインしたり、データをダウンロードするなど、ブラウザ上行うことができる定型作業は基本的にすべて自動化することができます。ブラウザの操作だけでなく、ブラウザ画面に表示されている内容を、データとして取り込む、いわゆるウェブスクレイピングも行うことができます。ダウンロードしたファイルの名前の変更や移動にはshutilを用います。

より環境が整った企業であれば、システムのデータを取得するために、APIが用意されているかもしれません。requestsを使ってAPIへGETやPOSTリクエストを投げることができます。たとえば、json形式で結果を返すAPIであれば、json というパッケージをつかって、データをPythonへ取り込むことができます。

取得したデータを、pandasを使って処理をします。pandasは、DataFrame という、Excel のシートのような単位で取り扱うことができるパッケージです。CSVやEXCEL形式などのデータを取り込むことができます。圧縮されたファイルなどもそのまま取り込むことができて便利です。pandas を使えば、Excel のように、複数のテーブルを組み合わせて、VLOOKUP やピボットテーブルといった処理を行ったり、グラフを作成することができます。しかもすぐ固まるExcelと比べて、かなり大量のデータであってもスムーズに作業することができます。(Excel で扱えない、数百万行みたいなデータでも十分に処理が可能です。)

pandasで処理したデータは、必要に応じてExcelに張り付けて処理をします。その場合は、Excel操作を自動化するためにxlwingsを使います。データの貼り付けだけではなく、マクロの実行などもxlwingsから行うことができるので、既存の業務で使われているExcelを活用することもできます。ExcelのGUIを操作するパッケージなので、Excelをマニュアルで操作したときと、同じ動作が期待できます。

加工したデータをレポートするためのメールを作成します。メールの作成・送付には、smtplib を使います。HTML形式のメールを作成して、pandasで作成したデータをグラフや表として張り付けたり、添付ファイルとして送ることができます。Outlookなどのメーラーに登録されているメールサーバーあてに、データを送れば自分で作成したメールと同じように送信することができます。

使用するパッケージ

上記のようなレポーティング作業の自動化するためには、下記のパッケージを使用しました。いずれも無料で使うことができるものです。これらや他にもたくさん公開されているパッケージを使用して、業務の自動化を行うことができます。

実行環境

  • Jupyter Notebook - ユーザーフレンドリーなNotebook形式で、Pythonの実行環境を提供してくれます。黒い画面でなく、ブラウザベースでPythonが使えるので非エンジニアがPythonを使い始めるハードルを大きく下げてくれます

  • papermill - Netfiixが提供している、Jupyter Notebook形式のPythonファイルをkkそのまま起動するためのパッケージ。パラメータを設定できたり、実行ごとにログをNotebook形式で出力してくれるので、非エンジニアでもエラーログが解析できる。

スクレイピング・ブラウザ自動化

  • Selenium - ブラウザ(ChromeやFirefox, InternetExploer )を自動で操作することができます。つまり、社内のシステムにアクセスして、データを取得するなど、自分でブラウザでマウスとキーボードを使ってできることはなんでも自動化できます。

データ処理

  • pandas - Python上でデータをExcelのように扱うことができるパッケージです。ピボットテーブルやVLOOKUPやフィルタのようなことが、大規模なデータに対しても、高速に行うことができます。zip形式で圧縮したCSVなども、そのままインポートすることができるので便利です。

  • json - json形式をpythonへ取り込んだり、逆にpython上のデータをjson形式で出力するためのパッケージです。

  • xlwings - PythonからExcelを操作するパッケージ。Excelのある部分にPandasのデータを張り付けたり、仕込んでおいたマクロを実行させるような使い方が多いです。

ファイル操作関連

  • glob - 標準のパッケージですが頻繁に使います。あるフォルダに含まれる、複数のExcelファイルを一気に全部開いて結合するなどという用途でよく使います。

  • shutil - ファイルのコピーや移動などを行うことができる標準パッケージです。

メール送信

  • smtplib - メールの送信を行うことができる、標準パッケージです。

おわりに

ご紹介したような方法で、日々の業務の自動化や効率化を進めています。バッチ処理用にWindowsPCを一台設置して、10本以上のバッチ処理を定期実行して、レポートの配信やシステム動作の監視を行っています。今回ご紹介した方法はあくまで一例なので他にもよい方法がたくさんあるかと思います。ぜひ、皆さんの使いやすい方法で自動化を進めてみてください。

Written on February 11, 2019