はじめに
この記事は、リンクアンドモチベーションアドベントカレンダー2024の記事です。
アドカレンダーに勢いで何日か枠を確保したものの、ネタが尽きてきたので今回かなりラフめな記事です🙏
ターミナルを開くたびに、ちょっとした遊び心があるとテンション上がりませんか?
以前、こちらの記事を見て面白いなと思ったので自分の環境にも導入しました。
使用するツール
- cowsay v3.03: アスキーアートを生成するツール
- toilet v0.3: カラフルなテキストを生成するツール
- fortune v9708: ランダムなメッセージを生成するツール
- lolcat v100.0.1: カラフルにテキストを表示するツール
環境構築
macOSではHomebrewを使用してインストールするのが簡単です。
brew install cowsay fortune toilet lolcat
それぞれのツールの使用
cowsay
アスキーアートが引数の文字列を出力します。
-tオプションでアスキーアートが出力する文字列、-fオプションでアスキーアートのキャラを選択できます。
なお、アスキーアートのキャラはcowsay -lで確認できます

- -t
cowsay -t 'Hello, World!'
 _______________ 
< Hello, World! >
 --------------- 
        \   ^__^
         \  (--)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
- -f
cowsay -f tux -t 'hello'
 _______ 
< hello >
 ------- 
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/
toilet
ASCIIアートでテキストを表示できます。
例えば以下のような感じ。
echo 'hello' | toilet 
                                   
 #             ""#    ""#          
 # mm    mmm     #      #     mmm  
 #"  #  #"  #    #      #    #" "# 
 #   #  #""""    #      #    #   # 
 #   #  "#mm"    "mm    "mm  "#m#" 
                                   
                                   
fortune
ランダムなメッセージを生成してくれます。
fortune 
If you have to hate, hate gently.
lolcat
渡されたテキストをカラフルにして表示します
.zshrcの設定し、起動時にアスキーアートを表示
.zshrcにコードを書き、起動時に諸々のツールが表示されるようにします。
僕のターミナルでは
- cowsayにfortuneの結果を出力させる
- cowsayのキャラをtoiletで出力させる
- 全体の出力をlolcatでカラフルにする
 のような設定をしています。
# cowsayのフォーマット一覧を配列で保持
cow_files=$(cowsay -l | tail -n +2 | tr -s '[:space:]' '\n')
cow_files_array=(${(f)${(s: :)cow_files}})
# 起動時にランダムにキャラが選択されるように乱数を生成
array_length=${#cow_files_array[@]}
random_index=$((RANDOM % array_length))
random_number=$RANDOM
# cowsayのキャラ名をアスキーアートで出力
toilet "$cow_files_array[$random_index]" | lolcat
# fortuneの戻り値をcowsayで出力
fortune | cowsay -f "$cow_files_array[$random_index]" | lolcat
source .zshrcで設定を読み込んでみると、意図した出力がされています。
日本語編
日本語での表示をしたい場合、「名言教えるよ!」のAPIを利用することで実現できます。
※.zshrcの読み込みごとにリクエストされるので注意。
# cowsayのフォーマット一覧を配列で保持
cow_files=$(cowsay -l | tail -n +2 | tr -s '[:space:]' '\n')
cow_files_array=(${(f)${(s: :)cow_files}})
# 起動時にランダムにキャラが選択されるように乱数を生成
array_length=${#cow_files_array[@]}
random_index=$((RANDOM % array_length))
random_number=$RANDOM
# cowsayのキャラ名をアスキーアートで出力
toilet "$cow_files_array[$random_index]" | lolcat
# 名言APIか名言を取得
meigen_response=$(curl -s -X GET "https://meigen.doodlenote.net/api/json.php?c=1&e=1")
# レスポンスJSONからmeigen, autherを取得してcowsayの引数にして出力
meigen=$(echo $meigen_response | jq -r '.[0].meigen')
author=$(echo $meigen_response | jq -r '.[0].auther')
echo "$meigen\n $author" | cowsay -f "$cow_files_array[$random_index]" | lolcal
おわりに
何の生産性向上にも繋がりませんが、無駄なカスタマイズもいいですよね!




