Python 初学者が楽天APIを使って買い物リスト作成アプリ作る(概要 編)

Python 初学者です。

買い物リスト作成アプリを作りましたので、備忘録として詳細を記していきます。
力及ばず、コマンドライン上で動くアプリとなりました。
作成に２か月かかりましたが、その間に学んだことが多々ありましたので、
作成過程とともに記録していきます。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">お買い物リスト作成アプリを作ってみました <a href="https://t.co/oHXqwiUEe8">pic.twitter.com/oHXqwiUEe8</a></p>&mdash; あゆみ (@infdf78LXSYr2T8) <a href="https://twitter.com/infdf78LXSYr2T8/status/1621736229560803328?ref_src=twsrc%5Etfw">February 4, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


**こちらはフロントの部分（ページ内の検索ボタンのリンク先はサンプルページです）**

https://yuuauuy1.github.io/web-apli.github.io/

**★このページは以下項目で構成されています★**

| 項番 | ページ内リンク |
|:----:|:-------------|
| 1 | [初学者の学習記録](#初学者の学習記録) |
| 2 | [アプリの概要](#アプリの概要) |
| 3 | [なぜこのアプリを作ろうと考えたのか](#なぜこのアプリを作ろうと考えたのか) |
| 4 | [アプリ作成で大切だと感じたこと](#アプリ作成で大切だと感じたこと) |
| 5 | [買い物リスト作成アプリの構想](#買い物リスト作成アプリの構想) |
| 6 | [実行環境](#実行環境) |
| 7 | [メンターさんと話して](#メンターさんと話して) |


# 初学者の学習記録

2022年10月～　HTML, CSS, Javascript, Ruby on Rails 学習 (Progateにて)
2022年11月～　Python を Progate で学習開始
2022年12月～　買い物リスト作成アプリ作成開始

まだ、プログラミングを初めて３か月です。
ですので、記事に至らない点が多々あると思いますが、ご了承頂けたら幸いです。

# アプリの概要
1. コマンドライン上で買い物リストに入れたい材料のワードを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983287/dfd5ce21-9592-1a69-b776-e557ebe0e3ed.png)
2. 楽天レシピから検索ワードにヒットするレシピの
・index
・レシピ名
・何人分のメニューかが表示されます。
・URL
・材料一覧
が表示されます。
※{酢:0}、{コチュジャン：0}の様に、量が0で表示されているものは、{}内の材料(調味料)が1つ必要だよという意味です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983287/bfd78e71-f60d-171d-8c96-2728a92358b9.png)
3. 買い物リスト化したいレシピの index を入力します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983287/6bb2a514-4a67-4870-c146-627a62df8552.png)
4. レシピ検索を続けるか聞かれるので1か0で選択します。（これ以外で答えるとやり直しです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983287/43074920-889f-f98d-002f-fedb4296f9f9.png)
5. レシピ検索を終わる場合、選択したレシピの材料を何人分に変換したいか聞かれるので、数字を入力します。（数字以外で答えるとやり直しです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983287/1fe78cc9-8ee3-d136-855f-b2c9496041c7.png)
6. 選択したレシピの材料（同じ材料同士は量をそれぞれ足して表示）一覧がお買い物リストとして表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983287/97710c97-5780-1940-7456-c35291309a69.png)

こちらの、index:2026 のレシピはもともと１人前の材料で、お買い物リストとして４倍の４人分の材料が表示されています。

調味料を0 として表示しているのは、あくまでも買い物リストなので、
表示されている調味料が１つあれば事足りると思ったからです。
「うすくち醤油:0」はうすくち醤油が必要と考えてください。

# なぜこのアプリを作ろうと考えたのか

作りたいレシピを集めて、ボタン一つで食材購入リストが作れたら便利だなあと考えたからです。

主婦である私は、料理が好きで、普段はレシピサイトを見ながら作ります。
そして、家計を握っていますので、食費の無駄な出費を抑えたい・・・
さらに、食費節約のため、買い物は週１回、ちょっと遠いが激安のスーパーに！と決めています。

今までは、大体１週間の献立を頭の中で何となく作って、１週間分の食材を適当に買い物をしていました。
しかし、買い忘れがあり、コンビニで買ってしまったり、近くの割高スーパーで買ってしまったり・・・ということが良くありました。

ということで、複数の献立の材料買い物リストを作ってくれるアプリが欲しい！と思い立ち、作成してみることにしました。
このアプリには、Pythonが向いているということが分かり、まずProgateでPythonコースを受講してからアプリ作成に進みました。

そして、アプリ作成で学んだことがありましたので、アプリ構想に入る前に記述しておきます。

# アプリ作成で大切だと感じたこと
## どんな目的をもって作成するか考える
ここが定まっていると、どのような機能をいれるのか、どのようなデータ型を保持すればよいのか、UIはどのようなものが分かりやすいのか考えやすいですし、常に頭の端っこに入れながらプログラムを作る必要があるなと感じました。

## どのような機能を入れるか詳細を決めておく
これは、実際に体験しました。
このアプリで、材料をユーザーが欲しい人数分に変換できるのですが、そちらの機能を入れることを途中まで忘れていました。
この機能を作るのに、追加で必要なデータがあり、データを集めて、データベースを修正して、コードを直して・・・と、
一つの追加機能でやることが増えました。
こちらのアプリで使っているデータは微々たるものなので、それはそれで楽しかったのですが、仕事として納品期限があることもあると考えると、機能追加で必要なデータも増えてきますし、コードも修正しなければならなかったりと非常に大変だと思いました。

## データ型をどのような形にするか決める
大量のデータをもとに何かをするアプリの場合、データ収集の前に適切なデータ型を決める必要があると感じました。
私は、データ型を全く決めずに、どうやってデータを集めるか考え始めたので、データ収集でとても時間がかかりました。
データ型が決まっていると（見本図を作ると良かった）、それに合わせてコードを書けば良いので、非常にデータ収集が行い易くなりました。

## エラー文をちゃんと読む
本当に大切だなと感じたことです・・・。エラー文、英語で出てくるので目も背けたくなるのですが、大抵エラー文のなかに解決の糸口が書いてあることが分かりました。そもそも、解決方法を書いてくれる時も多々ありました。
絶対このコードで動く！と思ってもほぼ100%エラーが出るので、エラー文ありがとうくらいのマインドでいる方が良いと感じました。

## 変数名を他者に分かりやすいようにつける
アプリを作る過程で週１回、メンターさんにコードを見て頂いていたのですが、その中で、メンターさんに変数名のアドバイスもしていただきました。初めは変数名に関して、あまり重要性を感じておらず、何となくでつけていました。
しかし、変数名を自身が分かるようにつけていても、他人から見ると全く分からないこともあり、そうなると見てくださる方もストレスが溜まるだろうな・・・と感じ、これは重要なことだと思いました。

大きいものを５つ書いたのですが、他にもあるので、今後の記事で少しずつ学習したことを書いていきます！
次から、アプリの構想です。

# 買い物リスト作成アプリの構想

Qiitaでアプリを作る時に必要な情報を色々と調べて、
アプリにどのような機能を入れたいかざっくり考えました。(上記にもありますが、ざっくり考えるのではダメでした)

## 入れたい機能 
1. レシピを検索できる。
2. レシピを選択して、材料と量の情報を抽出できる。
3. それぞれの材料の量を必要人数分に変更できる。
4. 上記がレシピごとに出来て、複数のレシピから買い物リストを作る
5. 同じ食材はまとめる。（例えばカレーで玉ねぎ１個、サラダで玉ねぎ1/2個使うのであれば、買い物リストには、二つを足して「玉ねぎ：3/2個」と表示する）

### 可能であれば入れたい機能
1. 買い物リストにチェック機能をつける（買い忘れを防ぎたいため）
2. スマホで見れるようにしたい・・・

以下は、初期の手書きのメモです(汚くてすみません)。
![Image[850].jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983287/e165aaa6-b375-be4e-7b5e-de2a919cbb1b.jpeg)


# 開発環境
```python
OS-- windows
Python--3.11.0
```

また、自分のパソコンに VS code をインストールして作成しました。

そして、自分がやりたいことと、近いことをされている方の記事をqiitaで発見し
なんだかできそう！と思い

さあ！VS code でコードをかくぞ！と思い立ちましたが、
何からかけば良いのか、アプリのどの部分から作ればいいのか全く分かりませんでした...。

参考にさせて頂いた記事はこちら ↓

https://qiita.com/tanamimi/items/d7e9e86a8e346fd388b2

https://qiita.com/konitech913/items/7ffa7907a6c03c8909fc

誰かに入口だけでも教えてもらわなければ・・・と、MENTA（簡単に説明すると、教える側と教えてもらいたい側のマッチングサービス）でアプリ作成を指南してくださる方を探しました。（１０週間にわたりお世話になりました><）


# メンターさんと話して


まず、このアプリ作成の道筋として以下の流れを教えてもらいました。

1. データを集める（どのレシピサイトから、何個のレシピを集めるのか、保管方法はデータベースを使うのか、Excelやcsvファイルとして残すのか検討が必要）

2. データを使えるように加工する（「醤油：大さじ３」、「しょうゆ：大３」などの意味は同じだが表記が違うものをどこまで加工するか検討が必要）

3. 検索機能や、買い物リストを表示するための機能、同じ材料同士の量を足す機能などを作る

4. アプリの顔となるフロントエンドの部分を作る



通常はフレームワークを使用してアプリ開発をすると思うのですが、自身がまだProgateでpythonを学んだ程度の知識量であったため、フレームワークを使用せず基礎を固めていこうという方針で、今回の形のアプリになりました。

メンターさんとは１週間に１回、Google chatで通話が出来る契約でしたので、１週間ごとにアプリのどの部分までやるのか話し合いながら進める形をとりました。

次回、データ収集編となります。

https://qiita.com/yuuauuy1/items/a27f6af14540f188191d