東京大学運動会ヨット部

東大ヨット部の現役部員によるブログです。練習の様子、レース結果、部員の主張から日記まで。

春休み、積読を解消できずじまいでした。

2021年04月04日 21時26分57秒 | 通常練習

いつもお世話になっております。クルーザー班二年の伊東です。

投稿が遅くなってしまいました。申し訳ありません。まずは練習報告から。3月30日まで、ラスト春合宿でした。マストハンド動作も慣れてきて、今合宿ではバウマン動作の練習を多めにやらせてもらいました。ポールの扱いが難しく、ドタドタしておりますが、少しずつ理解してきたように感じています。ただ、トラブル対応であったり、スピード感をもってこなすことが課題であり、どんどん場数を踏んで得意にしていきたいと思っています。

実は予てからブログに書こうと思っていたことがありました。

クルーザー班の気象情報報告業務を自動化したことについてです。我ながらいい仕事をした気がするので、まことに僭越ながらこの場ですこしだけ自慢させてください。

大前提として、ヨット部の活動には気象の要素がかなり強く影響します。そのため毎朝担当者がネットをチマチマと検索をかけて気象情報を取集して、SlackなりLINEなりに流して、ミーティングで読み上げる、ということを行っています。クルーザー班の気象情報の担当は僕なんですが、この業務、まあまあ面倒くさくて(こんなこと言ったらお叱りをうけそうですが)、毎朝眠い目をこすりながらやる時間を睡眠に費やしたいなあ、と思ったのでした。ところで、世の中は便利になったもので、ちょっとコードを書けばこのような単純作業を自動化できるのです。僕は全くのプログラム初心者なのですが、この機会に勉強も兼ねてお天気業務の自動化に挑戦してみようと思った次第です。

大きな枠組みは気象庁のサイトやヤフーの潮汐情報のページからスクレイピングという技術を用いてweb上の情報を取得して、LINE notifyのAPI(自作プログラムとアプリを繋げることのできる機能)を使ってLINE上で通知してくれる、というものです。

以下、僕がやったことをまとめておきます。完全に独学なので、もっと良いやり方とかあるかもしれません。というか、プログラミングができる部員の人なんてたくさんいそうなものなので、教えてほしいです。

言語はPythonを使いました。まあ、無難ですね。結構気軽にコードが書けて、その上自動化やデータ分析、機械学習など幅広く応用できるみたいです。スクレイピングというのは、指示されたwebページに飛んで、特定の情報を抜き取るというものです。これをするには裸の状態のPythonでは太刀打ちできないので、スクレイピング用のモジュール、という拡張機能をインポートしてあげる必要があります。スクレイピング用の拡張機能は主にseleniumというものか、BeautifulSoup4というものが主に使われるのですが、初心者の僕には後者が使いこなせなかったのでseleniumを使用しました。

seleniumがどういうことをしてくれるか、というと、普段なにか検索したいときってChromeのアイコンをクリックして起動して、URL入力して検索していると思うのですが、それを自動かつバックグラウンドで行ってくれるのです。で、webページの情報を読み込んでくれるので、そこからデータを引っ張ってくる、ということまでしてくれます。その機能を用いて、気象庁のサイトに飛びます。

で、今取得したい情報を丸で囲んだ部分(天気のところ)だとします。この情報は'td.forecast-sentence'というタグがつけられたweb上の情報のうち7個目なので、まずは'td.forecast.sentence'の要素をリスト化して取得する関数get_informaitionを定義してあげて、さらにその7番目をtodays_weatherという変数に割り当ててあげます。同じような要領で最高気温、降水確率、風向、波の高さ、潮汐、注意報警報に対してデータを割り当てます。これでデータの取得は完了です。

次は、LINEに送ってくれるようにするパートです。LINEnotifyというシステムを使えば自分でもbotのようなものを作成できるのですよね。今回はそれを使って、クルーザー班のグループに送信してくれるようにしました。このパートはググってコピペしただけなのでそんなに大変ではなかったです。たぶんSlackとかにも応用できるはずです。

で、毎朝僕がやらなくてはいけないのはkoajiro_weatherforecast.py(上のプログラムを書いたコードです)を実行するだけ、というわけです。朝集の日なら京急線で寝る時間が増え、合宿中なら歯磨き中に仕事が完了する、というQOL爆上がりする結果となりました。

とはいえプログラミング歴1か月の僕がやったことなので課題もまあまああります。まず、seleniumは前述の通りいちいちブラウザを開くので(バックグラウンドとは言え)結構実行に時間がかかるということです。まあ1分くらいなのでに手動に比べたら断然速いですが。BeautifulSoup4を使えばそのあたりは解決しそうですが、うまいこと気象庁のサイトを開けなかったので頓挫しました。次に、最大風速ネットに乗ってない問題です。こればっかりは仕方ないのですが、毎朝177に電話するしかありません。載ってるサイトあるなら教えてください。合宿期間中の電話料金かかっちゃう問題が解決するので。それから、一度潮汐情報の取得でバグがあったことです。バグがあったのは3月23日で、前日は満潮が一度しかない日だったのが原因なのかな、と思っています。うまいこと修正しないといけません。あと、命名規則とかプログラミングのお作法をガン無視したスパゲティ・コードであることは間違いないので何とかしたいですね。それに、いちいちVScodeというプログラミング用のソフトウェアを開いてプログラムを実行しないといけないのでユーザ・インターフェイスは最悪です。現状、他の人がいじることは想定されていない。最後に、いまは毎朝7時くらいにPCを開いてプログラム開いて、ってやっているのですが、それすらもめんどくさくなってきたので自動的に定期実行してくれるようにしたいですね。まあ、本業はヨットなので、暇をみつつぼちぼち頑張ってみたいと思います。

ひとつ感じたのは、作りたいものがあると色々調べて試行錯誤するので勉強になるな、ということです。普段のヨット部の活動でも、常に目的意識をもってやっていきたいと思います。

長々となってしまいました。あっという間にサクラの季節も半ばを過ぎ、大学の授業が始まろうとしています。今一度気を引き締めて精進して参ります。それでは、失礼いたします。

伊東秀晃


最新の画像もっと見る

コメントを投稿