この記事はMMA Advent Calendar 2016 17日目の記事です。
昨日は /dev/null さんの "/dev/null"でした。
[[[ここにURLを貼りたいなあ]]]
はじめに
MMAが管理しているOSSの1つとして、uecmma/meshiコマンドがあります。
これは元々MMAが持つコアサーバ(現在はnestという名前です)で管理されていたコマンドで、少なくとも17年前(1999年頃)には存在していた事が確認されています。^1
このコマンドは簡単に言えば調布でご飯を食べに行く際に、どこにご飯に行くかを考えるときに利用するコマンドです。
meshiコマンドを実行するだけで、ご飯選択を素早く決める事が出来ます。
問題点
meshiコマンドの実装は100行にも満たないシェルスクリプトです。shコマンドを中で叩いているだけの簡単な実装ですが、内部でshuf
コマンドが使われている部分に問題があります。
基本的にどこでも動く事が前提とされているのですが、shuf
コマンドは各ディストリビューションにおいてインストール方法がかなりばらついており、また基本インストール時にはインストールされていないという致命的な欠陥を抱えています。
基本的に実行する際にはnest上で行われている事を想定していた為に、今まで大きな障害にはならなかったのですが、OSSとなった今そうも言っていられません。どうにかしてmeshi
コマンドを皆さんに簡単にお届けする必要があります。
この問題点の解決策として、Dockerを用いたソリューションをご紹介します。
実装
実際に完成した物がこちらになります。
https://github.com/whywaita/docker-meshi
https://hub.docker.com/r/whywaita/meshi