【Python初学者】楽天価格チェッカーを作ってみた ① ― プロジェクト全体像とフォルダ構成
はじめに🐰
Python初学者のわたしが覚えるために、学んだことを整理し、理解を深めるために記事を書いています。
私が実際にやってみて、悩んだ部分や過程などを残していきます🐥
プログラミングを始めてまだ日が浅いですが、「実際に使えるものを作りながら学ぼう!」と思い、楽天市場の商品価格を自動でチェックするツールを作成しました🛒
この記事はシリーズ形式で、ファイル(機能)ごとに分けて投稿していきます😊
コードの書き方や使ったPythonのメソッドを、同じく初学者の方にも伝わるように丁寧に解説することを心がけて書いていきます🐥
間違いや改善点があれば、ぜひコメントで教えてください!
本日のゴール⚽️
- このプロジェクトが「何をするツールなのか」を理解する
- フォルダ構成と各ファイルの役割を把握する
- 全体の処理の流れをつかむ
作ったもの:楽天価格チェッカー
楽天市場のAPIを使って、キーワード検索した商品の価格情報を取得し、CSVに保存するツールです😎
主な機能☝️
- ポップアップでキーワードを入力(カンマ区切りでAND検索も対応)
- 楽天APIで最大150件の商品を取得(5ページ×30件)
- 中古・訳ありなどの商品を自動除外
- 価格の安い順に並び替え
- 最安・平均・最高価格を計算
- 結果をCSVファイルに保存
フォルダ構成
ec_price_checker/
├── main.py # 起動ファイル(エントリーポイント -> 最初の場所✏️)
├── main_flow.py # 処理全体を統括するクラス
├── config.py # 定数・設定値をまとめる場所
├── requirements.txt # 使用ライブラリの一覧
│
├── api/
│ └── rakuten_api.py # 楽天APIへのリクエスト処理
│
├── price_tools/
│ ├── price_list_builder.py # 商品のフィルタリング・並び替え
│ └── price_stats.py # 価格統計(最安・平均・最高)の計算
│
├── utils/
│ ├── logger.py # ログ出力(記録)の仕組み
│ ├── csv_saver.py # CSVファイルへの保存
│ ├── popup.py # ポップアップUI(tkinter)
│ └── path_helper.py # ファイルパスを管理するユーティリティ(exeファイル作成用)
│
└── data/ # 保存されたCSVが入るフォルダ(自動生成)
フォルダを分けた理由🐥🐥
プログラムを1ファイルにまとめることもできますが、機能ごとにファイルを分けると次のメリットがあります!
- 読みやすい:1ファイルの行数が少なく、何をしているか把握しやすい💡
- 直しやすい:バグが起きたとき、どこを修正すればいいかすぐわかる💡
- 使い回せる:別のプロジェクトでも同じファイルを持ってきて使える💡
全体の処理の流れ🚣♀️
① キーワードを入力(popup.py のポップアップ)
↓
② 楽天APIで商品を検索(rakuten_api.py)
↓
③ 中古などを除外 → 価格順に並び替え(price_list_builder.py)
↓
④ 最安・平均・最高価格を計算(price_stats.py)
↓
⑤ 結果をCSVに保存(csv_saver.py)
↓
⑥ 完了ポップアップを表示(popup.py)
これらすべてを main_flow.py の MainFlow クラスが順番に呼び出ようにしました☺️
エントリーポイント:main.py
from main_flow import MainFlow
if __name__ == "__main__":
flow = MainFlow()
flow.run()
コードの解説🐥
main.py はとてもシンプルです☺️
from main_flow import MainFlow
main_flow.py というファイルから MainFlow というクラスを読み込んでいます!
import は「他のファイルの部品を借りてくる」イメージです。
if __name__ == "__main__":
「このファイルが直接実行されたときだけ、この下のコードを動かしてね」という合図です。他のファイルから import されたときは動かないようになっています。
flow = MainFlow()
MainFlow クラスから インスタンス を作っています🐥
クラスは「設計図」、インスタンスは「その設計図から作った実物」のイメージです。
flow.run()
MainFlow クラスの run() メソッドを呼び出して、処理を開始します。
使ったPythonの知識(このファイル)
| 構文・概念 | 説明 |
|---|---|
import |
他のファイルやライブラリを読み込む |
if __name__ == "__main__": |
直接実行時のみ動かすおまじない |
| クラスのインスタンス化 |
クラス名() で実体を作る |
| メソッドの呼び出し |
インスタンス.メソッド名() で処理を実行 |
まとめ
今回はプロジェクト全体の構成と処理の流れを確認しました☺️
- フォルダを機能ごとに分けることで、読みやすく・直しやすいコードになる
-
main.pyはエントリーポイントで、すべての処理の起点になる -
if __name__ == "__main__":は直接実行のときだけ動かす合図
次回は utils/logger.py(ログ記録の仕組み)を解説します!
🐣シリーズ一覧🐣
- ① プロジェクト全体像とフォルダ構成 ← 今回
- ② 楽天APIリクエスト(rakuten_api.py)
- ③ フィルタリング・並び替え(price_list_builder.py)
- ④ 統計計算(price_stats.py)
- ⑤ CSV保存(csv_saver.py)
- ⑥ ポップアップUI(popup.py)
- ⑦ パス管理・設定(path_helper.py & config.py)
- ⑧ 全体統括(main_flow.py)