今回の成果物はこちら
このプログラムを作った背景
「ゲームで使う大量の画像ファイルをS3にアップロードしたい」
―― はい
「しかし量が多すぎてめちゃくちゃ時間がかかる」
―― 今日も残業ですね
「水曜日の残業は今年から禁止された」
―― 特別残業申請出しましょうか?
「まて、まだ希望はある」
―― 冗談ですよ
「追加があるたびに全部アップロードするのをまずやめよう」
―― それもそうですね
「そこで差分の判定にmd5を使う」
―― 常套手段ですね
「画像ファイル自体はsubversionで管理されているから、.svn等の隠しフォルダ以下は除外したい」
―― あっ、Thumbs.db をコミットしてしまいました
「おいやめろ!!」
―― この .DS_Store というファイルはなんでしょう?
「それもアップロードしちゃいかん」
―― そういえばモンハンクロス買いましたよ
「関係ない話はあとでやれ。あとそのDSじゃない。」
―― 結局どのような実装になったのでしょうか
「まず、S3にファイルをアップロードするのが一番重い。一方でダウンロードはわりと速い。」
―― S3そういう設計ですからね
「まずローカルでmd5値を計算して、別途ファイルに保存する。2回目以降ではオリジナルファイルとmd5ファイルの更新タイムスタンプを比較して、オリジナルのほうが新しければmd5を計算しなおす。md5が一致しなければ更新されたと判定する。」
―― makeのパクりですね
「全くその通りだ。」
―― その他の工夫は?
「md5ファイルはS3にも一緒にアップロードする。ローカルのディスクがぶっ壊れることなど日常茶飯事だからだ。」
―― なるほど
「これで必要最低限の時間だけでアップロードが完了する」
―― 便利ですね
「あとはアップロード確認ツールから画像を見比べてデプロイ作業は完了だ」
―― オチはどうしましょうか?
「心配ない。不具合を作りこんでおいた。」