リファクタリングをPythonで実践!基本手法とコード例・注意点まで
Pythonといえば、AIやWebといったさまざまな分野で使われるプログラミング言語ですが、実は「自動化」の分野でも活躍しています。
本稿では、Pythonを使った作業の自動化について紹介します。
1. 作業の自動化とは?
普段の業務において、定期的に実施している作業はありますか?
Excelのファイルを作成したり、社内システムにアクセスして情報を入力したり、様々なことを実施していることでしょう。
これらの「パソコン等を使った作業をプログラムで自動化すること」が今回紹介する「作業の自動化」です。
①自動化のメリット
自動化する対象の作業の多くは「定常作業」と呼ばれるような作業で、月次や週次、日次で同じような処理をし続けるような作業を指します。
たとえば、週ごとに売上や実績を集計するような作業を想定しましょう。
このとき、自動化のメリットは、大きくふたつあります。
・時間短縮
・正確な作業
このふたつの観点で解説します。
時間短縮
たとえば、一度の作業量が2時間であったとしても、1ヶ月では8時間、1年に換算すると60時間になります。
もし、この作業が自動化されるとしたら、その分早く帰ることや違う仕事に取りかかることが可能になるのです。
とはいえ、年間に60時間と言われるとあまりピンとこないでしょう。
もしこれが、100人の従業員が実施するような作業であればどうなるでしょうか?
累計すると1,000時間、10,000時間といった多大な時間短縮につながる可能性もあります。
正確性
全ての人間が常に正確な判断をできるとは限りませんし、誰もが間違いをする可能性があります。
特に、単純な作業であるほど「ケアレスミス」が発生する可能性が高くなることでしょう。
このような作業を自動化した場合、コンピュータが操作を行うため、手作業と比較しても高い正確性で処理が実行されます。
作業内容は共通化されるので、作業者によって作業漏れや作業間違いといったミスの発生を減らすことが可能となるのです。
2. なぜPythonが使われる?
実は、自動化するために使用するプログラミング言語がPythonである必要はありません。
ですが、実際にはPythonが多く使用されています。
この理由には、以下の要因があると言われています。
・インストールが容易
・クロスプラットフォーム対応
・無料で使える
・プログラミングが簡単
・ライブラリが豊富(特にExcelの操作)
・AIとの組み合わせも可能
そのほかにもさまざまなメリットを持ちますが、やはり対応ライブラリが多いことから、「できることが多い」と言う点が非常に大きいでしょう。
多くの「できること」を持つPythonならではの自動化を以降で紹介していきます。
3. 自動化できること・よく使うライブラリ
それでは、自動化できる内容と使用するライブラリをシーンに応じて紹介します。
①Excel・Word・PowerPointなどの操作
まずは、ExcelをはじめとするOfficeファイルの操作が挙げられます。
Pythonは算術系に非常に強い機能を有しているため、とくにExcelとの相性が良いとされています。
たとえば、Excelに記載された内容を集計してWordやPowerPointへレポートとして出力する、といった使
い方が想定できるでしょう。
Excel操作の自動化については、以下の記事も参考にしてみてください。
・openpyxl
openpyxlは、Python上でExcelを取り扱うためのライブラリです。
Excelのファイルを取り込んでデータの中身を読み込んだり、データの書き換えを実施します。
・pandas
pandasはPythonでデータ解析を行うために使用するライブラリです。
Excelに保存されているようなデータ構造を読み込んだ上で、集計や加工するために使用します。
そのほか、グラフの表示や出力にも対応しているため、最終的なレポート出力も可能です。
②ファイルの操作
コンピュータ内のファイルを操作するライブラリも、Pythonには標準で搭載されています。
・os
osは、OS(オペレーティングシステム)に関する処理が内包されているライブラリです。主にファイルの入出力に使用します。
たとえば、特定フォルダの中身を確認し、すべてのファイルに対して何かしらの処理をする。といった使い方ができます。
・shutil
shutilはファイル操作に特化したライブラリです。
osライブラリの方が機能面では多機能ですが、ファイルの中身まで考慮して操作するのであればshutilを使うようにしましょう。
③ブラウザの操作
Pythonにはブラウザを操作するライブラリがそろっています。
Webブラウザを自動で操作することで、人が実施する入力作業などを省力化できるのです。
単純なコードを記述するだけで人の操作を代替できるため、Webアプリを利用する業務の自動化によく利用されています。
・Selenium
Seleniumは、Webブラウザの操作を自動化するライブラリです。
実際に起動しているGoogle ChromeなどのWebブラウザのリンクをクリックし、表示しているページをスクリーンショットとして取得して保存できます。
・requests
requestsは、Webサーバーへリクエストを送信してデータを取得するために使用するライブラリです。
Webサーバーからのレスポンスを受け取って解析したり、ファイルに出力したりできます。
厳密にはブラウザ自体を操作しているわけではありませんが、ライブラリ自体がブラウザと同等の機能を有していると考えましょう。
④スクレイピング
スクレイピングとは、Webサイトの情報を取得して一覧化したり、複数サイトから情報を一度に取得したりするための手法を指します。
スクレイピングは、Pythonによる自動化の中でも代表的な使用例と言えます。
・Selenium
Seleniumは、前述の通りWebブラウザを操作するためのライブラリです。
ブラウザを操作してその内容を取得できるため、スクレイピングにも活用できます。
・Beautiful Soup
Beautiful Soupは、HTMLの解析を行うツールです。
URLへアクセスして取得したHTMLの構造を解析し、情報をリスト化する場合などに利用できます。
Beautiful SoupはHTMLの解析のみを提供するため、ネット上の情報を取得する場合にはrequestsなどと組み合わせて使用します。
・Scrapy
Scrapyは、前述のふたつのライブラリと異なりスクレイピングに特化したライブラリです。
より単純なコードでWebサイトのスクレイピングを実現できます。
⑤画像処理
すこし専門的な使い方となりますが、大量の画像を一定のルールで加工する場合などもPythonを使うことで容易に自動化できます。
・Pillow(PIL)
Pillow/PILは、Python上で動作する画像処理ライブラリ。
画像のトリミングやリサイズ、ぼかしといった画像の加工が可能です。
PILとPillowは機能面で大きな違いはありませんが、PILはすでに開発が停止されておりPython3には対応していません。
PILを代替する目的で開発されたのがPillowであるため、今はPillowを使用すると考えましょう。
・OpenCV
OpenCVは、高機能な画像処理ソフトウェアで、画像認識AIの分野でよく活用されています。
画像を加工するだけでなく、エッジ処理や物体認識など、多くの機能を有しています。
OpenCV自体はPythonとは関係ない独立したソフトウェアですが、Python向けのライブラリが提供されているため、OSにインストールさえしてしまえば他のライブラリと同様に容易に使用可能です。
そのため、AIの分野で画像を扱う場合にはほぼ間違いなく使用する存在と言っても過言ではないでしょう。
4. Pythonで自動化を行ってみる
それでは、実際にPythonを使った自動化を行う例を紹介します。
ライブラリごとに使い方は異なるので、使用したいライブラリのドキュメントをしっかりと読むように気を付けてください。
今回は、Webスクレイピングの基本ということで、このトレノキャンプブログの人気記事3件を取得してみましょう。
以下の2つのライブラリを使ってスクレイピングを実現してみます。
・requests
・Beautiful Soup
① ライブラリのimport
まずは、必要なライブラリをimportします。
import requests
from bs4 import BeautifulSoup
ライブラリを始めて使用する場合
はじめて使用する場合には、pipを利用して必要なライブラリをインストールしましょう。
pip install requests
pip install beautifulsoup4
② 取得対象のURLを指定してデータを取得
次に、アクセスするサイトのURLを指定してHTMLを取得します。
今回はトレノキャンプブログのURLを指定します。
# 検索対象のURL
url = 'https://camp.trainocate.co.jp/magazine/'
# requetsを使用してHTMLを取得
google_request = requests.get(url)
# BeautifulSoupの初期化
soup = BeautifulSoup(google_request.text, "html.parser")
③ HTMLを解析してデータを取得する
今回は、「人気記事」の部分のHTMLを取得します。
詳しい調べ方は割愛しますが、今回は人気記事のセクション(section)から情報を取得していきましょう。
# 人気記事の情報を取得
favors = soup.select('section#content > ul > li p')
# 取得した内容のうち、タイトルを取得して出力する
for fav in favors:
print(fav.text)
これを実行すると、以下のように出力されます。
Spring Framework 入門! 特徴やbootとの違い、ダウンロードからインストールまでをわかりやすく解説
今注目のPython資格検定とは? 難易度やメリット、勉強方法などをわかりやすく解説
【5分でわかる】Spring Boot超入門! 特徴やできること、Spring Frameworkとの違いなどをわかりやすく解説
実行したタイミングにより人気の記事は変動するので、上記の内容と一致するとは限りません。
ブラウザで表示した内容と一致しているかを確認してみましょう。
5. 自動化を学ぶのにおすすめの本
Pythonによる自動化を学ぶには、書籍を活用するとよいでしょう。
基本的な知識だけでなく、サンプルコードも使いながら効率よく自動化を身に着けることが可能です。
ここでは、おススメの書籍を2冊紹介します。
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
Pythonを使用した自動化の例や実際のコードが紹介されています。
Pythonの基本的な構文から紹介されているので、プログラマでない人が自動化に手を付けたい、と考えたときに手に取りやすい一冊といえます。
シゴトがはかどる Python自動処理の教科書
Pythonによる自動化の基本的知識や、「やりたいこと」に応じたサンプルが紹介されています。
ある程度自動化したいことが決まっているのであれば、本書に例が載っていないか一度確認するとよいでしょう。
多くの例が掲載されているため「どんな使い方があるのだろう」という実用例としても活用できます。
※掲載された社名、製品名は、各社の商標及び登録商標です。