一人十郷 - Takumi Nasuno Photography
人生観
2017/10/17
今月でサービス終了するクラウド型家計簿アプリ「Bookeep」から「Zaim」にデータ移行したときの備忘録...

 

注意:このデータ移行は難易度がそれなりに高いです。vLookUpやIf関数を自在に使える程度のExcelスキル持ちの方か、データベースをいじれるエンジニアの方が対象です。

 

この投稿は、他アプリにデータ移行をしたい方が1人でも多く救われたらいいなと願って書いてみます。でも素人の方は撃沈する可能性大なので、速やかに他アプリでゼロから始める方が得策です。それでは、本題に入ります。

 

・・・

 

クラウド型家計簿アプリって便利ですよね。

複数端末からアクセスできるので、ふだんはスマホで入力しつつ、まとめて入力したいときはPCでもできるし、もちろん家族で共有することもできます。なので「家計簿アプリを使うなら絶対にクラウド型!」ということで、Bookeepというクラウド型家計簿アプリを特に不満なく1年半ほど使っていました。

 

運営元からのメールに気付いたのが月初。何気なく件名に目をやると、『【重要】ソーシャル家計簿「bookeep」サービス終了のご案内』という文字。無料サービスだから「いつかはきっと」とは思っていましたが、いざ終了と聞くと衝撃が走りました。

「CSVがダウンロードできたはずだから、なんとか他アプリに移行はできるだろう」と思いつつ、職業柄こういうデータ処理をよく行う身としては、「どうせ規格がバラバラだろうな...」とおおよそ想定される苦難は乗り越える前提で、10月15日の作業予定日を迎えました。

結論としては、10月15日時点で、ダウンロードしたCSVはレコードの二重登録とデータ欠損があったため、荒技を駆使して無理矢理データ移行を成功させました。二重登録とかデータ欠損と聞いて「?」となった方は、ここでページをそっと閉じて他アプリでゼロから始めましょう。「やってやる!」という方だけ読み進めてほしいです。ではご覧ください。

 

1.Zaim側でカテゴリを再現する

まず、Bookeep上のカテゴリをZaim上に再現する必要があります。ここで面倒なのが、Bookeepとカラム構造が異なること。大まかに、以下のような対応になっているようです。

  • Bookeepの「収入カテゴリ」→Zaimの「カテゴリ設定:収入」
  • Bookeepの「支出カテゴリ」→Zaimの「カテゴリ設定:支出」
  • Bookeepの「資産カテゴリ」、「借入カテゴリ」→Zaimの「カテゴリ設定:口座」

Zaimの収入カテゴリは内訳が作れるので、Bookeep側の大カテゴリ、小カテゴリを再現できました。一方、Zaimの支出カテゴリ、口座カテゴリはなぜか内訳機能がないため、Bookeepにあった大カテゴリ、小カテゴリを階層無しの表現に整理する必要が出てきました。

また、Zaim側は資産と借入が分かれていないので、まとめて口座カテゴリとして現金や預金、クレジットカード等を設定する必要があります。このあたりはステップ3で大カテゴリへの置換時に考慮しないといけない点は、少し面倒でした。

 

2.CSVエクスポートはダメだったので、荒技を

Bookeepの公式サイトにて「Bookeep CSV エクスポートサービス」なるものがありました。試してみたところ、①レコードの一部が二重登録されている、②支出元の大半がデータ欠損している、という事案がありました。アプリ上は正しく数字が計算されているので、たぶんエクスポート機能の問題でしょう。delフラグを見ていないとか、LEFT JOINし忘れたとか、そういう原因があるのかもしれません。(あくまで推測です)

しょうがないのでWeb上でログインして、利用期間ALLにて入力一覧のテーブルをまるっとコピーしてExcelに貼付けるという荒技を決行しました。これで、「日付」、「種類」、「元」、「先」、「金額」という必須5カラムのレコードが手に入りました。改めてExcel上で確認したところ、感動のデータ欠損無しです。ただテーブルにメモが含まれてなかったので、この時点でメモの移行をあきらめた点は補足しておきます。

