サイズ: 4361
コメント:
|
サイズ: 4020
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 6: | 行 6: |
---- /!\ '''Edit conflict - other version:''' ---- |
|
行 9: | 行 7: |
---- /!\ '''Edit conflict - your version:''' ---- 昨日は ApparitionK さんの [鍋会@MMA](http://appakun.hateblo.jp/entry/2016/12/16/%E9%8D%8B%E4%BC%9A_%40MMA)でした。 ---- /!\ '''End of edit conflict''' ---- |
|
行 37: | 行 30: |
[^1]: https://twitter.com/hideyu_k/status/758127114730164224 |
この記事はMMA Advent Calendar 2016 17日目の記事です。
昨日は ApparitionK さんの 鍋会@MMAでした。
はじめに
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
まずは、最初にローカルマシンにDockerをインストールします。
$ curl -sSL https://get.docker.com/ | sh
その後、お使いのシェルで以下のような設定を投入してください。
alias meshi=`docker run whywaita/meshi`
あとはローカルでmeshi
コマンドを打てば完了です。
whywaita% meshi
kenta
whywaita% meshi
shirataka
whywaita% meshi
DJ
whywaita% meshi
mac
実装
Dockerfileは以下です。
1 FROM alpine:latest
2 MAINTAINER whywaita <whywaita@whywrite.it>
3
4 RUN apk add --no-cache coreutils curl \
5 && curl "https://raw.githubusercontent.com/uecmma/meshi/master/meshi" -o /bin/meshi \
6 && chmod +x /bin/meshi
7
8 CMD /bin/meshi
たった8行で実装する事が出来ました。簡単ですね。
shufコマンド以外はどんなディストリビューションでも入っていたため、ディスク容量が非常に軽量なAlpine Linuxを採用しました。
結果として約11MBほどで今回のコマンドは実現出来ています。
Ubuntuなどをそのまま利用するとそれだけでかなりのディスク容量を消費するので、この手は非常に有効的でした。
これ以上するとなると、1度実行したらもう不要なcurlコマンドを削除するなどが考えられるのですが、それほど効果が大きくないためそのまま放置しています。
まとめ
今回はDockerを用いてmeshiコマンドをどこでも起動出来るようにしてみました。
これでご飯に迷ってもいつでも運用出来ますね!!!!!!
meshiコマンドはOSSですので、もし気になる所などがありましたら是非Pull Requestなどどうぞ。