ChatGPTとDeepLを使って初めてOSSへContributeしたら想像以上にうまくいった話

.NETのAngleSharpというOSSで以下の記事に記載した内容のバグを発見しました。

https://qiita.com/noobow/items/2764c96d34a869b4c9da

Githubのリポジトリを確認した限りまだ誰からも報告されておらず、このバグの存在で自分が作っているシステム（誰にも公開していない自分専用のものですが）が.NET 9にバージョンアップできない状態だったのでGithubにissueとプルリクを作成しようと思い立ちました。OSSへContributeしてみたいという気持ちは昔からうっすらありましたが、別にプログラミング能力が高いわけでもないし英語もできないので諦めていたところがあります。
今回のプログラム修正は非常に簡単な内容だったのでプログラミング能力的なハードルはなく、今の時代ならAI（ChatGPTなど）や機械翻訳の力を借りれば英文もなんとかなるのではという気がしたのでやってみることにしました。ちょうど年末年始の休暇で時間がたっぷりあったというのもありますね。
いくつかの英文作成をChatGPTとGeminiで試してみて、ChatGPTの方がしっくりくる感じがしたのでChatGPTで進めました。
ちなみにissue向けの英文を作れるのかまず聞いてみたところ、以下のような回答が返ってきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/8e08c272-58d3-6b9f-5607-0b0220843fa4.png)

※おことわり：本当はGPTとの会話を画像じゃなくテキストで乗せたほうが役に立つと思うのですが、レイアウト的にChatGPTの表示そのままの方が見やすいと思うのと、単純に面倒だったので画像でご容赦ください。

# やったこと
## まず日本語で整理した
これが[前述のQiitaの記事](https://qiita.com/noobow/items/2764c96d34a869b4c9da)になります。AIに英文書いてもらうにしても、内容が整理できてないとだめなので、

* 最小構成の再現条件を見極める
* 事象を文にまとめる（文章だけでなく内容に応じて箇条書き）

ということを行いました。

## AIを使ってissueを作成していることを宣言する英文を作成

AIや機械翻訳が作る文がネイティブにとってどの程度違和感があるのか全く分かりませんが、間違いがゼロだとは思えないので宣言しておくことが無難だと思いました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/d2ffd4bb-35f2-952a-6300-796c2fe2b298.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/b32fcd3c-f951-2a58-e006-bdd36c179b64.png)

```
I am not fluent in English, so I am using AI assistance to create this issue. 
Please forgive any mistakes in grammar or word choice. 
Feel free to ask for clarification if anything is unclear. Thank you for your understanding.
```

## 自分で考えた文を「英文にして」とお願いして、さらにDeepLで逆翻訳して確認
これは単純な機械翻訳なので、AIではなくDeepLでもできることですが何となくAIの方がいい文になってる感じがしました。また、その英文をDeepLで日本語に翻訳して意味がおかしくないか確認しました。想定通りの意味になっていない場合は、少しニュアンスを変えて再度ChatGPTに英文を作ってもらいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/c3c9c39c-5e15-7cd1-a67a-cb6839aa57b0.png)

## Qiitaの記事を読んでもらった
Qiitaのリンクを渡して、この内容を英語のissueにしてと雑なお願いをしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/26fb4095-f374-1a54-81e2-568ecb0cd23a.png)
ある程度はまとまってましたが、若干認識がずれているところがあるのと、このリポジトリのテンプレートで指定されている内容があるのでこの内容は一部採用しつつ次に進みました。

## 「Githubのissue用に英文にして」とお願いした
「Githubのissue用に」とつけることで単純に翻訳するだけでなく、項目分けされたりしてバグレポートとして適切な形に勝手にしてくれました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/86ee2dc2-9af8-f8fd-6f28-310ad9af247e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/8024c25f-c0e3-65ac-2a60-77a2f2ea8b11.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/91980806-18c2-a0c7-6d2b-da61956c8e27.png)

## 必要な項目を示して、それに合う内容を書いてとお願いした
ここまでで、不具合の内容は説明できる状態になったのですが、今回のissueで必要項目となるものに（そのリポジトリでテンプレートで指定されている）「Expected Behavior」「Actual Behavior」があります。
最初は、これも自分で文章を考えて英文にしてもらおうかと思ったのですが、前段で一通りバグの内容をChatGPTが理解できているのではと考えて、単に"「Expected Behavior」「Actual Behavior」を買いて"とお願いしてみました。結果、そのまま使える内容が出てきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/19607631-4f9b-9aba-3011-d24273089a91.png)

## 内容を組み合わせてissueを起票
ここまでで出来上がった英文を組み合わせて、バグレポートのテンプレート通りの項目に当てはめてissueを起票しました。

## プルリク
issueの方で具体的ない修正内容を示していたので、プルリクでは細かいことは書きませんでしたが、以下のような英文を作ってもらいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/ac2a0239-41dd-8d6b-1fa5-9a2378e006aa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/3a178249-8dae-52a5-9100-9eda0cfcf96b.png)

# 結果
特に質問などはなく、issueの内容は理解されたようでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/1dbece8c-2e7f-5f0f-595d-56be53365d46.png)
またたまたまタイミングが良かったのかプルリクもすぐにマージされ、さらにほかのたまっていたコミットも含めてすぐリリースされました。
2024/12/31 16:40 issue起票
2024/12/31 23:09 プルリク作成
2025/01/01 00:01 プルリクマージ
2025/01/01 01:00ごろ？ リリース

# 感想
単純な英訳はもちろんできると思っていましたが、Githubのissueに必要な項目に勝手にまとめてくれたり、バグの内容を理解して指定した項目の内容を書いてくれたりと、予想以上にスムーズに進めることができました。
これならこれからもContributeできるかもという気がしました。

# まとめ
* issue作成前に日本語でまとめたQiita記事

https://qiita.com/noobow/items/2764c96d34a869b4c9da

* issue

https://github.com/AngleSharp/AngleSharp/issues/1212

* Pull request

https://github.com/AngleSharp/AngleSharp/pull/1213

* Release

https://github.com/AngleSharp/AngleSharp/releases/tag/1.2.0

# 追試
今回は初めてだったので試行錯誤で色々やりましたが、最終的にはこうやれば簡単だったのではと思った方法があるのでやってみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/22a8980f-e51a-3dca-3b17-133d8468661a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149348/e69acda6-6815-7ae4-1158-e5e06eeba2b9.png)

ほぼ修正なしでそのまま使えそうな気がします！すごい！