stellacadente.blog

がんばりすぎずにあるこうや。

ジェフ千葉でTech的に遊ぶ

※この記事は『ジェフユナイテッド市原・千葉 アドベントカレンダー2019』12月17日の登録記事です。

adventar.org

みなさんこんにちは。はじめましての方ははじめまして。ばぐーと申します。
当エントリにお越しいただきありがとうございます。昼休みや通勤/通学中の読みものとして、お付き合いいただければ幸いです。

アドベントカレンダーに登録されている記事は、毎回楽しみに読ませてもらってます。僕もせっかくblogを持っているので、せっかくの機会ですし、今まであまりきちんと書いてこなかったテーマでしたためることにしました。

Twitterアカウント『ジェフユナイテッドニュース』を運営しています
f:id:bugchan12:20191216113247p:plain
ジェフユナイテッドニュースのトップ。ヘッダはナイトゲームフクアリを南側スタンドから撮影したもの。

SNSの代表格であるTwitter。僕も個人のアカウントを持っています。Twitter経由でこの記事にたどり着いた方も多いことでしょう。ジェフ関連のアカウントも、クラブ公式をはじめたくさん開設されていますが、その中にひっそりと紛れる形で「ジェフユナイテッドニュース」というアカウントを管理・運用しています。

twitter.com

ジェフユナイテッドニュースは、公式サイトやサッカー関連サイトなどの新着記事情報を集めてPostしたり、チームの試合情報のリマインダを提供したり、選手・コーチ・スタッフのお誕生日をお知らせしたりしているアカウントです。すべての処理がクラウド上で自動実行されている、いわゆる「ボット(bot:robotの略語)」アカウントです。

2010年に開設して以来10年が経とうとしていますが、おかげさまで4,300人を超える方にフォローしていただき、またレディースやアカデミーを中心にジェフの現役選手にもご愛顧いただいているようで、大変うれしい限りです。フクアリDJのガマさんや、DAZNリポーターの野中チコさんにもフォローいただいています。ありがとうございます。

botのしくみ

ジェフユナイテッドニュースbotは、前述のとおりすべての処理が自動で行われ、Postする際に人間の手作業は介在しません。専用のプログラムを作成してクラウド環境に実装し、これを定期的に自動実行させています。現在は下の図のような環境構成で開発/運用しています。

f:id:bugchan12:20191216113421p:plain
bot動作の仕組み。緑色の中が自動実行されている部分です。

新着記事の取得は、2分ごとの定期実行です。なので記事がリリースされてから遅くても2分後にはbotでキャッチして投稿できる、ということになります。午前0時から7時までの深夜帯は動作を止めていて、これはまぁそんな深夜にPostされても見れないでしょというざっくりした感覚で設定してます。この間に新着があると、朝7時にドバっとPostされることになっちゃうんですけど。

試合情報や誕生日のリマインダは、毎日決まった時間に動いています。これはCSVファイルにデータを溜めて使っています。僕自身の普段の作業はこのCSVファイルの更新と、あとは不具合が起きたときのデバッグ作業。参照しているWebサイトのページ構成が変わったりすると、それに合わせて読み込み機能を改修したりもします。

開設当初は個人のWebサイト用にレンタルしていたサーバに、 Perl で書いたソースを配置して動作させていました。2015年のオフシーズンに、パフォーマンスの向上を主な目的として動作環境を Google App Engine に移行し、言語も Python に変更して書き直しました。現在の Google Cloud Platform では、 Developer Console を使ってリモートで直接サーバ上のファイルを編集することもできますが、僕はもっぱら自分のPC上で開発/動作確認をして、それをGCPにインストールする方法をとっています。

そもそもなんでbotを作ったのか
f:id:bugchan12:20191216113557p:plain
botの基幹技術3種。プログラミング言語フレームワーク、プラットフォーム。

端的に言えば、仕事に必要なスキルを練習するためでした。
2010年4月から担当するプロジェクトが変わって、C++Perl が必要になりました(それまでは C や Ruby on Rails を使っていた)。当時の職場には練習用の開発環境が潤沢に用意されておらず、特に Perl はWeb環境を個人用に整えるのも難しい状況で、コードの実験には苦労していました。

そこで自前でなにか練習用に作りたいと思ってテーマを探してみたところ、どうせなら自分の好きなものを題材にしたほうが身も入るだろう、Twitter は当時流行り始めのころで遊んでみるには良い素材かもしれない、と思ったのがきっかけです。

2015年オフに前述のとおり環境移行を実施しましたが、移行先に Google App Engine を選んだのも、仕事でGAEを使うプロジェクトがあったのでその勉強のためです。言語にPythonを選んだのもそう。それまで作られて運用されていた Perl コードを片っ端から Python に書き換えるという作業が始まっていたので、これは少しでも触る機会を増やして Python に慣れておかないといけないと思ったのです。

余談ですが、 Python は数理計算系ライブラリが充実しているので、昨今はディープラーニングやAI関連技術の方面でホットな言語になっています。なのでやってて良かったかなと。クラウド環境は、いま選ぶなら GCPより Amazon Web Service ですかね。AWS にはモバイルOSやIoT向けのSDK(ソフトウェア開発キット)もあるようだし、データベースも PostgreSQLMySQL のエンジンがそのまま使えるみたいですしね。

