IT関連技術を効率的に検索する

プログラミングやIT関連技術に関する情報を、以下のようなものを組み合わせて効率よく検索する検索方法を紹介します。

- Stack Overflow
- Slideshare
- 画像検索
- Githubのawesomeレポジトリ
- Github

# 背景

近年のOSSを積極的に活用した開発では、常に新しい技術や概念が登場します。全てを取り入れることはありませんが、顧客や社内の色々な事情により、こういった技術を調査して必要に応じて取り込んでいくことが以前よりも多くなっていると思います。このため開発者は以下のような状況に置かれることが多くなりました。

- 同じプログラミング言語、ライブラリを使い続けることができない
- 分かりやすい書籍、研修が存在しない
- 取り組むべき技術について詳しい人が回りにいない

しかしこのような状況に陥ったとしても、新しく取り組む技術について素早く把握する必要がありますし、開発においても慣れいないプログラミング言語やライブラリであっても停滞する時間を少しでも短くする必要があります。これを実現するためには分厚い書籍、時間のかかる研修などを頼るのは難しいです。そもそも書籍や研修自体が存在しない場合もあります。

そこでWeb上の情報に頼ることになります。調査の際には対象技術を効率よく検索して概観をつかみ、開発の際には周りに詳しい人がいなくても全世界の開発者の知恵やノウハウをうまく活用してスケジュール内にものが出来上がるようにします。私もそのようにして新しい技術を調査したり、それをもとに開発を行ったりしてきました。しかし私の周りを見てみると、意外とそういった検索ができない人が多いみたいです。Google検索が一般化しているため検索をするという操作はできるのですが、効率的な検索や適切な検索ができないようです。このためある技術について調査をしてもらっても、以下のような状態になってなかなかアウトプットが出てきません。

- 対象技術の概要、利点、欠点を調べるために、公式サイトを当てもなく探す。(そして何故かAPI仕様に迷い込む)
- プログラミングでやりたいこと、エラー解決方法をYahoo知恵袋やteratailで調べて見つからない。
- ブラウザ上に対象技術のWebページタブが数十個並び、いつまでも閉じらることがない。

このような状況に陥らないためにも、IT技術者としての検索方法はある程度レパートリーとして整理する必要があると思い、この記事を作成しました。


# 効率的な検索方法
基本的にここで紹介する検索方法は、全てGoogle検索を前提としています。
また検索結果に英語の情報が出てくるため、簡単な技術英語が読めることも前提としています。

## 定型キーワードを組み合わせる (目的をもった検索)
気になるプログラミング言語、フレームワーク、ライブラリ等のトピックに関する一般的な事柄（概要、採用利用、利点、欠点など）を検索したい場合は `対象トピック + 定型キーワード` の組み合わせでて検索をします。以下に私が使用する定型キーワードを紹介します。自分の目的に応じてレパートリーを増やしてみてください。

|日本語|英語|
|-----|-----|
|概要| overview, introduction, in minutes, TLDR|
|採用する理由| why, swtiched to, choose|
|利点| pros, benefits, rocks|
|欠点| cons, problems, sucks|
|比較| vs, comparison, which, better|
|2017年時点のトレンド| in 2017, 2017 trend|

例えば、WebフロントエンドのVue.jsについて採用する理由について調べたい場合は `Vue.js why` や `Vue.js choose` と検索することにより効率よく検索できます。


## Stack Overflowを活用する (やりたいこと、トラブル解決)

プログラミング等で何かをしたい時には `検索したい事柄 + StackOverflow` と検索します。

- 何かをやる方法
- 特定のエラーメッセージが出た時の原因、対処方法

StackOverfolowはプログラミング関連の質問＆回答サイトです。日本ではYaboo知恵袋、teratail等がありますが、蓄積されている情報量および質が比較にならないため積極的に活用しましょう。なお評価数の多い回答(ベストアンサーに相当)が最初に羅列されるため、有用な回答がすぐに見ることができます。

以下に検索例を示します。

- PythonでIPアドレスをバリデーションしたい ⇒ `Python IP validation Stackoverflow`
- PythonのNumpyを使用しようとすると "Import Error: No module named numpy" が発生する原因を知りたい ⇒ `python numpy Import Error "No module named numpy" Stackoverflow`

補足になりますが、Google検索では `Python IP 妥当性 Stackoverflow` のように日本語キーワードを含めた場合でも、ある程度は自動的に単語を英訳して検索をするようになっているようです。このため英語のキーワードが分からない場合でも適切なStack Overflowの回答ページを見つけることができる場合が多いです。


## SlideShareを活用する (概観をつかむ)

PowerPointのようなスライド形式資料で技術の概要・外観をつかみたい時には `検索したい技術 + SlideShare` と検索します。

SlideShareはプログラミング等を中心としたIT技術関連のスライド資料を公開、観閲できるサイトです。スライド資料は分かりやすさを重視するために箇条書きやイメージを活用しているため、馴染みのない技術の概観をつかむのに適しています。


## Google画像検索を活用する (検索結果を視覚的にザッピング)

Google画像検索で `検索対象トピック + overview` 等と検索することにより、その検索対象トピックのイメージを視覚的に眺めることができます。通常の検索とは異なり、複数の検索結果の画像として同時に見ることができるため「ザッピングして、気になった画像があればそのWebページを開く」という効率のよい検索フローを実現することができます。

