見出し画像

【自作ツール】業務で活用するLINEbot制作にあたって意識した事【Python】

はじめに

先日、Pythonで制作していたLINEbotを公開して本番運用できる形になったので、今回の制作で意識してきたことや、取り組んでみてわかった学習と開発を両立させるための考え方、なんかをまとめてみます。

人数の限られたグループで使用する目的で制作したため機能は限られていますが、現場で使える必要最小限の機能を実装しました。

本業のかたわら、または学習しながら何らかのアプリ・ツール制作をしている方、これから制作しようとしている方の参考になれば嬉しいです。

特に、僕はLINEを「ITの苦手な人にも使いやすい便利ツール」として捉えていて、同じようにLINEbot制作をしてみたい方に参考にしていただければなと思います。
プログラミング初心者から自力で何かを作ってステップアップしようとしている段階の方にも、比較的取り掛かりやすいAPIとしてLINE Messaging APIをオススメしたいです。


制作したモノ

共同で収穫作業を行う農家グループ内で活用するためのLINEbot。
作業時間を入力しておくことで、自動で作業者ごとに時間と賃金を集計し、LINEにテキストで返してくれるものです。

このLINEbotを使用する共同作業グループのメンバーに、QRコードを読み取ってもらいLINE友達登録してもらうことで、各々が作業後すぐに入力・確認することができます。
さらには経費計算の際に、LINE上で賃金計算を自動で行ってメッセージで教えてくれるため、集計の手間も省くことができます。(データベースとしてはスプレッドシートを活用しています)

「日報入力」をタップすると、作業開始時間・作業終了時間・作業者・作業機械名を選択して登録する(日時選択アクションとクイックリプライで選択肢が現れ、タップだけで入力が完了)
「確認」をタップすると、そのシーズンの日付ごとの作業履歴を確認できる
「集計」をタップすると、そのシーズンのメンバーごとの作業時間・賃金を集計して確認できる

画像1


企画・設計

解決したい課題
・これまで紙媒体で作業時間を管理していたが、記入や集計が何気に面倒だった。
・入力しやすく、集計までしてくれるツールが欲しいと考えた。

対象
・自分の所属する農家の共同作業グループ。よく知っている身近でクローズなメンバー。
・スマホの操作があまり得意でない年上のおじさま方。


意識した点

・最低限の機能に絞ったこと(シンプルに入出力のみ)。一度使える形にして、運用しながらじっくり追加機能を実装していけば良いし、汎用性は求めなくて良い。

・明確に「使ってくれる対象者」と「期限」を絞ったこと。僕の所属する共同作業グループで、使う期間が「7月末〜8月頭の2週間程度」と決まっていたため、そこから逆算して使う予定の時期までに完成させるためにどの程度の機能なら実装可能か、というのを、調整しながら制作を進めることができました。

制作していて大変だった点

・デプロイがうまくいかずに、最初に想定していたデプロイ先のサービスから別のサービスに変更することになったこと(GAE → Heroku)。ライブラリを導入する際に、本番環境での運用も調べつつ進めるのが大事だということを学びました。とはいえネットで調べているだけだと中々わからないので、実際に手がけてみて試行錯誤する過程はとても大事に思います。


学習しながら制作を続けるための考え方

自身のスキルや環境について考えてみると、

・Pythonの言語を学び始めたばかりだったが、Pythonの言語の基礎的な部分を学ぶ環境(コミュニティ)があったこと
・過去に一度別の言語(GAS)でLINEbotを制作した経験があり、流れを理解していたこと
・本番運用の仕方は自信がなかったが、デプロイに早めに取り組んで不安を解消しておいたこと

この辺りの下地があったことが、今回の制作に欠かせなかったな、と感じました。

まずは1、2番目。言語の基礎的な理解と、そのアプリ制作に必要な技術の実装の流れのイメージさえ最初にできていれば、技術的に足りない部分は調べて補間できるためあまりストレスなく制作に取り組めます。
逆にどちらかが欠けていると、開発作業時に学習すべきことが多くて非常にストレスになり、挫折の一因になってしまいます。

学習すべきことが多いだけならまだ良いのですが、例えば制作に取り組んでいてうまくいかないなーという時に、言語の基礎や実装の流れをイメージできていないと、それを調べたり質問したりすることが難しいというのが問題です。
「言語の理解が足りなくて詰まっているのか」「フレームワークの理解が足りなくて詰まっているのか」「APIの使い方の理解が足りなくて詰まっているのか」…といったように「どこで詰まっているのか?」が明確でないと、ピンポイントで調べることができず「何がわからないのかわからない」状態に陥ってしまいます。

これを避けることが、学習しながら制作を続けるコツかなと感じました。

また3番目のポイントは、実現可能かどうかをあらかじめ検証しておくこと(広くいうと「フィジビリティ検証」とも呼んだりするようです)が重要だということです。今回でいえば僕の知識・技術のレベルではデプロイがうまく行くのかがわからなかったので、先にクリアしておくことで、コードが書けたらすぐに公開して使える形にすることができました。
(実際にはその検証後に課題があったのですがね…)

ともあれ一度に全てを勉強しながら作ろうとするのではなく、不安なところを先に勉強しておいたり、別のシンプルなものを作ってイメージづけしておいたり、実装できることを確認してから本格的に制作に取り組み始める、というのを意識するととてもやり易いなあと思いました。

おわりに

作って終わりではなく、実際に業務で使うツールを制作し、運用を学んでみたいという気持ちで今回は制作してみました。今後、実際にグループ内で使ってみて、メンバーの意見を反映させて改善していきたいと思っています。

内部的なコードの書き方や技術構成についてはだいぶガバガバなので、メンテナンス性が良くなるように改善してみようと思います。笑

MEMO

使用した技術
・Python 3.7
・SpreadSheet(データベースとして)
・LINE Messaging API
・Heroku

使用したライブラリ
・flask:Webアプリを作成するためのフレームワーク。今回はLINEbotのwebhookに指定するURLを生成するような用途で使用
・line-bot-sdk-python:Messaging APIを簡単に操作するためのライブラリ
・oauth2client:スプレッドシートにアクセスするためのGoogle認証を行うためのライブラリ(※2020年7月現在、廃止予定なので注意)
・gspread:スプレッドシートを操作するためのライブラリ

この記事が気に入ったらサポートをしてみませんか?