Python関係のググり方Tips集

# はじめに
2021年現在、**Python**は新たなライブラリや機能が盛んに開発されている言語であり、知識のアップデートや問題解決のために**「ググる」頻度が高い**と想定されます

そこで今回、Python関係でGoogle検索する際に**意識すると検索効率が上がるTips集**を、記事にまとめてみました

# ググるときの流れ

一般的には、以下の流れでググるかと思います。

1. ググるためのワードを考える
2. グーグル検索を実行し、検索結果から適切なサイトを選択する

順を追って、検索効率アップに繋がると感じたテクニックを紹介します。

# 1. ググるためのワードを考える
まず、Python関係で検索が必要となる事態には以下のようなパターンが多いかと思います。
A. あるライブラリの使い方や機能が分からないので、使い方を調べたい
B. コード実行中にエラーが発生したので、解決策を調べたい

それぞれ、検索ワードを決める際に有効だと感じたTipsを紹介します。

## A. あるライブラリの使い方や機能を調べたい
Pythonは様々なライブラリを組み合わせて使用することが多いため、未知のライブラリ使用時に、使用法をGoogleで検索することが多いかと思います。

私の経験上、調べたい情報のフェーズに合わせて以下のパターンで検索すると、目当ての情報に効率よく辿り着けると考えています。

①`python＋[機能]`で検索して、候補となるライブラリ名称を調べる
②`[ライブラリ名]`で検索して、ライブラリの全体像を掴む
③`[ライブラリ名]＋使い方`で検索して、日本語の解説記事を探す
④`[ライブラリ名]＋[詳細な機能]`で検索して、機能ごとのHow to記事を探す

### ①`python＋[機能]`で検索して、候補となるライブラリ名称を調べる
そもそも**目当ての機能を実現するライブラリの名称が分からない**時は、この方法で検索します。

例えばグラフを描画したい場合、
`python グラフ`
で検索します。

複数の候補が出てくる場合、例えばグラフ描画の場合、「matplotlib」「seaborn」「bokeh」などが出てくるので、
`matplotlib seaborn bokeh 違い`
や
`python グラフ ライブラリ 比較`
等で検索すると、それぞれのライブラリの特徴がまとめられている記事が上位に表示され、ライブラリ選定の参考になるかと思います。

注意点は、各**ライブラリのメリットデメリットの感じ方には個人差がある**ことで、ライブラリ比較をしている複数のサイトの意見を統合し、共通する特徴のみを抽出した方が、より客観的な判断ができるかと思います。

### ②`[ライブラリ名]`で検索して、ライブラリの全体像を掴む
シンプルな検索方法で、公式ドキュメントや企業の解説記事等、信頼度の高い記事が上位に来る傾向があります。
ライブラリ全体の内容を掴むためには、まずこの方法で検索するのが無難かと思います。

### ③`[ライブラリ名]＋使い方`で検索して、日本語の解説記事を探す
例えば、matplotlibというライブラリの使い方を知りたい場合、`matplotlib 使い方`と検索すると、日本語でライブラリについて手広く解説したページが上位に来るので、日本語のまとまった情報を手に入れたい場合は便利です。

