Python fabfileの分割

Python学習【365日チャレンジ!】251日目のマスターU(@Udemy11)です。

ドコモ口座の不正引き出し事件のせいで、銀行口座からのPayPayチャージができなくなって困っています。

PayPayにチャージしようと思えば、セブン銀行から現金でチャージ可能で、PayPayアプリからも勧められるのですが、現金を触ることなく買い物ができるのが売りなのに、銀行から現金引き出さんとあかんのかい〜と突っ込みたくなります。

一方で、メルペイは事件が起こってから、本人確認で、免許証の撮影と自撮り写真を使ったシステムをいち早く導入して、すでに銀行からのチャージが可能になっています。

PayPayの利用者が約2300万人に対して、メルペイが600万人なので(2020年1月現在)、システムの構築に時間をかけるのはわかりますが、現時点ではかなり利便性が損なわれているような感じは否めません。

とはいえ、10月17日から超PayPay祭が開催されているので、現金チャージしてPayPayを使っちゃうんですけどね。

それでは今日もPython学習を始めましょう。

昨日の復習

昨日は、*(アスタリスク)を使ってFabricのメソッドをまとめて読み込みました。

localputを使ってローカルのデータをリモート先にアップロードするコードを実行しましたが、これまでに学習してきたrunenvtaskなどももちろん使うことができましたね。

詳細については、昨日の記事を参考にしてみてください。

今日は、Fabricファイルを分割して使う方法を学習します。

fabfileの分割

fabfile.pyの分割というより、短いコードをライブラリにして読み込むといったほうが正しいかもしれません。

対話アプリJarvisで学習したMCVモデルのように、パーツに分けてメインのモジュールから読み込むという方法です。

今回は、データベース関連のコードをdbフォルダにまとめてその中のchecking.pyを読み込んでcheckメソッドをfabfile.pyで実行するコードを書いてみます。

cheking.py

fab_projectの中にdbフォルダを作り、その中に__init__.pychecking.pyを配置します。

Python Fabricファイルを分割する

テストなので、checking.pyには、極力簡単な次のようなコードを記述します。

from fabric.api import *

def check():
    return run('ls -al /root')

fabric.api*でインポートして、ルートディレクトリを表示するコマンドを実行して返り値にするコードになります。

fabfile.py

fabfile.pyには、昨日のコードを少し変更して次のようなコードを記述します。

from fabric.api import *
import db.checking

env.hosts = ['root@172.16.200.101:22']
env.passwords = {'root@172.16.200.101:22': 'root'}

def split_test():
    r = execute(db.checking.check)
    print(r)

最初にfabric.api*でインポートするのは同じで、db.checkingを追加でインポートします。

ホストとパスワードはserver1だけを指定しておき、checking.pyの中の関数checkを実行して出力する関数split_testを7行目から9行目に記述しています。

実行結果は次のようになります。

Python Fabricファイルを分割する

split_testの実行で、checkが呼ばれてコマンドls -al /rootが実行されます。

次にexecuteで辞書型データに代入された値が出力されています。

まとめ

対話型アプリで学習したMVCモデルのように、役割ごとに分割してわかりやすいコードにできるのがPythonの特徴です。

最初のうちはそんなに長いコードを書くわけではないので、切り分ける必要があるのか疑問に思うこともあるかもしれません。

しかし、一つのプログラムは実際にはめちゃくちゃ長いものになるので、それをわかりやすく分割することで誰もが理解できるようになるので、早いうちからコードを分割することになれておいたほうがいいかもしれませんね。

それでは明日もGood Python!