Golangで作るTUIツール
GolangのBubble Teaというライブラリを使って、TUI1で動作するPingツールを作ってみました。
https://github.com/papu-nika/penguin
TUIはOSのインストールや設定から、さまざまなツールなどで使われており、一定目的に沿ったツールには向いていると思います。 サンプルを作りながら、Bubble Teaの使い方を紹介します。
Bubble Teaとは
CharmというCLI用のライブラリを団体?の提供しているライブラリのようです。Charmは他にも面白そうなCLI用のライブラリを提供しています。 TUIというとlessコマンドやtviewのように全画面ターミナルを使うタイプがイメージがありますが、Bubble TeaはCLIの一部分だけをTUIとして利用できます。
このまま動くサンプルコードです。
"Hello, World!"を表示して「q」か「Ctrl+c」で終了するだけの最低限の動作になります。
package main
import (
"fmt"
"os"
tea "github.com/charmbracelet/bubbletea"
)
type model struct {
}
func (m model) Init() tea.Cmd {
return nil
}
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.KeyMsg:
switch msg.String() {
case "ctrl+c", "q":
return m, tea.Quit
default:
return m, nil
}
}
return m, nil
}
func (m model) View() string {
return "Hello, World!"
}
func main() {
var m model
p := tea.NewProgram(m)
if _, err := p.Run(); err != nil {
os.Exit(1)
}
}
tea.NewProgramの引数のtea.Modelは以下のようなシンプルなインターフェイスになっています。Bubble TeaのREADMEではElm Architectureに基づくフレームワークだと書かれています。MVU(Model, View, Update)だそうで、DjangoのMTV