LoginSignup
4
1

More than 3 years have passed since last update.

docker-composer build中に仮面ライダーに変身する

Last updated at Posted at 2019-04-25

はじめに

docker-compose buildをしている間に仮面ライダービルドに変身したら面白くない? といった技術と時間の無駄遣いを紹介します。 結論から言うと、とりあえず出来はしましたがcliとしてはまだ完成しておらず、変身の際に音声も流れるので著作権の問題もありそうなので配布はしません。なので完全に自己満足の作品です。

どうやって変身するか?

フローはこんなじ
1. 実行時に「ラビット! タンク! ベストマッチ!」を流す
2. docker-compose buidを走らせながら待機音のループを流す
3. docker-compose buid終了のタイミングで変身完了音を流す

とりあえず見て

音源を用意する

youtubeから取ってきて以下のファイルを作成

  • build1.mp3がラビット!、タンク!、ベストマッチ!
  • build2.mp3が待機音デンデンデン、デデンデン
  • build3.mp3がハンドル回す~ラビットタンク!まで

環境

  • Python: 3.6.5
  • docker-compose.yml

docker-compose.yml以前書いた記事のプロジェクトを使用しています。

コード

main.py
import subprocess
import logging
from subprocess import Popen
import threading
from pydub import AudioSegment
from pydub.playback import play

class Ridocker:

    def __init__(self):
        self.stop_event = threading.Event() #停止させるかのフラグ

        #スレッド
        self.build = threading.Thread(target=self.exec)
        self.begin = threading.Thread(target=self.run_mp3, args=('mp3/build1.mp3',))
        self.standby = threading.Thread(target=self.retry)

    def run_mp3(self, path):
        '''mp3ファイルを再生する
        Args:
            path(str): mp3ファイルのパス
        '''
        sound = AudioSegment.from_file(path, 'mp3')
        play(sound)

    def exec(self):
        '''docker-compose buildを実行する
        '''
        cmd = "docker-compose build"
        popen = Popen(cmd, shell=True)
        popen.wait() # コマンドの処理を待つ
        self.stop() # 待機音のループを止める

    def retry(self):
        '''待機音をループさせる
        '''
        sound = AudioSegment.from_file('mp3/build2.mp3', 'mp3')
        # execが終了するまでループ
        while not self.stop_event.is_set():
            play(sound)

    def stop(self):
        self.stop_event.set() # ループを止める
        self.standby.join()    # 変身待機音が終わるのを待つ
        self.run_mp3('mp3/build3.mp3')

if __name__ == '__main__':
    h = Ridocker()
    h.begin.start()
    h.begin.join()
    h.standby.start()
    h.build.start()

threadingを使用してdocker-compose buildを流しながらmp3ファイルを再生しています。
mp3ファイルの再生にはpydubを使用しました。mp3ファイルの再生は他にもpygameのmixer.musicもありましたがmixer.musicはtime.sleep(n)の処理を行わないと再生できないので今回は見送りました。(無限ループ再生ができるそうです)

改善点

  1. 現状ではmp3ファイルを同じディレクトリ内に配置しているので/User/{UserName}配下にmp3ファイルを置いて読み込めばいいかもしれない
  2. python main.pyで実行しているのでcliとして作成したい ridocker --no-cacheみたいな感じ
  3. 変身音のパターンを増やしたい(ゴリラモンドとか) ridocker --form gorillamond
4
1
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
4
1