5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ユアマイスターAdvent Calendar 2018

Day 12

〇〇行のコードで業務効率化?Pythonでスクリプト書いたぞ

Last updated at Posted at 2018-12-11

これはユアマイスター Advent Calendar 2018の12日目の記事です。

##こんにちは

これはたった〇〇行のコードで、ある作業を日当たり30min~1h短縮に成功したのでお知らせします。

ある作業というのは厳密にお話しすることは出来ないのですが、ざっくりいうと対象のページにアクセスする、という事です。

##やりたい事

少し冒頭で書きましたが、
PCとSP(スマホ)から対象となるページにアクセスしたい、という事です。

これを手作業で1ページずつアクセスして…。
とやっていては、対象ページ数の増加に伴って作業時間数が増加する為、非常に非効率なやり方ですよね。
(とは言いつつ、それをこのスクリプトが作成される前は手作業でやっていたという事実。)

人間なので、アクセスし忘れた、というヒューマンエラーも考えられます。

これをスクリプトで自動化しようぜという事です。

結果、冒頭にもあるように30min~1h短縮した、という訳です。

はい、では実際書いたスクリプトがこちらです。

##〇〇行のコード

sample.py
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_urlsfor文で回します。
target_urlはディレクトリパスとファイルパスを今回は入れているので、プロトコルとドメイン名を結合してURLとします。

その後、まずimportしたrequestsのgetメソッドを使用して対象のURLにGETリクエストでアクセスします。

アクセスした時にtextを抽出して、findメソッドでcssファイルを検索します。

その後sleepメソッドで一時的に処理を止める。これを繰り返し行います。

####疑問を解決

  1. なんでfindメソッドでcssファイルを検索したんですか?

→これはユアマイスター株式会社の開発スタイルに依存しているのですが、私達はデバイス毎にファイルを分けて開発しています。アクセス先URLに必ず存在するPCとSPそれぞれのファイルを検索する事で、それぞれのデバイスのURLにアクセスした事になるからです。

  1. なんでsleepしてるんですか?

→アクセスが集中する事によるタイムアウトを避ける為です。

##まとめ
もっと無駄を無くして、自動化できるものは自動化、掛けるべき部分に時間を掛ける。その為にはチーム間で密なコミュニケーション。

ユアマイスター株式会社では、アジャイルで開発を進めています。

エンジニアじゃない"まかない担当"がアジャイルについて書いてみた
こんな記事もあるのでぜひ読んで見て下さい。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?