🐄 Go でアスキーアートジェネレーターである cowsay を作りました!
作成日: 2021/07/15
0

Code-Hex/Neo-cowsay - GitHub

🐮 Fast, funny, everyone wanted? new cowsay!!

 _____________
< こんにちは! >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Go で cowsay を作ってみました。私のターミナルを使った作業風景をいろんな方に見せると「そのアスキーアートかわいいね!」や「何その画面!?」といった様々な反応をいただけます。

この cowsay は toilet というコマンドにパイプを渡して作っていました。

        # Colorful Cowsay using fortune
        function random_cowsay() {
           fortune -s -n 100 | cowsay -f `ls -1 /usr/local/Cellar/cowsay/3.03/share/cows/ | sed s/\.cow// | tail -n +\`echo $(( 1 + (\\\`od -An -N2 -i /dev/random\\\`) % (\\\`ls -1 /usr/local/Cellar/cowsay/3.03/share/cows/ | wc -l\\\`) ))\` |  head -1` | toilet --gay -f term
        }
        if which fortune cowsay >/dev/null; then
            while :
            do
                random_cowsay 2>/dev/null && break
            done
        fi && unset -f random_cowsay

このコードを zshrc に書き込んで呼び出していました。
このように「ランダムで虹色な cowsay 」を実行するために毎回シェルの起動が重いというのに耐えていたわけですが、そろそろ限界だったので今回上記のような cowsay を作成しました。

🐄 パッケージとして使う

何かしらパッケージを作る際に、遊び心で cowsay を実行できるようになるといいなと思い、 cowsay を文字列として受け取れるようにしました。
README にも書いてますが、こんな感じで使うこともできます。

package main

import (
	"fmt"

	cowsay "github.com/Code-Hex/Neo-cowsay"
)

func main() {
	say, err := cowsay.Say(
		cowsay.Phrase("Hello"),
		cowsay.Type("default"),
		cowsay.BallonWidth(40),
	)
	if err != nil {
		panic(err)
	}
	fmt.Println(say)
}

🐃 コマンドを使う

$ cowsay Hello
 _______
< Hello >
 -------
       \   ^__^
        \  (oo)\_______
           (__)\       )\/\
               ||----w |
               ||     ||

オリジナルでは不可能だった日本語にも対応してます。go-runewidth のおかげですね!

 ____________________
< これが人生であります.. >
 --------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ランダムで召喚します

asciicast

虹色(toilet っぽく)、グラデーションカラー([lolcat]asciicast

何気に頑張ったスーパー🐮さんモード(マ○オっぽく)

このキャプチャ重いので、実際に動かしたほうが良いです。
asciicast

gopher も喋る!!

 ___________
< Go 最高!! >
 -----------
    \ 
     \    ,_---~~~~~----._         
  _,,_,*^____      _____``*g*\"*, 
 / __/ /'     ^.  /      \ ^@q   f 
[  @f | @))    |  | @))   l  0 _/  
 \`/   \~____ / __ \_____/    \   
  |           _l__l_           I   
  |          [______]           I  
  |            | | |            |  
  |             ~ ~             |  
  |                             |   
  |                             |

🐂 インストール

Mac and Linux users via Homebrew

$ brew update
$ brew install Code-Hex/tap/neo-cowsay

パッケージとして

go get -u github.com/Code-Hex/Neo-cowsay

cowsay コマンド

$ go get -u github.com/Code-Hex/Neo-cowsay/cmd/cowsay

cowthink コマンド

$ go get -u github.com/Code-Hex/Neo-cowsay/cmd/cowthink

最後に

色とりどりでとてもユニークなアスキーアート達と一緒に、あなたの寂しいターミナルをデコレーションしてみませんか!?

こんにちは!プログラミングを始めてしばらく経ちますが、最近50万円の案件を獲得することができるようになってきました!これからも精進して参ります!