freeeの請求書メール送付を自動化してみよう
はじめに
最近、効率化/自動化/DX/RPAといった言葉をよく耳にしますよね。
良く言えば生産性の向上ですが、悪く言えば余裕がない、でどちらかというと余裕がないから自動化したい、という意識が強い様に思う今日この頃です。
エンジニアにとって、余裕が全くない組織内でのDXって色々と地獄で、多少は余裕のある組織でDXし、より余裕を手に入れるってのが天国であり理想です。
さて、この記事では「freeeの請求書メール送付を自動化」という具体例を扱いながら、具体的な自動化方法と自動化する上で必要そうな情報を割と丁寧に伝えて行けたらと思います。
非エンジニアでもちゃんとこの記事を読めば頑張ればいける、くらいの粒度感を目指して書いていきます。
また、freeeを全く知らない方でも、他のサービスなどの自動化に思考や技術を流用できるようfreeeを知らない人向けに書きます。
freeeを理解されている方はfreeeの仕様とかは読み飛ばしてください。
freee請求書メール送付の仕様とやりたいこと
日頃freeeを利用されている方はわかるかと思いますが、freeeにはfreee上から請求書をメール送付する機能があります。
下図の赤枠ボタン
この機能は以下のような手順を踏む必要があります。
①請求書一覧ページから請求書を開く
②メール送付ボタンをクリック
③CCにメールアドレスを入力して、○○して(途中操作割愛)
④送付ボタンクリック
上記手順を請求書1枚1枚行う必要があり、非常にめんどくさいです。
請求書が1000枚以上あるような企業の経理はこれを愚直にやっていると死んでしまいます。
請求書を送付するAPI等がfreeeから提供されていればいいのですが、
2022年3月現在ではそういった機能はありません。
なので、どうにか自分で効率化してやろうぜという話。
どうやって自動化するのか
仕組みは単純で、
人が行う画面操作をそのまま同じように自動で画面を操作させることによって自動化させる、ということです。
自動化させるのに利用する技術は「Selenium」というものです。
画面自動操作系のツールでよくあるsendkeysするようなツールでは、同じ端末で操作していたりすると誤作動を起こしたりうまく動かないことが多いです。
ですが、「Selenium」は対象のブラウザ(タブ)のみにしか影響を与えないため、同端末で別操作を行いながらもいい感じに動いてくれるという良さがあります。
仕様
処理概要
以下手順を行わせる
①請求書一覧ページを開く
ステータスが「送付待ち」の状態で開くように開くURLを工夫させておく
②請求書一覧の中から請求書をクリック ※1 二重送信防止
③メール送付ボタンをクリック
④CC、送信者メールアドレス、送信者名を入力
⑤「メール内容を確認する」ボタンクリック ※2 項目未入力防止
⑥「請求書をメールで送信する」ボタンクリック
あとは①~⑥をループさせればOK
チェック処理
※1 二重送信防止
本来はメール送付するとステータスは「送付済み」になりますが、自動操作は高速に画面を操作してくれるため、上記⑥で送付後に①に戻り、請求書一覧にすぐにアクセスするとステータスが「送付待ち」のままになっていることがあります。
結果として、もう一度メール送信してしまうということがあり、非常にまずいため、必ず防止する必要があります。
②のタイミングで送付する請求書番号を保持していき、
次回の②の処理のタイミングで保持している請求書番号に同一の請求書番号があれば、それはスルーさせる、という処理をすれば確実に防止します。
※2 項目未入力防止
画面自動操作でアルアルなのですが、上記でいう④のCCなどの項目に値を入れてから⑤のボタンをクリックするといった処理をする場合に、入力値が正しく反映されないままボタンをクリックしてしまうことがあります。
もしCCが入ってないままメール送付してしまうと、freeeのメール送付は履歴が残らないため、実際に送付したのかの確認ができなくなり、クライアントに請求書いってます?的な確認が必要になりめっちゃだるいです。ですので確実にCCに値を入れてあげる必要があります。
ボタンクリックする前にjavascriptなどを流し込み、入力値にちゃんと値が入っているのかをチェックさせるのが確実です。
正しく入力値が入っていればクリックさせる、正しく入ってなければもう一回項目に値を入れ直させる、といったループ処理をさせることによって防止します。
実装
「Selenium」はJavaやC#,Python(あとrubyも)でライブラリが提供されてます。
ですので、基本的には上記のプログラム言語を使用して実装します。
ただ、簡単なものであればノーコードで実装できる「Selenium IDE」というGoogleChromeの拡張機能があります。
今回は特に難しいことはしないので、「Selenium IDE」で実装します。
ログを出力したり、画面のスクリーンショットを動作履歴として残したい場合は別の拡張機能と組み合わせるか、Javaとかでプログラムを書く必要があります。
プログラムする場合は個人的にですが、
・手軽なのはpython
・規模のでかい自動化処理が必要になるならJavaかC#
が良い言語選択かと思います。
seleniumIDEのスクリプト(プロジェクト)
「Selenium IDE」のスクリプトは記事の一番下に有料で添付しておきます。
※有料にしているのはむやみに利用されるのを避けるためです。
本当に利用したい方だけ購入くださいませ。
使い方は「Chrome SeleniumIDE」とかでググれば沢山出てきますので、調べてみてくださいませ。
注意点
SeleniumIDEでスクリプト(プロジェクト)を読み込んだら、
上の3つのコマンドのTargetをを書き換えましょう。
・sendUserName ⇒ 送信者名に
・sendMailAddress ⇒ 送信者のメールアドレスに
・seikyuuDate ⇒ 送信したい請求書の請求日に
実行前に
Google Chromeのブラウザ側でfreeeにログインし、
対象の事業所(会社)を選択しておきましょう。
・まずはテスト用の会社を選択してから実行した方がいいかと思います。
・freee上でサンプルの請求書を作成し、ステータスを「送信待ち」にしましょう。その上で、その請求書の請求日を見て、上記のseikyuuDateを書き換えましょう。
あとがき
画面の自動操作は基本的にどのサービスでも禁止されている行為です。
freeeは利用規約を見る限りセーフそうな感じがしますが、明らかに人が行う操作を超えた自動操作等は迷惑行為なのでやめましょう。
自分だけが楽になればいいという自己中心的な自動化は社会に悪影響ですので、一定の倫理観を持って自動化しましょう。
ここから先は
¥ 1,000
この記事が気に入ったらサポートをしてみませんか?