ITとdesign エンジニアのブログ by エンジ庭

IT業界のトレンドなどIT分野について学んだ事を書いていきます。プログラミング技術などについて現在Qiitaメインに書いてますので、そちらを参照ください。  https://qiita.com/kota_sho

家計簿アプリ!!

2019-06-23

 

プログラミングスクールのカリキュラムを修了し、就職活動も徐々に始めていますが、同時に勉強も兼ねて個人的にアプリを開発中です。

今回は家計簿アプリに挑戦です。

アプリ:家計簿アプリ

 

なぜ家計簿か:

・金融に興味があったから。

・プログラミング開発の流れを理解するのに丁度良いかなとなんとなく思ったから。

 

目的:カリキュラムが一通り終わったので、復習を兼ねプログラミング開発の流れをより理解するため。早めに完成させたいですが、優先度としては、理解をしながら、新しいことも勉強しながら、調べる力を身につけながらやってみることに重きを置いています。遠回りしてんなと思う時もありますが、きっと将来に役立つ・・・はず!

 

主な機能:

・新規登録、ログインができる

・収入・支出を日別、カテゴリー別に入力し保存

・月毎に予算を設定できる

・トップページには、当月の収入予算と支出予算、及びその日時点での収入と支出額が自動で表示されその差額が分かる。

・年と月を選択するとカテゴリー毎の金額と全体における割合、そして月の合計額が分かる。

応用として上記以外にも便利な機能を付けてみたいですが、まず基本的な機能の完成を目指しています。

 

今回の個人アプリは想像以上に身になっています。

理由:

・自分でどのようなアプリを作るかというところから構想する。

・アプリに必要な機能、処理の流れ、設計など一連を自分で考える。

・カリキュラムにない部分を自分で調べるため、調べる力がつく。

・考えても、調べても試行錯誤しても分からない時は、某WEBサイトで質問してみる。

その際、全く知らない、アプリの背景も分からない方々に質問するので、どのようにしたら質問の意図が分かりやすく伝わるか一旦自分自身でまとめる。

など

まとめると「自分の頭で考える」というのが一番です。

 

難しさ:

(進め方)

アプリを開発する上では、アプリの機能、構成、処理の流れ、またDB設計を事前に固める必要はあると思いますが、自分はもともと完璧主義者なので、作業を始めるまで時間が掛かりそうでした。いつまでたっても始められないと思い、一旦仮で設計を固めましたが、案の定進めていくにつれ「やっぱり、あーしたほうがいい」とか「あれが必要だから急遽追加、あれは不要」などスムーズとは言えない状況です。ただ、カリキュラムに沿って進めるのではなく、自分の頭で考えるのは、今まで学んだ知識、考え方を整理し、総動員する必要があるのでかなり充実しています。実践に近ずけるためTrelloも作って用意しましたが、最近は全然見てないです笑 いつの間にか無視です。

 

(実装)

家計簿アプリはSNSアプリなどと違い「分析」をすることが機能の主な役割なので、結構ややこしいです。ほとんどの機能ではデータを加工し扱います。

月毎、日毎、カテゴリーごとの収支、前月比、設定した予算に対しての実際の収支とその差、各カテゴリーの全体の中での割合などなど。当然機能ごとに必要なデータの抽出条件は変わってきますので、その都度、条件を組み合わせながらDBからデータを取得する必要があります。なので、SQLやActive Recordなんかはかなり調べたりしながら進めています。予想以上に入り組んでいるなというのが実感です。ナメてました。

例えば、今月の現時点での収入状況をDBから取得する際、

「今月が何月かをリアルタイムで認識させる」

「dateカラムの年ー月ー日から年と月のみを抽出し検索条件とする」

「検索にマッチするレコードのincome_amount(収入金額)カラムの金額を全て足し合わせる」

 

今の所うまく取得できてません。

 
 def index
 @name = current_user.name
 # 今月は何月か
 time = Time.now
 this_month = time.month
 this_year = time.year
 
 # 設定した予算の今月分
 @income_budget = Budget.find_by(year: this_year,month: this_month).income_amount
 @spending_budget = Budget.find_by(year: this_year,month: this_month).spending_amount
 
 # 今月の現在の収支状況
 @current_income = Income.group("YEAR(date)").group("MONTH(date)")
 .select(date: this_month).sum(:amount)
 @current_spending = Spending.group("YEAR(date)").group("MONTH(date)")
 .select(date: this_month).sum(:amount)  

 # binding.pry
 end
 
 
 
結果

[1] pry(#<BooksController>)> @current_income

=> {[20195]=>150000, [20196]=>1165000}

6月の合計取れてんじゃんと思ったら、5月もきてました。呼んでねーんだよ5月。御呼びでないんすよ。

 

引き続き頑張ります。