質問するときのヒント

teratailに投稿された質問の中には、スムーズに回答を得て解決できているケースとそうでないケースがあります。
解決されない質問は、回答がつかず放置されてしまっていたり、他のユーザーから指摘されたりすることも少なくありません。
そういった質問の中にも、質問の仕方を変えることで解決する可能性があるものが多く存在します。

少しでも多くの方に問題を解決していただく為に、質問をする時のヒントをまとめました。
ただし、これは決してここに書かれていることを守っていない質問者の方を責めるためのものではありません。
このヒントは、質問の仕方のコツがまだ掴めていない方に対して「このポイントを押さえた質問にすればもっと良いコミュニケーションになる」というアドバイスをするためのものです。
質問の仕方がわからない時や、回答が来ない時に参考にしてみてください。

1. 質問をする前に心がけてほしいこと

まず始めに、サービスをご利用いただくにあたりteratailが皆さんに覚えておいていただきたいことがあります。

1-1. teratailはサポートセンターではなく、思考するエンジニアの為のQ&Aコミュニティです

teratailは技術に興味のある人達が集まって、質問と回答を通してお互いに知識や情報を交換・共有する場所です。
ここは、お互いの好意の上に成り立っている助け合いの場であり、自分がわからないところを人に教えてもらい、自分がわかるところを人に教えてあげる場所です。

お願い

teratailを「サポートセンター」だとは思わないでください。
作業依頼のような投稿をして、課題や仕事を無償でやってもらえる場ではありません。
あなたがそのようなつもりで質問しているのだと他のユーザーから誤解されないように、丁寧な質問を心がけましょう。
質問の仕方がわからない時は、このページに書かれている事を参考にしてみてください。

また、あなたがわからない時に人から助けてもらうだけでなく、もしあなたに答えられる質問を見つけたらぜひ積極的に質問者の方を助けてあげてください。

1-2. 投稿前に検索し、できるところまで自分でやってみましょう

現在オンライン上には膨大な量の問題解決の為のページがあります。アプリケーション、言語、プロトコル、ハードウェア・・・様々な分野に対して様々な難易度の解説ページがあります。質、量共に優れた解説が多く見つかります。
質問を投稿して回答を待つのもいいですが、調べ方のコツを知っていることも今後プログラミングをしていくうえで重用な能力の1つです。

また、既に他の誰かがteratailに投稿して解決をしているかも知れません。
画面上部にある検索窓からキーワードを入力して調べてみてください。

そして調べてみた結果を実際に試してみましょう。
解決はしなくても、試す前よりあなたの問題や不明点は明確になっているはずです。

アドバイス

投稿前に自分で一度調べてみましょう。そして調べたことを元に、一度は自分でやってみましょう。
検索して見つけたページでわからない事があれば、どのページのどの部分がわからないのかを明確に記し質問してみてください。

何をどう検索すれば良いのかわからない場合は?

検索ワードが頭に浮かばないということは、人に説明するための言語化もできていない可能性もあります。
これでは質問をしても他のユーザーが内容を理解できず、結果回答を得ることが出来なくなってしまいます。
もう一度状況を整理し、何がわからないのかを明確にしてみてください。
この作業を行うことで、何を質問すべきかも明確になります。

検索用語がわからない場合は?

まだプログラミングを始めたばかりで用語がわからず調べられないという方は、状況を説明してその旨を質問に記してみてください。
質問の表現の仕方が分からなければ、表現方法を工夫してみましょう

2. 質問をする前に自分で何がわからないのかを把握しましょう

人に質問をするには、自分が何を尋ねたいかを知っている必要があります。
これは、「自分が今『何がわからないのか』がわかっていて、言語化できている」ということです。
一見簡単なようですが、実はとても難しいことです。

そしてこの工程が抜けていると、

  1. 「どのように人に尋ねればいいのか」、「どのような情報を提示すべきか」がわからない為、正しい質問ができない
  2. 質問が他のユーザーに正しく伝わらなかったり、聞き方が大雑把になりすぎたため他のユーザーから見た時に丸投げの質問・作業依頼だと受け取られてしまう

