のんラボ

自作ストレージサーバー用のためのCLIツールをNode.jsで作成した話

2022/07/10 2022/07/10 自作ストレージサーバー用のためのCLIツールをNode.jsで作成した話

自作ストレージサーバー用のためのCLIツールをNode.jsで作成した話

こんにちは。のんです。

今回はCLIツールを自作してみた話をしようと思います。

前にストレージサーバーを作成したけど...

以前に自作のストレージサーバー作成した話をしました。

このストレージサーバーのAPIは画像データをBase64で送信する仕組みです。

このブログのようにサービスからAPIをコールするタイプなら面倒ではないのですが、Postmanなどを利用してちょっとした画像をアップロードするときに、いちいちBase64エンコードするツールWEBサイトを開くのは面倒でした。

そこで、画像をBase64エンコードするツールを作成しようと思いたったという経緯です。

@nonz250/image-base64

こちらが作成したツールです。

CLIツールのために利用したパッケージ

詳細はコードを見ていただければわかりますが、そもそも自分で何か特別なロジックを書いているわけではありません。便利なライブラリを導入してそれを組み合わせただけのコードです。

一応少しだけ紹介をしておこうと思います。


base64-js

バイナリデータをBase64形式に変換してくれるライブラリです。


cac

JavaScriptでCLIの基本機能を提供してくれるライブラリです。


chalk

コンソールにメッセージを表示するときに、色付けを行ってくれるライブラリです。


clipboardy

環境に関わらず、クリップボードの操作を行ってくれるライブラリです。


実装内容

エラーハンドリングは行っていないので、雑な作りですが...

copied.#! /usr/bin/env node

import base64js from 'base64-js'
import cac from 'cac'
import chalk from 'chalk'
import clipboardy from 'clipboardy'
import fs from 'fs'

const cli = cac();

cli
  .command('encode <path>', 'Convert images to base64 strings.')
  .action((path) => {
    const image = fs.readFileSync(path)
    const base64strings = base64js.fromByteArray(image)
    clipboardy.write(base64strings).then(() => {
      console.log(chalk.green('✅ Successfully. Copied to clipboard.'))
    }).catch(() => {
      console.error(chalk.red('⚠️ Failed. Please check your input.'))
    })
  })

cli.help()

cli.parse()

command メソッドでCLIで実行するコマンドの名前を決めます。ここでは encode <path> で引数に画像までのパスを指定する作りになっています。

次に、action メソッドの処理が実際にコマンドを実行するときの処理になります。

copied.const image = fs.readFileSync(path)

で、画像の読み込みをします。

copied.const base64strings = base64js.fromByteArray(image)

で、読み込んだ内容をBase64エンコードします。

copied.clipboardy.write(base64strings).then(() => {
  console.log(chalk.green('✅ Successfully. Copied to clipboard.'))
}).catch(() => {
  console.error(chalk.red('⚠️ Failed. Please check your input.'))
})

で、Base64文字列をクリップボードに貼り付けます。

CLIのコマンドをpackage.jsonに登録

下記のように、 package.json にコマンド名を登録しておくことで

copied."bin": {
  "image-base64": "index.js"
}
copied.npm i @nonz250/image-base64

したときに bin ディレクトリにシンボリックリンクを貼ってくれます。

つまり、インストールしたときに

copied.image-base64 --help

のように利用できるようになるということです。

Node Package として公開

copied.npm publish

普通に公開するだけです。

ちょっと間違えて 1.0.0unpublish してしまったので 1.0.1 から始まっていますw

初めて使う人は

copied.npm adduser

をしたり、

copied.npm login

をして、ユーザー情報をコマンドに紐付けておきます。

作成したCLIツールの使い方

これも README.md に書いてありますが、

  1. Install package.
copied.npm i --location=global @nonz250/image-base64

Restart terminal.

copied.image-base64 --help
image-base64 encode <path>
image-base64 encode ~/foo/bar.png
image-base64 encode ./baz.png 
  1. Npx command.
copied.npx @nonz250/image-base64 --help
npx @nonz250/image-base64 encode <path>
npx @nonz250/image-base64 encode ~/foo/bar.png
npx @nonz250/image-base64 encode ./baz.png

です。

最後に

今回は自作のストレージサーバーのための、自作CLIツールを作成してみました。

画像をBase64を変換する機能はあまり需要が無いかもしれませんが、公開もしていますのでよろしければ使ってみてください。

バイクの記事が書けてないので、今度こそ...今度こそ書きたいと思いますw

そのときはよしなに。

.