【若手社員による技業挑戦LOG】
ラズパイ(Raspberry Pi)を使って一目で
わかる天気予報システムを構築してみた

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

2024.05.15
松本 圭一郎

ソフトウェアエンジニア
松本 圭一郎

取得資格:.com Master ADVANCE ★★、EXINアジャイルスクラムファンデーション、ITILファンデーション

技業LOG

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

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

1. はじめに

本記事では、2022年度に実施したテクノロジー&オペレーション開発本部の若手エンジニアの育成施策の一環で開催された技術トレーニングの課題において、私が取り組んだ内容を簡単に紹介いたします。

今回、取り組むことになったトレーニングのお題は、IoT機器を用いて「第三者に価値を提供するシステムを作成して発表する」というものでした。

課題とはいえ、一からシステム開発することは経験が無かったので、若干戸惑いつつも、大まかな流れとして下記のように進めていきました。

  • 実装機器の選定
  • 価値を提供するシステム案の検討
  • システム実装
  • 発表

2. 実装機器の選定

まずシステム案を検討する前に、実装機器として「Raspberry Pi 4(以下ラズパイ)」を選定しました。
選定理由としては、ネット上に情報量が多くあり、こういった機器を触ったことがない私にも扱いやすそうだったからです(他の候補にはJETSON NANO DEV KITなどがありました)。並行して担当業務もこなす必要がありますし、なにより構築期限も限られていたので無理はできません。また、今回選定したラズパイ4はデフォルトでWi-Fi機能が付いているのもインターネットへの接続が容易でありがたい要素でした。(バージョンやモデルによってはWi-Fi機能が付いていないものもあるようでした)

3. 価値を提供するシステム案の検討

次に価値を提供するシステム案について、複数の案を発案した中から検討し、「一目で今日雨が降るかわかるシステム」を作ることにしました。

みなさんは、家を出る時は晴れていたのに、傘を持たずに外出した後から雨が降り出して慌てたり、洗濯物を干した後に雨が降って洗濯物を濡らして困ったりした経験はありませんか?
朝忙しくて天気予報を確認する余裕がない人や、そもそも天気予報を確認する習慣がない人、リモートワーク中心で基本的に家の中で過ごす人は、そんな経験があるのではないでしょうか?

今回、作るシステムで提供する価値としては、天気予報を意識的に確認せずとも、今日は雨が降りそうなのかどうかを、一目で把握できるようにすることで、上記の課題を解決することを想定しました。なによりも自分が欲しいシステムであることと、システムとして提供される価値というお題に沿っていることが決め手です。

4. システム実装

そして、実際に構築したシステムの概要について説明していきますが、非常に簡単で、インターネット上に存在する天気情報を取得して、その結果を基に設定した時間にLEDライトを点灯 / 消灯するようなものとなっています。次の概要図をご覧ください。

とってもシンプルではありますが、このシステムの肝となる部分は「天気予報API」の部分です。
言わずもがなですが、自分で天気を予報するシステムを考えるのは難しいので、そこは公開されている情報を頼ります。
世の中には、天気予報の情報を取得する方法はいくつかありますが、APIが公開されている情報元があるならば、それを使うのが一番簡単だと思います。インターネットで情報を調べたところ、それっぽいものを見つけることができました。
https://weather.tsukumijima.net/

ここで、もし「APIって何?」「聞いたことあるけどなんか難しそう...」って思っている方は、是非このまま記事を読み進めていただきたいです。
むしろこの記事は、そんな馴染みのない方に向けた内容だと思っています。

「APIとは何か」についての細かいあれこれは、インターネットで検索した方がいろいろと知ることができると思います。ですが、私なりの解釈で簡単にAPIとは何かを言ってしまうと、「ある定められた形式で『お願い(リクエスト)』をすると、その『お願い』を実行してくれたり、定められた形式で『返事(レスポンス)』をもらうことができたりするもの」です。
今回利用したAPIの場合は、こちらから「東京の天気予報を教えて!」と『お願い』をすると、例えば「今日は晴れのち曇りだよ!」と『返事』をしてくれるようなものになります(後述しますが実際はもう少し複雑かつ詳細です)。

インターネットでそれっぽいAPIを見つけた後は、そのAPIの利用方法(先述した『お願い』と『返事』の形式)を調べて準備をしました。
私が見つけた情報元のサイトには詳細が記載されていたので、それを読みながら概要をつかみなんとなくわかったら、あとは実際に構築しながら試してみるのみです。

APIの試し打ちには、POSTMANというアプリケーションを使いました。
個人的には非常に使いやすく、履歴なども残るのでいろいろと試すにあたって有用なアプリケーションでした。
そして、今回利用したAPIのリクエスト方法は次のとおりです。

