自分は個人的に使うツールを作成する際にPythonをよく使います。
用途としては日常的な作業の自動化や、遊びで作成するアプリケーションなどです。
主に、数日で完成させた後はあまり更新しないような小さなプロジェクトを想定しています。
しっかり作り込んで公開するようなサービスはまた考え方が違ってきますが、小さいツールの作成に自分がPythonをよく使う理由を2つ挙げてみます。
理由1. 何でもできる
Pythonはなにかやりたいと思ったときに、そのためのライブラリがすでに存在していることが多いです。
以下に、個人で使ったことのあるPythonのライブラリの例を挙げてみます。
自然言語処理
- 以前Twitterボットを作成した際に、形態素解析エンジンであるMeCabを利用しました。
- 他にもGensimを使ってトピック分析を試したこともあります。
- Pythonで使える自然言語処理系のライブラリは多く存在します。
機械学習
- 機械学習系のライブラリはやはりPythonが最も充実しているのではないでしょうか。
- 自分は個人でディープラーニング系のモデルを学習させることはほぼ無いですが、scikit-learnやXGBoostでモデルを作って使うことがあります。
画像処理
- 個人的な写真の管理でスクリプトを書くことがあります。
- PIL(Python Imaging Library)やPillow等を使ってExif情報を取得したり、画像をリサイズしたりします。
スクレイピング
- 定期的に特定サイトの情報をチェックするツールを作成することもあります。
- 素朴にRequestsを使ってもいいですし、Scrapyを使うとより簡単にスクレイピングができます。
仮想通貨取引
- 仮想通貨取引所のAPIを使いたいと思ったことがあります。
- ccxtという100以上の取引所のAPIを同じインターフェースで使えるライブラリのおかげで、やりたいことが実現できました。
- 各取引所のAPIの仕様を調べる必要がなく、統一的なインターフェースで取引ができるのは助かりました。
Webアプリケーション
- 上記のような機能をGUIから操作したいことがあります。
- その場合、自分はDjangoを使いWebアプリケーションとして動かすことが多いです。
- Djangoは管理画面がデフォルトで用意されている点が特に気に入っていて、設定の管理やデータの確認がしやすいです。
理由2. クラウドで安く動かせる
個人的なツールは利用頻度も少ないため、サーバーで動かすときもコストを抑えたいです。
Pythonは以前から無料で動かせるクラウドがあり、それも個人的なツール作成に選ぶ理由の一つでした。
Google App Engine (GAE)
- GAEはスタンダード環境であれば、無料枠があります。
- 2008年のリリース時からPythonをサポートしているため、以前から個人的なツールを動かすのによく使っていました。
- 管理画面からcronを設定して定期実行もできるのが地味に便利です。
AWS Lambda
- AWS Lambdaは2014年にリリースされていて、Pythonは2015年10月からサポートされています。
- こちらも無料枠があるため、最近ではこちらで動かすこともあります。
- Serverless Frameworkを使うと、ローカルでの開発からデプロイまでの体験が良いです。
(とはいえ用途に応じてEC2やHerokuで動かすこともあります)
Pythonで開発する際の不満
Pythonを使っていて、いまいちだと感じるところもあります。
特に仮想環境とパッケージの管理手法が安定しないことです。
しばらく経ってから調べてみると新しい方法が出ていたり、古い方法が非推奨になっていたりします。
これまで以下のようなツールを触っていますが、それぞれの使い分けがよくわかっていないとだいぶ混乱します。
(現時点でのベストプラクティスはよくわかっていません)
- vertualenv
- venv
- pipenv
- pip-tools
- poetry
まとめ
個人的なツールの作成にPythonをよく使う理由を2つと、ついでに不満点も1つ挙げてみました。
なにかの参考になれば幸いです。
最近以下のポッドキャストを聞いて、そういえば自分はなんでPython使うことが多いんだろうと考えたのが記事を書くきっかけでした。