これはユアマイスター Advent Calendar 2018の12日目の記事です。
##こんにちは
これはたった〇〇行
のコードで、ある作業を日当たり30min~1h
短縮に成功したのでお知らせします。
ある作業
というのは厳密にお話しすることは出来ないのですが、ざっくりいうと対象のページにアクセスする、という事です。
##やりたい事
少し冒頭で書きましたが、
PCとSP(スマホ)から対象となるページにアクセスしたい、という事です。
これを手作業で1ページずつアクセスして…。
とやっていては、対象ページ数の増加に伴って作業時間数が増加する為、非常に非効率なやり方ですよね。
(とは言いつつ、それをこのスクリプトが作成される前は手作業でやっていたという事実。)
人間なので、アクセスし忘れた、というヒューマンエラーも考えられます。
これをスクリプトで自動化しようぜ
という事です。
結果、冒頭にもあるように30min~1h
短縮した、という訳です。
はい、では実際書いたスクリプトがこちらです。
##〇〇行のコード
import requests
from time import sleep
target_urls = [
'/xxx/xxx/',
'/yyy/yyy/',
'/zzz/zzz/'
]
pc_header = {'User-Agent': 'hoge'}
sp_header = {'User-Agent': 'huga'}
for target_url in target_urls:
target_url = 'http://hogehoge.jp' + target_url
print(requests.get(target_url, headers = pc_header).text.find('hoge.pc.css'))
print(requests.get(target_url, headers = sp_header).text.find('hoge.sp.css'))
sleep(0.1)
これがタイトルにもあるように〇〇行のコード
です。
〇〇にした理由としては、変数target_urls
に入る値によって変わるので、いちおう〇〇としました。
実際、変数に何も入れていない状態、つまり雛形の状態であれば11行
しか書いていないですし、これで30min~1h
も作業時間を短縮できた事を考えると、いかに今までの作業時間が無駄だったのか、がよくわかりますよね。
###コード解説
非常に簡単なコードだとは思うんですが、いちおう何をしているのか、解説しますね。(普段PHP書いてるんで)
まず最初のこれ
import requests
from time import sleep
requests
はHTTPリクエストをするライブラリ。
time
は時刻に関する様々な関数を提供するモジュールで、今回はsleep
メソッドしか使用しなかった為、import sleepをしてます。
sleepの役割としては、処理を一時的に止めます。
次に
target_urls
これはアクセス先のURL、主にディレクトリパスとファイル名が入ります。
次に
pc_header = {'User-Agent': 'hoge'}
sp_header = {'User-Agent': 'huga'}
これはユーザーエージェントが入ります。(このスクリプト作成時にユーザーエージェントが何かを知る…!)
User-Agent
をkeyとして、hoge
の部分にはそれぞれのユーザーエージェントの情報を入れてあげれば良いです。
次に
for target_url in target_urls:
target_url = 'http://hogehoge.jp' + target_url
print(requests.get(target_url, headers = pc_header).text.find('hoge.pc.css'))
print(requests.get(target_url, headers = sp_header).text.find('hoge.sp.css'))
sleep(0.1)
(一気にいきます)
先ほど指定したtarget_urls
をfor文
で回します。
target_url
はディレクトリパスとファイルパスを今回は入れているので、プロトコルとドメイン名を結合してURLとします。
その後、まずimportしたrequestsのgetメソッドを使用して対象のURLにGETリクエストでアクセスします。
アクセスした時にtext
を抽出して、findメソッドでcssファイルを検索します。
その後sleep
メソッドで一時的に処理を止める。これを繰り返し行います。
####疑問を解決
- なんでfindメソッドでcssファイルを検索したんですか?
→これはユアマイスター株式会社の開発スタイルに依存しているのですが、私達はデバイス毎にファイルを分けて開発しています。アクセス先URLに必ず存在するPCとSPそれぞれのファイルを検索する事で、それぞれのデバイスのURLにアクセスした事になるからです。
- なんでsleepしてるんですか?
→アクセスが集中する事によるタイムアウトを避ける為です。
##まとめ
もっと無駄を無くして、自動化できるものは自動化、掛けるべき部分に時間を掛ける。その為にはチーム間で密なコミュニケーション。
ユアマイスター株式会社では、アジャイルで開発を進めています。
エンジニアじゃない"まかない担当"がアジャイルについて書いてみた
こんな記事もあるのでぜひ読んで見て下さい。