Googleフォームで家計簿を作り、運用して丁度1年経ちました。

制作には、こちらの記事を参考にさせていただきました。ありがとうございます(^^)

家計簿アプリは色々ありますが、こちらの方と全く同じ理由で制作することにしました。

ZaimやMoney forwardの有料会員になってみたり、Moneytree、LINE家計簿・・・

それぞれ長所短所があり、かゆいところに手が届くようで届かなかったりとしっくりこず。

サービスが終わる心配もあります。

家計簿の分析も考えると、慣れたEXCELに回帰するんですが、入力がめんどい!

レシートがたまりに溜まって、入力しなくなり、家計簿の意味がなくなります笑

その点、Googleフォームの家計簿はスマホでもPCでも入力できますし、リアルタイムだし、EXCELのように分析もできます。

ただ人間とは慣れてしまうのですね・・・

入力は楽でも、入力する項目が多くなると面倒になってきます・・・

Pythonisitaで入力UIを用意する

入力を減らすには、初期値を入れておけば楽ちんです。

参考にさせて頂いた方は、iOSのショートカットを使ってURLパラメータを処理して初期値を入力されています。

これはとても便利で、真似してショートカットでやっていました。

が、、、入れておきたい初期値が多くなると、ショートカットの分岐が縦にやたら長くなってきます。

一度頑張って作ってしまえばそれっきりなんですが、それが大変で別の方法を考えました。

初期値が多くなることとは、例えば固定費ですね。毎月決まった項目、金額のものが複数ある感じです。

そこでPythonistaがUIを作れることを利用して、入力UIを作ってみました。

見た目

こんな感じの見た目

基本的には、金額を入力するだけです。

日付も当日なら、最初から入力済みです。その他のカテゴリ(どこで買った、食費うんぬん、支出元etc)は下の方の「default」に記載されたものが初期値として入力されるようにしてあります。

よく、コンビニで朝ごはんを買うのでデフォルトでコンビニ飯に特化した初期値としてます。

固定費に関しては、毎月給料日に一つづつ手入力していましたが、ワンタップで入力されるようにボタンにしました。給料やトラリピ、PayPay銀行などと書いてあるボタンです。それらを押せば、金額、カテゴリなどがdefaultのように自動で入力されます。これをiOSショートカットでやるとどんどん縦に長くなっちゃう・・・

Googleフォームにはこんな感じで初期値が入力されます。

プログラム

中身はiOSショートカットでやるのと全く同じで、それをPythonで書いているだけです(^^)

食費、金額などのカテゴリを変数にし(cateval,costvalなど)、ボタンが押された時に関数(def)で予め決めた値が入るようにして、できたURLパラメータをURLに整形してsafariでGoogleフォームを開いています。

固定費の項目を増やしたい時は、ボタンを増やして、def~の関数を増やしていくだけです(ゴリ押し)

defaultについては、金額を入力するだけでURLを開くようにしています。

import ui
from objc_util import UIApplication, nsurl # safariで開く
import urllib.parse # URLエンコード、デコード
import datetime

today = datetime.datetime.now().strftime('%Y-%m-%d') # 本日を取得

# default value
dateval = today # 初期値としてtodayを入れる(def datemovedが動作しないとdatevalに値が入らないためエラーになることの対策)
costval = ''
whereval = 'コンビニ'
whatval = ''
cateval = '食費'
inoutval = '支出'
payval = 'LINE Pay VISA'
seisanval = 'しない'

# 家計簿formへのリンク
url1 = 'https://docs.google.com/forms/..........' # ここには自分のGoogleフォームのURLを記載する

# 給料
def kyuuryobuttonclk(sender):
  global costval,whereval,whatval,cateval,inoutval,payval,seisanval

  costval = '100' # 給料の額
  whereval = ''
  cateval = '給料'
  inoutval = '収入'
  payval = 'なし(収入の場合)'
  seisanval = 'しない'

  # 買った日
  bydateurl = '&entry.XXXXXXX=' + dateval # XXXXXXXは自分のページのソースから取得可能
  # 金額
  costurl = '&entry.XXXXXXX=' + costval
  # どこで
  whereval = urllib.parse.quote(whereval) # encode(日本語は変換しないとだめなので)
  whereurl = '&entry.XXXXXXX=' + whereval
  # 何を
  whatval = urllib.parse.quote(whatval)
  whaturl = '&entry.XXXXXXX=' + whatval
  # カテゴリ
  cateval = urllib.parse.quote(cateval)
  cateurl = '&entry.XXXXXXX=' + cateval
  # 収支
  inoutval = urllib.parse.quote(inoutval)
  inouturl = '&entry.XXXXXXX=' + inoutval
  # 支払い元
  payval = urllib.parse.quote(payval)
  payurl = '&entry.XXXXXXX=' + payval
  # 精算の有無
  seisanval = urllib.parse.quote(seisanval)
  seisanurl = '&entry.XXXXXXX=' + seisanval

  # URLを整形
  URL = url1 + bydateurl + costurl + whereurl + whaturl + cateurl + inouturl +payurl + seisanurl
  UIApplication.sharedApplication().openURL_(nsurl(URL)) # safariで開く

  sender.superview['costtextfield'].text = ''

# トラリピ
def torabuttonclk(sender):
 # def kyuuryobuttonclk(sender): と同じ感じに書くだけ
 # 他のdefも同様

# 第一生命(年金保険)
def daiichibuttonclk(sender):

# ジャパンネット銀行
def paypaybuttonclk(sender):

# 楽天銀行(定期)
def rakutenbuttonclk(sender):

# 当日以外を指定する時、日付を表示する(Buy dateの右隣に表示) 
def datemoved(sender): # 何かしら数字を動かしたら
  global dateval

  dateval = sender.date.strftime('%Y-%m-%d')
  sender.superview['datelabel'].text = dateval # datelabelに表示

# 金額だけ入れた時 
def costwrite(sender): # costが入力されたら
  global dateval,costval,whereval,whatval,cateval,inoutval,payval,seisanval

  sender.superview['datelabel'].text = dateval # datelabelに表示

  costval = sender.superview['costtextfield'].text

  # 買った日
  bydateurl = '&entry.XXXXXXX=' + dateval
  # 金額
  costurl = '&entry.XXXXXXX=' + costval
  # どこで
  whereval = urllib.parse.quote(whereval) # encode
  whereurl = '&entry.XXXXXXX=' + whereval
  # 何を
  whatval = urllib.parse.quote(whatval)
  whaturl = '&entry.XXXXXXX=' + whatval
  # カテゴリ
  cateval = urllib.parse.quote(cateval)
  cateurl = '&entry.XXXXXXX=' + cateval
  # 収支
  inoutval = urllib.parse.quote(inoutval)
  inouturl = '&entry.XXXXXXX=' + inoutval
  # 支払い元
  payval = urllib.parse.quote(payval)
  payurl = '&entry.XXXXXXX=' + payval
  # 精算の有無
  seisanval = urllib.parse.quote(seisanval)
  seisanurl = '&entry.XXXXXXX=' + seisanval

  # URLを整形
  URL = url1 + bydateurl + costurl + whereurl + whaturl + cateurl + inouturl +payurl + seisanurl
  UIApplication.sharedApplication().openURL_(nsurl(URL)) # safariで開く
	# webbrowser.open(URL) # pythonista内で開く
	# print(URL)

'''View UI'''
v = ui.load_view()
v.present('sheet')

このプログラムをiOSショートカットで起動できるようにし、ホーム画面に出しておけばすぐ入力できる!

以上(^^)