OSSでRaycast社の人とささやかながらコラボレーションした

## 初めに
僕は、ずっとOSSで誰かとコラボレーションしてみたいと思っていた。
先日RaycastでTablePlus拡張機能を使っていて、こういう機能があればいいのになあと思う瞬間があった。
当日中に作者(Raycast社のPerさん)に提案してみたらコントリビュートする機会を得た。これが良い経験となったことから記事としてまとめる。(めちゃ嬉しかったので！！！！！！) 

## 用語の定義
1. 文中の"TablePlus"は、DBを操作するGUIクライアントツールを指します。
1. 文中の"Raycast"は、Mac向けに開発されているランチャーツールを指します。
1. 文中の"Slack"は、"Raycast Community"のSlackを指します。	

## TablePlus拡張機能について
TablePlus拡張機能はRaycastから任意のDBを選択するとTablePlusを開いて自動で接続してくれるという機能を提供しています。
DBは、TablePlusに登録しているDB(コネクション)から検索できるようになっています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408705/49958b74-822d-cc93-1450-5b920d279465.png" alt="" title="" width="450">

例えば上記のlocalをクリック、もしくはenterキーを押下すると下記のようにTablePlusが起動します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408705/c6857cb7-385f-6522-c542-1b1af4c2b997.png" alt="" title="" width="450">

## 今回抱えていたささやかなペインと解決策
### ペイン
僕がTablePlus拡張機能に抱えていたペインは、「グループ名で検索できないこと」です。
僕は、TablePlusを下記のように運用して使っていました。
* DBのプロジェクト名(グループとして設定)
    * 本番(コネクションとして設定)
    * ステージング(コネクションとして設定)
    * ローカル(コネクションとして設定)
この運用の場合、グループ名で検索できないとあまり意味がなくなってしまいます。
よって今回の「グループ名を検索できるようにする」機能提案を行いました。

### 解決策
オプションで「グループ名で検索できる」ように機能追加することで解決を行いました。
オプションとは下記の"Search by Group Name"オプションです。
![スクリーンショット 2023-04-29 12.48.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408705/ede6dd93-027b-9859-501d-5e3cfe9547ac.png)

## コントリビュートまでの流れ
機能提案からコントリビュートまでの流れは下記の通りです。

[2023-04-27 20:40頃]
RaycastのTablePlus拡張機能を使っていて、登録しているグループ名で検索したいなと思った(数ヶ月前からたまに思ってたが、想いがつもりに積もってしまった)

僕のささやかなペイン：以下のグループ名が検索で引っ掛からない("pj-X"のところ)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408705/f50eac43-e4f2-38e8-9a77-ffff3aae53f5.png" alt="" title="" width="450">

上記を本当は下記のようにグループ名で検索に引っ掛かるようにしたい。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408705/49958b74-822d-cc93-1450-5b920d279465.png" alt="" title="" width="450">

[2023-04-27 20:47頃]
実装できるかSlackの"help"チャンネルで質問する。数分でRaycast社のPerさんとThomasさんから返事がくる！！(質問前に公式ドキュメントきちんと読んどくべきでした🙇)

[2023-04-27 21:48頃]
Slackの"extensions"チャンネルでPerさんに提案を行う。
   * 僕「こういう感じでグループで検索できるようにしたい」

[2023-04-27 22:17頃]Perさんと軽い議論の末、opt-inで機能追加はありという結論になる
   Perさん「(実現できるが)これはみんなにとってのものではないと思う。プリファレンスで追加するのはいいかも」
   * 僕「そうですね、これはユーザーによる機能ですね。デフォルト無効でオプション機能で追加するのが良いですかね？」
   * Perさん「それがベストだと思う」
   * 僕「僕がコントリビュートしていいですか?」
   * Perさん「もちろん！」

[2023-04-27 23:01頃]当日中に機能追加を行いPRを作る
[僕の作ったささやかなPRはこちら](https://github.com/raycast/extensions/pull/6205#issue-1686925541)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408705/ad0dce98-d805-d1df-453a-74fcf10c8346.png" alt="" title="" width="450">


[2023-04-28 03:48頃]翌日Perさんがマージしてくれた
→やった、TablePlus拡張機能であの部分が検索できてる！！！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408705/49958b74-822d-cc93-1450-5b920d279465.png" alt="" title="" width="450">

## 得られた経験
得られた経験は下記の通りです。
* 自分が使っているOSSに対し、自分のペインを言語化し解決策を提案すること
* 議論を通じて上記の提案が妥当かを判断すること
* 解決策を自ら実装しOSSに貢献すること
* 英語を活用したコミュニケーション

## 所感
ささやかではあるが英語を使って機能提案した上で実装しリリースできた。
上記は、すごくいい経験になったと思う。Raycast社の人が作っている拡張機能に対して関われたのもめっちゃ嬉しかった。
OSS活動したい人の参考になれたら嬉しいです。
(OSS活動をする前はめっちゃ敷居高く感じていたが、挑戦すれば案外道はたくさんあると気づけたので)
[Raycast Extension](https://github.com/raycast/extensions)へのコントリビュートはOSSへの入り口としてめっちゃおすすめ。(まだ実装されていないアイデアやアプリたくさんあります！)
それと下記のLINEエンジニアの方のポッドキャストもめっちゃ参考になります！(僕もいつかNode.jsへのコントリビュートやってみたいな...この方すごい！)
[ep.131『Node.js コアコラボレーターに聞く、OSS コントリビュートの始め方』](https://uit-inside.linecorp.com/episode/131)
今後もOSS活動頑張っていきたい。ゆくゆくは難易度の高いものにも挑戦したい。

## まとめ
以上、OSSでRaycast社の人とささやかながらコラボレーションした話でした！
今回コントリビュートした拡張機能は以下の通りです。
https://www.raycast.com/pernielsentikaer/tableplus

ちなみにSlackはどなたでも参加できます！([招待リンクです](https://www.raycast.com/community))
Raycast好きな人は一緒にRaycastを盛り上げましょう！🔥

## 参考文献
[Raycast公式サイト](https://www.raycast.com/)
[Perさんとの会話です](https://raycastcommunity.slack.com/archives/C02HEMAF2SJ/p1682599693190199)
[Raycastコミュニティで自分のアイデアを実装できるか聞いてるところ]([](https://raycastcommunity.slack.com/archives/C028DTXTW3Y/p1682596025380529))