本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。
第2回 | ファイル構成を見て入口を見つける | ls find cat でプロジェクトを歩く|UNIX Cafe

CLIで開発する | 第2回
知らないプロジェクトを開いたときは、まずファイル構成を見て、どこに何があるかを確認します。
今回は pwd ls cat find を使い、Python製CLIアプリの中を歩きます。コードを読む前に地図を見る回です。YouTubeから来た方も手元で同じ操作を試せるように、最初に練習用ファイルを作ります。
この記事で学べること
pwdとlsで足元を見る方法README.mdを最初に読む理由findで浅い階層のファイルを一覧にする方法- コード、データ、ログ、テストの置き場所
練習を始める前の準備
最初に今回の練習に必要な、ディレクトリとファイルを、ターミナルと vi を使って作成します。
作業用ディレクトリの作成
ターミナルを開いたら、練習用のファイルを格納する unix_cafe_order ディレクトリを作成します。mkdir はディレクトリを作るコマンドです。ディレクトリを作成したら、ls で確認します。
mkdir unix_cafe_order
lsls を実行すると、作成したディレクトリが確認できます。
unix_cafe_order次にcd コマンドを使って、いま作成したディレクトリへ移動します。
cd unix_cafe_order新たに src data logs tests ディレクトリを作成します。ディレクトリを作成したら、ls で確認します。
mkdir src data logs tests
lsls を実行すると、作成したディレクトリが確認できます。
data logs src tests作業用ファイルの作成
続けて、プロジェクトの説明を書く README.md を作ります。
vi README.mdvi が開いたら、i キーを押して入力モードにします。次の内容を入力してください。
# UNIX Cafe Order
UNIX Cafe の注文金額を合計する、学習用の小さな Python アプリです。
## 実行方法
python3 src/app.py
## テスト方法
python3 -m unittest discover -s tests入力できたら、Esc キーを押します。続けて :wq と入力し、Enter キーを押してください。:wq は、ファイルを保存して vi を終了する操作です。
次に、アプリのコードを3ファイル作ります。どのファイルも、vi を開いた後の操作は同じです。i キーを押して入力し、最後に Esc、:wq、Enter の順に操作します。
まず、アプリの入口になる src/app.py を作ります。
vi src/app.pyfrom calculator import calculate_total
from message import format_total
orders = [500, 600, 700]
total = calculate_total(orders)
print(format_total(total))注文金額を足し算する src/calculator.py を作ります。
vi src/calculator.pydef calculate_total(orders):
return sum(orders)表示する文章を作る src/message.py を作ります。
vi src/message.pydef format_total(total):
return f"Cafe order total: {total} yen"最後に、コード以外のファイルも作ります。注文データを書く data/orders.csv を作ってください。
vi data/orders.csvitem,price
coffee,500
sandwich,600
cake,700実行ログの例として logs/app.log を作ります。
vi logs/app.log2026-01-01 10:00:00 INFO sample log for UNIX Cafe Order確認用のテストファイル tests/test_calculator.py も作ります。Pythonの内容は今すぐ理解できなくても問題ありません。今回は、テストを置く場所が tests だと分かれば十分です。
vi tests/test_calculator.pyimport sys
import unittest
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
from calculator import calculate_total
class CalculatorTest(unittest.TestCase):
def test_calculate_total(self):
self.assertEqual(calculate_total([500, 600, 700]), 1800)
if __name__ == "__main__":
unittest.main()これで準備は完了です。途中で入力を間違えた場合は、もう一度 vi ファイル名 を実行すると修正できます。
最初に足元を見る
プロジェクトへ移動したら、最初に現在地と中身を確認します。
pwd
lspwd は、今いる場所を表示します。末尾が unix_cafe_order になっていれば準備完了です。ls は、その場所にあるファイルとディレクトリを表示します。
今回のサンプルでは、次のようなファイルとディレクトリが見えます。
README.md
data
logs
src
testssrc にはアプリのコード、data には注文データ、logs には実行ログ、tests には確認用のテストが入っています。
README.md を読む
README.md があれば、最初に読んでおくと見通しがよくなります。アプリの目的や実行方法が書かれていることが多いファイルです。
cat README.md今回のサンプルでは、アプリの目的、実行方法、テスト方法が書かれています。コードを開く前に、まず説明を読む方が効率的です。この回ではまだ実行しませんが、次回使うコマンドが python3 src/app.py だと分かります。
find でファイルを一覧にする
浅い階層にあるファイルを一覧にすると、プロジェクトの形が見えてきます。
find . -maxdepth 2 -type f-maxdepth 2 は、深く潜りすぎずに2階層までを見る指定です。-type f は、ディレクトリではなくファイルだけに絞る指定です。
今回のサンプルでは、次のように表示されます。表示される順番が違っていても問題ありません。
./README.md
./data/orders.csv
./logs/app.log
./src/app.py
./src/calculator.py
./src/message.py
./tests/test_calculator.pyコードだけを見たいなら、探す場所を src に絞れます。
find ./src -type f今回のサンプルでは、次の3ファイルが見つかります。
./src/app.py
./src/calculator.py
./src/message.py入口になりそうなファイルを見つける
app.py という名前から、アプリを動かす入口になりそうだと考えられます。calculator.py は計算処理、message.py は表示メッセージに関係しそうです。
この段階では、まだ全部を詳しく読む必要はありません。ファイル名と配置から、おおまかな役割を把握できれば十分です。
src: アプリのコードdata: アプリが扱うデータlogs: 実行時の記録tests: 計算などが正しいか確認するテスト
初心者がつまずきやすいところ
find . だけで広い場所を探すと、結果が多くなりすぎることがあります。最初は -maxdepth で深さを制限したり、./src のように場所を狭めたりすると読みやすくなります。
手を動かすミニ練習
find ./tests -type fを実行し、テストファイルを確認するfind ./data -type fを実行し、注文データを確認するcat README.mdを実行し、アプリの実行コマンドを見つける
余裕があれば、cat data/orders.csv も実行してください。コーヒー、サンドイッチ、ケーキの注文データが表示されます。今回はファイルを書き換えないため、失敗してもサンプルが壊れることはありません。
練習を終えた後の片付け
練習が終わったら、ターミナルで1つ上のディレクトリへ戻ります。
cd ..
pwd次回も同じサンプルを使うので、作成した unix_cafe_order ディレクトリは残しておいてください。
次回予告
次回は、アプリを実際に動かします。画面の表示だけでなく、終了状態とログも確認します。

