こちらの記事は Crieit のアドベントカレンダー なんでも の15日目の記事として、書かせていただきます。
(日付を間違えていて一日ずれての投稿になってしまったのは秘密です...)
今年2020年は、本業の農業のかたわら色々なツール制作に取り組んできました。
仕事に活きるもの、生活に活きるもの、プログラミング学習に活きるもの、また作ったけど活かせなかったものなどなど。言語は主にGASとPython。
この機会に、ノンプログラマーがプログラミングを学んで作ったものを振り返って整理しておきたいと思います。
昨年からプログラミングをやっていて、今年の2月ごろにGASでちょっとしたプログラムで身近なことが便利になる、というのを知ってから、だいぶプログラミングが楽しくなったのを覚えています。
練習のために作ってみた、家族で共有するためのbotです。燃えるゴミ・燃えないゴミなどの収集日の前日の夜にリマインダを飛ばしてくれる、というだけのもの。Messaging APIを使って実装し、放置していて今も動いています。
【GAS】家族で使えるゴミ出しリマインダ LINEチャットボットを作った - Crieit
こちらは2月ごろにかなり力を入れて制作した、LINE上で対話形式で作業日報を入力していくツールです。入力した内容はGoogleCalendarに登録されます。
Messaging APIを使いラインのトーク画面に表示できるリッチメニューの実装を学習。
LINEはITリテラシーが高くない一般の方々にも有用なツールだと実感します。
ただ、このbotを興味持ってくれた人数名にテストユーザーになってもらうためセッティングしたのですが、使用のハードルはやはり高そうだなーという印象でした。そもそも「日誌はアナログで取っており基本的に満足している」というところに刺さっていくのは、素人の思いつきでは厳しいものがあるんだろうな、と思います。ツール制作にこだわらず、別のアプローチが必要です。
個人的にもこちらは現在運用はしておらず、農作業の記録はアグリノートという既存のサービスを活用しています。
GASで「農作業記録アシスタント」LINE bot作った(紹介編) - Crieit
GASで「農作業記録アシスタント」LINE bot作った(技術・設計編) - Crieit
業務資料を整理するため制作。農協からの情報の多くはFAXで送られてきますが、その内容がpdfファイルでメール添付でGmailに添付されて送られます。その添付ファイルをDriveに保存する作業を自動化しようと思って着手。
4月に主にネット情報をもとにコピペで制作し、バグが出て放置していたものを、現在は言語を学び直しながら改善中です。Driveにファイル名によりフォルダ分けして格納し、個人で使ってるSlackへ通知とリンクが送られるようにもしてみました。
7月に制作。初めて他者に使ってもらって良い評価をもらった、満足度の高いツールです。
自分の所属している地域の共同作業グループで使うための入力支援ツールをMessaging APIを使って作りました(LINE大好きすぎる)。
サーバーとしてHerokuを利用(正しい表現かちょっとわからない)。入力データはDB代わりにSpreadsheetと連携しています。シート操作のライブラリはgspreadを使いました。クラウドサーバにデプロイ時のライブラリ依存周りの設定、Spreadsheet設定でOAuth認証情報をクラウドサーバの環境変数に入れるというような部分がなかなか難しかった記憶です(そもそも環境変数とは、の段階からではありました)
現場では作業した人が、LINEで作業開始・終了の時間をタップだけで入力できて、後から時給計算する際もLINEで集計結果が返ってくるようになっています。これまで紙で管理して電卓で集計していたのが、相当楽になりました。
グループでの作業は年に1回、収穫時期が来れば必ず必要になる作業なので、LINE botも毎年改善しながら運用を続けていきます。
業務で活用するLINEbot制作にあたって意識した事|Massa|note
ノンプロ研で受講したPython講座きっかけで、Seleniumを使ったWebサイトのスクレイピングに取り組みました。作っている農産物の価格動向を毎日見られるようにしたいなと思いました。
7月、まずは初めはpdfのダウンロードをしてDropboxへ入れるだけのツールを制作しましたが、ダウンロードしっぱなしで全然活用できず。
次に11月には収集する対象を市況データのまとまった別のWebサイトに変更し、その日の欲しい市況データをSpreadsheetに入れる & 自分のSlackへ送信、というもの。
定期実行には、Windowsのバッチファイルとタスクスケジューラを使用してローカルで実行する方法、クラウドのHerokuに上げてHeroku Scheduler を使用する方法を試しました。ローカルの方がセッティングは楽ですが、PC起動時にしかスクリプトが動かせないというデメリットがあります(やりようはあるのかな?)。クラウドはデプロイができれば任せっきりで楽ですが、HerokuでSeleniumを動かす設定に一手間かかりました。一長一短で、習得コストも考慮して運用方法は考えなければなあと学習。
こちらは今後、Slackに送られてくるデータをもっと見やすいように工夫したいです。
卸売価格からのアプローチだけでなく、直販価格からのアプローチもしてみたくて取り組み。
9月は統計に興味が向いていて、Pandasの扱い方を覚え、データの収集と加工、価格分析の基礎的なところをやってみました。
統計学的な難しいことはわからないのですが、最終的に平均値・中央値などの簡単な統計量を算出し、価格が重量に線型近似していることを確かめ、平均的なキロ単価を算出することができました(正確では無いかと思いますが、参考程度には十分な数値だと思います)。
現場の人間がデータを扱うには、ExcelやSpreadsheetなどの表計算ソフトの扱いに慣れているかどうかが大事だなと思いました。「データ分析=Python, Pandas」みたいなイメージを持っていましたが、それよりも「何を目的としてやるか」があり、そのために「どのツール(手段)でやるか」という考え方で、習得コストのかからないやり方を選ぶのも大事なんだろうなと思います。
こちらは農産物のネットショップ開設のための価格調査に直結したので、ひとまず成果につながった分析だったかなあと思っています。
Python農家のITマーケティング試行錯誤日記1.楽天商品検索APIを使って商品情報をcsv出力する - Crieit
Python農家のITマーケティング試行錯誤日記2.商品情報の収集とデータ加工を行う - Crieit
Python農家のITマーケティング試行錯誤日記3.商品価格の集計と分析を行う - Crieit
⬇️商品「メークイン」の箱の重量(kg)と価格の中央値(円)の関係
自分用に開発作業のログを残すのを便利にするために作りました。Python標準ライブラリのtkinter
を使ってGUIを作って、プルダウンを選びボタンを押すと選んだ内容に応じたテンプレートが入ったテキストファイルが作成される、という仕組みです。またちょっとマニアックなこともトライしていて、同じく標準ライブラリのsubprocess
を使って、ボタンを押すとGithubへプッシュするコマンドを実行するようなコマンド操作も学習しました。
作成したPythonスクリプトはpyファイルにしてデスクトップに置き、ダブルクリックで実行できるようにしています。
こちらは現在も運用中です。
PythonでPDFを扱うPyPDF2
、文字抽出にはpdfminer
というライブラリを使用。講座のPDFテキストを特定の文字があるページだけ画像化する…ということをしています。いくつかPDFファイルを触ってみたのですが、PDFファイルの文字を扱うのは一般的には難しくて、自分で作ったファイルなら良いけど、既存のPDFを扱うのはあまり考えない方が良いかな…と思いました。
また最近書籍の自炊をしているとPDF結合や分割をしたくなったので、短いコードを作ってJupyter Notebook上で実行できるような、ちょっとした便利コード集みたいなものも、スキャン中の時間を生かして作りました。笑
慣れるとこういうちょっとしたツールがすぐにできる、というのがPythonの良いところだなあ…。
PDF操作に便利なコード集も整理して記事にしておきたいです。
PythonPDFから特定の文字列を抽出&ページを画像として保存するツール - Crieit
アウトプットとしてはこんな感じでしょうか。かなり作ったんだなあ…。
こうやって振り返ってみると、設計時点の反省点が明確に見えてきたり、「もう少しこう改善したいというのも整理されて良いなと思いました。
制作の動機が自分自身のために向いているものが多く、勉強ために作ったようなものもあります。
別に悪いことでないのですが、どうしても「作る」のが好きでそこに拘ってしまうことがあり、おかげで機能がコテコテになってしまったり、メンテナンス性の悪いスクリプトになっている気がします。
一方で振り返って良い点としては、LINEやSlackで情報を受け取るような明確な「アウトプット」が見られるツールの作り方を習得できたことです。外作業が多いと「スマホで見られる」というのも重要に感じます。
必ずしもツール制作だけじゃなくて既存のデータの「整理」というのがキーワードなのですが、ざっくり
技術的にも興味のあるものにもっと取り組んでいきたいのですが、来年はまたもうちょっと広い視点で農業経営に役に立つ・農村地域や人の役に立つツールを作れたらな、と思います。
IoTを活用してデータを蓄積できるような環境も作ってみたいです。
勉強の幅がプログラミング以外にも広くて、どこに集中して勉強していけば良いか…。楽しく頑張ります。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント