第4回 | エラーメッセージから直す場所を探す | grep -Rni と vi +行番号を使う|UNIX Cafe

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

第4回 | エラーメッセージから直す場所を探す | grep -Rni と vi +行番号を使う|UNIX Cafe

CLIで開発する | 第4回

エラーメッセージが表示されると、どこから見ればよいか分からなくなることがあります。そんなときは、画面に出た言葉を検索語として使うと、関係するコードへ近づけます。

今回は、前回表示された orders file not found という文字列を手がかりに、grep -Rnivi +行番号 を使います。

この記事で学べること

  • エラーメッセージを検索語として使う考え方
  • 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 ディレクトリの中に、datasrctests というフォルダがある場合、その中のファイルもまとめて探してくれます。

最初はすべてのオプションを暗記しなくても構いません。「ディレクトリの中から探し、行番号も見る」という使い方が分かれば十分です。

行番号を使って 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! と入力します。

見つかった場所が原因とは限らない

検索で見つかった場所は、調査を始めるための入口です。そこが必ず原因とは限りません。表示メッセージを書いている場所が見つかっても、問題は別の処理にあるかもしれません。

まず前後を読む。変数がどこから来たかを見る。必要なら別の言葉でも探す。この順番で少しずつ範囲を広げます。

手を動かすミニ練習

  1. grep -Rni "calculated total" src を実行し、ログを書いている場所を探す
  2. grep -Rni "format_total" src を実行し、関係するファイルを見る
  3. 表示された行番号を使い、vi +行番号 ファイル名 の形で開く

練習を終えた後の片付け

この回ではコードを書き換えていないため、そのまま次回へ進めます。次回も使うため、unix_cafe_order ディレクトリは残しておいてください。

次回予告

次回は、表示メッセージにある小さなスペルミスを vi で直し、同じコマンドでもう一度実行します。

さらに学びたいあなたへ

用途ごとに選ぶ Linux のおすすめ本

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次