こんにちは。
今日は、ググり力についての話です。プログラミングに限らずGoogleで検索するとき、どういったワードでどういった条件で検索すると答えにたどり着きやすいか、どのページが自分が求める答えを教えてくれそうかを見極める能力が高いと、時間を無駄にせず問題を解決していくことができます。今回は話をプログラミングに絞って、そこそこにはググり力があると思っている私が心がけていることを紹介します。
こんにちは。
今日は、ググり力についての話です。プログラミングに限らずGoogleで検索するとき、どういったワードでどういった条件で検索すると答えにたどり着きやすいか、どのページが自分が求める答えを教えてくれそうかを見極める能力が高いと、時間を無駄にせず問題を解決していくことができます。今回は話をプログラミングに絞って、そこそこにはググり力があると思っている私が心がけていることを紹介します。
なお、今回対象となるのは調べたいものの基礎についてはある程度理解している状態の人です。JavaScriptの入門サイトを探しているとか、今日その言語を触り始めましたみたいな人は対象ではありませんので悪しからず。基礎は分かっているけどあのやり方が分からない、こんなエラーが出たけど初めて見たから解決方法が分からない、のようなときに私が何を心がけているのかという話になります。
また、こうすれば絶対に解決する、という方法は提示できません(そんな方法あるんでしょうか)。あくまで答えにたどり着きやすい検索の仕方と、どういう観点でそれを見ていけばいいのかという話で、実際に答えにたどり着くにはやはり経験が大事になってくると思います。
まずよくやるのが、期間指定を1年以内にすることです。情報は鮮度が命です。バグについて調べていても、その情報が5年前のものであればもう解消されていて他のバグが原因かもしれません。何かのやり方を調べるとき、基本的には5年前の記事に書いてあることよりも数ヶ月前の記事に書いてあることのほうがよりふさわしい場合が多いです。
気をつけなければならないのは、新しければ何でも良いというわけではないということです。期間指定で絞られるのはページの作成・更新日時であって、その情報自体の鮮度を表すものではないからです。例えば未だに横並びレイアウトがfloatでできると解説している記事もよく見ます。そういった場合は複数の記事を見て何がふさわしいかを判断することになります。
仕事中やQ&Aサイトでは「~というエラーが出てしまいました。解消方法を教えてください」という質問をすると、「どういう条件で何をどこまで調べて何を試したのか、どうなれば成功なのかを先に教えてくれ」と言われると思います。実際そこまでのコーディングやそもそもの仕様を知らない状態では、エラーメッセージだけを見ても何が原因か判断するのはよほどよくあるエラーでない限り不可能です。
しかし個人で調べる範囲では、まずエラーメッセージでとりあえずググるということはなんだかんだ大事だと思います。Google先生は、背景も何も知らない状態でありそうな答えを提示するのが人間より遥かに得意だからです。同じようなエラーに遭遇した人たちのQ&Aサイトでの質問や解決方法を記したブログ記事などが簡単にヒットするため、とりあえずエラーメッセージでググることはよくやっています。
一方で、エラーがどういうものなのか、どうすればエラーを解消できるのかという答えがそのまま出てくるとは思わないほうがいいです。あくまで背景も何も知らない状態であらゆる可能性を考慮した答えが表示されるからです。エラーメッセージをそのままググったときに大事なのは、その結果を見てそれがよくある問題(解決しやすい)なのかそうではない問題(根が深く解決が難しい)なのか、またエラーメッセージが汎用的なもの(同じ出力だがその時々によって原因が違う)なのか特別なエラーメッセージ(そのときにしか出ないもの)なのかを判断できるようになることです。このあたりが判別できるようになれば、エラーが内容そのままのものなのか本当の原因は別にあるものなのかも判断できるようになり、次に入力する検索キーワードの質も変わってきます。
初心者にありがちなのはエラーメッセージをよく読まないことです。出して無駄なエラーメッセージは出ないはずです。必ず何らかのヒントが隠されているため、それを探る必要があります。そのためにまずそのままググってみるというわけです。
エラーメッセージは基本的に英語なので読むのが苦手な人も多いと思いますが、意味を読み違うだけで原因究明にかかる時間は変わってきます。よくあるのが、JavaScriptの
Uncaught TypeError: Cannot read property 'length' of undefined
というエラーを、「length
プロパティがundefined
だ」と読み違って「そんなはずはない!」とパニックになっている例です。落ち着いて読めば「undefined
のlength
プロパティは読めない」と言っているのであって、
const items = json.items
console.log(items.length)
であればitems
がundefined
であるということが分かると思います。こういった勘違いを防ぐにはエラーメッセージをよく読むということが大切です。
言語やライブラリの中には、バージョンによって仕様が大きく変わっているものがあります。HTML5やPython 3などがあるでしょうか。このような場合は検索キーワードにバージョンまで含めるようにしています。こうするとより良い情報に出会いやすいです。
私がHTMLを始めた当時は、HTML5は草案の状態でした。HTML5が勧告を迎えHTML5に関する解説ページが増えてくると、逆にHTML4以前の情報を載せたページが邪魔になってきます。なぜならfont
要素やalign
属性など廃止されたものを紹介していることがあるからです。HTML5に対応したページを検索したい、そういう場合にバージョンまで付けて「HTML5」と検索するのが有効です。さらに最初に挙げた期間指定を併用するとさらに良い結果に出会いやすくなります。
日本でもよく使われているプログラミング言語やライブラリは日本語のページでもよく紹介されています。しかし、そもそも日本語と英語のページの数には圧倒的な差があります。もちろんライブラリそのものも英語で公開されているものが多いので、Q&Aサイトなどの二次情報も含めて英語のほうが圧倒的に充実しています。
ググって英語のページしか出てこないと敬遠してしまいがちですが、基礎を学び終えると英語のページに書いてある情報のほうが価値のある情報になっていきます。また、最新の情報はどうしても英語から出てきます。答えに早くたどり着きたかったり最新の情報を手に入れたかったりする場合は英語から離れることはできません。幸い私は英語を読むのはそこまで苦ではないので、積極的に英語のページを開くようにしています。
価値のある英語のページにたどり着くには、英語で検索できるようになる必要もあります。Googleは基本的に単語を並べただけでもちゃんと検索してくれるので、とりあえずまずは関連するキーワードを並べてみています。それで直接求めていたものにたどり着けなくても、次なる検索キーワードを入力するためのヒントがあるページにたどり着けるからです。またGoogleには検索キーワードのサジェスト機能があるので、単語を並べた後に出てくるサジェストに頼って検索してみるのもいいと思います。よくあるのは、最後に「not working」と付けるサジェストです。これをするだけで基本的な仕様などの解説ページが除かれ、上手く動かなくて困っている人のQ&Aなどがヒットするようになります。
インターネット上のページは、このブログのように誰でも簡単に公開して情報提供することができます。よく学校の調べ物の課題で「本の情報を元にしろ、ネットの情報は使うな、使うならWikipediaの出典の明記された部分のみ使え」などと言われると思いますが、つまり本などと比べて不正確な情報が多いということです。このサイトも免責事項のページにサイトの情報によって不利益を被っても補償できない旨を書いていますが、基本的に情報が間違っていても鵜呑みにしたほうが悪い、となりがちです。マネーフォワードとLINEクレカに関しての記事も誤ったことを書いていて後々訂正したりしているくらいです。
大事なことは、書いてある内容を信用しすぎないということです。幸い本と比べて複数のソースを簡単に確認しやすいので、気になる情報があったら複数のページで内容を比べるようにしています。Qiitaなどの投稿型情報サイトでは、参考にした記事を末尾に載せている人も多いです。同じ記事から派生して別のページで同じことが書いてあるということもよくあるので、元にされた情報が何かまで確かめられるとより確度が上がります。
ある程度プログラミングができるようになってくると、検索結果によく出てくるページの中で鬱陶しいと思うものが出てきます。そうしたページは避けるようにすると得られる情報の質が上がります。
こういったページは本当に自分が初心者であれば結構ありがたい記事ですが、ある程度できるようになってくると必要のない情報が多く早く結論が欲しい、となってしまいます。前提の説明が長かったり、謎に会話形式で解説が進んだり、1ページで情報が完結しなかったり・・・。「欲しい情報は分かってて細かい使い方だけ忘れた」というようなときにはかなりノイズになる情報です。
また、初心者向けのサイトは文章量の割には情報量が少ないです。もちろん初心者向けという目的のために難しいことは書いていないという場合もあると思いますが、有料サービスへの勧誘に繋がっていたり、とにかく記事を量産して広告収入を得ることを目的にしているようなサイトもあります。面倒なことにそういったサイトは総じてSEOが強いため検索結果に本当によく現れます。
具体的なサイトへの言及は避けたいのですが、私が普段避けているサイトは某プログラミング塾の解説サイトや、某プログラミングアカデミーの解説サイトなどです。中身が薄いにもかかわらず不要な説明で文章量を増やし、記事も量産しているためSEOが非常に強いです。
これも最近かなり数が増えました。Stack Overflowなど英語のQ&Aサイトに投稿された質問と解答を、日本語に機械翻訳して掲載しているサイトです。そもそも法的にOKなのかも分かりませんが、不自然な日本語で書かれた記事は全く参考になりません。元になっている質問を本家サイトで英語で読むほうが遥かにマシです。
こちらはURLに「ja」や「日本語」と付いていたり、サイトのヘッダーなどで言語が切り替えられるサイトが怪しいです。こちらも具体的な言及は避けますが、「群れ」みたいな意味の名前のサイトがよく出てきますね。
毎回鬱陶しいサイトを無視して情報を調べるのはなかなかに苦労するものです。最初から検索結果に出ないようにできればいいのですが、そんな用途にピッタリのChrome拡張機能があります。
このuBlacklistは、正規表現などを使って一致したサイトをGoogleの検索結果から除外するものです。日本の方が開発しているようです。
これを使えば検索結果から気に入らないサイトを一掃できます。検索結果のページに「このサイトをブロックする」というリンクが表示されるので、気に入らないサイトに新たに出会った場合はその場でブロックできます。非常にありがたい拡張機能です。
というわけで今回は、プログラミングに関してGoogleで検索するときに心がけていることの紹介でした。他にもこんなこと心がけているよというのがあればぜひ教えてください。
それではまた。