結果、思うような回答が得られなかったり、指摘をされてしまったり、逆に質問で返されてしまったりという悪い流れがうまれてしまいます。
何がわからないかわからない人から質問を受けても、答える側も困ってしまいます。

では、自分で何がわからないのかを知るためにはどうしたらいいのでしょうか?

2-1. 今置かれている状況を整理し、わかっている範囲とわからない範囲を明確にしましょう

何かを作る際に発生する問題として、以下のようなものが考えられます。
今あなたはどのような状況にいるでしょうか?

  • 作る前
    • 作りたいものがあり作り方を調べたいが、その名称や検索ワードがわからない為調べることができない
    • 作り方を調べたが理解する為の説明が乏しく、特定の工程が理解できない
    • 理解するための説明は詳しく書かれているが、書き方や用語が専門的すぎて理解できない
    • 断片的な情報しか見つからず、どの順番で何をすればいいのかがわからない
  • 作るとき
    • 本やサイトで情報を見たが、なぜこの方法で作る必要があるのかわからない
    • 参照した本やサイトによって解決方法が異なるが、どれが最適な方法なのかがわからない
  • 作った後
    • 実際に作ってみたが思うようにいかず、またその原因がわからない・特定方法がわからない
    • 思うようにならない理由はわかるが、その解決方法の調べ方がわからない
    • 解決方法は見つかったが説明が理解できない
    • 原因だと考えられる事が複数あり、特定できない
    • 一つ一つの機能や処理の開発はできたが、組み合わせ方がわからない

自分が置かれている状況がわかれば、「あなたは何がわからないのか」つまり質問すべきことがはっきりするはずです。

アドバイス

まずは、落ち着いて状況を整理し把握しましょう。そうすれば自分は何がわからないのか、何を尋ねるべきかが明確になるはずです。
大切なのは一度にすべてを解決しようとしないことです。わからないことを一つずつ解決していきましょう。
その方が理解も深まりますし、結果的に回答が来るのも解決するのも早いことが多いです。

3. 正しく伝わる質問の仕方

人に何かを尋ねるときは、質問内容と回答に必要な情報を正しく伝える必要があります。 「もし自分がおなじ質問をされて、答える立場になったら」ということを考えて質問をしましょう。

あなたの質問は

  • 他の人が読んで理解ができますか?
  • 何を教えてほしいと言っているのかちゃんと伝わりますか?
  • その質問に答えるために必要な情報は記載されていますか?

逆の立場に立って考えてみると、よりよい質問ができます。

例えば、「作りたいものがあり作り方を調べたいが、名称や検索ワードがわからない為調べることができない」のであれば、
作りたいものがどんなものかを人に理解してもらったうえで、調べ方を教えてもらう必要があります。
「作ってみたがうまく行かず、解決方法を調べたが理解できない」のであれば、
何をどのように作ってどうなったかを説明し、調べた解決方法とその内容及びどこが理解できないのかを順を追って伝える必要があります。

この章では、teratail の質問画面の入力の流れに沿って質問の際に意識すべきポイントを紹介していきます。

3-1. タイトルには要件を書きましょう

あなたが質問を投稿すると、他のユーザーはTOPページやタグ毎の質問一覧ページのフィード上であなたの質問を目にします。
フィード上にはあなたの質問タイトルと質問詳細の冒頭一部が表示され、多くのユーザーがその情報をもとに答えられるものかどうか、興味があるかどうかを判断しています。そのため表題を読んで意味が分からなかったり、興味を抱かなかったりすれば読み飛ばされてしまいます。

ありがちな失敗としては、「助けてください」「初心者です」という表題をつけてしまうことです。
これでは質問ページを開いて本文を読むべきかどうかを判断する情報が何も含まれていません。
ですから、無視されてあなたの質問ページを見てもらえる可能性が低くなってしまいます。
「PHPについて」や「比較演算子」などのように、短すぎて質問内容が読み取れないタイトルも同じようなことが言えます。

アドバイス

