たのしく生きたい

いつもニコニコゆるふわブログです

MoneyForward + Googleスプレッドシートで家計管理

id:tobachi もしくは @toda_kk です。

この記事は Spreadsheets/Excel Advent Calendar 2018 - Adventar の18日目の記事です。

前置き

正直、↑のアドベントカレンダーの趣旨をわかってないです*14日目の記事 を書かれた id:mitsuba3 さんと、22日目を担当される予定の id:nhayato さんに誘われて勢いで登録してみたものの、何を書けば良いかわかっていません。

ぜんぜん関係ないポエムでも投下しようかとも思いましたが、さすがに場を荒らすだけになっちゃうかなと思い自粛しました*2

というわけで、タイトルの通りMoneyForwardとGoogleスプレッドシートを使って家計管理をしている話を書きます*3

システム構成と管理手順*4

以前から収支管理のためにMoneyForwardを使っています。現金を使うことがあまりないため、お金の流れをほとんど自動で管理することができて気に入っています。

MoneyForwardは本当に便利で、単に収支を入力するだけでなくさまざまな形で分析してくれます。カテゴリごとに予算設定などもできるので、月ごとの支出状況も簡単に確認できて非常に使い勝手が良いです。

f:id:tobachi:20181218193247p:plain
MoneyForwardで家計管理する私

家計管理するようになると、次は貯金がしたくなってきます。貯金の目標額を設定して、予算に収まるように支出をコントロールしたいと考えています。

MoneyForwardではありがたいことにカテゴリ分けがしっかりされているのですが、自分の場合はもうちょっとざっくり把握したいと思っていて、特に支出額を次のような形で把握したいと考えています。

  • 支出額
    • 目標額: ふつうに生活していたらこれくらいは使うだろう、という金額
    • 残余分: 家具や家電など大きな買い物をしたり、ちょっと贅沢をしたり、貯金に回したりする部分

こんなわけわからん家計管理の仕方をするのは自分くらいでしょうが、とにかくこういう形で支出を管理するのはMoneyForwardだけでは難しく、ぽちぽり集計する必要がありそうです。

そこで、MoneyForwardから月ごとの収支情報をCSV形式でエクスポートし、データをGoogleスプレッドシートで読み込むことで好きに集計したり表示したりできるのではないかと思い、もろもろ工夫してみました。

全体の手順としては下記の通りとなっています。赤枠の部分が自動化される部分です。

f:id:tobachi:20181218190155p:plain
MonerForwardとスプレッドシートを組み合わせることでハッピーになった私

ところで、普段からGoogleスプレッドシートをめっちゃ使いこなしているかというと、全くそうではありません。仕事でたまに使いますが、手軽に表形式を使えるツールとして使うくらいで、がっつり表計算をしているかと言われるとかなり微妙です*6

スクリプト作成

MoneyForwardでCSVファイルをエクスポートすると、下記のような形式で出力されます。「計算対象」という列があったりして、便利ですね。

f:id:tobachi:20181218195212p:plain
CSVはこんな感じで出力される

事前にざっくりとしたスプレッドシートを作成しており、これでなんとなく家計管理をしていました。

f:id:tobachi:20181218201121p:plain
ざっくり家計管理シート

今回は下記のようなスクリプトを作成し、このスプレッドシートを上手いこと更新していきます。

  • スプレッドシートを起動したときに実行される
  • CSVファイルの内容を計算し、支出額のうち「目標額」を超える分の金額を「残余分」の金額として集計する
  • 毎月の支出を一覧で確認できるように、1シートに表形式で表示する

スクリプト実行のトリガーを設定することができるので、スプレッドシートを起動したときに実行されるように設定しておきます。

f:id:tobachi:20181218201746p:plain
トリガー設定

あとはアップロードしたCSVを元に支出額を計算するようなスクリプトを書きます。詳細は省きますが、技術的な部分は下記の記事を参考にして作成しました。

Google Apps Script 入門 - Qiita

Google Apps Script で Spreadsheet にアクセスする方法まとめ - Qiita

csvをGoogle スプレッドシートに定期的に反映させる | Tips Note by TAM

まとめ

そんなわけで、支出の情報入力はMoneyForwardを使いつつ、集計と確認にはGoogleスプレッドシートを使うようにしました。シートとスクリプトをいじれば表示形式も好きにできるので、良い感じなんじゃないかと思います。

明日は id:decobisu さんです。お楽しみに!

*1:じゃあ一つ前の記事のときは趣旨がわかってたのか? と聞かれれば、もちろん、わかってなかったです。すみませんでした。

*2:主催者の@minemura_coffee さんはこのアドベントカレンダーで小説を連載されている。とても面白いので、みなさん読みましょう。

