BETA

Githubにある 「for Humans」 プロジェクト

投稿日:2018-10-16
最終更新:2018-10-24
※この記事は外部サイト(https://qiita.com/Alice1017/items/f5927685...)からのクロス投稿です

Githubにある 「for Humans」 プロジェクト

githubにあるリポジトリには、そのdescriptionに 「for Humans」 が入っているものがあります。 Pythonの requests というライブラリのdescriptionは 「python HTTP Requests for Humans」 と書かれており、urllibなどのHTTP Requestを人間が使いやすいように設計されたものです。

つまり 「for Humans」 と書かれたライブラリなどのプロジェクトは、標準ライブラリなどを 人間が使いやすいように設計されたもの であるため、有用なものが多くあります。

この記事ではPythonを使った「for Humans」プロジェクトを紹介したいと思います。

1. keras-team/keras

Deep Learning for humans

Kerasは、TensorFlowなどで実行可能なディープラーニングライブラリ。 人間に使いやすい設計で、kerasで深層学習を始める初心者も多いようです。 日本語ドキュメントが充実してるので参照してください。

2. pypa/pipenv

Python Development Workflow for Humans

nodeは package.json 、rubyは Gemfile でパッケージを管理しています。 Pythonは piprequirements.txt を使ってパッケージ管理をしていますが、Gemfileなどに比べて機能が十分ではありません。

そこでpythonのパッケージ管理の機能を向上させるのがpipenvです。 日本語ドキュメントもありますし、qiitaにも様々な記事があります。

3. kennethreitz/records

SQL for Humans

recordsはSQLを書くためだけに作られたライブラリで、RedShift, Postgres , MySQL, SQLiteなどのDBをサポートしています。

import records

db = records.Database('postgres://...')
rows = db.query('select * from active_users')    # or db.query_file('sqls/active-users.sql')

for r in rows:
    print(r.name, r.user_email)

4. kennethreitz/delegator.py

Subprocesses for Humans 2.0

delegatorはpythonの subprocess を人間が使いやすいように設計されたライブラリで、envoypexpectというライブラリからインスパイアされたものです。

>>> c = delegator.run('ls')
>>> print c.out
README.rst   delegator.py

>>> c = delegator.run('long-running-process', block=False)
>>> c.pid
35199
>>> c.block()
>>> c.return_code
0

個人的にすごく便利だなと思うのは、 パイプを使ったコマンド を簡単に使えるとこです。

>>> c = delegator.chain('fortune | cowsay')
>>> print c.out
  _______________________________________
 / Our swords shall play the orators for \
 | us.                                   |
 |                                       |
 \ -- Christopher Marlowe                /
  ---------------------------------------
         \   ^__^
          \  (oo)\\_______
             (__)\       )\\/\
                 ||----w |
                 ||     ||

これをsubprocessでやると、

>>> from subprocess import Popen
>>> proc1 = Popen("fortune", stdin=-1, stdout=-1, stderr=-1)
>>> proc2 = Popen("cowsay", stdin=proc1.stdout, stdout=-1, stderr=-1)
>>> print proc2.communicate()[0]
   _______________________________________
 / Our swords shall play the orators for \
 | us.                                   |
 |                                       |
 \ -- Christopher Marlowe                /
  ---------------------------------------
         \   ^__^
          \  (oo)\\_______
             (__)\       )\\/\
                 ||----w |
                 ||     || 

このようにプロセスを2つ作らないとできません。

5. kennethreitz/maya

Datetimes for Humans

mayaはpythonの datetime を使いやすくしたライブラリです。 通常のdatetimeでは、タイムゾーンを設定するには pytz という専用のライブラリを使って以下のように設定します。

>>> from pytz import timezone
>>> from datetime import datetime
>>> jst_now = datetime.now().astimezone(timezone('Asia/Tokyo'))
>>> print(jst_now)
2016-03-20 10:07:29.056724+09:00

しかし、mayaを使うと…

>>> import maya
>>> now = maya.now()
>>> now.datetime(to_timezone="Asia/Tokyo")
datetime.datetime(2018, 3, 24, 17, 55, 10, 578125, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>)

6. kvesteri/validators

Python Data Validation for Humans

validatorsは様々な種類のデータをvaliateしてくれるライブラリです。

>>> import validators
>>> validators.email("[email protected]")
True
>>> validators.between(5, min=2)
True
>>> validators.between(500, max=400)
ValidationFailure(func=between, args=...)
>>> validators.domain('example.com')
True
>>> validators.ipv4("192.168.33.10")
True
>>> validators.url('http://foobar.dk')
True

7. cypreess/python-rex

Python Regular Expressions for Humans

rexは、pythonの正規表現ライブラリ re を使いやすくしたもので、 非常に使いやすくなっています。

reを使うと:

import re
regex = re.compile("\[a-z\]{3}-(\\d{4})", flags=re.IGNORECASE)
m = regex.search("Your ticket number: XyZ-1047. Have fun!")

if m is not None:
   print m.group(1)
else:
   print None

rexを使うと:

from rex import rex
print ("Your ticket number: XyZ-1047. Have fun!" == rex("/\[a-z\]{3}-(\\d{4})/i"))\[1\]

8. dbader/schedule

Python job scheduling for humans

scheduleは名前の通り、定義したジョブを定期的に実行するためのライブラリです。 scheduleはその定期実行の書き方が面白くて、 10分ごとにジョブを実行 するには、

import schedule

def job():
    print("I'm working...")

schedule.every(10).minutes.do(job)

このように書きます。他にも

schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every(5).to(10).minutes.do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)

これらの書き方があります。スケジューリングしたジョブを実行するためには、

import time
while True:
    schedule.run_pending()
    time.sleep(1)

このように書きます。

まとめ

以上、Pythonを使った「for Humans」プロジェクトの一部を紹介しました。 Githubで "for Humans" と検索すると、python以外にもいろんな言語で書かれたプロジェクトが出てきますので、試しにやってみて下さい。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@alice1989'の技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!