IT業務効率化

Pythonで業務自動化においてコードよりも大切なこと

python 自動化の課題

退屈なことをPythonにやらせてみて気づいたコードより大切なこと

こちらの有名なPythonの本があるように、たくさんことがPythonにより自動化できます。

私も社内の業務をいくつも自動化しています。

  • データ抽出
  • データ監視
  • メール送信
  • slack通知
  • 課題追加通知
  • スケジュール管理

しかしどの自動化も、悪戦苦闘の日々でした。その学びと今後意識していくことを本記事でまとめたいと思います。

そもそもみんな使ってくれるのか

効果を試算する

業務を自動化する前に、以下のようなことを考える必要があります。

  • 自動で業務が行われることにより、どのくらい手作業の属人化を防止できるか
  • 月当たりの業務時間が何時間減るか
  • 業務自動化により削減できるヒューマンエラーのリスクはどのくらいか
  • 作業者(自分)に「これ完成したら嬉しい?」と聞いたら「うん!」と言うか

これらをチームで話し合い、試算します。後で述べますが、この話し合いが「根回し」に繋がることもあります。

特に作業者が嬉しいと言ってくれることは、定性的ではありますが大切な指標かと思います。例えばその手作業がタスクの整理・把握に繋がっていたりすると、自動化自体がそんなに嬉しくない、そんなケースもあるからです。

Python自動化コードの特徴

この説は個人・企業によって異なるかもしれないので、

  • 実装は主にコード上でのみ行い、実行はコマンドで行う
  • webブラウザ等にインターフェースを用意していない

ような環境の人向けになります。

できるだけ1つのファイルで完結すると、他の人も使いやすい

  • date_values.py 日付パラメータのファイル
  • sample.sql sqlファイル
  • substitute_val.py 代入値を埋めてくれるファイル
  • users_info.json メールアドレス等を管理するファイル
  • その他・・・

私は以前自動化ツールを1つ作るごとに、上記のファイルそれぞれに情報を追加していました。webアプリなどから情報を登録していけるのであれば、このファイルの分け方は問題ないのかもしれませんが、そうではなくツールを作るたびにコードを書きます。面倒ですし、他の人に説明するのも大変です。

だから1つのファイルにできるだけ定義をまとめるようにしています。例えばデータ抽出を自動化したい時には、下記のファイルを1つ用意するだけで済むような構成にしました。

task_name = ""
document = ""
sql = """"""
inform_finish_to = ""
cron = ""

業務知識

その自動化は本当に最高か?

今やっている手作業も本当はよりよくできるかもしれません。特に前任者から引き継いで、自分がその業務をよく知らない時は注意しましょう。

例えば毎週経理データを作成して経理担当の人に送っている場合、

本当は原価のデータも合わせて出して欲しかったんだよね。

と言うことがよくあります。手作業だったら面倒臭くて受けられなかったことも、コード上ならできることはあります。関係者にヒアリングしてみると、よりよい自動化ができたりします。

根回し・確認

作ったのに、使ってもらえない!

最初の節にも書きましたが、使ってもらえないと意味がないです。

さらに自分がやっていた作業を人に明け渡したい時は根回しが大事です。

例えば事業部から購買データの抽出依頼が来て、データを作成しエクセルにして、メールで返信みたいなことをしていたとします。これがボタン1つでデータ作成メール送信できるPythonコードを実装したとします。そうなるともはや事業部は依頼を出す必要もなく、そのボタンを押してくれるだけでいいのです。

ここで問題が発生します。

え、このボタン大丈夫?何かシステム壊れない?
壊れないよ!

非エンジニアに優しく

結構新しいツールを一から作ると、その導入に苦労します。自分は製作者だからわかりきっていますが、急に「これ使って」と言われた人はびっくりするのも当然です。

それに本当にそのツールの使い方がわからないと言うよりは、

仕事が増えるのは面倒臭いし、こっちだって人は足りないんだ。
自分になんの相談もなくどうして作ったの!?

という気持ちの方が真実だと私は思っています。

こうならないためにも、自動化ツール導入の際は、作る前に関係者に根回し・確認をしましょう。

適切な開発フロー

「え?そのシステム大丈夫?」

私の最初の自動化コードは3日で完成しました。しかしそれを使うのに、1年かかりました!理由は開発フローがなかったからです。(ただ当時の私は本当に初心者で「開発フロー?何それ」状態だったのもありますが)

開発フローがないと問題が起きてしまいます。

  • 失敗した時にどこが間違ってリリースされたのか反省しにくい
  • 人の目に触れられず量産されてしまうので、本人が退職した後カオスが訪れる

「大丈夫です!ちゃんとチェックしてます!」

なので開発フローを作成しました。

  • プロジェクトのチケットを作成し、概要を記載し、ユーザに見てもらう
  • ドキュメントを作成
  • 作業の業務知識とシステムの知識がある人にドキュメントをレビューしてもらう
  • コードをかける人にプルリクをする
  • インフラに導入時のシステム負荷を確認してもらう
  • リリース

あくまで一例ですし、実際はもう少し異なるのですが、上記のようにまとめると今後の運用・コードとしての拡張性・システム、それぞれにに問題ないか確認することができます。

おわりに

Pythonを覚えるといろんなことが、本当になんでもできるようになるので、色々作りたくなってしまいます。

でもそんな時こそを足を止めて、必要なものを作っているか考えましょう。

でもまあ、全ての仕事とシステムに言えることなんですけどね。

お読みいただきありがとうございました!
ABOUT ME
hirayuki
今年で社会人3年目になります。 日々体当たりで仕事を覚えています。 テーマはIT・教育です。 少しでも技術に親しんでもらえるよう、noteで4コマ漫画も書いています。 https://note.mu/hirayuki