Syntax HighlightされるcatコマンドをGoで作った

(image)Syntax HighlightされるcatコマンドをGoで作った

Goの習作としてSyntax Highlight可能なcatコマンドを作った。

モチベーション

全く同じコンセプトのツールとしてccatがあるのだが、デフォルトのハイライト色が黒背景のターミナルだと見づらいという問題があった。

更に強力なcatコマンドとしてRust製のbatがあるのだが、これをccatとともに併用していて配色がとても美しい感じに仕上がっていたので「よし、じゃあGoで配色がいい感じのやつ作ってみるか」と思い立って作成開始したやつ。

ちなみにccatとの実装の違いでいうと、ccatはsynatax highlightにsourcegraph/syntaxhighlightを使っていて、今回作ったnyanalecthomas/chromaを使っている。

使ったGoライブラリ・サービスなど

Goライブラリ

  • パッケージ管理: go modules
  • CLIライブラリ: cobra
  • Syntax Highlightライブラリ: chroma
  • リリース管理: goreleaser
    • homebrew tapへのリリースも自動でやってくれている: homebrew-nyan
  • テストライブラリ: testify/assert

サービス

今後の展望

  • 今回CIはTravisで動かしたけど先日リリースされたGitHub Actons(v2)が使えるようになったら乗り換えたい
  • 行番号表示などの機能拡張も今後やっていきたい

Goでツール書いてみた感想

  • パッケージ管理の機能が言語としてサポートされたのは嬉しい(Go 1.11〜)
  • プログラムのコンパイル、実行、テストなどすべてが早いので開発体験がとても良い
  • 普段はRubyを使うことが多いが、書き味の良さではGoはRubyに負けるかもだけど、Goは堅牢で高速なアプリケーションを書くのに良い
  • Goコミュニティは日本でもとても活発だし、ライブラリのエコシステムも整っているのが素晴らしい