Pythonで自作の勤怠自動入力アプリを作成した話

アイキャッチ画像

なぜ、作成したか

当時参画していた案件では、毎月の勤怠に関して複数の作業を行う必要がありました。

案件先では、その日にどのような作業を行ったのかを記載する工数表と、上位会社へ提出する2つの勤怠表があり、それぞれExcelファイルへ入力する必要がありました。

さらに、それとは別に自社で利用していたfreeeにも勤怠を入力する必要がありました。

そのため月末になると、

  • 工数表への入力
  • 上位会社へ提出する2つの勤怠表への入力
  • freeeへの勤怠入力

と、似たような内容を複数の場所へ入力することになり、それなりに時間がかかっていました。

そこで、「毎月発生する作業であれば、できるだけ自動化して工数を減らせないか」と考え、勤怠入力を自動化するアプリを自作することにしました。

また、当時はまだ実務経験も浅かったため、日々の作業を効率化するだけではなく、アプリケーション開発の自己学習も兼ねて作成しました。

どのようなアプリを作成したか

起点となる勤怠表に入力した内容をもとに、freeeや、もう1つのExcel形式の勤怠表へ自動で入力できるアプリを目指して作成しました。

これにより、同じ勤怠情報を複数の場所へ手作業で入力する必要をなくし、月末の勤怠入力にかかる作業を減らすことを目的としました。

使用した技術

開発言語にはPythonを使用しました。

Pythonを選んだ理由は、Excelを扱う方法について調査したところ、比較的簡単にExcelファイルを操作できる言語だと分かったためです。

Excelを操作するライブラリとしては、openpyxlやPandasなどがありましたが、今回のアプリではExcelの内容を読み取ったり、セルへ値を入力したりすることが主な目的でした。

そのため、今回の用途であればopenpyxlで十分だと考え、使用することにしました。

また、GUIについては、ファイルを選択して処理を実行できる程度のシンプルなものでよく、本格的な画面を作成する必要はないと考えていました。

そこで、Pythonの標準ライブラリであるtkinterを使用してGUIを作成しました。

実装した機能

本アプリでは、起点となる提出用の勤怠Excelと、もう1つの提出用の勤怠Excelを選択すると、起点側の出勤時刻・退勤時刻・勤務時間を自動で読み取り、その内容をfreeeともう1つの提出用Excelの両方へ反映できるようにしました。

freeeについては、読み取った日別の勤怠データをAPI経由で登録するようにしました。

また、もう1つの提出用Excelについては、勤務時間を小数形式へ変換したうえで自動的に入力するようにしました。

これにより、これまで手作業で行っていた複数の勤怠入力作業を減らすことができました。

さらに、もう1つの提出用Excelでは、日付が入力されている列を固定せず、シート内から1日〜31日の並びを検出し、書き込み先を自動で判断する仕組みを実装しました。

そのため、月によって日付の位置が変わる場合でも対応できるようにしました。

苦労したこと

1. Excelごとに形式が異なること

今回扱う2つの勤怠Excelは、それぞれ形式が異なっていました。

そのため、単純に同じ位置のセルへ値を書き込むだけでは対応できず、それぞれのExcelに合わせて読み取り方や書き込み方を考える必要がありました。

特に、反映先となる勤怠Excelでは、月によって日付が入力されている列の位置が変わる可能性があったため、特定のセル位置に固定して書き込む方法では対応できませんでした。

そこで、シート内から1日〜31日の日付を探し、該当する日付の位置をもとに書き込み先を判断するようにしました。

2. 2つの勤怠Excelの形式の違い 

起点となる勤怠Excelと反映先の勤怠Excelでは、勤務時間の扱い方が異なっていました。

そのため、読み取った勤務時間をそのまま入力するのではなく、反映先の形式に合わせて変換する必要がありました。

例えば、勤務時間を「8時間30分」のような形式から「8.5」のような小数形式へ変換してから入力する処理を実装しました。

この部分では、時間と分を正しく計算して変換する方法について調べながら実装しました。

3. freeeへの勤怠登録 


Excelへの書き込みだけでなく、freeeへの勤怠登録も自動化する必要がありました。

freeeについてはExcelのように直接ファイルへ書き込むのではなく、APIを利用して勤怠情報を登録する必要がありました。

当時はAPIを利用した実装経験も浅かったため、どのようなリクエストを送ればよいのか、どのような形式でデータを渡す必要があるのかを調べながら実装しました。

また、日付ごとに出勤時刻や退勤時刻を正しく登録できるように、Excelから読み取ったデータをfreee側で扱える形式へ変換する処理も必要でした。

まとめ

今回、このアプリを作成したことで、Pythonを実践的に扱いながら学習することができました。また、freeeとの連携を実装する中で、APIの基本的な扱い方についても学ぶことができました。

単に学習用のアプリを作るのではなく、実際に自分が困っていた作業を題材にしたことで、業務の効率化と自己学習の両方につながったと感じています。

もしプログラミングを学習している方で、「何を作ればよいのか分からない」と感じている場合は、普段の作業の中で少し面倒に感じていることを題材にして、何か1つ作ってみるのも良いのではないでしょうか。