本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。
第4回 | エラーメッセージから直す場所を探す | grep -Rni と vi +行番号を使う|UNIX Cafe

CLIで開発する | 第4回
エラーメッセージが表示されると、どこから見ればよいか分からなくなることがあります。そんなときは、画面に出た言葉を検索語として使うと、関係するコードへ近づけます。
今回は、前回表示された orders file not found という文字列を手がかりに、grep -Rni と vi +行番号 を使います。
この記事で学べること
- エラーメッセージを検索語として使う考え方
grep -Rniの読み方- 行番号を使って
viで目的地へ移動する方法 - 検索結果を原因と決めつけない姿勢
練習を始める前の準備
ここでは、第3回で作成した unix_cafe_order ディレクトリを使用します。必要なサンプルファイルの準備がまだ整っていない方は、先に第3回の記事を読んで準備を進めてください。
cd unix_cafe_order
pwd前回と同じエラーをもう一度表示し、今回の検索語を確認します。
python3 src/app.py data/missing.csvコマンドを実行すると、次のエラーメッセージが表示されます。
orders file not found: data/missing.csv画面に出た言葉を探す
このエラーメッセージは、存在しないCSVファイルを指定したことが原因で表示されています。
orders file not found: data/missing.csvこの言葉(orders file not found)がコードのどこにあるかを探します。
grep -Rni "orders file not found" src最後の src は、検索する場所を表しています。
ここでは、src ディレクトリの中から orders file not found という文字を探しています。
実行すると、次のようにファイル名、行番号、見つかった行が表示されます。
src/app.py:28: logging.error("orders file not found: %s", csv_path)
src/app.py:29: print(f"orders file not found: {csv_path}", file=sys.stderr)grep -Rni を分解する
| 指定 | 役割 |
|---|---|
-R | ディレクトリの中を再帰的に探す |
-n | 行番号を表示する |
-i | 大文字と小文字を区別せずに探す |
-Rは、指定したディレクトリの中だけでなく、その中にあるサブディレクトリまでたどって検索する指定です。
例えば unix_cafe_order ディレクトリの中に、data、src、tests というフォルダがある場合、その中のファイルもまとめて探してくれます。
最初はすべてのオプションを暗記しなくても構いません。「ディレクトリの中から探し、行番号も見る」という使い方が分かれば十分です。
行番号を使って vi で開く
検索結果で行番号が分かったら、その近くからファイルを開けます。
vi +行番号 src/app.py行番号 の部分には、直前の grep で表示された番号を入れます。たとえば28行目を開く場合は、次のように入力します。
vi +28 src/app.pyコマンドの実行結果です。
27 except FileNotFoundError:
28 logging.error("orders file not found: %s", csv_path)
29 print(f"orders file not found: {csv_path}", file=sys.stderr)
30 return 1最初から長いファイルを全部読むより、関係しそうな場所の前後を確認する方が入りやすくなります。
今回は内容を確認するだけですので、閉じるときは Esc キーを押し、:q と入力して Enter キーを押します。:q は、変更していないファイルを vi で終了する操作です。
もし誤って文字を入力してしまい、保存せずに閉じたい場合は、Esc キーを押してから :q! と入力します。
見つかった場所が原因とは限らない
検索で見つかった場所は、調査を始めるための入口です。そこが必ず原因とは限りません。表示メッセージを書いている場所が見つかっても、問題は別の処理にあるかもしれません。
まず前後を読む。変数がどこから来たかを見る。必要なら別の言葉でも探す。この順番で少しずつ範囲を広げます。
手を動かすミニ練習
grep -Rni "calculated total" srcを実行し、ログを書いている場所を探すgrep -Rni "format_total" srcを実行し、関係するファイルを見る- 表示された行番号を使い、
vi +行番号 ファイル名の形で開く
練習を終えた後の片付け
この回ではコードを書き換えていないため、そのまま次回へ進めます。次回も使うため、unix_cafe_order ディレクトリは残しておいてください。
次回予告
次回は、表示メッセージにある小さなスペルミスを vi で直し、同じコマンドでもう一度実行します。



