Python学習【365日チャレンジ!】251日目のマスターU(@Udemy11)です。
ドコモ口座の不正引き出し事件のせいで、銀行口座からのPayPayチャージができなくなって困っています。
PayPayにチャージしようと思えば、セブン銀行から現金でチャージ可能で、PayPayアプリからも勧められるのですが、現金を触ることなく買い物ができるのが売りなのに、銀行から現金引き出さんとあかんのかい〜と突っ込みたくなります。
一方で、メルペイは事件が起こってから、本人確認で、免許証の撮影と自撮り写真を使ったシステムをいち早く導入して、すでに銀行からのチャージが可能になっています。
PayPayの利用者が約2300万人に対して、メルペイが600万人なので(2020年1月現在)、システムの構築に時間をかけるのはわかりますが、現時点ではかなり利便性が損なわれているような感じは否めません。
とはいえ、10月17日から超PayPay祭が開催されているので、現金チャージしてPayPayを使っちゃうんですけどね。
それでは今日もPython学習を始めましょう。
昨日の復習
昨日は、*(アスタリスク)を使ってFabricのメソッドをまとめて読み込みました。
local
とput
を使ってローカルのデータをリモート先にアップロードするコードを実行しましたが、これまでに学習してきたrun
やenv
、task
などももちろん使うことができましたね。
詳細については、昨日の記事を参考にしてみてください。
今日は、Fabricファイルを分割して使う方法を学習します。
fabfileの分割
fabfile.py
の分割というより、短いコードをライブラリにして読み込むといったほうが正しいかもしれません。
対話アプリJarvisで学習したMCVモデルのように、パーツに分けてメインのモジュールから読み込むという方法です。
今回は、データベース関連のコードをdb
フォルダにまとめてその中のchecking.py
を読み込んでcheck
メソッドをfabfile.py
で実行するコードを書いてみます。
cheking.py
fab_project
の中にdb
フォルダを作り、その中に__init__.py
とchecking.py
を配置します。
テストなので、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行目に記述しています。
実行結果は次のようになります。
split_test
の実行で、check
が呼ばれてコマンドls -al /root
が実行されます。
次にexecute
で辞書型データに代入された値が出力されています。
まとめ
対話型アプリで学習したMVCモデルのように、役割ごとに分割してわかりやすいコードにできるのがPythonの特徴です。
最初のうちはそんなに長いコードを書くわけではないので、切り分ける必要があるのか疑問に思うこともあるかもしれません。
しかし、一つのプログラムは実際にはめちゃくちゃ長いものになるので、それをわかりやすく分割することで誰もが理解できるようになるので、早いうちからコードを分割することになれておいたほうがいいかもしれませんね。
それでは明日もGood Python!