*3:家計管理の話でいうと、すでに id: Sixeight さんが スプレットシートを使った簡単な家計の管理 - ちなみに を書かれています。めっちゃもろ被りですが、同じ目的でも違う使い方もできるよ、というような意味合いでこの記事にも存在理由を見い出すことができるんじゃないかと祈っています。

*4:なんて仰々しい見出しなんだ! 筆者はこの記事をSIerの設計書か何かと勘違いしてるんじゃないだろうか。そんなわけがない。

*5:残念なことに、2018年12月現在MoneyForwardさんは個人で使える連携APIのようなものは提供されていないようです。

*6:ちなみに、前世ではExcelソースコードを記述したり、WBSを作成・更新したりしていました。

せめて生きてから死ね

この記事は 人生 Advent Calendar 2018 - Adventar の9日目の記事であり、また、自分自身に宛てた人生についてのポエムです。

概要

以下について書きます。

  • とりあえず生きのびてみる
  • 人生の意味
  • 具体的なことを考える

とりあえず生きのびてみる

自分は鬱になりがちな傾向があり、そういうときはどうしても「生きるか死ぬか」みたいな思考になりがちである。

そんなときはたいてい、こち亀の「悩んだらまず『生きる』モードに切り替えてからスタートだ!」という画像を思い出す*1

「とりあえず死ぬ」という選択を取ることは簡単で、首を吊ってもいいし屋上から飛び降りてもいい。しかし、死んでからまたもう一回生きることはできない*2。それなら、とりあえず生きてみて、どうしようもなくなってから死ぬのでも遅くはないんじゃないだろうか。

そんなゆるっとした考えで、ひとまず生きのびてみるという選択を取り続けてなんとか今まで生きてこれた気がしている。

人生の意味

たくさんの人間が「人生の意味とは何か」みたいなことで悩み出したのって、近代以降の出来事なんじゃないかとなんとなく感じている。

古代ギリシャの時代から「善く生きるとはどういうことか」ということはずっと考えられてきたと思うけど、それは哲学者や支配階層のひとびとの話で、いわゆる一般庶民の人々や、それこそ奴隷として扱われていたひとびとにとっては、あんまり関係なかったんじゃないかと勝手に思っている。

そもそも近代以前*3、人間の命の価値はそんなに重くなかった。例えば、子どもの生存率は今よりも低かったので、たくさん産んで上手く生き残れるやつがいれば良し、みたいな感じだったんじゃないだろうか。また、今みたいに子どもは家族や地域みんなで守り育てるものというより、特に農村部では単なる労働力として扱われていたらしい。フィリップ・アリエス『〈子供〉の誕生』という本にそんな感じのことが書いてあった気がする*4

そういう時代と比べると今の社会はとにかく変化が激しいから、不安になったり生きづらさを感じたりしてしまっても仕方ないかなと思ってしまう。まあ人は鬱になったりするもんだと思っておくと良いかもしれない。

「人生の意味とは何か」「自分は何のために生まれてきたんだろう」みたいなことで悩み出すと、ひたすら落ち込んでしまいがちである。「そんな悩みこそ意味がない」とか「人生の意味を見つけるのが人生だ」とか言われるかもしれないけど、そんなマッチョなこと言われてもなーって感じだ。

「悩んでもしょうがない」みたいなノリにはどうしても乗れなくて、むしろ悩み始めてしまったときはとことんまで悩み抜いてみるのも良い気がしている。その先に何らかの答えが見い出せればそれはハッピーなことだし、何もわからなくても「とりあえず悩んだ」という経験自体に意味を見出すこともできる。いったん死なない程度に悩んでみるのは、けっこうありな気がしている。

具体的なことを考える

落ち込んでしまったときに、具体的に死ぬ計画を立ててみるのはわりとありなんじゃないかと思っている。例えば、1990年代に話題にも問題にもなった鶴見済完全自殺マニュアル』はそんな感じの本だと思う。意外とあっさり死ねるんだな、人生なんてあっけないんだな、みたいに思えると自分の命を重くとらえすぎなくて済んで、なんとなく元気になれるんじゃないだろうか*5

そもそも「生とは」「死とは」「人生とは」みたいな抽象的なことを鬱っぽいときに考えても良くないと思う。そういうことは元気でエネルギッシュなときに考えて答えを見出せば良いので、元気がないときはむしろ具体的なことに思考を落とし込んだ方が悩みが軽くなる気がする。

