【若手社員による技業挑戦LOG】
近隣スーパーマーケットのチラシ比較システムを自作してみた

【技業LOG】技術者が紹介するNTTPCのテクノロジー

2024.07.12
その他
可香谷 昌人

ソフトウェアエンジニア
可香谷 昌人

取得資格:Google Cloud Associate Cloud Engineer、CCNA

技業LOG

若手社員による技業挑戦LOG
- 技術トレーニング実施レポート -

本記事は、NTTPCの若手社員育成施策である「トレーナー施策」の参加者が、実施した技術トレーニングの内容を紹介しています。
参加者にはトレーナーがアサインされ、課題設定からシステム構築、発表という一連の流れを経験しました。
この取り組みによって、部署をまたいだつながりの形成やコミュニケーションの活性化、技術力の向上などが促されることを目指しています。

近隣スーパーマーケットの最安値を探すシステムの構築について

私は今回の課題において、近隣のスーパーマーケットの商品情報から、最安値を探すシステムを構築しました。

昨今は特に、物価高の影響で多くの食料品が値上げしている傾向にあるため、類似の商品を買うのであれば、少しでも安いスーパーマーケットで手に入れたくなるかと思います。
これまでは、新聞の折り込み広告などから近隣にあるスーパーマーケットのチラシを手に入れ、それを比較することで最安値を探していた方も多いと思います。
しかし、新聞の購読者数は減少傾向にあるため、購読していない方にとっては、新聞とともに配送される広告・チラシを目にする機会が減ってきています。
一方で、インターネット上にアップロードされている広告であれば、誰でもいつでも閲覧することはできるかもしれませんが、欲しい商品を探して検索して比較するには、意外と手間がかかるように感じられます。また、何よりも私自身が色々な店舗のチラシ見ることが好きなので、興味のある広告やチラシを簡単に閲覧して比較できるものを、システムとして作ってみたいと思いました。
こうした背景から、今回、スーパーマーケットにおける食料品の最安値を探してくれるシステムの構築に取り組んでみることにしました。
このシステムの提供価値は、近隣のスーパーマーケットで売っている商品を比較し、その中から安い商品を見つけられることです。この価値を提供できるシステムを、AWSとそのIoTデバイスを用いて実装を目指しました。クラウドサービスの勉強をしたいと思い、AWSを選びました。

理想のシステムの実装難易度を段階に分けゴールを目指す

しかし、自分が考えた理想のシステムを実現するには、ネット文献で調べてみると難易度が高そうです。3ヶ月という限られた期間の中で実装するにあたり、あきらめて別のテーマに変更することも考えました。

ただ、せっかくの機会なので、トレーナーと相談して「やりたい軸はぶらさず、最終的に実装できたところまでを成果物とする」というスタンスで取り組むことに決めました。
理想のシステムを最終ゴールとして、そのゴールに向けて何回か段階を踏んで進めることとします。

理想のシステムを機能毎に分け、それらの機能の実装難易度を段階的に下げていくことを考えます。これにより、やりたいことを満たしたシステム案として
<STEP1><STEP2>の2つを作成することにしました。まずは、一番難易度の低いシステムのSTEP1から取り組み、完成したら次の難易度のSTEP2に着手する、といった様に進めていきます。

IoTデバイスを使った最安値情報収集システムの機能と直面した技術課題

<STEP1>

主要食品の現在の最安値を知りたい時にユーザーがIoTデバイスのボタンを押します。
すると、大手ネットスーパーのウェブサイトから主要食品の情報をスクリーンショットで収集が始まります。
そして、収集が終わると、スクリーンショット画像を1つのファイルにまとめます。
その結果をメールで送信し、目視で比較してもらうシステムです。

直面した技術的な課題は2つありました。
1つ目は商品情報が載っているスクリーンショット画像が文字化けしていたこと、2つ目が複数の画像を1つのファイルにまとめるためのpythonライブラリがインポートできなかったことです。
まず2つの課題の重要度を考えた時に、1つ目の商品情報を取得する処理の方をまず解決しないと最終発表でうまく形にできないと考え、1つ目の課題を優先して取り組みました。
1つ目の課題は、調べてみると同じ悩みのネット文献が豊富にあり、日本語フォントをインストールすることで、難なく文字化けが解消しました。
続いて、2つ目の課題も、調べていくうちに、実装で使うpythonのバージョンに合ったライブラリをインストールしていないため、インポートエラーが出ていることがわかりました。
ライブラリにもpythonの各バージョン用のものがあり、インストールしたものが適切ではなかったようです。
このため、使うpythonのバージョンを確認し、インターネットにあがっているライブラリで試してみました。しかし、実行環境のせいかうまくいかなく、今度はpythonのバージョンを変えて試行錯誤してようやくインポートできるライブラリが見つかりました。今回、かなり時間がかかってしまったため、今後のためにライブラリの探し方は知っておきたいと思いました。

<ゴール>

主要食品の現在の最安値を知りたい時にユーザーがIoTデバイスのボタンを押します。
すると、IoTデバイスのSIMの接続基地局から現在位置を特定し、近くのスーパーマーケットを探します。そして、それらの店舗の電子チラシをウェブサイトからダウンロードします。
その後、電子チラシの文字から主要食品の情報を探し、取得した情報を各社で比較します。
その結果をメールで送信し、まとめた結果を確認するシステムとしたいと思います。

AWSを利用したシステムの物理構成と処理の流れ

構成図とシステムの処理の流れを図に示しました。
AWS lambdaでwebスクレイピングをする実装をし、AWS S3で取得したデータの保管をしています。<STEP1>から<ゴール>は同じシステム構成です。

課題への取り組みのまとめ

今回は実業務をしながら、数ヶ月後の課題発表日までにシステムを1つの形として実装するという課題のため、短い期間の中でどのようにこのテーマを進めるべきか戸惑いました。

最終的には、STEP1の実装まででタイムアップしてしまいましたが、最終発表日までにシステムが動くところまで実装できたので、この進め方にしてよかったです。
理想だけを追い求めるだけでなく、マイルストーンをおきステップを踏んでゴールを目指す姿勢も大切だと感じました。

その他の反省点としては技術調査が足りなかったことです。
やってみたい気持ちが先走り、なぜその技術を選んだか整理できておらず、他にどんな技術が使えたか、それらの技術と今回利用した技術との差別化は行うべきだったと思いました。
もし調査ができていれば、理想のシステムの実装が簡単にできたかもしれません。

また、施策を通じて改めて感じたことは、1つの結果を出すには周りの人の協力が必要だということです。
トレーナーの方には困った時に多くのアドバイスを頂戴し、私をゴールへ導いてくれました。
また、今回、実業務をしながら、数ヶ月間の施策に関わりましたが、実業務で関わっている周りの方からの配慮があったからこそマルチタスクができました。
周りの方のサポートに感謝をしながら、担当業務の仕事も続けていきたいと思います。

  • Amazon Web Services、AWS S3、AWS Lambdaは、米国その他の諸国における、Amazon.com, Inc.またはその関連会社の商標です。

技業LOG

NTTPCのサービスについても、ぜひご覧ください

おすすめ記事

    お気軽にご相談ください