Blow Up by Black Swan

PythonとFlaskを使って勤怠アプリを作ってみた

昨年末、PythonのフレームワークDashを使って、一定感覚で更新されていくタイプのチャートアプリを作成しました。今回は、アプリ制作第2弾で勤怠アプリを作ってみました。以下は、アプリの種類と概要、反省点などです。アプリ制作で得たエラーについては別記事でまとめようと考えています。せっかく作ったので、ココナラなどで募集してみようかなと思っています。

1. 制作した勤怠アプリについて

今回制作したのは勤怠アプリです。会社勤めしたことある人はだいたい使ったことあるアレです。工場やコンビニ・飲食系のバイトだとタイムカードが主流かもしれません。今回は、中小企業でオフィスワーク向けという感じで作ってみました。作ったアプリの使用感は下記の動画で紹介しています。管理者用と従業員用でそれぞれ動画を取っています。

アプリの機能や実装について

このアプリは主に次のような機能をつけています。

  • 出勤・退勤時間の入力
  • 休日や出張の入力
  • 管理者の従業員の勤務入力状況の確認
  • 管理者の創業記念日などのカレンダー登録
  • 管理者の従業員の勤務データのCSV出力

このアプリの諸環境は下記になります。

  • 開発言語: Python
  • フレームワーク: Flask
  • 開発期間: 1ヶ月
  • デプロイサーバ: レンタルサーバ

2. 勤怠アプリの開発経緯

この勤怠アプリを作ったきっかけは、今年の初め頃にクラウドワークスを見ていた時にたまたまレンタルサーバで稼働する勤怠アプリの制作案件が載っていたからです。応募者がかなりの能力を持ってそうな方ばっかりだったので、ちょうど自分も使っているレンタルサーバにパパッと勤怠アプリをデプロイして、それと一緒に提案した方がうまくいくんじゃないかと考えました。昨年チャートアプリを作成し、Pythonでのアプリ制作について少しは知見が溜まったと考えていたこともあり、勤怠アプリくらい簡単に作れるだろうと高を括っていました。が、そこはまだまだ初心者。要件や仕様がフワッフワな状態で始めたため、10日後の案件募集締め切りには全く間に合わず、最後はただ完成させることだけを目標に突き進み、結果的に完成に約1ヶ月かかることになりました。1ヶ月前に戻れたどれほど良いかとか思ったりもしますが、自分としては色々と勉強になったので、結果オーライかなと今では思っています。

3. このアプリ制作で気づいたこと

このアプリの制作過程で学んだこと、気づかされたことはいかになります。

1. 利用者や利用シーンのなどを具体的にイメージすることの大切さ

利用者は誰か、勤務形態はどうなっているか(オフィス勤務か工場勤務か、飲食などのバイトか)、勤務時間帯はどうなっているか(終業時刻が決まっているか、コンビニ用に24時間誰かが勤務しているタイプか)、労働環境はどうか(一人1台パソコンを使える環境か、共有パソコン方式か)など。こういったことを想定することで、具体的な仕様や要件などが固まってくるので、とても大切なことだと思います。

2. 入れる機能と入れない機能の明確化

アプリを作っていると自分が使える技術の延長で色々な機能を入れられることに気づき、どんどん機能を追加したくなります。しかし、機能を追加するとなると開発期間が伸びてしまうだけでなく、他の機能との接続の関係で新たなコードを追加することが必要であったり、整合性を取るために自作関数の機能を修正する必要があったりと、倍々的に手間が増えてしまいます。この結果は時間ばかりがすぎてアプリが未完成で終わるということだと思います。それを回避するには、入れる機能だけでなく入れない機能もしっかり仕分けすることだと思います。また、高機能化していくにしても最低限の機能でアプリを作ってデプロイしてから、後々改良していくなど他のやりようはあると思います。

3. イレギュラーなリクエスト、フォームデータを意識すること

アプリの制作段階では、自分のイメージに沿いながら作っているので、フォームで返されるレスポンスデータは自分の求めるものであると考えてしまいがちです。もちろん、htmlなどでフォームに入力できるデータに制限をかけたり、チェックしたりすることもできますが、それを回避したり、ルールに則っているけど意識していないデータが返ってくることも十分考えられます。その場合、今度はサーバ側のプログラムで入力チェックをしますが、そこもうまくすり抜けてくることも考えられます。MySQLなどだとsqlインジェクション対策などがデフォルトになっていて、エスケープ対応をしていたりしてもいますが、自分のイメージにしたがって実装しながら、今度は自分のイメージ外のことにも思いを巡らせて、プログラムをチェックするということも重要だなと感じました。

4. モチベーションの維持の難しさ

個人でのアプリ制作の一番の課題はやはり、モチベーションを維持することだと思います。「結果的にこいつ必要?」と自問自答してしまうと大概「必要ない」「既にもっと洗練されたサービスあるだろ」「それを作ろうとしてるお前の神経が理解できない」とネガティブな考えばかりが浮かんできてしまうことはあると思います。この問題は、色々な記事を読む限り、おそらくどんな優秀な方や自作アプリでバズった方でも考えたりするらしいので、「プログラミングで自分の作品作ってみたい」「ちょっとしたアプリを作ってみてる最中」くらいの自分のような人であれば、ニーズ考えずにとりあえず「作る」ことだけを考えて、ネガティブなことは見て見ぬ振りするようにすればいいんじゃないかと思います。

5. 今後の課題

今後の課題としては、特に次のようなことを考えています。

  • 誰かに使ってもらいフィードバックを受ける、改善する、のサイクルを回せるような状況を作っていく
  • アプリを開発してお金を儲ける

アプリはデプロイしてからも様々な問題に対処し修正していく必要がある、ある意味決して終わらない行為だと言えると思います。そのためにはまず第一に誰かに使ってもらうということは必要であり、そこから得られるフィードバックを活用し、さらによくしていく一連の流れを構築していくことが必要だと感じています。そして、その結果お金が取れるようになれば最高だと思います。

4. まとめ

アプリ開発第2弾は、オリジナリティのあるものではないですが、デプロイするところまでいき、そこから多くのことを学ぶことができたので個人的にはよかったかなと思います。この記事の中で書いている様々な気づきなどは他の書籍やブログなどでもよく書かれていることですが、実際に自分で手を動かしたことで得られた知見は、ブログを読んで書くとした知見以上の理解を得られるものだと思います。結果的に車輪の再発明であろうとも積極的に手を動かし、様々な知見をこれからも得ていきたいと思います。