2012年06月05日

エフェクティブプログラマーexclamation&question

だんだん夏っぽくなってきたなぁと思っていたのですが今日の大阪は
あいにくの曇り空です。
今日だけではなく天気予報ではしばらく曇り空曇りが続くようですね。
exclamation&questionヘキサドライブでは毎年恒例になりつつある例のアレの準備が着々と進められています。
今年は過去最大の参加人数になりそうで今からワクワクしているシラッチです。


さて、E3の話題を…というわけではなく、今日は身近で地味な?自動化の
具体例について書いてみたいと思います。

いきなりですが
「Release ビルドを行った実行ファイル(exe)を zip 圧縮して、所定のパスへコピー後、メールで連絡する」
という作業があったとします。
簡単な作業に思えるかもしれませんが、もしこれを
「1年間、毎日1回、決められた時間に」
という条件付きで行うとしたらどうでしょうか?

他に緊急の作業が割り込んで、予定していた時間に対応が
行えない時あせあせ(飛び散る汗)や、単純に忘れていたバッド(下向き矢印)なんてことがあるかもしれません。
そんな時真っ先に私が思いつくのは「自動化」です。

例えば、以下のような BAT ファイルと Python スクリプトで実現できそうです。
動作確認環境:
Windws7、Visual Studio 2010、Python 3.2.2


build.bat

call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
MSBuild .\sample\sample.sln /property:Configuration=Release /property:Platform=Win32 /target:Rebuild


work.py

# -*- coding: utf-8 -*-

import os
from zipfile import ZipFile, ZIP_DEFLATED
import shutil
import smtplib


def compress_file(compress_filename, zip_filename):
""" 指定のファイルをzip圧縮 """

target_file = ZipFile(zip_filename, 'w', ZIP_DEFLATED)

dst_path = './%s' % compress_filename
target_file.write(dst_path, compress_filename)

target_file.close()


def send_mail():
""" メールの送信 """

smtpserver = '【SMTPサーバ名】'
from_addr = '【送信元メールアドレス】'
to_addr = '【送信先メールアドレス】'
msg = """From: %s
To: %s
Subject: コピー完了のお知らせ
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="UTF-8"


コピーし終わりました。
""" % (from_addr, to_addr)

smtp = smtplib.SMTP(smtpserver)

smtp.sendmail(from_addr, to_addr, msg.encode('utf-8'))
smtp.quit()


def main():

# ビルドを行うバッチを実行
os.system('build.bat')

# 実行ファイルをzip圧縮
compress_file('sample/Release/sample.exe', 'sample.zip')

# zipファイルを所定のパスにコピー
shutil.copy('sample.zip', '【所定のパス】\\sample.zip')

# 完了のメール送信
send_mail()


if __name__ == '__main__':
main()


あとは Python スクリプトの呼び出しを Windows のタスクや
Jenkins のジョブとして登録しておけば、定期的に行わなければ
いけない作業から解放されます。わーい(嬉しい顔)

手動で行った場合、1回に10分かかるとして 365日行ったと
仮定したら、単純計算で 3650分(60時間50分!)もこの作業に
時間を使ってしまう事になる…と考えると手動でやるのは
もったいないふらふらと思ってしまいます。

挙げた例は極端かもしれませんが、少しコストパフォーマンスを
意識出来れば、ゲームを開発するうえで新しいアイディアを考えたり
更なるクオリティアップに専念するための時間が、しっかり
確保できるようになるかもしれませんね。

今にやっているお仕事のクオリティもガンガンアップグッド(上向き矢印)するよう
工夫していきたいと思います手(グー)

posted by 管理人 at 22:20 | いいモノづくり道