小規模な車輪の再発明をしてみた話し
年末年始ではあったのですが今年はこういう状況でしたので、特にどこにも出かけることもなく基本的には家にいました。で、特にすることもなかったので、ふとCLIツールを作ってみようと思い立って作ってみた話しです。
ただ、作ったものは人真似ですでにあるものを自分用アレンジして作っただけなので、エラソーなことは何も言えないのですが、これは意外と良いものかもしれないな、とも思ったのでこの記事を書いてみました。
作ったきっかけ
仕事でGoを触るかもしれない可能性があるので、肩慣らしに何か作りたくなった、というのが主な理由です。
Go自体は以前、以前触ったことがあったものの、正直ちょっと忘れてしまっている部分もあり、いきなり仕事でやれるか不安、というのが今回、何か作るきっかけになっています。
それでどうせ作るのであれば、自分が使いそうなものが良いだろうと思ったこと、CLIなら規模感的にも良さそう、という理由で以前から愛用していたpetというスニペットを管理するCLIツールを真似て作ってみようと思いました。
学習目的での車輪の再発明、みたいなものです。
作ったもの
上述したように登録したコマンドを一覧から実行できるツールになります。
petから自分に必要なものを抜き出して微妙にアレンジしたようなツールになりました。
ちなみに下の動画ではsn='snippet-man'というaliasを設定した状態の動画になります。
作ったことで得られた知見
* エスケープシーケンスでカーソルや文字の配置を制御できるということ。せいぜい、promptに色をつける時に変な記号を指定させるんだな、ぐらいの認識でした。今回はこれを駆使してリッチなUI,というのは実現しませんでしたが、もし次に何かCLIツールを作るのであれば、もうちょいリッチな見た目とかを作ってみたいと思いました。
* 知らなかった便利ライブラリを知ることができました。今回はgo-fazzy-finder(最初はfzfとの連携方式にしようとした)やらtomlを読み書きできるライブラリなど。
* 多少とはいえ、Goでのプラグラミングに慣れることができました。
あえて似たようなツールを作ってみた感想
自分で使う道具を自分で作るのは完全に自己満足の世界ですが、単純に楽しいです。
もちろん、なんらかの事業に即したシステム開発の現場でフレームワークやライブラリを使わずに自前開発するのは、いろんな意味で問題があります。最悪クビになります。やめましょう。
一方で学習目的なら、これほど有用な手法はないんじゃないかというぐらい、有効だと感じましたし楽しいです。次はもう少し規模の大きなものを自分なりに実装してみたい気持ちになっています。
強制的にコードリーディングができるのも良かったです。今回でいえば、この機能はpetではどのように実現しているのか、という軸でコードの中身を読んで、上記のライブラリを知ったり、処理方法を学んだり、ということができました。
まとめ
すでに存在しているツールやシステムを真似て作ってみるのは個人的には案外楽しいものでした。
自分自身は強烈に何かを作りたい、というタイプではないので、基本的には既存のツールなどで満足してしまいますが、自分なりの視点で似たようなものを作るのもそれはそれで有りなのではないかと思いました。