シェル芸人 meets Docker

#はじめに
シェル芸人とは？

>**シェル芸** とは、主にUNIX系オペレーティングシステムにおいて「マウスも使わず、ソースコードも残さず、GUIツールを立ち上げる間もなく、あらゆる調査・計算・テキスト処理を CLI端末へのコマンド入力 一撃で 終わらせること」（USP友の会会長・上田隆一による定義）である。
この技術を持つ人物を **シェル芸人** という。

ちょっとした成り行きでインフラの週に書くことになりましたが、私はアプリケーション畑の人なので、インフラについて高度な事が書ける訳では無いので、その辺は生暖かい目で見てください。
しかし現在はフルスタック・エンジニアが求められているということで、**アプリの人もインフラをポチっと構築できるようになるべき**との思いで挑戦してみました。
無茶ぶりした、もとい、機会をくださった@shiracoさんに感謝します！

#やったこと
以下の機能を持つ簡単なDockerイメージを作成して、[DockerHub](https://hub.docker.com/)にアップしました。
・Terminalから一般的なUnixコマンドが使えるLinux環境を作る
・Open-ups-Tukubaiコマンド（後述）をインストールする

素のUbuntuカーネルイメージから作ったので、makeがないとか、Pythonがないとか、日本語はどうやっていれるんだ！とか色々ありましたが、昔（90年台）にslackwareでLinuxインストールした時の素朴な感動が蘇りました。

#動機
**公式版**
プロジェクトでTukubaiコマンドを使うことになったので、自習環境を作りたいわけです。（素振り大事）
個人的に自習するだけならばVirtualBox + Linuxですぐに出来るのですが、チームメンバーにはLinuxやUnixの未経験者が多く、環境構築をフォローして回るのが面倒なので、Dockerイメージからさくっとみんな同じ環境が使えるようになると良いなぁという思いからです。

**個人的にはDockerをやってみたかっただけです！**

#Tukubaiコマンドとは？
あまりうまく説明出来る自信がないので、下記のサイトを見てください。ざっくり言うと、USP研究所というところがユニケージ開発手法というのを提唱しており、そのなかのツールがTukubaiコマンドです。(ここやや棒読みで)

[usp研究所のサイト](http://www.usp-lab.com/)

[Tukubaiコマンドリファレンス](https://uec.usp-lab.com/TUKUBAI_MAN/CGI/TUKUBAI_MAN.CGI?POMPA=LIST)

Tukubaiコマンドは有償ですが普及のために利用頻度の高いものがOSSで公開されています。（ただし有償版がC言語実装なのに対してこちらはPythonです）
[Open-Usp-Tukuai](https://github.com/usp-engineers-community/Open-usp-Tukubai)

ユニケージそのものの説明ではないですが、こちらの書籍もお薦めです。
[シェルプログラミング実用テクニック](https://www.amazon.co.jp/%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AE%9F%E7%94%A8%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%E4%B8%8A%E7%94%B0%E9%9A%86%E4%B8%80-ebook/dp/B00XKU53U4)

## Tukubaiコマンドの美味しいところ
Tukubaiコマンドは100近くあるらしいのですが、その中でもマッチングが簡単に出来るjoinコマンドというのを紹介します。

### 例題） データファイル（トランザクション）にマスターファイルからの情報を付加する
＜トランザクションファイル（第3フィールドでsort済み）＞
M004 ChiliBeansAndBakedPotato E001
M002 JelousGuy E002
M003 Imagine E002
M001 TheDockOfTheBay E003
M005 Jamming E005

＜マスターファイル＞
E001 akira
E002 John
E003 Otis

＜コマンド＞
\> join2 key=3 master sorted_transaction

＜結果の標準出力＞
M004 ChiliBeansAndBakedPotato E001 **akira**
M002 JelousGuy E002 **John**
M003 Imagine E002 **John**
M001 TheDockOfTheBay E003 **Otis**
M005 Jamming E005 *****

※ご覧いただければわかるとは思いますが、トランザクションの第3フィールドがマスターへのForeign keyに該当します。マッチングの結果マスターから取得した値が、第4フィールドにセットされています。
わずか1行でマッチングが書けるのでかなり便利です。
これをCOBOLやJavaで書くとなるとひと仕事ですよね。

#環境
- Window10(64bit)
- Docker Toolbox
- ベースのイメージはUbuntu

#Dockerのお勉強
今回は私にとって一番ハードルが高かったのはDockerです。
何しろ名前は聞いたことあっても触ったことがなかったのです。
教科書は以下の本にしました。

ちなみに著者の@Dr_ASAさんとは@shiracoさんに紹介してもらい、一度西新宿で昼食を一緒にしました。（~~この情報どうでもいいですね~~　Docker本の著者はたいへん清楚で美しかったです！）

今ならamazonでなんと680ポイントもつくので皆さんも買いましょう！
[プログラマのためのDocker教科書](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEDocker%E6%95%99%E7%A7%91%E6%9B%B8-%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98%EF%BC%86%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AB%E3%82%88%E3%82%8B%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AE%E8%87%AA%E5%8B%95%E5%8C%96-WINGS%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E9%98%BF%E4%BD%90%E5%BF%97%E4%BF%9D-ebook/dp/B017UGA7NG/ref=sr_1_1?s=digital-text&ie=UTF8&qid=1481332289&sr=1-1&keywords=docker+%E9%98%BF%E4%BD%90)

#DockerHubにあげたイメージ
ここにあがってます。
[akiraabe/open-tukubai](https://hub.docker.com/r/akiraabe/open-tukubai/)



#How To Use!
[こんな感じです！](https://qiita-image-store.s3.amazonaws.com/0/130262/23e085fb-fb4a-9fdd-be11-0c7f4c17e382.png)![image](https://qiita-image-store.s3.amazonaws.com/0/130262/2d0c6a71-9641-594b-0b26-d260965a2504.png)

少し説明すると、イメージには、Open-Tukubaiコマンドがインストール済みで、akiraという一般ユーザが作成済みです。
上のコマンドプロンプトで叩いている「self」というのがTukubaiコマンドです。
これはざっくりいうとawkのショートカットのようなもので、
awk '{print \$1 " " \$3}' 
と等価です。

Tukubaiコマンドのマニュアルは、
/Open-usp-Tukubai-master/MANUAL
に格納されています。

#ところでチームへの展開はどうなったの？
さて肝心のチームへの展開の件ですが、なんと会社のPCは32bitなのです。
ご存じの通りDocker業界は32bitのコンピュータの存在を眼中に入れておりません。従って、結局は必要な人はVirtualBox+Linuxという構成でやっております。

#最後に
最後までお付き合いいただきありがとうございました。
明日は、@seiketkmさんです。よろしくおねがいします！