AWS SSM Parameter StoreのTUIツール「s1m」の紹介
s1mとは
ssmのパラメータストア(AWS Systems Manager Parameter Store)をTUIで操作するツールです
ssmだと長いので(?)中間のs
が1文字なのでs1m
という名前にしました
ちなみに、k8sやi18nやs1mのように、先頭と末尾のみ残して、間に残された文字をその文字数(桁数)で省略する表現を「ヌメロニム(numeronym)」というらしいです👀
使い方
Demoを見てもらうとわかりやすいと思います
Go製のバイナリをGitHub Releaseにおいていて、brewやgo installで簡単にインストールできます
# homebrew
$ brew install yumafuu/yumafuu/s1m
# go install
$ go install github.com/yumafuu/s1m@latest
# aquaでもいけます
$ aqua g -i yumafuu/s1m
機能 & 使い方
- 一覧
- 新規作成
- 編集
- 削除
- 名前のコピー
- 値のコピー
Vim風のキーバインドで操作できます。
Key | Description |
---|---|
j |
下に移動 |
k |
上に移動 |
i |
カーソル下のパラメータを編集 |
d |
カーソル下のパラメータを削除 |
o |
新しいパラメータを作成 |
c |
カーソル下のパラメータの値をコピー |
y |
カーソル下のパラメータの名前をコピー |
r |
リロード |
<ESC> |
編集モードから抜ける |
シンプルで使いやすいので、SSMのパラメータストアを操作する際にぜひ使ってみてください
Tviewの紹介
s1mはgoでTUIアプリを簡単に作れる tview
というライブラリを使いました。
TUIアプリに必要なウィジェットが揃っていて、ウィジェット操作のためのイベントも簡単に設定できます
k8s操作のためのTUIアプリ k9s
やGitHubのcliアプリcli/cli
にもこのライブラリが使われています
Wikiが充実していて、大体のことはWikiを見れば実装できると思います。
s1mの実装
使ってるウィジェットは以下の通り
tview.Flex
tview.TreeView
tview.InputField
tview.TextView
tview.TextArea
の5つです
それぞれ簡単に紹介していきます
tview.Flex
Flex
はウィジェットを配置するためのコンテナです
AddItem
でウィジェットを追加していきます
flex.AddItem(ウィジェット, 固定サイズ, 比率, フォーカス)
という形で追加します。が、正直ロジックは完全にわかってないので、色々試しながらいい感じになるように実装しました
tview.TreeView
TreeView
は画像のようなツリー構造を表示するためのウィジェットです
GetCurrentNode
でカーソルがあるノードを取得できたり、InputCapture
でキー入力を受け付けることができます。
この二つを組み合わせることで、カーソルがあるノードを取得して、そのノードに対して操作を行うことができます。
s1mでも操作の種類とリソースを取得するのに使用しています
tview.TextView
TextView
はテキストを表示するためのウィジェットです
複数行のテキストを表示するために使用します
[color]some text
とすることで色を変えることができます。
TextView.SetDoneFunc
で入力完了した時の処理を設定できます
tview.TextArea
TextArea
は複数行のテキストの入力を受け付けるためのウィジェットです
TextViewと同じく色をつけたり、TextArea.SetDoneFunc
で入力完了した時の処理を設定できます
tview.InputField
InputField
は入力を受け付けるためのウィジェットです
HTMLでいうところの <input type="text">
みたいなものです
一行の短いテキストを表示するのに使います
s1mでは、コンファームのためのy/n
の表示と入力を受け付けるために使用しています
vimmerのために:wq
でもy
の入力を受け付けるようにしています✋
他にもいろいろなウィジェットがあって大体のことはtviewで実装できると思うので気になる方は是非触ってみてください!
終わりに
s1mはドッグフーディングしてますが、体験が良いので是非触ってみてください!
フィードバックや要望があればお気軽にIssueを立ててください🙇♂️
そしてtviewも使いやすいので、TUIアプリを作る際には是非使ってみてください!
Discussion