初めてOSSにコントリビュートした記録
はじめに
初めて OSS(VOICEVOX) へのコントリビュートに挑戦して、昨日マージされました 🎉。やったことは 3 行増やしただけですが、OSS コントリビュートは今年の目標の 1 つだったのでプルリクエストを出すまでの流れをまとめておきます。
同じように「コントリビュートしたい!」と思っている方の助けになれば良いなと思っています。
コントリビュートするまでの流れ
つよつよであればhttps://goodfirstissue.dev/のようなサイトから良さそうな issue を探すと思うのですが、大体のリポジトリは言語が英語だったので心のハードルが高く「日本語でやり取りできる OSS ないかなー」と思っていました。
そうしてニコニコでずんだもんの動画を見ていたときに「VOICEVOX って OSS だったような…」と気付き実際に OSS だったのでコントリビュートすることを決めました。
Issue を見つける
どの OSS にコントリビュートするか決めたので、どのような issue があるか眺めて見ました。今回はメンテナの方が初心者歓迎タスク
というラベルをつけてくださっていたのでそこから内容を確認し、自分でもできそうなものがないか探しました。
VOICEVOX には投稿日現在、初心者歓迎タスクが 18 個あります
今回は新しめの issue に簡単そうなものを見つけたので今回はこれに取り組みます。
リポジトリを Fork する
右上から Fork して、手元に clone してブランチを切って作業をしました。
コードを書く
改めて Issue の内容を確認してみます。
辞書単語登録時にスペースがあっても登録できてしまう #1115
文字列に半角スペースが含まれているとうまく登録されないというバグのようです。issue を出している方が「ここらへん直したらいいんじゃね」といっていたのでそのファイルを見てみます。
Vue は初めてだったので少し戸惑いましたがなんとか読めました。半角文字を Unicode エスケープでマッチさせて全角までずらす際に半角スペース(U+0020)が含まれていないのがバグの原因っぽいです。 なので、似たような問題を防ぐために Unicode プロパティが Separator のものすべて全角スペースに置き換えるようにしました。
今回調べて改めて知りましたがスペースってこんなにあるんですね。実際に追加したコードは以下です。
https://github.com/VOICEVOX/voicevox/pull/1133/files
3 行しか追加してないのに内訳がコメント、本文、改行で計 3 行と実質 1 行しか書いていません 😂。
プルリクエストを出す
修正が完了し、ローカルでもとりあえずの動作確認ができたので、push からのプルリクエストを出します。
テンプレートが用意されていたので、それをベースにしつつ他の人のプルリクエストをパクりつつ書いていきました。
マージされる
今回はプルリクエストを出して寝ている間にレビューされマージまで行われていました。メンテナの方ありがとうございます!!
その他の感想
テストの重要性
VOICEVOX ではテストが用意されていたので(どれくらい網羅しているかは見てない)、修正後にテストを走らせて他のファイルに影響がでていないか簡単に確認できました。
テストを書くのは大概面倒ですが変更しやすくなるという大きいメリットを強く感じたので、テストを書く意欲が湧いてきました。
とりあえずやってみること
OSS のイメージとして僕のようなよわよわでは理解できないコードが大量にあると思っていましたが、(1 ファイルしか見ていませんが)意外と読むことができました。
なので、OSS コントリビュートするにあたり 1 番のポイントは取り掛かりやすいバグや issue を見つけるところなのだと思いました。
今回で OSS コントリビュートへの心的ハードルを下げる事ができたので、これからはリポジトリの issue を積極的に見て、できそうなものには取り組んでみたいです。
終わりに
自分の文章を読み直すと、ただのお気持ちを書いただけの記事になっていました。
上にも書きましたが、自分は **「OSS はつよつよなエンジニアがやるもの」**だと思っていましたが、たった 3 行の修正を通して OSS へのハードルがかなり低くなりました。
どれだけ簡単なことでも、OSS に貢献する人が増えていけば業界全体にとってプラスになると思います。特に VOICEVOX のような広く使われているものがより便利になれば、 動画などを作成される方が増えて直接的に自分の嬉しさに繋がります。
これを読まれている方も、気になる OSS に貢献してみてはどうでしょうか。