注意:このデータ移行は難易度がそれなりに高いです。vLookUpやIf関数を自在に使える程度のExcelスキル持ちの方か、データベースをいじれるエンジニアの方が対象です。
この投稿は、他アプリにデータ移行をしたい方が1人でも多く救われたらいいなと願って書いてみます。でも素人の方は撃沈する可能性大なので、速やかに他アプリでゼロから始める方が得策です。それでは、本題に入ります。
・・・
クラウド型家計簿アプリって便利ですよね。
複数端末からアクセスできるので、ふだんはスマホで入力しつつ、まとめて入力したいときはPCでもできるし、もちろん家族で共有することもできます。なので「家計簿アプリを使うなら絶対にクラウド型!」ということで、Bookeepというクラウド型家計簿アプリを特に不満なく1年半ほど使っていました。
運営元からのメールに気付いたのが月初。何気なく件名に目をやると、『【重要】ソーシャル家計簿「bookeep
「CSVがダウンロードできたはずだから、なんとか他アプリに移行はできるだろう」と思いつつ、職業柄こういうデータ処理をよく行う身としては、「どうせ規格がバラバラだろうな...」とおおよそ想定される苦難は乗り越える前提で、10月15日の作業予定日を迎えました。
結論としては、10月15日時点で、ダウンロードしたCSVはレコードの二重登録とデータ欠損があったため、荒技を駆使して無理矢理データ移行を成功させました。二重登録とかデータ欠損と聞いて「?」となった方は、ここでページをそっと閉じて他アプリでゼロから始めましょう。「やってやる!」という方だけ読み進めてほしいです。ではご覧ください。
まず、Bookeep上のカテゴリをZaim上に再現する必要があります。ここで面倒なのが、Bookeepとカラム構造が異なること。大まかに、以下のような対応になっているようです。
Zaimの収入カテゴリは内訳が作れるので、Bookeep側の大カテゴリ、小カテゴリを再現できました。一方、Zaimの支出カテゴリ、口座カテゴリはなぜか内訳機能がないため、Bookeepにあった大カテゴリ、小カテゴリを階層無しの表現に整理する必要が出てきました。
また、Zaim側は資産と借入が分かれていないので、まとめて口座カテゴリとして現金や預金、クレジットカード等を設定する必要があります。このあたりはステップ3で大カテゴリへの置換時に考慮しないといけない点は、少し面倒でした。
Bookeepの公式サイトにて「Bookeep CSV エクスポートサービス」なるものがありました。試してみたところ、①レコードの一部が二重登録されている、②支出元の大半がデータ欠損している、という事案がありました。アプリ上は正しく数字が計算されているので、たぶんエクスポート機能の問題でしょう。delフラグを見ていないとか、LEFT JOINし忘れたとか、そういう原因があるのかもしれません。(あくまで推測です)
しょうがないのでWeb上でログインして、利用期間ALLにて入力一覧のテーブルをまるっとコピーしてExcelに貼付けるという荒技を決行しました。これで、「日付」、「種類」、「元」、「先」、「金額」という必須5カラムのレコードが手に入りました。改めてExcel上で確認したところ、感動のデータ欠損無しです。ただテーブルにメモが含まれてなかったので、この時点でメモの移行をあきらめた点は補足しておきます。
(ちなみにCSVはMac用のメール送信で入手したので、もしかしたらWindowsのダウンロードでは大丈夫・・・というトラップがあったかもしれません。)
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形式で保存します。
ステップ2でWeb上からコピーしたので二重登録は無いと思いきや、Excel上で集計したらアプリ上の金額と一致しませんでした。なんじゃそりゃ・・・
よくよく見てみると、完全同一連続レコードが一定割合で発生しているようです。何となくの実感値ですが、Androidアプリからの入力でおよそ10%の確率で発生しているようです(iPhoneアプリやWebからの入力はたぶん問題無し)。この手の低確率で再現性の見えないバグは頭を悩ませますね。
対処法としては、上述の必須5カラムが完全一致する連続レコードがあった場合、1つだけを残してみました。すると奇跡的に金額が一致。これは朗報でした。
あとは「作ったCSVをアップロードしたら出来上がり・・・!」と思っていたら、アップロード成功後にZaimアプリを見たところ、カテゴリが重複しているようで・・・
プリセットしたカテゴリ名と、流し込んだカテゴリ名の半角全角の違いで、カテゴリ名が増えていました。。これは登録レコードの無い方を削除して解決。これにて無事完了しました。
とまぁ、こんな感じで出来たのですが、喫茶店でコーヒーとケーキを片手に正味4時間ほどの格闘でした。1年半分の家計簿が引き継げると思うのなら「やってよかったかな...?」と思わなくもないのですが、にしてもハードルが高い印象でした。
どこかの家計簿サービスが簡単に移行できる仕組みを作って、これから溢れるであろうBookeep難民に救いの手を伸ばしてくれることを期待しつつ、今日のところは筆を置きたいと思います。
後日談:別の家計簿アプリでまたデータ移行をしました。気になる方はこちらの記事もどうぞ。