人生初のCLI開発(algolia-uploader)
初めに
つい最近まとまった時間をとれたので、以前からちょっとづつ開発していたCLIを公開しました。
ローカル環境で用意したAlgolia用のデータをコマンドひとつでリモートに反映させるという機能を持ったライブラリです。Algoliaについての説明はこの記事の対象外なので省略します。
なお、このライブラリはatomic-algoliaという、とても素晴らしいライブラリを(よりモダンな構成で)作り直したものです。
「同じライブラリがすでにあるならいらないのでは?」と思われるかもしれませんが、残念ながら長いことメンテナンスされていませんでした。
また、atomic-algolia
の1ユーザーとしてもメンテナンスされていない状態で使い続けることに不安がありました。
構成
- 言語: TypeScript
- パッケージマネージャー: yarn v4
- CLI Builder: citty
- Bundler: unbuild
- デバッグ支援: jiti
- 環境変数の処理: dotenvx
- テスト: vitest
データのやり取り
今回のライブラリについて、めちゃくちゃ適当にクラス図を描くと次のようになります。
本来はローカル環境に指定したフォルダがあるかどうかや、ユーザーが提供したファイルに記載されたデータの型にIDが含まれるかどうかのような検証もしていますが、軽微な処理のため今回はクラスとして定義しませんでした。
上記ではあまり難しいことはしていません。ローカル環境で用意したAlgolia
用のデータファイルとリモートの差分を確認し、差分があれば追加・部分更新・削除のいづれかの処理をします。
ハマったところ
-
yarn v4
でのZero-Installs
をある程度まともに触ったせいで.gitignore
で無視すべきファイルの設定などに手間取った -
yarn v4
とVSCode,devcontainer
の組み合わせで開発してみたところエディターごとに追加の設定が必要という落とし穴にはまってしまった(この対応が必須かどうかまだ微妙に分かっていない)- パッケージマネージャーとしてnpm, pnpm, yarn v1あたりを使った方が良かった気が未だにしています…(運用してみてダメそうなら変えようかと思ってます)
- 最初に
lodash
を使っていたが、CommonJSでしか動かないことを知らなかった- 詳細はここ
- 結局はes-toolkitを使うことにした
-
yarn version
patch/minor/majorコマンドで自動的にpackage.json
に記載されバージョンとgit用のtagが用意されるのかと思っていたがgit用のtagを自動的に生成できない- 今のところは
yarn version
とgit tag
コマンドを別々に実行するしかないっぽい…? - バージョン管理用に別途ライブラリを導入しようと思ってます(多分)
- 今のところは
今困っているところ
一人で開発しているので、実際にはまだ困っていないのですが、今のところデバッグする際に実際のAlgoliaのアカウントを使ってデバッグ用のアプリケーションを用意する必要があります。
私以外のコントリビューターが現れた際に本来は全く同じアプリケーションを共有してデバッグできるとベストなのですが、今のところその方法が見つかっていないのが悩みですね。
最後に
ひとまず本当に最低限の機能とテストを実装した状態でリリースまでできました。
これも、数々の先人たちが残してくれた記事とUnJsのライブラリ群、そしてatomic-algoliaのおかげです。感謝しかないですね。私の努力は全体の2, 3割くらいしかないと思います。
興味がある方がいればぜひフィードバックや各種アドバイスをお待ちしております(時間が許す限り対応したいと思っています)。
Discussion