質問タイトルには、要件をズバリと書きましょう。
例えば、「○○で△△というエラー」「○○が実行できない」「△△と○○の違い」などです。
ポイントは、あなたの問題を解決してくれそうな人が質問タイトルを読んであなたの質問ページを見てくれるかどうかです。投稿する前に、読まれるタイトルになっているか見直してみましょう。
もしタイトルをどのように書いていいのかがわからない場合は、先に質問の詳細を書いてみることをお勧めします。
先に詳細をまとめれば、あとはその要約をすればいいのでタイトルが書きやすくなります。

3-2. 正しいタグを設定しましょう

teratailでは質問にタグを設定することができます。
ユーザーは興味のあるタグを元に答えられる質問、興味のある質問を見つけます。
正しいタグをつければ、その知識を持った人に質問が届きやすくなります。
逆にやたらに関係のないタグをつけても、適切な人に届かず気づかれなかったり無視されてしまいます。

一向に回答が付かない場合は、正しくタグが設定されていないため他のユーザーに見てもらえていないのかもしれません。

アドバイス

開発に使っている言語やアプリケーション等の中で、質問したいことに関係があるものをタグに設定しましょう。
タグは最大5つまで設定できます。

3-3. 質問詳細の最初に実現したいことを書きましょう

質問の意図に沿わない回答が来るばかりで、あなたが期待したような回答が得られていないならば、それはあなたが何を実現したいのかが伝わっていないからかもしれません。

回答をしてくれるユーザーは、一般的に質問ページの上から順に読んでいきます。
まずあなたが何をしたいのかを把握すれば、以降の項目をスムーズに読み進めることができます。
逆に何がしたいのかがわからないと、この後どれだけ詳しい情報を書いてもその情報が何のために書かれているかわからず、結局質問内容が理解できません。
その結果、予測で回答したり、質問者に対して質問をしたり、最悪の場合何もすることができなかったりするのです。

アドバイス

質問のはじめに、あなたが何を実現したいのかを書きましょう。これは、質問をすることで何を解決したいかということです。

この時、やりたいことを明確に書くことが重要です。
例えば、あなたがECサイトを構築していて、その機能の中のある特定の処理の問題を解決したいのに、ECサイトを作りたいということだけを書いては実現したいこと・解決したいことは伝わりません。

そのためには自分の状況をしっかりと把握しておく必要があります。
今置かれている状況を明確にしたうえで、何ができれば良いのかを整理し、それを伝えましょう。

表現するための言葉がわからない時は表現の仕方を工夫しましょう

もしあなたがプログラミングを始めたばかりなら、用語がわからずどう伝えて良いのかわからないこともあるかもしれません。
でも、調べ方もわからないから質問するしか無い。こういう時はどうしたら良いのでしょうか。

表現方法は言葉で伝えるだけではありません。コードや画像を使うことでもコミュニケーションは可能です。

例えば次の質問を見てみましょう。

JavaScriptのプログラムを見ていたら下記のような書き方を見つけたのですが、
どんな動作をするのか意味があるのか調べても見つける事が出来ませんでした。
名前や書き方の意図等、ご存知の方がいらっしゃいましたらお願いします。

(function(){
// 処理
})();

コードを書くことで、わからない事を他のユーザーに上手く伝えています。

CSS等での画面の表示崩れの状態を伝えるにはキャプチャ画像が便利です。
レイアウト等の理想の形を伝える際も簡単なイメージ画像を作成して掲載することで、どのような結果を実現したいかを端的に伝えることができます。

例: https://teratail.com/questions/27504

※但し、掲載の際は表示されている情報に十分気をつけてください。機密情報や個人情報が掲載されていないかご確認の上投稿してください。

また、参照情報を提示する時は、リンクを貼ることも効果的な方法です。
ただしリンクを貼る際は、それが何なのか、何の為に貼ったのかがわかるようにリンクの前後に説明を加えましょう。
また、リンクできなかったりリンク先のコンテンツが見られなくなってしまった場合に備えて、説明に必要な部分や関連する部分を必ず引用して記述しておいてください。

アドバイス

コードやイメージ画像、キャプチャ、参考サイトなどを使って表現の仕方を工夫してみましょう。
ポイントは相手にあなたの考えていること、伝えたいことが伝わるかどうかです。

