rinoguchi先日、会計freeeから、以下のような無慈悲なアナウンスがありました。2月24日(木)以降は、楽天銀行のインターネットバンキングから口座明細データのCSVファイルをダウンロードしfreee会計にアップロードする対応を行っていただく必要があります。いや、手作業を減らしたくて会計freeeにしたのに、それはないですよfreeeさん、って感じです。目の前には、以下の三つの選択肢があります。freeeをやめる楽天銀行をやめる手作業を受け入れるどれも選びたくありません。考えると自分はエンジニアなので、第四の選択肢として「スクレイピングして明細を自動で取り込む」ことができそうですので、やってみることにしました。利用して、楽天銀行の個人ビジネス口座の利用明細CSVをダウンロードして、会計freeeの口座情報に明細アップロードするスクリプトを作ります。Macに元々インストールされているAutometer.appとカレンダー.appを使って、スクリプトを定期的に実行するようにしようと思います。https://github.com/rinoguchi/link_freee_rakutenインストール必要なパッケージをインストールします。typescriptpuppeteerがスクレイピング用で、dotenvは、.envに記載した内容を環境変数に読み込むために利用します。スクリプトの作成スクレイピング処理の実装puppeteerを利用して、スクレイピングを行うスクリプトを作成します。基本的な機能しか使ってないので、読めば大体わかると思います。一応、多少工夫したポイントを列挙しておきます。});で実際にブラウザを起動する必要があります。page.gotoやpage.clickで画面遷移する際は、画面がロードされて通信が完了するまで待つ必要があります。しないと要素が描画されておらず処理が失敗します。"ES2022"の設定が必要です。利用明細はデフォルトで直近3ヶ月分が対象になりますが、会計freeeにアップロードした際にすでにアップロード済みの明細は取り込み対象外になるので、大丈夫です。browser.close();このスクリプトは、個人ビジネス口座専用です。普通の楽天銀行口座だとおそらくうまく動きません。(サイトの作りはほぼ同じっぽいのでセレクタを適当に書き換えれば動くような気はしますが).envの作成ID/パスワードなどは、Gitリポジトリに登録できないので、一旦環境変数から読み込むようにしようと思います。この.envは.gitignoreに記載して、Git管理対象外にしてます。RAKUTEN_ID=xxxxxxxxxxRAKUTEN_PASSWORD=xxxxxxxxxxRAKUTEN_LOGIN_URL=https://fes.rakuten-bank.co.jp/MS/main/RbS?CurrentPageID=START&&COMMAND=LOGINCSV_PATH=/Users/xxxxxxxxxx/Downloads/RB-torihikimeisai.csvFREEE_ID=xxxxxxxxxxFREEE_PASSWORD=xxxxxxxxxxFREEE_LOGIN_URL=https://secure.freee.co.jpFREEE_BANK_ACCOUNT_URL=https://secure.freee.co.jp/bank_account/walletables/xxxxxxxxxx.envに記載した変数は、dotenvを利用することで、以下のような感じでプログラム内で利用できます。process.envに取り込みconsole.log(process.env.RAKUTEN_ID);ただし、ローカルPC上のファイルにID/パスワードを保存していること自体がかなり危険です。ウイルスに感染してファイルが流出してしまうかもしれません。この記事ではこの形でやってみましたが、最終的には別の方法でクレデンシャルを管理する予定です。},以下のコマンドで実行できます。実行するのはだるいので、定期実行するようにしてみます。Macに初期装備されているAutometerを使ってやってみようと思います。連携スクリプトを実行するシェルスクリプトをアプリケーション(実行ファイル)として作成します。最後にカレンダーの通知機能を使って、先ほど作成したAutometerアプリケーションを定期的に実行します。以下のダイアログが表示されるので、「OK」をクリックします。二回目以降は表示されないので安心してください。これで、指定した時間にスクリプトが定期実行されるようになっていると思います。modulepackage.jsonに以下を追加することで回避できました。"module"明細の重複Freeeの口座連携で同期されている間は、明細が重複します。これは、微妙に取引明細の「入出金内容」の文字列が、自動で同期する場合とCSVファイルダウンロードする場合で異なることが原因です。Freeeの口座の設定で「認証の削除」をすることで同期が停止するので、それで対処できます。重複してしまったものに関しては、Freee上で片方を「明細を無視」してしまえばOKでしす。免責事項この記事はあくまで情報提供を目的としたものです。本情報を利用したことにより生じたいかなる損害についても、私は一切の責任を負うことができませんので、利用される場合は自己責任でお願いします。最後に今回、楽天と会計Freeeの連携の利用明細を定期的に連携する仕組みを作ってみましたが、結構すんなり作ることができました。ここで紹介したID/パスワードの管理方法はセキュリティ的に危険がありますし、サイトの規約としてスクレイピング自体禁止されているかもしれません。自分も作ってみたものの実際にこれを動かすかは微妙だな、と感じています。いうわけで、参考にされる方は自己責任でよろしくお願いします。