1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

lolcatをCrystalに移植した

Last updated at Posted at 2024-12-04

lolcat.gif

はじめに

lolcatとは、Rubyで作られたツールで、ファイルや、標準入力からインプットされたデータをカラフルに出力するツールである。

image.png

lolcat(ロルキャット)は海外のインターネットミームで、ネコの画像にユーモラスで風変わりなキャプションを、正しくない英語で付けたものだそうである。

なおChatGPTでも念のため確認したがlolcatコマンドにLGBTの社会的文脈はありません。

できたもの

標準ライブラリしか使っていないので、Windowsでも動くのである。
ここでは help メッセージを表示しているけど、普通の使い方としては、

ls | lolcat

みたいな感じで標準入力からデータを渡す感じだと思う。

気づき

  • Rubyのeach_lineはデフォルトでchompしないがCrystalはする(罠)
    これについては、下記のフォーラムを参照してほしい。

  • ARGF.each_line はMacではOKだがUbuntuでは何らかのバッファーがあり、リアルタイムで標準入力を読まない(RubyでもCrystalでも同様)。なのでRubyではIO#sysread、Crystalでは IO#read(byte_chunk) 使うなど小技が必要になる。

ちょっと疑問が残っているところ

コマンドラインオプションを構造体にしているけれども、これが本当にいいかどうかはちょっと考えどころ。構造体はスタックに確保されるため効率はいいのだけれども、メソッドに渡されるたびにコピーされてしまう。これは、getter を使っている場合でも同じだったはず。そしてLolcatは、このコマンドラインオプションをメソッドに渡すコードがたくさんある。classにして参照するか、@で直接参照した方がいいのかも。

このツールはコマンドラインツールを作成するためのサンプルの一つとして作成したけれども、そのあたりは今後の課題です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?