特に数字に換算できるほど具体的なことを考えられると、いろんなことを可視化しやすくなって良いと思う。自分が今年鬱っぽくなったときは、「とにかく映画をたくさん観る」という目標を立ててみた。「今年中に50本以上映画を観る」というような形で具体的な数値目標を立てて、その実現のために月単位・週単位の計画を立てて実行していた。そうすると、ひとまず目の前のことに集中できるし、人生に実益のなさそうな目標でもとにかく達成できれば嬉しい気持ちになれる。金銭とは異なる形で数字の奴隷になってみるのはわりと気分が良い体験だと感じた。

まとめ

そんなこんなで、今年もなんとか生きのびることができた。もちろん、上記のような考えですべての人の悩みが解消できるとは思っていない。結局これも文字通り生存バイアスであるし、意図するにせよしないにせよ、本当にどうすることもできずに死んでしまう人もたくさんいると思う。

ただ、生きるか死ぬかを選択することのできる状況にあるなら、せめて生きてから死ね。生と死が同価値ならば、死を選択するのと同様に生を選択することも可能なはずだ。いったん生きてみてから死んでみるのも、そんなに悪い選択ではないだろう。

来年もまた生きのびられると良いな*6

*1:こち亀 生きる - Google 検索 Twitterでもたびたびバズってる気がするので、よく目に入る。

*2:輪廻転生とかはよくわからない。

*3:「近代」とかいうよくわからない言葉を使っているが、ひとまず自分は「市民革命・産業革命・科学革命の進展、そして資本主義の浸透以降の時代」というゆるい理解のもとで言及している。専門家さんとかには怒られそう。

*4:ちなみに僕はこの本を読んでいない。

*5:他にも、雨宮処凛自殺のコスト』という、自殺するとどれほど金銭的なコストがかかってしまうのかを淡々と記述した本がある。しかし、僕の場合はこれを読むと逆に、憂鬱な資本主義リアリズムに憑りつかれる感じがして、元気がなくなってしまう。

*6:でも、あんまり先のことを考えすぎるとまた抽象的な思考に陥ってしまうので、元気じゃないときは明日のこととか1週間後のこととか、長くても3か月後くらいのこと考えればそれでよいと思う。あなたの人生に幸あれ。

JJUG CCC 2018 Spring に参加した #jjug_ccc

はじめに

日本Javaユーザーグループ(JJUG)のイベント JJUG CCC 2018 Spring に参加してきました。

前回の 2017 Fall では初めての参加だったため、勝手がわからないまま朝イチから最後までぶっ通しでセッションを聞き、たくさん学びがあった反面たいへん疲れてしまっていました。

tobachi.hateblo.jp

今回はあまり疲れないように、気軽にゆっくりと過ごす気持ちで参加しました。前回は聞けなかったLTなども聞けてとても良かったです。

各セッションの感想やメモなどを残しておきます。

続きを読む

JJUG CCC 2017 Fall に参加した #jjug_ccc

はじめに

日本Javaユーザーグループ(JJUG)のイベントJJUG CCC 2017 Fallに参加してきた。

こういった技術系のイベントに参加するのは初めてだったので、勝手がわからないところもありましたが、勉強になることも多くとても楽しかったです。

せっかくなので学んだことなどをメモしておきます。

続きを読む

bashでJavaから返されたリストをfor文で回す

String型のリストを返すJavaのメソッドをbashから呼び出して、返ってきたリストをforループさせる方法。

とある事情で必要になったのだが、調べ方が良くなかったからか意外と見つからなかったので、メモしておく。

Javaサンプルコード

import java.util.ArrayList;
import java.util.List;

public class ReturnList {
    public static void main(String[] args) {

        List<String> result = new ArrayList<String>();

        result.add("108");
        result.add("12");
        result.add("563");

        System.out.println(result);
    }
}

bashコマンド

上のJavaメソッドをふつうに実行してfor文を回そうとすると、うまくいかない。

ふつうに実行する

testlist=$(java ReturnList)
for test in ${testlist} 
do
    echo ${test}
done

##### 実行結果 #####
[108,
12,
563]

リストのままでは上手くfor文が回せず、単なる文字列みたいになってしまう模様。

edコマンドを使って整形する

そこで、sedコマンドを使って文字列を置換し、for文を回せるように整形してやる。 最初はリストを配列にセットし直せないかと思っていろいろやってみたが、どうやらbashでは配列でなくても文字列を改行で区切ればfor文で回せるっぽい。

参考:BashでStringから配列に変換してfor文で回す - くらげになりたい。

testlist=$(java ReturnList | sed -e 's/\,/\\n/g' | sed -e 's/\[//g' | sed -e 's/\]//g'| sed -e 's/ //g')
for test in ${testlist} 
do
    echo ${test}
done

##### 実行結果 #####
108
12
563

本当なら、JSON形式で値を返しjqコマンドを使ってきれいに処理したかったが……。