🦖

DenoでSSM Parameter StoreのCLIツール作った

2023/12/22に公開

はじめに

こんにちは!
ispecのVPoEのいしかわです

Deno Advent Calendar 2023の21日目の記事です!

https://qiita.com/advent-calendar/2023/deno

ECSでサーバーを立てる時の環境変数に入れる値の置き場として AWS Systems Manager Parameter Storeが使えますが、値の確認がめんどくさい!

ってことでFuzzy FindできるCLIを作りました🦖

作ったもの

SSM Parameter Storeの FuzzyFindや値の取得、作成、更新ができます

Usage

https://github.com/YumaFuu/denosm

denoとBrewでインストールできます

# Deno
$ deno install -A https://deno.land/x/denosm/index.ts -n sm -f

# Homebrew
$ brew install YumaFuu/tap/sm

使用技術

ベースはみんな大好き デノ(ディノが正しいらしい) です🦖
そのシンプルさから愛用していますが、特にこういったCLIツールを作るのにはもってこいです

Dax

https://github.com/dsherret/dax

Dax はDenoで動くShellツールです。

shellでパイプやリダイレクトを頑張って書くのは読むのも書くのも大変ですがそれを解決してくれるツールです。

import $ from "https://deno.land/x/dax/mod.ts";

const list = await $`aws ssm describe-parameters --profile ${profile}`.json();

こんな感じでaws cliの結果のjsonをjsでゴニョゴニョしています

zennでもいくつかの記事が上がっていますので、要チェック!!

https://zenn.dev/hashrock/articles/5dae2e171533a6

https://zenn.dev/impactaky/articles/d1d9876f6e1128

Cliffy

DenoでCLIツールを作る際のフレームワークです

https://cliffy.io/

https://github.com/c4spar/deno-cliffy

smコマンドでは、cliコマンドの作成とtty, keypressを使っています。

import { colors, tty } from "https://deno.land/x/cliffy@v1.0.0-rc.3/ansi/mod.ts";

// ...
tty.cursorHide();

// ...
tty
    .cursorTo(0, 0)
    .eraseScreen();

// ...
highlighted += colors.bold.blue(s);

promptやtable描画などもあるのでDenoでCLIツールを作る時はこれ使えば間違い無いです✌️

fzf-for-js

fzfのアルゴリズムのJS実装です
fzfはコマンドラインで愛用していますが、今回はDenoなので esm.sh で配信されているfzf-for-jsを使いました

const fzf = new Fzf(options);
let hits = fzf.find(search);

といった感じでかなり簡単に曖昧検索が実装できます

ghr

https://github.com/tcnksm/ghr

GitHub Release に複数のアーティファクトをアップロードするツールで体験が良かったです

denoは複数のプラットフォームに向けてバイナリを作成できるので、それをリリースしました

actions用のパッケージがあったのでこちらを使っています

https://github.com/fnkr/github-action-ghr

release:
    name: Release Packages
    runs-on: ubuntu-latest
    needs:
      - compile
    steps:
      - uses: actions/checkout@v3

      - { uses: actions/download-artifact@v3, with: { name: x86_64-unknown-linux-gnu,  path: release/ } }
      - { uses: actions/download-artifact@v3, with: { name: x86_64-apple-darwin,       path: release/ } }
      - { uses: actions/download-artifact@v3, with: { name: aarch64-apple-darwin,      path: release/ } }

      - name: Release
        uses: fnkr/github-action-ghr@v1
        env:
          GHR_PATH: release/
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}

終わりに

かなり簡単に満足いくものが作れました

値の作成、更新の機能もつけたらもっと使いやすくなりそうなのでぼちぼちやっていきたいです🚶

GitHubで編集を提案
ispec inc.

Discussion