Python と Selenium を使うと比較的簡単にスクレイピングができるということを知ったので、アカウントアグリゲーションのアプリを作ってみようと思い立ちました。
Pythonは初心者だし、Selenium なんて使ったことなかったけど、世の中の流れについていくためにも、勉強がてら作ってみようかなと。
アカウントアグリゲーションの説明はWikipediaに任せるとして、なぜこんなものを作りたいのかというと、私はスタンドアロン型のアカウントアグリゲーション・アプリを使いたいのですが、現時点で主要なアカウントアグリゲーションサービス/アプリはすべてサーバ型(クラウド型)なのです。
もともとこういうサービスを知ったのは、クラウドどころかWeb2.0なんて言葉すらなかった15年くらい前に Yahoo! プレミアムのユーザに無料で提供されていた「MoneyLook with Yahoo!」でした。当時の MoneyLook はスタンドアロンアプリだったので、パスワードも、資産状況もすべてPC内に格納されていて、アプリの開発会社にこれらの情報を提供する必要がなかったんです。当時、サーバのリソースは貴重だったので、ユーザのPCのCPUとHDDを使ってサービスを提供するのは当然の流れだったのだと思います。
一方、現在はというと個人向け(会計用ではなく家計簿的な使い方の)サービスとしてはMoney Forward, Zaim, Moneytree, MoneyLook あたりが有名どころですが、どれもこれもクラウド型です。昔使っていた MoneyLook もスタンドアロン型からクラウド型に変わってしまいました。
クラウド型にもメリットがあることはわかります。PCでもスマホでもどこでも口座情報にアクセスできますし、バージョンアップもサーバサイドで完結するのでユーザが意識する必要がありません。逆にスタンドアロンアプリの場合、PCから情報を収集されるのでは?といった疑念もあるでしょう。
しかし、私にはログイン情報を第三者に預けなければならないのと、口座情報(残高や取引内容など)を第三者に開示することの気持ち悪さが払拭できず、どうにもクラウド型のサービスを使う気になれませんでした。
お金を勝手に引き出したり、振り込んだりできないとはいえ、銀行以外の第三者に通帳を常に開示するんですよ? なんか嫌じゃないですか? 悪意のある社員によって総資産のランク別の個人名簿が流出する可能性だってありますし。
ということで、オレオレ money forward を作ってみたいと思います。
よくよく考えると、アカウントアグリゲーションアプリこそ、オープンソースでしかもスクリプト言語が向いていると思うんですよね。スクリプト言語だから、パスワードを別のサーバに送ったりといった悪意のあるコードがあってもすぐバレちゃうし。オープンソースでもコンパイルする言語の場合、ソースとバイナリが一致しているかは自分でビルドしない限りわからないですからね。
ざっと要求/願望を挙げてみます。
- 対象
- まずは自分だけが使えるレベルをめざし、普通のユーザは対象としない
→ 最終的には普通の人にも使ってもらえるといいけど、セキュリティとかマニュアルとか考えると、趣味の開発でそこに労力を割くのは難しい。
- まずは自分だけが使えるレベルをめざし、普通のユーザは対象としない
- 言語
- コードの透明性を確保したい (悪意のあるコードを混入しにくく)
→スクリプト言語が良さそう - 開発の敷居を下げたい (私以外の人でも作りやすくしたい)
→ スクレイピング部は独自言語ではなく、汎用的な実装が良い
- コードの透明性を確保したい (悪意のあるコードを混入しにくく)
- 取得情報
- 預金種別
- 普通預金 [MUST]
- 定期預金 [MUST]
- 外貨預金 [WANT]
- 投資信託 [MUST]
- FX [WANT]
- 株式 [WANT]
- 取引明細
- 普通預金の明細は[MUST]
- 投資信託、FXなど日々評価額が変わるものについては
- スクレイピング時の時価が取得できる [MUST]
- 過去の時価が取得できる [WANT]
- 預金種別
- 暗号化/セキュリティ
- ログイン情報、取得したデータは暗号化して保存 [WANT]
→ひとまずセキュリティは後回し。当面は平文で格納
- ログイン情報、取得したデータは暗号化して保存 [WANT]
- ソフト構成
- スクレイピングとデータ表示はアプリを分離 [MUST]
→ スクレイピングだけ定期実行とかしたい - データ表示アプリはスタンドアロン [MUST]
→ブラウザをUIに使いたいが、容易に外部サーバにアクセスできるため、不正アクセスの疑念を払拭しにくい?
→ただ、ブラウザを使うと後述のスマホアプリは作りやすいかも?
→スタンドアロンアプリの場合はスクリプト言語が好ましい
→表示だけならネイティブアプリでもいいか? - データ表示のみのスマホアプリも将来的には作りたい [WANT]
→スクレイピングしたデータを Dropbox に置いておくと、スマホでも表示ができるとか
→かなり後回しになりそう
→Androidだけ
→iPhoneもMacも持ってないから作れない
- スクレイピングとデータ表示はアプリを分離 [MUST]
とりあえずこんなイメージですかね。要求は壮大ですが、実際どこまで実現できるものやら・・。
まずは、スクレイピングして CSV 形式で出力するくらいのシンプルなものから作ってみたいと思います。