rails consoleのようにgolangを扱えるCLIを作った
はじめに
「よーし、なんか複雑なロジックの関数ができたぞ....ってこれちゃんと動くか?」
と開発しながら思うことがよくあります。
golangはコンパイル言語であり、この場合さっと確かめる方法は
- その関数を呼び出すテストを書く
- 適当なmain関数で直接呼び出す(
go run hoge/main.go的な)
くらいな気がします。
そこで、
「golangでも rails console的なのあったらサクッと試せるのになぁ」
と思う節がたまにあったので、作ってみました。
今も足りない機能、改善したい点がたくさんあるので絶賛継続開発中です。
今回はそれについて、デモベースで簡単に紹介します。
簡単なデモ
gonsoleは、rails conosoleにinspireされて作ったものです。
プロジェクトルートでgonsoleコマンドを実行することで以下のようなことができます。
- プロジェクト内&標準パッケージの変数/定数参照
- プロジェクト内&標準パッケージの関数/メソッド呼び出し
また、プロジェクト内の変数や関数にアクセスする際には補完が出て、Tabキーで選択するだけで呼び出すことができます。
デモ的に、以下のサンプルプロジェクトで動かしてみます。
プロジェクトルートでgonsoleと打って起動します。

まずは、animalパッケージのDog型のメソッドDescribe()を呼び出してみましょう。
dog変数にNewDog()コンストラクタを格納するところから始めましょう。
まずは、呼び出す要素のパッケージを指定し、関数を指定します。以下のように補完が出力され、Tabで選択することができます。自力で書いても問題はありません。

引数を入れて定義します。

入力が不正であればエラーが出ます。
以下の場合だと、同じdogを再宣言していることと引数の型が違うことの2つで怒られています。

メソッドを呼び出してみましょう。
変数dogの型を記憶しているので、それに沿ったメソッドの補完を出してくれます。また、変数の格納している型がinterfaceだった場合は、そのinterfaceに定義されているメソッドの補完が返されます。

また、メソッドチェーンも可能です。
もちろん、コンストラクタの返り値が1つ出会った場合に限定されます。

他にも、詳しくはREADMEをご覧ください(日本語版もあります)。
継続開発の展望
自分の方で確認できているBug、対応できていないケース、機能はIssuesに挙げています。
その中でも自分が第一に取り組みたいのは以下です。 現状のgonsoleでは、publicな要素(大文字から始まる)にしかアクセスできません。どちらかといえば、シュッと実行したいのはprivateな関数だったりします。
また、これをMCP Serverとして提供するのも面白そうだなと考えていたりもします。
さらに良いgolangによる開発体験を目指して、継続開発していけたらなと思います。
Bug等あれば、Issuesにお願いします。
Discussion