私からこのリンクが送られてきたと言うことは、回答してあげたいけど情報が少なすぎて何も返事ができない状況です。
嫌味とかじゃなくて単純に困っているだけなので、まずこれを読んでみて、それからさらに情報ややりたいことを送ってくれると嬉しいです😁
TL;DR
質問する時に意識すべきこと
- 質問する時に情報量を絶対にトリミングしない
- なんなら情報をかき集めて全部送る
- 情報足りないよりは過剰の方が圧倒的に良い
- 「うまく動かない」ではなく 「本当は何がしたかったのか」 を詳しく全部言語化して伝える
何が質問したいの?
私のソフトウェア力なんてこっぱみじんこに等しいものですが、とはいえ自分が属するコミュニティーの中では中の上なので、質問を受ける機会は多々あります。その時にまず感じるのは
環境を言え、状況を言えーーーーーーーーー!!!!!!!!!
ということです。実際に遭遇した例(個人情報保護のため若干改変しています)をいくつか紹介しながら、何がいけないのか、どうすべきだったのかをお送りしたいと思います。
CASE1. そこだけみてわかると思った?
いや知るかよ。main.cppでエラーが起きてることしかわからん。逆にこれだけで判断できると思ってるのがやばい。
CASE2. 頼むから環境を教えて…
質問者: Pythonで入力の部分でエラーが出ます。どうしたらいいですか?
Traceback (most recent call last):
File "/Users/shirokuma89dev/Documents/neko.py", line 1, in <module>
st = raw_input(u'お名前を入力してください:')
^^^^^^^^^
これほどのあからさまな例なら全然わかってしまいますが例なのでごめんなさい。
まず環境を教えて!!!って言いたくなります。
CASE3. 何がしたいんですか??
質問者: ロボットがうまく動きません。どうやったらうまく動きますか?(プログラムと動画の添付)
プログラムと動画の添付ができたのは偉いです。が、本来どうやって動くのを理想としていますか???それがエラーなのか仕様なのか 、回答者は判断することができません。
どうすべきか
質問する側は情報をトリミングするべきではありません。みやすい資料を作りたいわけではないのですから、全部包み隠さずに渡す方が良いと思います。例えばCASE1はこうすべきです。
質問者: PlatformIOでLチカのプログラムを作ろうとしたのですがエラーが出ました。
#include <Arduino.h>
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
/Users/shirokuma89dev/.platformio/penv/lib/python3.9/site-packages/urllib3/__init__.py:34: NotOpenSSLWarning: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020
warnings.warn(
Processing uno_r4_wifi (platform: renesas-ra; board: uno_r4_wifi; framework: arduino)
---------------------------------------------------------------------------------------------------------------
/Users/shirokuma89dev/.platformio/penv/lib/python3.9/site-packages/urllib3/__init__.py:34: NotOpenSSLWarning: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020
warnings.warn(
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/renesas-ra/uno_r4_wifi.html
PLATFORM: Renesas RA (1.2.0) > Arduino Uno R4 WiFi
HARDWARE: RA4M1 48MHz, 32KB RAM, 256KB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, jlink)
PACKAGES:
- framework-arduinorenesas-uno @ 1.0.4
- tool-bossac @ 1.10901.0 (1.9.1)
- toolchain-gccarmnoneeabi @ 1.100301.220327 (10.3.1)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 18 compatible libraries
Scanning dependencies...
No dependencies
Building in debug mode
Compiling .pio/build/uno_r4_wifi/src/main.cpp.o
Compiling .pio/build/uno_r4_wifi/FrameworkArduinoVariant/tmp_gen_c_files/common_data.c.o
Compiling .pio/build/uno_r4_wifi/FrameworkArduinoVariant/tmp_gen_c_files/main.c.o
Compiling .pio/build/uno_r4_wifi/FrameworkArduinoVariant/tmp_gen_c_files/pin_data.c.o
Compiling .pio/build/uno_r4_wifi/FrameworkArduinoVariant/variant.cpp.o
Compiling .pio/build/uno_r4_wifi/FrameworkArduino/FspTimer.cpp.o
Compiling .pio/build/uno_r4_wifi/FrameworkArduino/IRQManager.cpp.o
Compiling .pio/build/uno_r4_wifi/FrameworkArduino/Interrupts.cpp.o
src/main.cpp:10:1: error: extended character is not valid in an identifier
10 | digitalWrite(13, LOW);
| ^
Compiling .pio/build/uno_r4_wifi/FrameworkArduino/Serial.cpp.o
Compiling .pio/build/uno_r4_wifi/FrameworkArduino/SerialObj1.cpp.o
Compiling .pio/build/uno_r4_wifi/FrameworkArduino/SerialObj2.cpp.o
src/main.cpp: In function 'void loop()':
src/main.cpp:10:1: error: ' digitalWrite' was not declared in this scope; did you mean 'digitalWrite'?
10 | digitalWrite(13, LOW);
| ^~~~~~~~~~~~~~
| digitalWrite
*** [.pio/build/uno_r4_wifi/src/main.cpp.o] Error 1
========================================= [FAILED] Took 0.84 seconds =========================================
* ターミナル プロセス "platformio 'debug'" が終了コード 1 で終了しました。
* ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。
ちょっと冗長に思えるかもしれませんがここまであれば全角スペース入ってますよって返信できます。
CASE1のよくない例に足りなかった情報は
- 自分の書いたコード
- 自分が本当は何をしたかったか(Lチカ)
- エラー全文
です。
情報は足りないよりは過剰な方がいいです。勝手にトリミングせず、こちらにある情報を全て渡すつもりで質問をしてくれると助かります。迷ったらエラーと該当のコード全部送ればいいです。
CASE 2の場合はまず使っているOS、Pythonのバージョンくらいは言うべきだと思います。
質問者: Pythonで入力の部分でエラーが出ます。
st = raw_input(u'お名前を入力してください:')
print(st)
環境はこれです。Mac使ってます。
% python --version
Python 3.12.0
OS: macOS 14.2 23C64 arm64
Host: Mac14,2
Kernel: 23.2.0
Uptime: 6 days, 22 hours, 15 mins
Packages: 67 (brew)
Shell: zsh 5.9
Resolution: 1710x1112
DE: Aqua
WM: Quartz Compositor
WM Theme: Blue (Light)
Terminal: iTerm2
Terminal Font: UDEVGothic35NFLG-Regular 16
CPU: Apple M2
GPU: Apple M2
Memory: 4515MiB / 24576MiB
ここまで書いてくれれば、あぁraw_input()
はPython 3では使えないから
st = input('お名前を入力してください:')
print(st)
ってかきかえようねってすぐ言えます。OS依存の問題やインポートしているもののバージョン関係の問題とかは結構あり得る話なので、こちらもとにかく情報を捻出して自分の環境を質問される人に伝えましょう。ハードウェアが伴うものだったら実機の様子の動画や写真を送るのもいいと思います。
CASE3の場合は本来どうやって動いてほしいのかを言うべきです。光らないのが良くないのか、スピードが速すぎるのか、どこが意図しない動作なのかを可能な限り詳細に伝えるべきです。
良い例の紹介
Twitterでいい議論が行われている例を紹介します。プログラミングではないですが、どれだけの情報量を提供すればいいのかの規模感は掴んでもらえると思います。
まとめ 重要なことをもう一度
- 質問する時に情報は絶対にトリミングしない
- なんなら情報をかき集めて全部送る
- 「うまく動かない」ではなく 「本当は何がしたかったのか」 を詳しく伝える
自分も全然まだまだですし、ソフトウェア駆け出しですが一応よろしくお願いします。質問を送る前に一旦こちらについて確認してみてください!!!