この検索方法ではQiitaやZennの個人記事が上位に来ることが多いので、記事の信頼性については吟味が必要です（詳しくは[後述](https://qiita.com/c60evaporator/items/ebccb74c591631952eb3#2-検索結果から適切なサイトを選択する)します）

他にも、`matplotlib まとめ`というように、「まとめ」という言葉を入れることもお薦めです

### ④`[ライブラリ名]＋[詳細な機能]`で検索して、機能ごとのHow to記事を探す
ライブラリの全体としての使用法ではなく、一つ一つの機能について調べたいときの検索法です。

例えばmatplotlibで散布図をプロットしたい場合、`matplotlib 散布図`と検索します。

この検索方法もQiitaやZennの個人記事が上位に来る事が多いので、記事の信頼性について吟味が必要です。

日本語だけで十分な信頼性のある記事が見つからない場合、
`matplotlib scatter`といった具合に全て英語で検索すると、英語の解説記事が出てきて候補となる情報が増やせるかと思います。

## B. ライブラリインストール時やコード実行中にエラーが発生したので、解決策を調べたい
Pythonに限った話ではないですが、プログラミングにおいて焦る瞬間の一つが、ライブラリインストールやコード実行時にエラーが発生した際ではないでしょうか？

根が深いエラーではいわゆる「ハマった」状態となってしまい、解決に丸一日を費やしてしまうこともあるので、一刻も早く解決策に辿り着きたい際には、以下のような方法を組み合わせる事が有効だと感じております。

①`[エラーメッセージ全体]`で検索
②エラーが発生しているライブラリを特定して検索
③ライブラリのバージョン違いの解消

### ①`[エラーメッセージ全体]`で検索
まずは、エラーメッセージの中から重要部分をそのままコピペして検索します。

また、通常の検索ではエラーメッセージの一部の単語のみが含まれた検索結果が上位に来てしまい、目的のエラーとは異なる検索結果が大量に紛れ込む恐れがあるため、[こちらの記事](https://apricot-design.com/staffblog/google検索機能「完全一致検索-（ダブルクォーテ/)のようにダブルクォーテーションで完全一致検索することも、解決策にたどり着く上で有効かと思います。

#### ※PowerShellでのライブラリインストール時のエラーについて
Windows10においてデフォルトのPowerShellでライブラリをインストールすると、エラーが出た際にエラーが赤文字で表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/8ea4ec72-7bf7-da3d-45f1-06f5ae3784c3.png)
この赤文字は配色的に非常に見辛いですが、ここに重要なエラーメッセージが記載されていることも多いので、見落とさないように注意してください。

インストールエラーは環境等でも発生有無が変わるので厄介ですが、典型例としては

・プロキシ環境下のためインストール元のリポジトリにアクセスできない（[参考](https://watlab-blog.com/2020/03/16/pip-proxy-error/)）
・Visual Studio等のC++をビルドするためのツールが不足している（[発生例](https://qiita.com/c60evaporator/items/78b4148bac6afa4844f9#error-microsoft-visual-c-140-or-greater-is-requiredと出た時)）
・Cythonが不足している（[発生例](https://qiita.com/hoto17296/items/cec2c3e9a5af5eb8d84d#cython-と-numpy-をインストールする)）
・ライブラリのバージョン同士が合っていない（[後述](https://qiita.com/c60evaporator/items/ebccb74c591631952eb3#ライブラリのバージョン違いの解消)）

等があります。何はともあれ日本語と英語を駆使して粘り強く検索をする事が重要です（[参考](https://qiita.com/Tita_boc16/items/22d90ecab0d5d720bb56)）

### ②エラーが発生しているライブラリを特定して検索
出力されるエラーメッセージは異なるエラーであっても共通するワードが多いため、エラーメッセージのみで検索すると、他のライブラリの全く異なるエラーが検索結果に紛れ込む恐れがあります。

このような場合、
`[エラーが発生しているライブラリ名]＋[エラーメッセージ]`
で検索すると、該当ライブラリのエラーのみに絞って検索ができて便利です。

この検索を実施するためには、エラーが発生しているライブラリの名称を特定する必要があります。
エラーの発生ライブラリと発生位置はエラーメッセージにも記載されていますが、以下のようにライブラリ内に入ってデバッグをすると、発生時の変数の値も分かるので、より詳細に原因を探ることができて便利です。

https://daeudaeu.com/import_debug/

### ③ライブラリのバージョン違いの解消
他の環境では動くコードが、自分の環境では動かないことも多くあります。
このような現象の多くはライブラリのバージョン違いにより発生します。

②でエラーが発生しているライブラリを特定したのち、そのライブラリのバージョンを上げる、または落とすことで（[pipの場合](https://www.solima.net/python/archives/153)、[condaの場合](https://blog.imind.jp/entry/2019/03/03/012600)）、エラーが解消する可能性があります。

もしエラーが解消した場合、
`[エラーが発生しているライブラリ名]＋[エラーが発生したライブラリのバージョン]＋[エラーメッセージ]`
で検索し、他の人が同様の現象を報告していれば、バージョン違いが原因のエラーだと特定する事ができます。

#### ライブラリのバージョンを一括指定
バージョン違いが原因でエラーが発生していた場合、他の環境に移った際に成り行きでライブラリをインストールすると再発する恐れがあります。
このような場合、**エラーが起こらないと確認済のライブラリのバージョンを指定して一括インストール**すると便利です。

ライブラリのバージョンを指定して一括インストールしたいときは、pip環境ではrequirements.txt（[参考](https://note.nkmk.me/python-pip-install-requirements/)）が、conda環境ではenvironment.yaml（[参考](https://qiita.com/yubessy/items/2dd43551aa8308dc7eca#環境設定の書き出しと再利用)）が便利です。

# 2. 検索結果から適切なサイトを選択する
1.で検索して上位に出て来たサイトの中から、サイト自体や内部の情報を取捨選択するフェーズです。

取捨選択の「拾う」方の情報は、目的によっても異なりますが、基本的には以下の条件を満たすことが望ましいです

・問題解決につながる
・内容が信頼できる（間違いではない）
・第三者に提示する資料として適切（一次資料がベスト）

検索上位によく出てくるサイトに関して、**上記の条件を満たすかを確認した上で問題を解決するTips**を、下記します。

## 公式ドキュメント
エンジニア業界では、「まずは公式ドキュメント！」というお決まりのフレーズがあります。

言うには易しのフレーズですが、公式ドキュメントは基本的に英語のため、英語力がなければ問題解決のスピードが遅くなり、解決へのモチベーションにも悪影響を与えてしまいます。

特に**「ページのどこを見たら良いのか分からない」**ことが公式ドキュメントにおける躓きポイントの一つですが、このような場合**APIリファレンス**を見ることをお勧めします。

下はscikit-learnの例ですが、大抵の場合ライブラリのトップページに「API」「Document」「Reference」のような名称でAPIリファレンスのリンクが貼られています
![スクリーンショット 2021-11-20 1.19.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/d8a27f37-ad43-074e-0cb8-e14b6fdaaa7d.png)

### APIリファレンスの見方
**APIリファレンス**とは、ライブラリのクラスやメソッドの**入出力仕様**を記載したドキュメントです。
引数や戻り値などが簡潔に記載されているため、英語力が高くなくとも内容を把握することが容易で、何より読んでいて疲れにくい事がメリットだと思います。

以下はsickit-learnの線形回帰クラス（LinearRegression）での例ですが、
クラスごとに
・クラス名
・引数
・プロパティ（外からアクセス可能なクラス内変数）
・所属するメソッド
等が記載されています。
![スクリーンショット 2021-11-20 1.50.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/292d1281-73f4-898b-2d02-0f010c1f4e66.png)
![スクリーンショット 2021-11-20 2.02.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/8e83b396-716d-765b-520b-46e08ecfdb21.png)
![スクリーンショット 2021-11-20 2.03.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/1a66082c-a256-0f35-b0b2-b959d39e0fc3.png)
PythonにおけるAPIリファレンスには**Docstring**と呼ばれる**統一された記法**が存在されるため、一度**パターンを覚えてしまえば他のライブラリのAPIリファレンスを読むのが楽になる**こともメリットの一つと言えます。

Docstringと、そこからAPIリファレンスを自動生成するsphinxというライブラリに関しては以下の記事にまとめたので、よければご参照ください

https://qiita.com/c60evaporator/items/e1ecccab07a607487dcf#6-sphinxでapiドキュメントを作成

## stackoverflow, GitHub Issues, teratail
これらは「問題解決をすること」が目的のサイトのため、エラー等の解決策を探す上で非常に有効です。
また一方的な発信ではなく「教えてもらった解決策で問題が解決した」というレスポンスもスレッドに含まれるため、内容の信頼性を判断しやすいという利点もあります。

例えばエラーメッセージをGoogle検索にかけてこれらのサイトが出てきたら、高確率で直接のエラー解決策が記載されています。

### 各問題解決サイトの差

・stackoverflow, GitHub Issues: ヒット数が非常に多いが英語
・teratail: 日本語だがヒット数が少ない

という特徴を持つため、用途や時間に応じて使い分けてください。

## note.nkmk.me
PandasやNumpyなどPythonの定番ライブラリ関係を検索すると、上位に[note.nkmk.me](https://note.nkmk.me)というサイトがヒットする事が多いです。

このサイトはPythonを中心に**質量共にハイクオリティな日本語のドキュメント**を提供されており、公式ドキュメントをベースに豊富な実装例を添えた分かりやすい解説から、お世話になった経験のある方も多いのではと思います。

個人的には公式ドキュメント以外では数少ない信頼できるサイトの一つだと思っているので、日本のPythonのレベルアップに貢献している作者様に感謝しつつ、活用していきましょう。

## 企業の解説記事
Tech Academy、IT Media、さくらインターネット等の企業が、事業の一環として一般に公開している記事が相当します。

間違った内容を記載するとレピュテーションリスクを負うことになり、校閲等のシステムも整えられている（と思う）ので、基本的には個人の記事より信頼性が高いです。
また出典が明記されている事も多いので、一次資料に辿り着きやすいというメリットもあります。

このような記事を無償公開している企業の方々に感謝しつつ、活用していきましょう。

## Qiita, Zenn, note等
いわゆる「技術ブログ」に相当するサイトで、日本語でググると多くの記事がヒットするため、一般的に活用されることの多いサイトだと思います（特にQiitaはSEOに非常に強いため、Google検索では上位に大量の記事が並ぶことが多いです）

デメリットは、誰でも書けるという特性から**間違った内容が書いてあることも多い**ことです。

ググっている時点で知識不足は否めないので、この状態で嘘かどうかを判断することは困難ですが、月並みな判断基準の一つとして、**LGTM数の多さとコメント欄を読む**事が有効です。
LGTM数が多い記事は多くの人の目に触れているため、間違いがあればコメント欄で指摘されている可能性が高く、コメント欄と併せて読むことで正しい内容を読み取れる可能性が高いです。