DieRubyやRailsまたはバスケットボールや筋トレについて書きます。この広告は、90日以上更新していないブログに表示しています。Calendar18日目の記事です。体育館予約を自動化したいこんにちは。Fablicのサーバーサイドエンジニア、Jamesです。去年のアドベントカレンダーでこんな記事を書きました。Driverで体育館予約システムに自動ログインできたけど体育館全然空いてないから予約できないやんけ!と言う記事です。去年は自動でログインした後に心が折れてやめてしまいました。上記の記事を当時所属していたチームはそこまでしっかりとした活動もせず、たまに大会に出て試合をするスタイルでやっていました。それなりに楽しくやっていたのですがこの一年で自分を取り巻くバスケ環境が紆余曲折あり、なぜか新チームを立ち上げることになりました。気がつけばそのチームの代表になっていました。恐ろしいことでしょう。代表になったからには同じチームでやっている仲間達と楽しいバスケットボールライフを送りたいものです。真剣にやる」メンバーが集まりました。我々は学生のように毎日練習することはできませんが、週1ぐらいの練習でできる限りのことをして都民大会で上位を狙うことを目標に活動することになりました。なるとやはり立ちはだかる壁は、そうですね。体育館予約を自動化したいはい、我々は2017年になっても体育館の予約で消耗しています。Bryantファン必読の本でした(エルニドで撮影。エルニドは楽園でした。体育館の予約の仕方が直感的に理解しづらいこの一点に尽きます。今回は前回とは違い責任が増えたので根気よく取り組むことにしました。仕様のために何度もやり直しをするなどしながら調査を続けていると、普段世の中に出ているWebサービスがどれだけユーザーに寄り添っているのかと感激して涙が溢れてきました。して調査を続けていると以下の仕様がわかってきました。予約は9-22時の間に行うことができる。予約は基本的に抽選である翌月の体育館予約の抽選は前月の1-5日に行われる結果が6日に出る結果を反映した後の9日から当該月のキャンセル分の予約が可能キャンセルされた予約は早い者勝ち1つの予約をすると最初の画面からやり直さなければならないので、複数の予約を同時に行うことは不可能なんという仕様でしょうか。毎月9日の朝9時に翌月の予約の勝敗が全て決まってしまうではありませんか。その時間にものすごいスピードで予約をしてしまえばだいたいよさそうです。キャンセル後は早い者勝ちなのでそれを漏れなく予約すればよさそうです。抽選の内容に関してはこちらとしてはタッチできない部分なので諦めます。(根気よく抽選も申し込んではおりますが、これまで1日しか当選したことがありません、、、)つまり、我々に必要なものは体育館のキャンセル状況を確認して、空きが出ていたら自動で予約できる何かということがわかりました。作りたいものが少し具体的になりました。類似するシチュエーションを利用して仮で予約してみるさて、作りたいものが具体的にはなりましたがやはり空いている体育館がありません。どのような状態になれば予約完了に出来るかがわからないので開発が進めません。去年の自分だったらここでまた心が折れて、この企画はまた来年に持ち越されていたでしょう。2017年の僕は一味違いました。人は守りたいものができた時に強くなれるものです。作りたいものを作ろうとするのではなく、可能な限り類似するシチュエーションを利用して他の施設を予約してみることにしました。「体育館予約システム」のためにまずは「会議室予約システム」を作ることになるとは思いませんでした。この作戦が功を奏しました。「会議室予約システム」の完成後、体育館キャンセルをチラチラ見ていたら平日ですが体育館空きがある日も奇跡的に発見することができ、「体育館予約システム」に生まれ変わらせることができました。コードは公開したくないので(ライバルを増やしたくないw)具体的な内容は伏せますが、フレームワークも使っていないRubyのスクリプトです。app.rbこの1行をターミナルで実行するだけでキャンセル状況を見て予約出来るプログラムがかけました。マンバメンタリティー!サーバー上で動かせるようにする最後は書いたプログラムを定期的に実行させるだけです。そのためにはサーバーが必要になります。最初は「どこかのサーバーにcron登録するのかー、会社の開発機にでも置くかw」とか考えていたのですが、ものすごく便利なサービスがありました。みなさんご存知Herokuです。headlessモードを利用する必要があるので、Buildpackをインストールする必要があります。(Herokuの管理画面から簡単にできます。Schedulerというプラグインがあり、これを使うとポチポチ設定するだけで簡単に定期実行してくれます。cron登録を代行してくれるだけかもしれないですが、とても楽でした。katsulog.tech予約完了後の通知機能をつけるこうして一定の時間で予約をすることが可能になりました。予約が成立しているか常に確認しに行くのは不便です。Notifyを利用して予約が完了したらチームのLINEグループに通知が行われるようにしました。Notifyはトークンを渡してHTTPポストするだけなので簡単でした。我々のチームは安定したバスケットボールライフを送っております。これまでよりチームプレイも増えてきて、とある市民大会では優勝することもできました。こんなに首から頭下げてると思いませんでした。合計で300行も満たないコードで幸せな気持ちにさせてくれるRubyにも改めて感激しました。このように業務で得た知識が私生活をも充実させてくれるのはこの仕事のいいところであると思います。何より、仲間たちとバスケをする時間が増えたことがとても嬉しいです。いうのは大切だと思います。結局のところ根性な気がします。以前、会社の技術ブログでactiveadminのちょっ...2017-05-31面と向かって言うのが何よりも大事だと言うこと結局組織とか人との関係で問題になってしまうのは、「面と向か...2017-05-09ポストプレイのディフェンスについて今回は技術とは全然関係ないバスケットボールのお話。バスケットボールコーチンブプレイブックが良すぎた件Archiveはてなブログをはじめよう!masacandyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。