teratailの質問本文にはコードを見やすいように貼り付けたり、リンクを張ったり、画像を貼ったりすることができます。
質問文の入力欄の上にあるボタンを押すと、これらの機能を利用できます。

3-4. 発生している問題・エラーメッセージを書きましょう

結果(実際に起きたこと)を書きましょう

「○○がうまく動きません」という質問をしたのに、逆に「どういう現象がおきましたか?」という質問ばかりがきてしまう。
これは、実際今何が起きていてどうなっているのかが書かれていないために起こります。
「どういう現象がおきましたか?」という質問は実際の結果、実際に起きたことを求めている表現です。「うまく動かない」というだけでは、何も伝わりません。
「○○がうまく動きません」とだけ書いても、今起きている事が伝わらなければ問題の見当がつかないのです。

アドバイス

実際に起きた結果を示しましょう。例えば、「○○というエラーが表示された」、「レイアウトがこのように崩れてしまった」等です。あなたの想像ではなく、実際に起きたことを述べましょう。
実際に起きたことと、あなたの予想をはっきり分けて書きましょう。

エラーメッセージや実行ログをコピー&ペーストしましょう

問題が起きた時にエラーメッセージが表示されることがあります。エラーメッセージには重用な情報が多く書かれています。初心者にはエラーメッセージが意味していることがよくわからない場合がありますが、熟練した人にはエラーメッセージを見るだけで他の情報を何も見なくても問題解決の方法が分かる場合があります。
それほど大きなヒントになるのです。

アドバイス

表示されたエラーメッセージをそのままコピー&ペーストしましょう。自分でタイプしなおしたり、自分で解釈・要約しようとしてはいけません。
大事な部分が抜け落ちたり情報が違うものになってしまう可能性があるからです。

期待した処理結果を書きましょう

実行した手順やソースコード、表示されているエラーも詳しく書いたつもりなのに、「どうなると思ったの?」「それをしてどうしたかったの?」という返答が返ってくる。
これは質問内容にあなたがやりたいことが記載されておらず、何をしたいのかがうまく伝わっていない時に起こります。

問題とは、期待した結果と現状のギャップを指します。
問題はあなたが期待した結果を書くことで、より明確になります。

アドバイス

あなたが期待した処理結果を書きましょう。
「自分はこういう結果になると思いました」「こういう表示になると思いました」「こういうエラーになると思いました」
そんな言葉と共に自分が予想した動作を記述しましょう。そうすれば、他のユーザーはあなたがどのように考えているのかを理解することができます。あなたが勘違いしている部分があれば、それを踏まえて回答をすることができます。

3-5. あなたが何をしたかを書きましょう

ソースコードを書きましょう

あなたがしたことを最も具体的に示すものはプログラムのソースコードです。あなたが動かしているプログラムから、関連するところをうまく切り出すことができれば、他のユーザーが現象を再現するのに大いに役に立ちます。

ただし、あまりにも長いソースコードを貼り付けられても読むのが大変ですし、問題が業務に関するものであった場合、機密事項を投稿してしまわないように注意をしなくてはなりません。

アドバイス

関連するソースコードを抽出して本文に含めましょう。多すぎず、少なすぎずという分量の判断は難しいことですが、読むのに苦痛ではないくらいの量に抑える必要があり、でも問題の本質がわかるほどには多くなければいけません。最も良いのは、現象を再現するためのミニマムなプログラムを改めて作ることです。そうすれば、貴方自身が現象と問題をより良く理解することにもつながるからです。

teratailではソースコードをシンタックスハイライトすることができます。
シンタックスハイライトをすると、ソースコードが分類ごとに異なる色やフォントで表示され、他のユーザーが見やすくなります。
質問入力画面でソースコード部分をドラッグで選択し、入力ボックス上部のボタンを押すと適用されます。

何ができていて、何ができていないのか(何がわかっていて、何がわからないのか)を書きましょう

