クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

人が書いたコードを読む

このレッスンのあとで: 人が書いたコードの中で、ある機能がどこにあるかを見つけることができます。

45分のレッスンコマンドなし

入社3日目の調査

大阪の物流会社に、開発者として入社して3日目です。先輩から「沖縄あての配送料がおかしい、という問い合わせを調べてほしい」と頼まれました。

プロジェクトには、ファイルが200個以上あります。全部を読む時間はありません。それでも、必要な場所は数分で見つけられます。

このレッスンのゴール

メモ

人が書いたコードの中で、ある機能がどこにあるかを見つけることができます。

キーワード

ことばいみれい
コードベース一つの製品を作るコード全体です。
関数名前のついた処理のまとまりです。calc_fee
呼び出し関数を名前で動かすことです。calc_fee(2, "大阪")
grepファイルの中の文字を探すコマンドです。grep -rn "calc_fee" app
入口プログラムが最初に動くファイルです。main.py

学生が入力するセルは、このプレビューでは空白です。

フォルダの名前が地図になる

コードベースを開いたら、まずフォルダの名前を見ます。多くのチームは、機能ごとにフォルダを分けます。

orders なら注文、shipping なら配送、customers なら顧客です。配送料の問題なら、最初に shipping を見ればよいとわかります。

入口のファイル、たとえば main.py も確認します。そこから全体の流れが始まります。

実行: フォルダの一覧を見る

コード: bash
# 物流会社の配送システムを、小さく作ります。
mkdir -p delivery/orders delivery/shipping delivery/customers
printf 'def create_order(items):\n    return {"items": items}\n' > delivery/orders/create.py
printf 'def calc_fee(weight, area):\n    return 800\n' > delivery/shipping/fee.py
printf 'def find_customer(code):\n    return code\n' > delivery/customers/lookup.py
printf 'print("配送システムを起動します")\n' > delivery/main.py

# フォルダとファイルの一覧を、まとめて表示します。
ls -R delivery

grep で関数の場所を探す

フォルダの見当がついたら、言葉で探します。grep -rn "def calc_fee" app は、関数が作られている行を探します。

-r は中のフォルダまで探す、-n は行番号を出す、という意味です。

次に def を外して calc_fee( で探します。すると、その関数を呼んでいる場所もわかります。

練習: 呼び出しを探す

コード: bash
# 小さな配送システムを作ります。
mkdir -p app/orders app/shipping
printf 'from shipping.fee import calc_fee\n\ndef checkout(order):\n    fee = calc_fee(order["weight"], order["area"])\n    return order["total"] + fee\n' > app/orders/checkout.py
printf 'def calc_fee(weight, area):\n    if area == "沖縄":\n        return 1500\n    if weight > 10:\n        return 1200\n    return 800\n' > app/shipping/fee.py
printf 'from orders.checkout import checkout\n\nprint(checkout({"total": 3000, "weight": 2, "area": "大阪"}))\n' > app/main.py

# 配送料を計算する関数が、どこで作られているかを探します。
grep -rn "def calc_fee" app

# その関数を呼んでいる場所を探します。
grep -rn "calc_fee(" app

# 練習: 下の行の先頭の # を消して、checkout を呼んでいる場所を探してください。
# grep -rn "checkout(" app

よくある誤解

注意

「全部読んでからでないと、何も触れない」と考える人は多いです。実際の現場では、ベテランでも全部は読みません。調べたい機能に関係する数ファイルだけを、深く読みます。名前と検索で場所をしぼってから、読み始めましょう。

呼び出しをたどると流れが見える

場所が見つかったら、入口から順に呼び出しをたどります。

main.py が checkout を呼び、checkout が calc_fee を呼びます。この順番がわかると、配送料がどこで決まるかがはっきりします。

たどった順番は、メモに書いておきます。あとで先輩に説明するときにも役に立ちます。

例: 呼び出しの順番

順番ファイル関数すること
1main.pyなし注文を作って checkout を呼ぶ
2orders/checkout.pycheckout配送料を足して合計を出す
3shipping/fee.pycalc_fee重さと地域で配送料を決める

学生が入力するセルは、このプレビューでは空白です。

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。