🎄

vdotenv というモジュールをたまにメンテしている

2024/12/01に公開

この記事は zztkm振り返りカレンダー Advent Calendar 2024 1 日目の記事です。

自分の個人的な振り返りをやっていくという目的のアドカレになっており、だいぶ緩いし備忘録のような記事が多めになると思いますが、コツコツ更新していく予定です(予定は未定)。

第一回目になる今回はタイトルのとおりたまにメンテしているライブラリである vdotenv ついて書いてみようと思います。

vdotenv とは

V 言語で実装した V 言語向けの dotenv ライブラリです。
https://github.com/zztkm/vdotenv

dotenv とは、.env ファイルから環境変数の設定をプログラム実行環境にロードするための仕組みです。
README にも書いていますが Go 言語で実装された joho/godotenv をインスパイアしています(Go 言語が読み書きできたのでこのライブラリを参考にした感じです)。
開発のモチベーションとしては、当時 V 言語でアプリケーションを書いてみたいと思っていて、もともと Go や Python でアプリケーションを書いているときにも dotenv ライブラリを利用していたので、V 言語にも欲しいと思って実装しました。

たまにメンテしているとは

メンテを積極的にやっておらず、たまにメンテしている理由は以下です。

  • 自分が必要だった機能は実装できた
  • V でアプリケーションを書くモチベーションが今はない

要は機能が自分にとって十分だと当時は満足してしまったので興味が薄れてしまい、モチベーションが低下したというのが理由です。

振り返り

初めて 30 スターを超えた

特に自分で V 言語の discord に流した覚えはないのですが、コミュニティの中に少しでも需要があって共有されてスターをつけてくれる人がいた、という体験は非常に貴重だなと思いました。承認されて嬉しいと言うよりは、誰かの需要を満たせて嬉しいという感動があったのは非常によく覚えています。

V 言語には vpm という V 言語向けのパッケージマネージャーが存在しており、ウェブサイトにモジュールを登録することで、ユーザーにインストールしてもらいやすくなります。

余談ですが、vpm で dotenv と検索すると vdotenv の他にもいくつか dotenv ライブラリが存在を確認できるのですが、自分のライブラリがトータルダウンロード数で 1 位になっていて少しうれしくなりました(正直自分のライブラリよりよくできているし高機能だなーと思うものもありますが)。

https://vpm.vlang.io/search?q=dotenv

初めて知らない人のコントリビュートを受け入れた

vdotenv がコミュニティ内で共有された影響か、このライブラリを見つけてコントリビュートしてくれる人が現れました。
この方はこちらのレビューにも丁寧に対応してくれたり、欠けていた doc comment を追加してくれたりと vdotenv を実装する上で大切な作業をやってくださいました、非常に感謝しています。

また、別の人はよく Issue で問題を報告してくれました。自分はできるだけすぐに修正して PR を出すように心がけ、報告してくれた方も早めにレビューをしてくれました。

このようになんの面識もない方の協力をもらえたのは OSS をやってみたからこそだろうなと思いました。

V 言語が安定していない言語故の対応

V 言語はまだ安定していない発展途上のプログラミング言語です。
破壊的変更が言語側に入った結果、ライブラリが動作しなくなるというのを検知するために、毎週月曜日に CI を実行する用に GitHub Actions を設定しています。

これによって言語側の破壊的変更を検知することができます(ただしアクティビティが 60 日間ないと Actions が自動的に無効化されてしまうので、たまにメンテしてあげたほうが良いかもしれません)。
週 1 も実行する必要もないかもしれないので、もうちょっと頻度を下げるか検討中です。

vdotenv のこれから

久しぶりにコードを読んでみて、こういうことやろうと思ったことを箇条書きにします。

おわりに

自分が作ったライブラリでちゃんとコミュニティ貢献できたなと思う唯一のライブラリである vdotenv について紹介しました。
基本は自分が使いたいというモチベーションですが、それが誰かの役にたった瞬間というのは代えがたい喜びだなと思いました。

自分の一人アドベントカレンダーはこんな感じのものが続くと思います、コツコツやっていきます。

Discussion