teratailで良い回答をするには？


GW期間中、[頑張ったよ](https://teratail.com/blog/article/ba38)。[^1]

[^1]: 決して暇だったからとかじゃないよ。ほんとうだよ。たぶん。

---

みなさん、[teratail](https://teratail.com/)ってますか？えっ、teratailなんて知らない？日本語のIT系QAサイトは[stackoverflow](http://ja.stackoverflow.com/)一択だろって？いやいや[QA@IT](http://qa.atmarkit.co.jp/)も捨てがたいって？

まぁ、それはさておき、teratailの話をします。さて、こういうQAサイトは主に質問する側が主に回答する側のどちらかになると思います。経験や技術の量が違ってくるので当たり前ですね。Qiitaなんか見ている**意識高い系**のみなさんは、もちろん回答する側ですよね。俺の知識を見せてやる！って意気込みでQiitaを書いているぐらいですから、きっとそうです。ということで、スタバでドヤマックをするためにMacを買うほどの**意識低い系**である私が、回答術を指南してあげたい[^2]と思います。

[^2]: 上から目線！

回答じゃなくて質問したいんじゃ！って方は[teratail - ヘルプ | 質問するときのヒント](https://teratail.com/help/question-tips)があるので、そちらを参考にして下さい。


## 回答には目標を持ってあたるべし

まず、何でも回答すれば良いって物ではありません。回答の内容によっては、他の皆さんに「+」されたり「-」されたりします。また、解決のための手がかりとして一番良かった回答には質問者がベストアンサーとして選んでくれるでしょう。そう、良い回答とはたくさんの「+」がもらえたベストアンサーと言うことです。ということで、目標を打ち立てましょう。

* ベストアンサー数 ＞ 回答数 ÷ 2
* 「+」をもらった数 ＞ 回答数 × 2

これはかなり高い目標です。私は未だに達成できていません。回答をしたら、ライバル達を押しのけて、半分はベストアンサーでなければなりません。また、teratailは総じて「+」をもらえる場合が少ないです。ただの解決ではもらえず、他の人が感心するような回答でなければ「+」されることはありません。ですが、目標は高いほど良いものです。低い目標など打ち立てるべきではありません。

## 良い回答指南書 - 内容編 -

まずは内容を見ていきたいと思います。

### 内容は正確であれ

間違った回答ほど駄目なものはありません。回答には正確性が求められます。思い込みで書いてはいけません。質問者から見ると簡単に回答しているように見えますが、良い回答をしている人は裏でたくさんの調べ物をしています(私もですよ)。各言語やツールの公式サイト(だいたい英語)からstackoverflow(もちろん本家)、はたまたあやしい個人ブログを見て、自分の回答が正しいか、問題ないか、解決方法はコレがベストなのかを確認しています。また、コード例を書くときは、実際に動かして問題が無いかを確認しています。動かないコードは意味が無いコードだからです。

でも、これって結構大変です。調べ切れていないときや、内容が特殊すぎて試せない場合があります。そのときはそうであることをはっきりと述べましょう。曖昧な部分は曖昧であることを示すべきです。よくわからない部分を断言してしまうのはいけませんが、よくわからない部分があるからと言って回答しないというのもったいないことです。それがヒントになって質問者が解決できたり、他の人がコメントで補足してくれる場合があります。手がかりになりそうと言うのであれば、それは回答しても良いと思います。それがいい手がかりになればきっと「+」がもらえます。

### 知らないことには答えるな

完全にわかっていなくても回答した方が良いといいましたが、憶測で述べることはよろしくありません。どんなものか全然知らない言語の事なのに、知っている言語に当て嵌めて述べても本末転倒な事があります。知らないことは知らないで口を噤むべきです。何でもかんでも答えれば良いというものではありません。

### セキュリティには神経を使え

知らずにやってしまうことで一番やってはいけないことは、セキュリティを低下させることです。質問者がその回答を見て、脆弱性があるシステムを作ってしまったとき、責任を取れるのですか？回答はボランティアですから法的な責任はありませんが、ここで問われるのは一技術者としての責任です。質問者の全ての背景を知っていて、どうやっても安全であるという保証がなければ、大丈夫ですは言ってはいけません。セキュリティに関することは安易に妥協してはいけません。

### 説明を入れろ

解決方法だけを述べないでください。それは質問者のためにも、他の人のためにもなりません。なぜ、それで解決するのかを説明を入れてください。どうしてそれで解決するのか、それが一番重要です。それを理解できない人は技術者を辞めた方が良いです。

最近はすぐに答えだけを求める人が多いと聞きます。そのような人はそこで終わりです。今後成長することはありませんし、教えるだけ無駄です。そのような人は相手にする必要はありません。貪欲に知識を求め、なぜそうなるのかを考え、そこから発展、応用できる人を相手にしてください。そのような人が求めるのは答えでは無く、答えへの過程です。

某大学の入試の数学は、正答であっていても過程がなければ0点です。説明が無い回答はどんなに正確でも0点の価値しかありません。回答も同じ事が言えます。

### ググれカスという前に

ググりましたか？と言う前に、ググった結果を本当に見たのでしょうか？ググった結果が全く以て役に立たないことはよくあることです。それなのに、ググれとか言われてもどうしろというか？と思ってしまいます。

もちろん、ググってすぐに正解がわかる場合もあります。ただ、頭ごなしにググってないだろうって態度はやめて下さい。初心者は「何をググればいいのかわからない」場合が多いです。単に「ググって下さい」ではなく、「○○とキーワードでググってみて下さい。最初の方に出てくる、△△というサイトと××というサイトが参考になります。」とするだけで印象が大分違います。次からはそうググれば良いんだと質問者にもわかります。

## 良い回答指南書 - 書き方編 -

次は書き方です。せっかく良い事言っているのに、読みにくかったら誰も読んでくれません。

### Markdownをマスターせよ

teratailは質問も回答もMarkdownの変種[^3]を使用しています。Markdownに即して書くだけで大分読みやすさが変わります。Markdownをしっかり使いこなせるようにしましょう。

[^3]: 時々仕様が変更されるので注意。

なお、公式のヘルプには書いていないのですが、実はMarkdownのテーブル表記が使えます。使っているのは私だけのようですけど。


### 強調やコードをうまく使おう

Markdownですので、`**`で囲めば簡単に**太字**にできます。他にも_斜体_や`コード`もあります。キーワードや強調したいこと、また、ソースコードの一部などに使うと読みやすく、何を言いたい文章なのかがはっきりします。ただ、使いすぎると凸凹とした読みにくい文章になります。ここぞという時に使うようにして下さい。また、漢字や仮名の斜体はあまり読みやすくありません。使いどころに注意して下さい。

### リンクを張ろう

teratailではURLが自動的にリンクになりません。URLは面倒であってもリンクにして下さい。それだけでも読み手の手間が大分減ります。良い文章とは読み手に優しい文章のことです。

### プレビュー画面を確認せよ

Markdownのソースと実際表示される場合で印象が変わるときがあります。また、Markdownの書き方が間違っていて崩れてしまう場合があります。プレビュー画面が付いていますので、投稿前に一度は確認しましょう。

### 長文になる場合は、最初に結論やまとめを入れろ

なるべく説明を入れるべきと考えているため、私の回答は長文になる傾向があります。しかし、あまりに長い文は読む気も失せます。そこで一工夫をしています。初めに簡単なまとめや結論を書くのです。ただ、解決方法だけを書いてもいけません。

> ○○だから、△△です。

といった、何を述べようとしているのかわかるような結論です。どこまで書くかは、わかる人が読めば、この一文だけで説明の内容がわかると言うところが区切りになります。そうすれば、よくわからない人だけ、補足になる長文の説明を読んでくれるので、わかっている人の時間を無駄にすることはありません。

### 参考文献を載せよう

内容にも関わるのですが、調べたときに有用な情報は参考文献としてあげて下さい。人によっては、より詳しい情報、関連する情報を求めるため、そういった場合にとても有用です。また、内容の正確性を担保する意味でも、参考文献は重要です。特に、直感に反するような結論の時は、自分の主張を補強するためにも載せていた方が良いでしょう。不要な反論を未然に防ぐことができます。

## 良い回答指南書 - 態度編 -

最後にどのような態度で臨むべきかです。

### 質問者はあなたの部下でも生徒でもない

高圧的な態度で回答する人が時々見られます。回答するから自分は偉いとでも思っているのでしょうか？teratailは技術者同士の交流サイトです。そこには上も下もありません。みんなが質問者でもあり、回答者でもあるのです。お互いに意見を交わしながら切磋琢磨し合う関係です。ですので、私は友人の悩みを聞いてあげるようなスタンスを取っています。

質問者が知らないことを知っているから回答できるのですが、逆に、質問者が知っていて自分が知らないこともあるのです。いつでも逆の立場になり得ます。無知であることは恥ではありませんが、無知であることを知らないことは愚かです[^4]。

[^4]: 二千年以上も前に人類はその地点を過ぎ去っているはずなのだが…

### 間違いを認めよ

コメントなどで間違いが指摘されたら、素直に認めて下さい。素直に認めると言っても、反論するなという意味ではありません。指摘事項をしっかりと吟味しろということです。「私の持つあらゆる信念(主義、主張、意見、見解、知識等)は間違っているかも知れない。もし、よりよい信念があればそれに従うべきだ。」という信念[^5]に従うべきです。

[^5]: これ自体が自己言及のパラドックスに陥っている。しかし、臆することは無い。私達はパラドックスを考えることができるからこそ、不完全性定理が齎す計算の限界を突破し、チューリングマシンの具現化に過ぎないあらゆるプログラムを超越し得るのだ。

---

これであなたも回答者マスターです。最後に、当たり前のことですが、回答ボタンを押す前に一度は読み返して、変な文章になっていないか確認しましょう。国語の成績が大変悪く、日本語がぶっ壊れた資料を日々量産しまくっている私が言うのも何ですが、良い回答は良い日本語からです。誤字脱字があるだけで、ちょっと残念臭がしちゃって、もったいないです。