(ちなみにCSVはMac用のメール送信で入手したので、もしかしたらWindowsのダウンロードでは大丈夫・・・というトラップがあったかもしれません。)

 

3.概ね想定通りのタフなデータ変換

Zaimには「ファイル入出力」機能がありまして、Zaimのファイルフォーマットであれば一括でアップロードができます。カラム構成は「一度ダウンロードすれば分かる」とのことなので、ダミーデータを入力したうえで早速ダウンロード。ユーザーサイドからの推測ですが、以下のような構成であると解釈しました。

日付 「日付」カラムの値を入力する。
方法 支出→payment、収入→income、振替→transfer、で入力する。
カテゴリ 例えば「食費」のような値が入るカラム。paymentの場合は「先」カラムの値(この値は小カテゴリなので大カテゴリに置換する)、incomeの場合は「元」カラムの値(この値も小カテゴリなので大カテゴリに置換する)、transferの場合は「-」を入力する。
ジャンル 例えば「食費(外食)」のような値が入るカラム。paymentの場合は「先」カラムの値、incomeの場合は「元」カラムの値、transferの場合は「-」を入力する。
支払元 例えば「現金」のような値が入るカラム。payment,transferの場合は「元」カラムの値、incomeの場合は「-」を入力する。
入金先 例えば「預金」のような値が入るカラム。paymentの場合は「-」。income,transferの場合は「先」カラムの値を入力する。
商品 空白にしておく。
メモ 空白にしておく。
場所 「-」を入力しておく。
通貨 「(プレミアム会員で表示)」を入力しておく。
収入 payment,transferの場合は「0」、incomeの場合は「金額」カラムの値を入力する。
支出 paymentの場合は「金額」カラムの値、income,transferの場合は「0」を入力する。
振替 payment,incomeの場合は「0」、transferの場合は「金額」カラムの値を入力する。
残高調整 「(プレミアム会員で表示)」を入力しておく。
通貨変換前の金額 「(プレミアム会員で表示)」を入力しておく。
集計の設定 「(プレミアム会員で表示)」を入力しておく。

こんな感じで新しいカラムを加工してCSV形式で保存します。

 

4.レコード二重登録の解消

ステップ2でWeb上からコピーしたので二重登録は無いと思いきや、Excel上で集計したらアプリ上の金額と一致しませんでした。なんじゃそりゃ・・・

よくよく見てみると、完全同一連続レコードが一定割合で発生しているようです。何となくの実感値ですが、Androidアプリからの入力でおよそ10%の確率で発生しているようです(iPhoneアプリやWebからの入力はたぶん問題無し)。この手の低確率で再現性の見えないバグは頭を悩ませますね。

対処法としては、上述の必須5カラムが完全一致する連続レコードがあった場合、1つだけを残してみました。すると奇跡的に金額が一致。これは朗報でした。

 

5.CSVのアップロードと微調整

あとは「作ったCSVをアップロードしたら出来上がり・・・!」と思っていたら、アップロード成功後にZaimアプリを見たところ、カテゴリが重複しているようで・・・

プリセットしたカテゴリ名と、流し込んだカテゴリ名の半角全角の違いで、カテゴリ名が増えていました。。これは登録レコードの無い方を削除して解決。これにて無事完了しました。

 

とまぁ、こんな感じで出来たのですが、喫茶店でコーヒーとケーキを片手に正味4時間ほどの格闘でした。1年半分の家計簿が引き継げると思うのなら「やってよかったかな...?」と思わなくもないのですが、にしてもハードルが高い印象でした。

どこかの家計簿サービスが簡単に移行できる仕組みを作って、これから溢れるであろうBookeep難民に救いの手を伸ばしてくれることを期待しつつ、今日のところは筆を置きたいと思います。

ブログカテゴリ