【小ネタ】LGTM をかっこよく生成する

# LGTM :thumbsup_tone2: 
`lgtm` コマンドでかっこよく LGTM をキメていく記事です。

![a.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79598/a2dc9e4a-9791-e7f0-61be-5d9ea8e52882.gif)


# 3行で
- `figlet` と `coreutils` をインストール
- `.zshrc` に以下のエイリアスを張る

```console
alias lgtm="f=\$(ls /usr/local/Cellar/figlet/2.2.5/share/figlet/fonts/*.flf | shuf -n1) && basename \$f .flf && echo -n -e '\n' && figlet -f \$f -w 400 LGTM | tee >(pbcopy)"
```

- :sparkles: LGTM:sparkles: 

という感じです。

# 目次

- Figlet について
  - インストール
  - 使い方
  - フォント一覧
  - フォントファイル
- coreutils について
  - インストール
  - 使い方
- その他整形
  - ファイル名の取得
  - 出力 & ペーストボードへコピー
  - まとめる
- エイリアスへ登録

# Figlet

アスキーアートを生成するコマンド `figlet` を使います。

### インストール
`Homebrew` でインストールしていきましょう。

```console
$ brew install figlet
```

### 使い方
`figlet` のシンプルな使い方はこちら。
フォント名は後述のコマンドで確認できます。

```console
$ figlet -f フォント名 文字列
```

### フォント一覧
`figlet` 同梱のフォントは以下で確認できます。

```console
$ showfigfonts
```

また、下記の記事でもフォントサンプル一覧が確認できます。
参考: [figlet:コマンドラインでアスキーアートを作りたい](https://qiita.com/suin/items/bc3fe53b3630a40e045b)

例えば `rozzo` というフォントを使うと、こんな感じに LGTM が生成されます。おしゃん。

```console
$ figlet -f rozzo LGTM

888       e88'Y88  88P'888'Y88     e   e     
888      d888  'Y  P'  888  'Y    d8b d8b    
888     C8888 eeee     888       e Y8b Y8b   
888  ,d  Y888 888P     888      d8b Y8b Y8b  
888,d88   "88 88"      888     d888b Y8b Y8b 
```

こっちはクソデカフォント。
デフォルトだと出力幅が固定されており、大きいフォントを使う際に文字列の途中で改行されてしまうのですが、
`-w` で適宜出力幅を指定すると改行されなくなります。

```console
❯ figlet -f doh -w 400 LGTM
                                                                                                  
                                                                                                  
LLLLLLLLLLL                    GGGGGGGGGGGGGTTTTTTTTTTTTTTTTTTTTTTTMMMMMMMM               MMMMMMMM
L:::::::::L                 GGG::::::::::::GT:::::::::::::::::::::TM:::::::M             M:::::::M
L:::::::::L               GG:::::::::::::::GT:::::::::::::::::::::TM::::::::M           M::::::::M
LL:::::::LL              G:::::GGGGGGGG::::GT:::::TT:::::::TT:::::TM:::::::::M         M:::::::::M
  L:::::L               G:::::G       GGGGGGTTTTTT  T:::::T  TTTTTTM::::::::::M       M::::::::::M
  L:::::L              G:::::G                      T:::::T        M:::::::::::M     M:::::::::::M
  L:::::L              G:::::G                      T:::::T        M:::::::M::::M   M::::M:::::::M
  L:::::L              G:::::G    GGGGGGGGGG        T:::::T        M::::::M M::::M M::::M M::::::M
  L:::::L              G:::::G    G::::::::G        T:::::T        M::::::M  M::::M::::M  M::::::M
  L:::::L              G:::::G    GGGGG::::G        T:::::T        M::::::M   M:::::::M   M::::::M
  L:::::L              G:::::G        G::::G        T:::::T        M::::::M    M:::::M    M::::::M
  L:::::L         LLLLLLG:::::G       G::::G        T:::::T        M::::::M     MMMMM     M::::::M
LL:::::::LLLLLLLLL:::::L G:::::GGGGGGGG::::G      TT:::::::TT      M::::::M               M::::::M
L::::::::::::::::::::::L  GG:::::::::::::::G      T:::::::::T      M::::::M               M::::::M
L::::::::::::::::::::::L    GGG::::::GGG:::G      T:::::::::T      M::::::M               M::::::M
LLLLLLLLLLLLLLLLLLLLLLLL       GGGGGG   GGGG      TTTTTTTTTTT      MMMMMMMM               MMMMMMMM
```

### フォントファイル
フォントファイルは `v2.2.5` の場合 `/usr/local/Cellar/figlet/2.2.5/share/figlet/fonts/` に格納されています。確認はこちらから。

```console
$ ls /opt/homebrew/Cellar/figlet/2.2.5/share/figlet/fonts/*.flf
```


## coreutils について
上記でフォントファイルが取得できたのでフォントをランダムに1つ選ぶため `shuf` コマンドを使います。
`shuf` はみんな大好きシェルユーティリティの `coreutils` に入っています。
https://formulae.brew.sh/formula/coreutils

### インストール
こちらも `Homebrew` でインストールしていきます。

```console
$ brew install coreutils
```

### 使い方
`shuf` はこんな感じで入力要素に対して簡単にランダムな一行を取得できます。

```console
$ seq 1 10 | shuf -n1
7
```

`figlet` と組み合わせるとランダムにひとつフォントが選択できます。

```console
❯ ls /usr/local/Cellar/figlet/2.2.5/share/figlet/fonts/*.flf | shuf -n1
/usr/local/Cellar/figlet/2.2.5/share/figlet/fonts/rozzo.flf
```


# その他整形

さて、これでランダムな LTGM が使う準備ができたのであとはフォント名を出力したりペーストボードにコピーしたりします。

### ファイル名の取得
`basename` を使ってパスからファイル名を抜き出します。
第2引数を指定することで拡張子を省略できます。

```console
❯ basename /usr/local/Cellar/figlet/2.2.5/share/figlet/fonts/rozzo.flf .flf
rozzo
```

### 出力 & ペーストボードへコピー
`figlet` の出力をパイプして `tee` で `pbcopy` へリダイレクトします。
これで出力しつつペーストボードにもコピーできました。

```console
❯ figlet -f rozzo LGTM | tee >(pbcopy)

888       e88'Y88  88P'888'Y88     e   e     
888      d888  'Y  P'  888  'Y    d8b d8b    
888     C8888 eeee     888       e Y8b Y8b   
888  ,d  Y888 888P     888      d8b Y8b Y8b  
888,d88   "88 88"      888     d888b Y8b Y8b 
```

### まとめる
今までのコマンドをまとめます。
見やすさのため `echo -n -e '\n'` で一行空白を入れてます。

```console
f=$(ls /usr/local/Cellar/figlet/2.2.5/share/figlet/fonts/*.flf | shuf -n1) \
&& basename $f .flf \
&& echo -n -e '\n' \
&& figlet -f $f -w 400 LGTM | tee >(pbcopy)
```

## エイリアスへ登録
以上をワンラインにまとめ、エイリアスに登録すれば完成です！

```console
alias lgtm="f=\$(ls /usr/local/Cellar/figlet/2.2.5/share/figlet/fonts/*.flf | shuf -n1) && basename \$f .flf && echo -n -e '\n' && figlet -f \$f LGTM | tee >(pbcopy)"
```

# LGTM

あとは `lgtm` を実行すればそのままペーストできます。
レビューコメントにでもなんでもお使いください:sparkles:

<img width="538" alt="スクリーンショット 2020-06-14 16.31.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79598/db52123d-cd54-5bf9-8586-901bc765b7f9.png">