Pythonのシングルクォーテーションとダブルクォーテーションの使い分けってどうするの問題

#はじめに
Pythonを書いているとシングルクォーテーション`'`とダブルクォーテーション`"`どっちでも同じなのでは？と思い色々調べました。
各企業、個人ごとにベストプラクティスがあると思いますがとりあえず個人的な意見と自分なりに調べた見解を書きます。

# 個人的な見解
## その１. シングルクォーテーションの方が打つのが楽
自分はUSキーボードを使用しているのでシングルクォーテーションを打つとき1キーを押すだけで済むで楽なので個人的にはシングルクォーテーション推し。
`むしろこれができるからUSキーボードにしてるまであります`。

JISキーボードでコードを書いていたこともありましたがもう戻れないと思います。JISキーボードで開発をしている方がいたらどのようにシングルクォーテーションまたはダブルクォーテーションを打っているのか教えて欲しいです。ショートカットとか作成してるんですかね？
海外はJISキーボードをおそらく使ってないと思うので、この議題は日本だけかも知れません。

<img width="1339" alt="スクリーンショット 2019-10-09 16.47.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166626/b94b106b-35ab-914a-ed7c-bbff24d117ee.png">
ここから先はキーボードの話になりそうなのでここで止めておきます。
## その２. 文字列にシングルクォーテーションが含まれている場合はダブルクォーテーションを使う

```python
text_single = 'This pen is Tom\'s'
text_double = "This pen is Tom's"
```

あんまり文字列にシングルクォーテーションを入れることは多くはないですが、このときだけは仕方がないと思いつつダブルクォーテーションで囲っています。もちろん逆も然りです。

シングルとダブル両方文字列に入れないといけない状況があるならば自分はシングルクォーテーションで囲うでしょう。

## その3. docstringは三連ダブルクォーテーションを使う
これは自分はVSCodeで普段Pythonを書いているのでその拡張機能[autoDocstring](https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring)を使用しています。

ダブルクォーテーションを三つ続けてダブルクォーテーションを押してからエンターキーを押さないとdocstringを生成してくれないのでdocstringではダブルクォーテーションを使用しています。

![ezgif-3-607ee20e743d.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166626/a605edf3-a057-2d9e-2d5d-0428d23219fd.gif)

[PEP 257](https://www.python.org/dev/peps/pep-0257/)ではdocstringはダブルクォーテーションで書こうと記述があります。
>For consistency, always use """triple double quotes""" around docstrings. Use r"""raw triple double quotes""" if you use any backslashes in your docstrings. For Unicode docstrings, use u"""Unicode triple-quoted strings""".

>There are two forms of docstrings: one-liners and multi-line docstrings.

#GitHubで調べてみた
やはり一個人よりもGitHubのコントリビュータの方達がどう使い分けているかをみた方がいいと思ったのでいくつかプロジェクトを見てみました。
以下のプロジェクトのコードを読みました。選定理由は特にないです。

- [cpython](https://github.com/python/cpython/blob/master/Lib/http/client.py)
- [mypy](https://github.com/python/mypy)
- [docker-compose](https://github.com/docker/compose)
- [numpy](https://github.com/numpy/numpy)
- [django](https://github.com/django/django)

## わかったこと
GitHubのプロジェクトのコードを見て大まかに感じ取れたこととしては以下の2つ。

シングルクォーテーションとダブルクォーテーションがたまに混ぜっていたものもありました。
(`作為的なものかも知れない`)

- やはりdocstringはダブルクォーテーション
- raiseの文章ではダブルクォーテーションを使っていることが多い
- エスケープ文字はなるべく使用せずにシングルクォーテーションとダブルクォーテーションを使い分けている

raiseの文章ではダブルクォーテーションを使っているのはシングルクォーテーションを文章内に使いたい場合があるからですかね？ あまり日本語の文章でシングルクォーテーションを使用しないので新鮮でした。

#Googleの公開されているリポジトリを見てみる
[Google Python Style Guide](https://github.com/google/styleguide/blob/gh-pages/pyguide.md)を公開しているくらいですから、きっとシングルクォーテーションとダブルクォーテーションの使い分けもしているはずと思いこちらもいくつか調べました。

- [python-fire](https://github.com/google/python-fire)
- [yapf](https://github.com/google/yapf)
- [pytype](https://github.com/google/pytype)

docstringについては[PEP 257](https://www.python.org/dev/peps/pep-0257/)に準拠するようです。

>3.8.1 Docstrings
Python uses docstrings to document code. A docstring is a string that is the first statement in a package, module, class or function. These strings can be extracted automatically through the __doc__ member of the object and are used by pydoc. (Try running pydoc on your module to see how it looks.) Always use the three double-quote """ format for docstrings (per PEP 257). A docstring should be organized as a summary line (one physical line) terminated by a period, question mark, or exclamation point, followed by a blank line, followed by the rest of the docstring starting at the same cursor position as the first quote of the first line. There are more formatting guidelines for docstrings below.

## わかったこと
内容は前記したプロジェクトと同じですが徹底度合いが違いました。
驚くほどダブルクォーテーションをdocstringやメッセージに使用していました。どうしてもダブルクォーテーションを出力したい場合のみシングルクォーテーションを使用していました。

前記した`cpython`や`mypy`よりもシングルクォーテーションとダブルクォーテーションの使い分けがはっきりしているなという印象を持ちました。さすがGoogle!

# まとめ
やはり`stack orverflow`などでも議論されていますが個人的にグッと来たのは

>So there is no difference. Instead, people will tell you to choose whichever style that matches the context, and to be consistent. And I would agree - adding that it is pointless to try to come up with "conventions" for this sort of thing because you'll only end up confusing any newcomers.


>違いはありません。 代わりに、人々は、コンテキストに一致するスタイルを選択し、一貫性を保つように指示します。 そして、私は同意します-この種のことについて「慣習」を考え出そうとするのは無意味であると付け加えます。なぜなら、あなたは新参者を混乱させるだけだからです。

https://stackoverflow.com/questions/56011/single-quotes-vs-double-quotes-in-python

今までの内容が愚問になってしまいましたが、`一貫性を保つ`この一言に尽きると感じました。

みんなもシングルクォーテーションとダブルクォーテーションどっちとか迷う時間があったら、その時間をコードを書く時間に回しましょう。
私はこれを調べておそらく3時間くらいは取られました(この記事を書く時間を含め)

![english_completely.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16913/48fa0c03-361b-45d5-8212-3f1bf214ff90.gif)
>[進捗がなかったらメンターが現れるATOM](https://qiita.com/iwamatsu0430/items/8e19995d3eedf1d6a823) より