何かの結果を得るには、必ず「ステップ」があります。簡単な例を挙げると、プログラミングでは「コーディングが完了する」→「正常に実行がされる」→「期待した結果が得られる」のようなステップがあります。
「わからない」「うまくいかない」と書いただけではあなたがどのステップまで進んだのか、他のユーザーにわかりません。どこまで進んだのかわからない限り、適切な回答は得られません。「わからない」だけでは何がわからないのかが他のユーザーにもわからず、質問の内容が明確になっていないからです。

アドバイス

あなたがどのステップまで進むことができたのかをはっきり書きましょう。「○○まではできましたが、○○はできませんでした」を明確にしましょう。

例えば、

  • コーディングはできたけれど、実行時にエラーが起きた
  • 結果は出力されているが、その結果が期待したものとは異なっていた

などです。

もしあなたが何かの用語や説明を理解できずに質問するのであれば、「○○は理解できましたが、○○は理解できませんでした」という書き方にしましょう。

問題が発生する条件を具体的に書きましょう

自分のところでは起きるのに、「同じ手順でやったけど、その現象は起きません」、「再現できません」と言われてしまう。
もしかすると、その問題は特定の条件下でしか起きないのかもしれません。
現象を再現させることは、問題解決の重用な一歩です。まずはどの条件で起きるのかを自分で試して調べてみましょう。
そして、詳しく伝えましょう。

例えば、特定のブラウザだけでしか発生しない問題であればそれを明記しましょう。
特定の数値を入力して異常終了するのであれば、それを書きましょう。

この時、現象が起きる場合と起きない場合の違いを明記することが大事です。
「数値を入力したら異常終了します」と書くよりも、「-10,-20,0では異常終了しませんが、100を入力したら異常終了します」のように書かれていると違いが明確です。
このとき「100を入力したら…」と書くのは良いですが、「正の数を入力したら…」と書くのは不適切です。そこには事実だけではなくあなたの「推測」が入っているからです。推測を書く場合には、事実と分けて書きましょう。

アドバイス

再現する条件を調べ、具体的な値を提示しましょう。エラーが起きる条件に少し変わった手順があるなら、それを明示しましょう。同じ方法でも、入力や操作によって結果が変わるようなら、それを明示しましょう。現象が起きる場合と起きない場合の違いをできるだけ明記しましょう。

あなたが解決する為に試してみたことを書きましょう

起きている問題に対して、あなたが既に試してみたことを書きましょう。
あなたがどのような問題に陥っているかをより明確に知るヒントになります。
もしあなたが試した方法が間違っていれば、それを踏まえて回答をすることができます。そのほうがあなたの理解もより深まるはずです。

また試してみたことを明記することは、あなたが解決する意欲があり努力をしていることをきちんと他のユーザーに見せることにもつながります。
きちんと自分で取り組んで調べたり試したりしているのに、「なにもしないで人に任せないで」と誤解されてしまわないようしっかりと書いておきましょう。

アドバイス

あなたがその問題を解決するために既に試したことを明記しましょう。
これはより正確でわかりやすい回答を得るためでもあり、あなたがちゃんと問題に取り組む姿勢でいることを他のユーザーに見せるためでもあります。
もし何か行動を起こす前に既に問題があり、それについて助けが必要なのであれば、何がわかっていて何がわからないのかを明記して質問をしましょう。

3-6. あなたがプログラミングで利用している環境を書きましょう

どうも話がかみ合わない。質問が全然理解されていないようだし、もらえる回答もまったく理解できない用語が使われている。
環境が書かれていないと、このような問題が起きます。

Windowsで起きている問題にMacでの解決方法を示してもあまり役には立ちません。ソフトや言語のバージョンを確認せずに現象が再現する/しないと論じても、有益な情報は得られません。

アドバイス

使用している言語やフレームワーク、自分の開発環境のOSや使用ソフト、ブラウザやマシンの種別などを明記しましょう。
また、それらのバージョンも伝えましょう。
どの情報が有効かは一概に言えません。ある場合にはバージョンの最後の一桁の違いが重要かもしれません。またある場合には同時に走らせているアプリケーションの数がキーになるかもしれません。自分の環境を明記することは、問題解決に役に立つことを覚えておきましょう。

