Zenn
💻

人生初のCLI開発(algolia-uploader)

2025/03/13に公開

初めに

つい最近まとまった時間をとれたので、以前からちょっとづつ開発していたCLIを公開しました。

ローカル環境で用意したAlgolia用のデータをコマンドひとつでリモートに反映させるという機能を持ったライブラリです。Algoliaについての説明はこの記事の対象外なので省略します。

なお、このライブラリはatomic-algoliaという、とても素晴らしいライブラリを(よりモダンな構成で)作り直したものです。

「同じライブラリがすでにあるならいらないのでは?」と思われるかもしれませんが、残念ながら長いことメンテナンスされていませんでした。

また、atomic-algoliaの1ユーザーとしてもメンテナンスされていない状態で使い続けることに不安がありました。

構成

  • 言語: TypeScript
  • パッケージマネージャー: yarn v4
  • CLI Builder: citty
  • Bundler: unbuild
  • デバッグ支援: jiti
  • 環境変数の処理: dotenvx
  • テスト: vitest

データのやり取り

今回のライブラリについて、めちゃくちゃ適当にクラス図を描くと次のようになります。

本来はローカル環境に指定したフォルダがあるかどうかや、ユーザーが提供したファイルに記載されたデータの型にIDが含まれるかどうかのような検証もしていますが、軽微な処理のため今回はクラスとして定義しませんでした。

上記ではあまり難しいことはしていません。ローカル環境で用意したAlgolia用のデータファイルとリモートの差分を確認し、差分があれば追加・部分更新・削除のいづれかの処理をします。

ハマったところ

  1. yarn v4でのZero-Installsをある程度まともに触ったせいで.gitignoreで無視すべきファイルの設定などに手間取った
  2. yarn v4とVSCode, devcontainerの組み合わせで開発してみたところエディターごとに追加の設定が必要という落とし穴にはまってしまった(この対応が必須かどうかまだ微妙に分かっていない)
    • パッケージマネージャーとしてnpm, pnpm, yarn v1あたりを使った方が良かった気が未だにしています…(運用してみてダメそうなら変えようかと思ってます)
  3. 最初にlodashを使っていたが、CommonJSでしか動かないことを知らなかった
  4. yarn versionpatch/minor/majorコマンドで自動的にpackage.jsonに記載されバージョンとgit用のtagが用意されるのかと思っていたがgit用のtagを自動的に生成できない
    • 今のところはyarn versiongit tagコマンドを別々に実行するしかないっぽい…?
    • バージョン管理用に別途ライブラリを導入しようと思ってます(多分)

今困っているところ

一人で開発しているので、実際にはまだ困っていないのですが、今のところデバッグする際に実際のAlgoliaのアカウントを使ってデバッグ用のアプリケーションを用意する必要があります。

私以外のコントリビューターが現れた際に本来は全く同じアプリケーションを共有してデバッグできるとベストなのですが、今のところその方法が見つかっていないのが悩みですね。

最後に

ひとまず本当に最低限の機能とテストを実装した状態でリリースまでできました。

これも、数々の先人たちが残してくれた記事とUnJsのライブラリ群、そしてatomic-algoliaのおかげです。感謝しかないですね。私の努力は全体の2, 3割くらいしかないと思います。

興味がある方がいればぜひフィードバックや各種アドバイスをお待ちしております(時間が許す限り対応したいと思っています)。

開発中お世話になった素晴らしい記事たち

Discussion

ログインするとコメントできます