人生初の Contribute を、お世話になってる Azure SDK for Python に行ってみた

# 背景

ragas での Timeout を調査した際に、log の内容で、エラーっぽいものが表示されていた。

```powershell
json_string = json_bytes.decode("utf-8")
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 496-497: invalid continuation byte
```

Timeout が消えても残っているのが気になって調べたところ対処できたので、以前は断念した Contribute でもしてみるかと思い立った記録
　
対象 source は 以下

https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/identity/azure-identity/azure/identity/_internal/decorators.py

# 結論

とりあえず、Pull Request して、test も問題なく通った。
あとは、Review されて、通るかどうか。
反応があるまであとは待つだけかな。

結論は以下で

https://qiita.com/baku2san/items/dad5af67bcc3349a61f5

# 概要

1. Contributiing Guide の確認
1. Fork して、修正
1. Pull Request すると以下が自動で進む
    1. test
    1. API への影響確認
    1. [CLA]() ・・・なんか見落としたっぽいけど、✅ 入ってた。　　
       ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/0b8504de-12f4-7b07-a073-35a80549e793.png)
    1. [Review](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews) 
1. あとは、Review を待つ・・不安な時間を過ごす ... :sweat: 



# 詳細
## 事前準備としての contributing guide の確認

CLA を読んでおく。
初めての contribution の場合には、CLA に署名するって程度の理解

https://opensource.microsoft.com/cla/

Contributing Guide 

https://github.com/Azure/azure-sdk-for-python/blob/main/CONTRIBUTING.md

### 自動生成コードについて
`Code generated by Microsoft (R) AutoRest Code Generator.` って書いてあるものは、自動生成コードなんで通常のマージと違うよって感じ詳細は  https://github.com/Azure/azure-rest-api-specs/  へ（未読）

### ツールについて

以下のようなものがあるんで、理解してね
- [Tox](https://tox.wiki/en/latest/)
    - テスト環境管理
- [Virtualenv](https://virtualenv.pypa.io/en/latest/)
    - Tox で利用する仮想環境
- [pytest](https://docs.pytest.org/en/stable/)
    - 単体テスト
- [pylint](https://pylint.readthedocs.io/en/stable/)
    - linting 
- [Mypy](https://mypy.readthedocs.io/en/stable/) & [Pyright](https://github.com/microsoft/pyright)
    - 型チェック（型解釈と完全性検証）
- [Sphinx](https://www.sphinx-doc.org/en/master/)
    - ドキュメント生成
- [Bandit](https://bandit.readthedocs.io/en/latest/)
    - セキュリティ問題の調査？
- [Azure DevOps](https://azure.microsoft.com/products/devops/)
    - CI/CD

### ビルドとテスト

- Tox の説明
- Tox の使用例

とか、Tox について色々書いてある。とりあえず必要になったときに見返す感じかな

### サンプル

- サンプルでは 3rd party library は使わないようにしようって程度の理解

サンプル作成する機会があったら考えよう

### 行動規範

以下にある。

https://github.com/Azure/azure-sdk-for-python/blob/main/CODE_OF_CONDUCT.md

要約すると

誓約: すべての貢献者とメンテナーは、ハラスメントのない環境を提供することを誓います。

基準: 包括的な言葉を使用し、異なる視点を尊重し、建設的な批判を受け入れることが推奨されます。不適切な行動には、性的な言葉や画像の使用、トローリング、ハラスメントなどが含まれます。

責任: プロジェクトメンテナーは、許容される行動の基準を明確にし、違反行動に対して適切な措置を講じる責任があります。

適用範囲: この行動規範は、プロジェクトスペース内およびプロジェクトやコミュニティを代表する個人が公的な場で行動する場合に適用されます。

執行: 不適切な行動はプロジェクトチームに報告され、調査と適切な対応が行われます。

## 実際にやったこと

### 前提

library での問題を、利用環境で修正して動作確認

### 準備

1. main ブランチの Fork
1. 事前の修正を反映
1. Commit
1. Pull Request 作成
    1. 初めてだよね？ってことで
      ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/31cc6687-10fc-920d-a9d7-e40e5e416c05.png)
        1. [CONTRIBUTING.md](https://github.com/Azure/azure-sdk-for-python/blob/c694e3fcaefc93ad0cdffff5762723e3c1438b05/CONTRIBUTING.md) を確認してね。事前に見ているので・・多分大丈夫？
    1. で、test を local でって話だが・・後述の理由でパス
1. PR 後は、自動で test などが進んで、いつの間にかCLAも終わってた。で、以下は Review 待ちの状態
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/6e55d38d-e472-e432-c56d-6d1c377570b1.png)



#### local test をパスした理由

- [eng_sys_checks.md](https://github.com/Azure/azure-sdk-for-python/blob/main/doc/eng_sys_checks.md) だったり、[azure-sdk-tools/README.md](https://github.com/Azure/azure-sdk-for-python/blob/main/tools/azure-sdk-tools/README.md) をみても、tox 環境を作って `azure identity` の test をする方法がよくわからない。
- 他の PR を見てみたら、幾つかある checklist が空っぽの人もいる :thinking: 
- import 時に動作確認をしている
- 変更点は、log 用のところで、そもそも test がない？
   [search results](https://github.com/search?q=repo%3AAzure%2Fazure-sdk-for-python%20log_get_token&type=code)
- やってみて、怒られてみようという気になった
   誰でも最初は失敗する筈・・と :baby: 


# あとがき

初めての事って勇気がいりますよね。

とはいえ、人生初の Contributor としての第一歩を踏み出せたのはよかったと思おう :laughing: