はじめに
Python で開発をしていてこれは便利!と思ったライブラリを 5 つ紹介したいと思います。
Pendulum
Pnedulum
は日付/時間計算ライブラリです。標準ライブラリの datetime
をうまくラップして使い勝手を向上させています。タイムゾーンの変換のようによく使われる機能から「次の土曜日」といった、たまに欲しくなる機能まで揃えているので、一度使ったらもう標準ライブラリには戻れないです。公式サイトも非常におしゃれでドキュメントも読みやすくなっています。
ちなみに Python で日付/時間計算ライブラリといえば最近は Arrow が紹介されることが多いのですが、Arrow の API には振る舞いが予想しづらいものがあるようで、その辺りの分かりづらさを解決するために Pendulum が開発されたそうです。
Requests-HTML
Requests-HTML
はクローラライブラリです。HTTP ライブラリとして非常に有名な Requests の作者である Kenneth Reitz 氏が開発したライブラリで、Requests の機能に HTML のパース機能を備えたものとなっています。
これまでクローリングといえば Requests で HTML を取得して Beautiful Soup でパースするやり方がよく使われてきましたが、これからはこのライブラリ 1 つで両方をまかなうことができます。HTML の要素選択には CSS セレクタと XPath の両方が使用できます。
さらに素晴らしい機能として、JavaScript を評価することができるのです!これで JavaScript をレンダリングしないと参照できなかった HTML 要素も取れますね。そのようなことができるのは、内部で使用している Pyppeteer というライブラリのおかげです。このライブラリも大変素晴らしいのでこのあと紹介します。
Pyppeteer
Pyppeteer はヘッドレス Chrome ライブラリです。ヘッドレス Chrome というのはコード上で実行できる Chrome ブラウザ(ヘッドレスブラウザ)のことです。
先日 Google が Chrome にヘッドレスブラウザモードを搭載しましたが、ヘッドレスブラウザを操作する API として Puppeteer という Node.js 製の API を公開しました。 Pyppeteer はその非公式な Python ラッパになります。
基本的には Selenium と同じことができるのですが、Puppeteer が Google 公式の API ということで Chrome 操作に関しては Puppeteer / Pyppeteer の方が充実した機能が取り込まれることが期待できます。
Loguru
- GitHub: https://github.com/Delgan/loguru
Loguru
はロギングライブラリです。Python には logging
というロギングライブラリが標準で搭載されていますが、設定周りが結構面倒で毎回同じような雛形コードを書く必要があります。しかし Loguru を使うとその辺の面倒な設定をあらかじめ行った状態でロギングインスタンスが使えるようになるので、非常に手軽にロギングが可能となっています。
面白いと思った機能は例外を自動で補足してログに出力してくれる @logger.catch
というデコレータです。これを関数に付けておけば例外を勝手にロギングしてくれるようになります。
Loguru はログの見栄えにもこだわっていて、例外発生時のバックトレースが非常に分かりやすくなっています(下記は GitHub のサンプルを引用)。
2018-07-17 01:38:43.975 | ERROR | __main__:nested:10 - What?!
Traceback (most recent call last, catch point marked):
File "test.py", line 12, in <module>
nested(0)
└ <function nested at 0x7f5c755322f0>
> File "test.py", line 8, in nested
func(5, c)
│ └ 0
└ <function func at 0x7f5c79fc2e18>
File "test.py", line 4, in func
return a / b
│ └ 0
└ 5
ZeroDivisionError: division by zero
いわゆる Power Assert スタイルのバックトレースになっています。この綺麗なバックトレース出力は better-exceptions というライブラリによるものです。better-exceptions は単体で使ってもかなり役に立つのでこちらもおすすめです。
Responder
Responder
は Kenneth Reitz 氏による Web フレームワークです。Python の Web フレームワークというと Flask, Django が有名で、それらにつづくフレームワークがいくつか出ているという感じで若干乱発している状態なのですが、Responder は各種ライブラリをうまく連携させて 1 つのフレームワークとして形成されており、全くのゼロベースで作られたものではないところが見事な作りだと思いました。
Flask は機能を最小限にしていることで毎回 Flask と一緒に使うライブラリ(WSGI, CORS ライブラリなど)を用意する必要がありますが、逆に Django は機能が豊富すぎてオーバースペック気味になることが多いです。一方で Responder が持つ機能は多すぎず少なすぎず、丁度いい分量で設計されているところに扱いやすさを感じました。
OpenAPI や GraphQL など最近のトレンドをサポートする機能も備わっているので、Python 製 Web フレームワークのデファクトになってもらいたいです。
まとめ
いずれも便利なライブラリですので、ぜひご活用下さい。