オフシーズンはメンテナンスの季節です

大規模なメンテナンスが必要な場合には、まとまった時間が確保しやすいシーズンオフに行うことが多いです。特に今オフは、2015年オフ以来の大幅な環境構成変更を予定しています。ひとつは Python のバージョンアップ対応、もうひとつは Cloud SDK への移行です。

f:id:bugchan12:20191216144358p:plain
年度末になると急に増える道路工事みたいなもんです。

現在のソースは Python2.7 で書かれていて、このバージョンは2020年1月でサポートが切れることになっています。サポートが切れても「=即bot動作不可」とはなりませんが、予期せぬ不具合などに対応できない可能性が出てきます。
またWebフレームワーク Django も、現在の Django1.11 は2020年4月で延長サポートが終了することになっています。あまり時間がありませんが、シーズンインまでには Python3.7 / Django2.2 へのコンバージョンを完了する予定です。

また、 現在利用している App Engine SDK(App Engine Launcher)はすでに非推奨環境になっていて、デプロイコマンド appcfg も2020年7月末でサービスが終了することになっています。なので、こちらも今オフのうちに Cloud SDK と gcloud コマンドを使った環境を整えることにしています。これが整えば、外出先からでもタブレットでソースやデータを修正することもできるのかな?(まだちゃんと調べてない)

あとは、新体制が発表されたタイミングで選手・スタッフ情報を一気に入れ替えます。これは毎年やっていることですね。新任のスタッフさんがいると、その人の誕生日を調べるのにいつも苦労するんですよね。過去に一度、どんなに調べても情報が出てこなかった方がいて、その方だけリマインダを出せなかったことがありました。あれは痛恨だったなー。調べスキルをもっと上げなければならぬと思った出来事でした。

そういうわけで、今オフはちょいちょい不具合出るかもしれません。今のうちに謝っておきます。。。

ジェフユナイテッドニュースは永遠に "ベータ版" です

ジェフユナイテッドニュースは、開設以来ずっと「パブリックベータ」として公開しています。この先も「正式版」と銘打つつもりはありません。あくまで僕の遊び道具なので、ポンと思いついたことを試して実装してみて、うまくいくかいかないか、面白いか面白くないか、そういうのを実験しています。その過程でとんでもない不具合を起こすこともあるんですけど(過去記事を30Postくらい連続投稿してタイムラインを埋め尽くしちゃうとか)、トップチームと同じように生暖かく見ていただければと思います。

ご利用の皆さんからのご要望を取り入れることもできます。こんなお知らせが欲しいとか、このサイトの新着記事を教えてくれとか、説明ページちゃんと更新しろよとか(ゴメンナサイ)。お気軽にお聞かせいただければと思います。そういうところから僕には思いつけないアイディアが見えたりもするし、そこから新しい技術を学べることもあるので、ご意見はたくさんいただければありがたいです。

バグも不具合も想定外もあるけれど、楽しく作ってます

自宅でちまちまいじったり、ときにはラップトップPCを持ち出してスタバでコーヒー飲みながらガッツリとコーディングしたりの日々です。ちまちまとモノを作るのは性に合っているようで、悩みながらも試行錯誤を繰り返して作っていくのは楽しいです。「自分の好きなものをテーマにしたほうが長く続くだろう」という最初の読みは、見事に当たってましたね。

Twitterは反応が見えるので、みなさんがRTやFavをつけてくださるのも嬉しいです。たまにもの凄い罵詈雑言を浴びせられることもあるんですけど、まぁこちらは人じゃなくて機械(bot)ですから、そういうこともあらぁなと。そういう部分から「そうか、これはこうしたほうがいいのか」と発見することもあるので、わりとポジティブに転換してます。

f:id:bugchan12:20191216150700p:plain
ここ1か月のトップツイートはこれ。ユンさんどうぞよろしくお願いします。

ジェフユナイテッドニュースは、ジェフ千葉の「公式アカウント」ではありません。この先も公式にはならないでしょう。2分に1回、1日に510回も公式サイトにクロールをかけるという、運用側から見たら結構うざったいことをやってまして、なのでWebサーバには不要に負荷をかけている立場です。いまのところ怒られたりはしてませんが、公式サイトの管理側が気づいていないはずはないので、お目こぼしをいただいていると思ってます。寛大なお心に感謝です。これからもどうぞよしなに。

これからも、僕のやる気が続く限りは運用を続けていこうと思いますので、ご愛顧のほど、どうぞよろしくお願いいたします。

ついでに

今月に3x回目の誕生日を迎えます。プレゼントは前後半年間受け付けておりますので、お気軽にどうぞ。
Amazon ほしいものリスト

それでは皆さま、良いクリスマス&良いお年をお迎えください。


退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
 
動かして学ぶ! Python Django開発入門 (NEXT ONE)

動かして学ぶ! Python Django開発入門 (NEXT ONE)

  • 作者:大高 隆
  • 出版社/メーカー: 翔泳社
  • 発売日: 2019/12/13
  • メディア: 単行本(ソフトカバー)