一般的に有用な画像、分かりやすい画像を掲載しているWebページは時間をかけて作成しており、質の高いものが多い傾向にあります。質の高いWebページを見つけるためのお供にGoogle画像検索を活用しましょう。

以下にGoogle画像の検索例を示します。

- Node.jsのアーキテクチャ構成を知りたい ⇒ `Node.js overview`
- Node.jsの性能比較を知りたい ⇒ `Node.js peformance comparison`


## Githubのawesome系レポジトリを活用する (お勧め・人気を把握)

あるプログラミング言語の各分野の人気ライブラリ、フレームワーク、推奨Webページなどを把握したい場合、Githubでawesome系のレポジトリを検索します。
awesome系レポジトリは各プログラミング言語やフレームワークに関して、その分野に携わる人達が人気・お勧めのものライブラリやフレームワークのリストを作成、メンテナンスしているレポジトリです。

例えば、Pythonの各分野の人気ライブラリ、フレームワークを調べたい場合は `github awesome python` と検索すればawesome-pythonをいくつか見つけることができます。基本的にGithubのスター数が多いものが一番アクティブにメンテナンスされているため、スター数が多いものを優先しましょう。ちなみに人気の高いライブラリ、フレームワーク、プロトコル等については、それ用のawesome-xxxレポジトリが存在します。

|分野|レポジトリ名称の例|
|---|---|
|プログラミング言語関連|awesome-python, awesome-java|
|フレームワーク,ライブラリ関連|awesome-rails, awesome-django, awesome-jquery|
|プロトコル関連|awesome-mqtt, awesome-rest|
|スタイルガイド関連|awesome-styleguides|

## Github Trendingを活用する (人気、流行を把握)

意外と知られていないようですが、Githubにはtrendingというページがあります。Github Trendingでは日、週、月あたりの獲得スター数が高いレポジトリを確認できます。各プログラミングのtrendingのページも表示することができるため、自分自身が使っているプログラミング言語でどのようなレポジトリの人気が高かったり流行しているのかを大まかに把握できます。

https://github.com/trending

個人的にお勧めなのは、週単位のtrendingを毎週チェックすることです。Webフロントエンド分野のようにある程度プログラミング言語(ex. JavaScript)を絞っておくのもいいでしょう。

- Github全レポジトリのtrending(週単位) <br/>
  https://github.com/trending?since=weekly
- JavaScript関連レポジトリのtrending(週単位) <br/>
  https://github.com/trending/javascript?since=weekly
- Python関連レポジトリのtrending(週単位) <br/>
  https://github.com/trending/python?since=weekly

Githubはスター数が少なくても優れたレポジトリは数多く存在しておりスター数が絶対的な指標ではありませんが、一つの有効な指標であることは間違いありません。


## 英語という選択肢を捨てない (情報の量と質を確保)
これまで紹介した検索方法で検索を行うと、英語で記載された情報が検索結果として数多く登場します。一般的に英語の記事のほうが数が多く、質の高い情報が多いです。特にIT関連技術の場合はそれが顕著です。英語という選択肢を捨てるだけで、これまでの検索方法による恩恵は半減します。

英語は毎日少しずつ勉強しましょう。ただし机に向かって勉強はせずに、以下のような行動を習慣に組み込みましょう。

  - 仕事で技術関連の情報を調べる時に、1日15分は英語のみを読むようにする。
  - 通勤時に歩いている時にDuo3.0を聞く。(これを何十周とくりかえす)


# おまけ
あまり他の検索方法と比較してあまり汎用性がないが、個人的によく使うものを箇条書きしてます。
検索方法で紹介したものも英語力が要求されますが、こちらに箇条書きしているものはより英語力を要求されるので注意してください。

- MediumというサービスのIT関連記事は質が高いものが多いため、Mediumという検索キーワードを組み合わせる。特にWebやモダンな言語の記事が多いです。例えば2017年のJavaScriptフレームワーク事情について知りたいなら `Medium JavaScript 2017 framework` と検索します。

- Quoraという質問＆回答系SNSは、良い意味での意識高い系の回答やアドバイスが多いため、Quoraという検索キーワードを組み合わせます。例えばプログラマの良い習慣について調べたいなら `Quora good programmer habit` と検索します。Upvodeが多いほど人気のある回答なので、人気回答を中心に読むことをお勧めします。
  - 人気の高い回答は箇条書きベースの構成だった回答が多いので、英語が苦手でも比較的読みやすいです。箇条書き部分だけでも読む価値があります。
  - 本当に大事なことは色々な回答者が同じように書いています。「これ前も見た」と思ったら是非メモしましょう。

- 最近はYoutube動画のみで公開されている技術情報も多いです（特にカンファレンス系）。このためYoutubeで対象技術を検索し、その動画をスライドページが移る間隔でザッピングします。面白そうな情報がありそうなら動画を実際に見る＆聞きます。英語でも字幕ONにすれば、一時停止しながら内容はある程度把握できます。個人的にはDockerConは欠かさず見てます。

- 中国語のIT関連情報も質が高いものが増えています。分かりやすい画像がある場合は質の高い情報の可能性が高いため、Google翻訳を活用してざっくりと読んでみます。ある時、DockerのDNS周りの情報を調べてた時に、実装をちゃんと調べたうえで分かりやすく解説をしていた唯一の記事が中国語でした。