3-7. Markdownを利用しましょう

せっかく詳しく情報を書いても、整形されていない質問は読みづらいものです。
見出しがなく書き連ねられた長い文章や、ただコードをペーストしただけでは、質問内容を読むのに時間がかかってしまうためしっかりと読んでもらえない傾向にあります。

teratailにはMarkdownという文章を整形する記法を利用することができます。
この記法を利用することで、見出しをつけたり、リスト形式で項目を記述したり、あなたが書いたコードをきれいで見やすい形に整えたりする事ができます。
記号などを使った決まった書式で書くことで適用できますが、Markdown記法の初心者の方の為に簡単に装飾を適用できるボタンを用意しています。

本文を記入するエリアの上にあるボタンを利用することで、簡単に見出しやリスト、コードブロックが適用できます。
また、画像やリンクを貼り付けることも可能です。

アドバイス

Markdown記法を用いて見やすい質問を投稿しましょう。
初心者の方は、入力欄上部のボタンを活用しましょう。

3-8. テンプレートを利用しましょう

teratailでは質問をすることに慣れていない方の為に、上記の項目をあらかじめ用意した質問テンプレートを用意しています。
質問画面で下記のように操作をすることで、テンプレートを本文に適用できます。

是非利用してみてください。

4. 解決できたら

4-1. ベストアンサーを選びましょう

他のユーザーからの回答であなたが問題を解決できた時は、ベストアンサーを選んで解決出来たことを伝えて下さい。
回答をしてくれたユーザーは、あなたが問題を解決できたのかを気にしています。

一番役に立った回答をベストアンサーに選んでください。
もし同じような回答が複数あった場合は、あなたが一番わかりやすいと感じたものを選んでください。
それでも迷う場合は一番早く回答をくれた人でも構いません。他のユーザーには、お礼とともに選んだ理由をコメントしましょう。
迷った結果まったくフィードバックがないことの方が良くありません。

アドバイス

解決できたら、一番解決に役立った回答をベストアンサーに選び、解決できたことを伝えましょう。
せっかく回答をしたのに、まったく反応がないのでは次に答える気がなくなってしまいます。
次にあなたが質問をした時に回答をしてくれるのも、今回助けてくれたその人かもしれません。

4-2. どのように解決したのかを伝えましょう

回答してくれた人にお礼をすることも大事ですが、ただ「ありがとうございます、解決しました」だけでは不十分です。
質問してからあなたが解決するまでの間には様々な情報の流れがあったはずです。
うまくいったアドバイス、機能しなかった手順、紹介されたWebページ等・・・

多くの回答ユーザーが、自分が投稿した回答が役に立ったのか、結局どのように解決したのかを気にしています。
あなたの反応がなかったり、お礼の言葉だけだったりすると、回答者は「本当に理解してもらえたのか」、「本当に回答はあっていたのか」がわかりません。
せっかくあなたのために時間をかけて解決の手伝いをしてくれたのに、スッキリしない気持ちにさせてしまいます。
あなたがどのアドバイスを元に、どのように解決できたのかをお礼とともに伝えましょう。

もしあなたが自身で解決できたら、解決方法を回答欄に書きシェアしてください。

あなたがどのように解決したかを書き残しておくことで、あなたの質問は貴重なコンテンツ資産となります。
いつか他の誰かがあなたと同じ問題に陥った時、そのコンテンツにたどり着いたらすぐに解決できるように情報を残しておいてあげてください。

アドバイス

解決したら、どのアドバイスを元にどのように解決したのかを「回答へのコメント」や「質問への追記」で書き残し、回答してくれたユーザーへのフィードバックをしましょう。
自分で解決できた場合は、解決方法を回答欄に書いてシェアしましょう。
その行動は他の誰かに同じ問題が起きた時の助けになります。あなたは助けてもらう立場から誰かを助ける立場にもなります。
こういうギブアンドテイクの循環がteratailのコミュニティを支えています。

※この文書は、結城浩さんの「技術系メーリングリストで質問するときのパターン・ランゲージ」を参考にし、作成しています。

3分でわかるteratail

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る