🛡️

UnJS で CLI ツールを開発してみる

2024/08/23に公開

作ったもの:
https://www.npmjs.com/package/credaw

はじめに

AWS SDKやAWS CLIを使用する際、認証情報を ~/.aws/credentials および ~/.aws/config で管理するのが一般的です。しかし、複数のプロファイルを管理する際にこれらのファイルを手動で編集することは、煩雑でミスが発生しやすい作業となります。

そこで、これらのAWS認証情報をCLIで簡単にCRUD(作成・読み取り・更新・削除)できるツール「credaw」を開発しました。本ツールは、コマンドラインから直感的にAWSプロファイルの操作が可能です。

~/.aws/credentilas
[example]
aws_access_key_id=xxxxxxxxxxxxxxxxx
aws_secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
~/.aws/config
[profile example]
region=ap-northeast-1

credawの紹介

credawは、AWSプロファイルを管理するための軽量なCLIツールです。

リポジトリとnpmパッケージ

主な機能

  • プロファイルの一覧表示
  • 新規プロファイルの作成
  • 既存プロファイルの更新
  • プロファイルの削除

インストール方法

npmを使用して簡単にインストールできます

npm install -g credaw

使用方法

インストール後、以下のコマンドで credaw を起動します

credaw

このコマンドを実行すると、プロファイルの作成や削除、編集などの操作を対話的に行うことができます。以下のGIFでは、credawのインターフェースの例を示しています。

開発環境

credawの開発には、UnJSエコシステムを活用しました。主要な開発ツールとして以下を使用しています。

UnJS以外には

これらのツールにより、効率的な開発環境を構築することができました。
それぞれ、軽く紹介させてください。

unbuild

unbuildは、TypeScriptのビルドツールです。

https://github.com/itoao/credaw/blob/main/package.json#L14-L30

  • package.json に少し設定を書くだけで、複数の出力形式(CommonJS、ESM、d.ts)を生成
  • ゼロコンフィグで使用可能な一方、 build.config.ts で詳細な設定も可能
  • ビルド時の最適化やツリーシェイキングをサポート

credawでは、unbuildを使用してプロダクションビルドを生成し、異なる環境での互換性を確保しています。

jiti

jitiは、TypeScriptやESMをランタイムでネイティブにサポートする軽量なランナーです。

https://github.com/itoao/credaw/blob/main/package.json#L29

credawの開発中は、jitiを使用してTypeScriptコードを直接実行し、すばやい開発サイクルを回せました。

pkg-types

pkg-typesは、package.jsonを型安全に扱うためのライブラリです。

https://github.com/itoao/credaw/blob/main/src/index.ts#L34-L49

  • package.json の読み取りと解析を型安全に行う
  • パッケージのメタデータへの簡単なアクセスを提供
  • モノレポ構造にも対応しているらしい

credaw -version でバージョンを表示させる用に使ってます。

citty

cittyは、モダンなCLIアプリケーションを構築するためのフレームワークです。

https://github.com/itoao/credaw/blob/main/src/index.ts#L16-L71

  • コマンドとサブコマンドの定義が簡単
  • オプションの自動解析と型推論

コマンドライン引数の解析にcittyを使っています。宣言的に書けるのが印象的でした。

consola

consolaは、標準のconsoleよりも出力のカスタマイズがしやすいコンソールロガーです。
consola.error() と定義するだけで赤色になるのでとても便利です。

https://github.com/itoao/credaw/blob/main/src/index.ts#L190

  • 複数のログレベル(debug、info、warn、error等)をサポート
  • 出力のカスタマイズが容易(色、フォーマット等)
  • プログレスバーやスピナーなどの高度な機能も提供

credawでは、consolaを使用してユーザーへの情報表示やデバッグ出力を管理しています。

UnJS以外にも、以下のツールを使用しています。

antfu/eslint-config

antfu/eslint-configは、Anthony Fu氏が作成したESLint設定です。

https://github.com/itoao/credaw/blob/main/eslint.config.mjs

  • 最新のJavaScript/TypeScriptベストプラクティスを適用→FlatConfigにも対応
  • Vue、React、Svelteなど多くのフレームワークに対応

自分で管理するのが面倒なので、最近はずっとこれを使っています。

inquirer

inquirerは、対話式のコマンドラインUIを作成するためのライブラリです。

https://github.com/itoao/credaw/blob/main/src/index.ts#L74-L94

  • さまざまな入力タイプ(テキスト、パスワード、選択肢など)をサポート
  • プロンプトの連鎖や条件分岐が可能
  • カスタマイズ可能な見た目と使いやすいAPI

おわりに

credawを使用することで、AWS認証情報の管理が格段に簡単になります。手動でファイルを編集する手間が省け、複数のプロファイルも効率的に管理できます。

また、今回の開発にあたっては、自作CLI開発で使ってみたら便利だったUnJSライブラリの紹介を参考にさせていただきました。UnJSエコシステムを活用することで、効率的な開発環境の構築と保守性の高いコードの作成が可能になりました。

credawをぜひ試していただき、フィードバックをいただけると幸いです。AWSプロファイルの管理をより簡単にすることが、このツールの目標です。

もし、credawが役立つと感じた場合は、itoao/credaw にスターをつけていただけると嬉しいです。また、Issueやプルリクエストを通じたフィードバックも大歓迎です。

Discussion