作りました。それについてのポエムです
owari コマンドとは
Go言語で制作し公開した「終わりに関するアスキーアートを出力する」だけのコマンドです。 例えば以下のような感じのを出すことができます
GitHubの表示を見るに、公開からだいたい3年ぐらい経っていそうなんですが、今でも時々使ってもらっているのを見るとうれしくて小躍りしてしまいます。 とくにスライドの最後とかに登場するのを見ると嬉しくて泣いてしまいますね。
公開後いくつかのPRが来ました。色をパイプ先にも強制するもの(#5)や、掃除・ドキュメント整備(#16, #8)などがありました。中には無限ヵ月放置してしまっていたやつもあり、マジすいませんという感じです(#38)。 ともかく、自分のリポジトリのなかでは一番PRが来たものとなりました。大感謝です。
そんなowari
コマンドですが、最近v2をリリースしました。v2としたのは実装がごろっと変わったからです。それ以外の理由はないです
v2.0について
忍法、ReleaseのMarkdownコピペの術
- 設計を見直しました
- 複数のフォントを切り替えられるようにしました(
--font
)kanban
サブコマンドに追加された、-t, --textimg
オプションは--font=NotoSansCJK
へのShorthandとなりました
- 複数のフォントを切り替えられるようにしました(
owari boom
サブコマンドがDeprecatedになりました。ご利用ありがとうございました。- 表示幅を指定する
--width
オプションがDeprecatedになりました。 kanban
サブコマンドで、ギコ猫の表示位置を棒の右側にすることができるようになりました(--reverse
)kanban
サブコマンドで、ギコ猫を二匹に増やすことができるようになりました(--twin
)--overwrite
オプションのShorthandとして-o
を追加しました--colorful
オプションのShorthandとして-c
を追加しました--duration
オプションのShorthandとして-d
を追加しましたNHK
と表記していたところをOWR
に変えました- シェル芸Bot対応として入れられていた1行目の空白をオプションに切り出しました(
-E, --insert-empty, default: true
)
v2.0にするきっかけ
1つ目の理由としては、先日来たこのIssueへのコメントです。kanban
サブコマンドの持ち手部分がずれているのが気になって建てたIssueでしたが、どう直そうか考えているうちに忘れたものでした。コメントにより思い出し修正を行いました。
しかし、修正は思った通りになりませんでした。kanban
サブコマンドで使っている∧
やд
といった文字が、フォントなどの描画される環境によって文字幅が1になったり2になったりするからです。議論の中で特定のフォント(NotoSansCJK-Regularとか)をデフォルトとして出力する案も出ました。しかしそれは今の状態と何が違うのだろうとも思いました。結局、このIssueでは表示したいフォントにあわせて出力するようなオプションを追加することを提案しました(#43)。
さてここから気になるのが「ほかのフォントに対応したい」という要望に対する解答です。同様にオプションを追加する提案を続ければ、いずれ収拾がつかなくなることは目に見えていました。何か別の方法が必要でした。いろいろ考えているうちにモチベがもりもりになって、気づいたらブランチを切っていました。考えるきっかけをくれた@eggplants
さん、本当にありがとうございました。
実装の方は、単純にJSONにテンプレをいくつか用意すればよくない?と思ったので、いくつかのテンプレの中から名前でそれらを切り替えるようにしました。
{ "Giko": { "default": [ "∧∧ || ", "( ゚д゚)|| ", "/ づΦ " ], "NotoSansCJK": [ "∧ ∧ || ", "( ゚д゚)|| ", "/ づΦ " ] }, }
こんな感じです。これらは--font
オプションを通じて切り替えができます。先の議論で追加されたオプションは--font=NotoSansCJK
へのショートカットになっています。
JSONの読み込みは、Go 1.16 で追加されたgo:embed
を使いました。ファイルの中身などをソースに埋め込む機能ですが、これだ!と思って使ったわけじゃなく「使ってみたかったから使った」ぐらいです。そうです趣味です。go:embed
の使い心地は抜群なのですが、ユーザー定義のJSONを読ませたいときにどうすればよいのかわからなくなりました。ワハハ。なんも考えてねえじゃん。
ともあれ、複数のフォント対応をPRで受け付けることが可能になりました。うれしい。
ちなみにすべてのサブコマンドで利用できる実装にしたのですが、kanban
サブコマンドにしか複数のテンプレが存在しないです。
2つ目としては、PrintUtil.go
の存在でした。このPrintUtil.go
にはアスキーアートの出力に関する処理が書かれており、各サブコマンドで共通して使っているものでした。PrintUtil.go
はUtilの名に恥じない何でも屋で、出力はもちろんのこと、各文字の 見た目上の長さ についての計算なども行っていました。
正直実装自体はさして問題ないなと思っていました。実際v2でも元の実装を再利用した部分があります。では何が問題だったかというと、PrintUtil.go
がowari/cmd
以下に置いてあることです。どうせcmd
以下に置くようなサブコマンドの実装でしか使わないのですが、サブコマンドの一覧がcmd
以下と一致しないのが気になっていました。そうです。気持ちの問題です。なんというかこっちはついでという感じです。
おわり
owari
コマンド自体はアスキーアートを出力するだけのコマンドなのですが、実際に使ってみると割と使いどころがあります。冒頭にも書きましたが、スライドの最後の一枚に配置したり、重い処理の後ろに && owari
とくっつけたりなどです。自分は owari big -con inf
で大きな「終」をイルミネーションにするのも好きです。
インストールもgo get -u github.com/xztaityozx/owari
するだけですし、ビルド済みのバイナリがよければ、GitHub Releaseに公開しています。ぜひ使ってみてくださいね。
最後にowari
は無限にアスキーアートを募集しています。「終わり」っぽかったら何でもよいのでPRやIssue投げつけてください!
$ owari kanban -ga xztaityozx | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | 終 | | 制作・著作 | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ | | xztaityozx | |_________| ∧∧ || ( ゚д゚)|| / づΦ
うむ…ずれるな…