GET https://weather.tsukumijima.net/api/forecast?city=<都市コード>

定められている都市コードを指定するだけなので、とてもシンプルで簡単です。
サイトに記載されていた都市コードの一覧から、東京を探してコードを指定してみると、ちゃんとレスポンスが返ってきました。

このAPIでは、どうやら今日明日明後日の3日間分の天気予報を教えてくれるようです。しかし今回のシステムで必要な情報は"今日の天気"だけなので、明日明後日の情報は不要です。そのため、"dateLabel"が"今日"の時の"telop"に"雨"が含まれているかをチェックして、LEDを光らせるフラグを立てるような実装を加えました。
そして、LEDを接続したラズパイを朝起きた時に目に入る自分の机の上に置いて、テスト運用してみることにしました。
また、利用シーンを想定して、cron設定で朝6時に天気予報のチェック→LEDへの状態反映をさせて、夜21時には気にならないように消灯するような工夫も加えてみました。ここで、cron設定とは指定したプログラムを指定した日時に自動的に実行する機能のことです。定期的にプログラムを実行したい時に便利です。

しかし、テスト運用して1週間ほど過ぎた頃、たまたま外出時にLEDが光っていなかったにも関わらず、雨に降られて濡れてしまったことがありました。何か実装したシステムに不備があったのだろうかと、帰宅後にAPIのレスポンスを確認してみたところ、"telop"は"曇り"だったものの、"detail"の"weather"には"~所により時々雨"のような記載があることを見つけました。

どうやら天気予報は当たっていたものの、提供される天気予報データの「詳細」欄には記載されているけれど、実装したシステムが参照していた「概要」欄には記載しないレベルの雨予報だったようです。
運が悪かったのもありますが、こういった微妙な予報パターンの取り逃しもできるだけ回避したいので、システムの判断ロジックとして、"telop"ではなく"detail"の"weather"に"雨"が含まれているかどうか、をチェックするように修正しました。

上記の内容で3ヶ月ほど運用を続けましたが、その後は特に利用するにあたって問題はなく、パッと一目で雨が降る可能性があるかどうか、毎日判別することができて、我ながら便利なものを作ってしまったと思いました。

今回の実装はここまででしたが、このシステムは拡張性が高いと感じています。本施策に取り組んだのは、春頃だったので意識しませんでしたが、"雪"にも対応できるように修正できますし、APIレスポンスの中にある最高/最低気温や数時間毎の降水確率などの詳細な情報を利用することで、他の価値を生み出すことも想像できます。
また、今回は出力としてLEDライトを1つだけ用いましたが、複数の色のLEDライトを用いたり、モニターに情報を出力したりなど、出力側を工夫することも可能ですので、いろいろな使い方ができそうだと感じました。

5. 感想

今回、私はラズパイを触ったのは初めてですが、一般的なコンピューターと比べると非常に小さいため、比較的いろいろな場所に設置が可能で、確かにIoT向きだと思いました。
一方で、電源はどこからか引っ張ってくる必要があります。今回のシステムでは、はじめは玄関に設置することを考えましたが、我が家の玄関近くにコンセントがなかったため断念することがありました。システムは設置環境や利用シーンを含めて考慮しないと、作ったところで当初の想定通りには使えないという点にも気づきました。

また、最初はもっと難しい別のシステム案を検討して、実現するべく調査をしていましたが、期間と時間の関係で、最終的に構築できたのは非常に簡単なシステムとなってしまったのは少々心残りです。
ただ、最終的に出来上がった「一目で今日雨が降るかわかるシステム」は、自分自身で使ってみても非常に有用でしたし、比較的簡潔に便利なシステムを構築できたことに、個人的には満足しています。
今回の技術トレーニングの期間終了後には、作成したシステムを物理的に撤去したのですが、毎朝早い時間に出社するためにバタバタしている同居人からも、「あれはすごく助かっていた」とコメントをもらい、作成者としては嬉しいかぎりでした。
無くなってから惜しく感じられるのであれば、それほど便利に利用されていたという証です(笑)。

6. 終わりに

本記事では、2022年度に実施したテクノロジー&オペレーション開発本部の若手育成施策の一環である技術トレーニングにおいて、私が取り組んだ課題内容を簡単に紹介いたしました。
本トレーニングでの体験を自らの糧として、これからもサービス開発力 / 技術力を高めていきたいと思います。

  • 「Raspberry Pi」はRaspberry Pi Ltdの商標です。

技業LOG

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

おすすめ記事

    お気軽にご相談ください