conohasayで楽しいターミナル生活を

この記事は [ConoHa Advent Calendar 2017](https://qiita.com/advent-calendar/2017/conoha)の12日目の記事です。

[美雲このはの超☆お悩み相談室](http://circle.nikujaga.info/archives/22638471conoha-ossann.html) (前) < | > (次)[ConoHaで爆速プロキシサーバーを試す（Ubuntu 16.04 + squid](https://qiita.com/yuinore/items/cd6d350bb708ca3cf628)

----------

こんにちは、[ひろのぶ](https://twitter.com/hironobu_s/)です。

昔からUnix系OSにある有名なジョークコマンドでの一つに [cowsay](https://ja.wikipedia.org/wiki/Cowsay) があります。ウシなどのアスキーアートと一緒にテキストを表示してくれるプログラムで、技術勉強会のデモなどでもよく使われるコマンドです。

```sh
# fortune | cowsay
 _______________________________________
/ All the really good ideas I ever had  \
| came to me while I was milking a cow. |
|                                       |
\ -- Grant Wood                         /
 ---------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
```

cowsayには[ポニーが表示されるもの](https://github.com/erkin/ponysay)や[ポケモンが表示されるもの](https://github.com/possatti/pokemonsay)など、色々と亜種があります。というわけで今回ConoHa Advent Calendarと言うことで、[**conohasay**](https://github.com/hironobu-s/conohasay)コマンドを作ってみました。

<img width="619" alt="screen2.png" src="https://qiita-image-store.s3.amazonaws.com/0/44152/f3d75a23-13b9-a373-49dd-66eadf8b589a.png">

## インストール

LinuxおよびmacOSに対応しています。

[README.md](https://github.com/hironobu-s/conohasay#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)をご覧ください

Dockerがインストールされているなら、下記コマンドですぐに試すことができます。

```bash
docker run -i hironobu/conohasay -h
```

## 使い方

コマンドの引数、もしくは標準入力から渡された内容をキャラクターが喋ってくれます。単純な使い方は下記です。

```shell
conohasay  "Hi, I'm ConoHa Mikumo!"
```

実行結果

<img width="423" alt="screen1.png" src="https://qiita-image-store.s3.amazonaws.com/0/44152/5c4b34a2-33e3-c3b1-d39b-16aced5876d4.png">

いい感じですね。ただ、ちょっと荒いかな...?
 
もしターミナルのサイズが十分にある場合は、**-s**オプションでサイズを変更できます。指定できるのはs, m, lのどれかです。デフォルトでは一番小さいサイズ(sサイズ)で表示されます。

```shell
conohasay -s m -c conoha "Hi, I'm ConoHa Mikumo!"
```

<img width="534" alt="screen4.png" src="https://qiita-image-store.s3.amazonaws.com/0/44152/ba4b465a-50c2-8a5e-3373-3353b4383c44.png">

このは先生以外のキャラも表示できます。**-c**オプションでキャラを変更してみましょう。

<img width="521" alt="screen3.png" src="https://qiita-image-store.s3.amazonaws.com/0/44152/ed44aee5-908c-a045-4f4c-e639ed53ef24.png">


完全なオプションは[README.md](https://github.com/hironobu-s/conohasay)をご覧ください


## 実践的な使い方？

cowsayには[fortuneコマンド](https://ja.wikipedia.org/wiki/Fortune_(UNIX))を渡すのが定番ですが、**hostname**や**w**や**uptime**あたりをパイプで渡すのもよくやります。下記は **w** コマンドの出力をconohasayに渡した例です。

```shell
w -s | conohasay -s m 
```

<img width="817" alt="screen5.png" src="https://qiita-image-store.s3.amazonaws.com/0/44152/e2c17f21-7a50-c483-2fae-bdda65350254.png">

また、定番のカスタマイズとして/etc/motdをいじってログインメッセージを変更するというのもあります。Qiitaにも多くの記事があります。

[「motd」の検索結果 - Qiita](https://qiita.com/search?q=motd)

ConoHaの場合、modのカスタマイズには[スタートアップスクリプト](https://www.conoha.jp/guide/startupscript.php)を使うと良いでしょう。以下はCentOS向けのシンプルなスクリプトです。

```yaml
#cloud-config

runcmd:
  - curl -sL https://github.com/hironobu-s/conohasay/releases/download/current/conohasay-linux.amd64.gz | zcat > /usr/bin/conohasay 
  - chmod +x /usr/bin/conohasay
  - conohasay このホストは $(hostname) だよ！ > /etc/motd
```

こうするとVPSにログインすると、キャラクターがホスト名を喋ってくれます。
<img width="373" alt="login.png" src="https://qiita-image-store.s3.amazonaws.com/0/44152/ac062c17-200d-604c-42c9-294a1d373412.png">


## 実装とか

内部的にcowsayを呼び出すようにすればすぐ作れるかなーと思ってたのですが、「吹き出しをキャラの右に出したいなー」とか考えてたら結局ゼロから作ることになりました。

あと余談ですが、conohasayはオリジナルのcowsayをリスペクトしているため、キャラクターは**Cow**という構造体で[扱われています](https://github.com/hironobu-s/conohasay/blob/master/cow.go)。内部的にはみんなウシ扱いなんですね:cow2::cow2::cow2::cow2::cow2: (pokemonsayもそうなってたりします)

## おわりに

それではconohasayで楽しいターミナルライフを！
もし気に入ったらGitHubでスターください:star:

[hironobu-s/conohasay](https://github.com/hironobu-s/conohasay)

enjoy!