ほつた@はてな

ほつたが技術的な事や個人的な出来事を中心に投稿します。

【ヤフオク出品自動化】Hack U 2016 名古屋会場で発表してきました #hacku【Double-Au】

Hack U 2016 名古屋会場に参加し、ヤフオクの出品を自動化する自動楽売Double-Au(ダブルオウ)をなんとか実質1人で開発して発表してきました。

先に言っておくと、開発期間中は寝ながら頭の中で開発しないと不安だったりと滅茶苦茶大変でしたが、終わってみるとHack Uは本当に楽しかったと思っています。

ヤフオクの出品を自動化するDouble-Au(ダブルオウ)について

スライドを見ていただければ大体分かると思いますので若干割愛させていただきます。

speakerdeck.com

検索フォームのところはこれを採用しました。

平均落札価格の相場取得は、近い商品の価格の4割前後を設定してヤフオクの落札商品から複数取得して割って平均落札価格を出せば良かったのですが、面倒だったのでサクッとオークファンから平均落札価格をスクレイピングして表示してしまいました。

aucfan.com

そう言えば、なんでAPI使わなかったのという質問がかなり多かったです。肝心なところをスライドに書けてないのでここに書いておくと、スクレイピングが大好きだからというのが一番の理由です。また、出品APIは個人では使えず企業でないと使えないようで、Amazonの検索APIヤフオクの検索API*1制限や制約が多くて扱いづらいかなと思ったからです。

というよりもAPIRubyでどうやって使えば良いのか、未だにあまりよく分かっていないのでAPIをどうやって扱えば良いのかしっかり勉強したいと思っています。

ベータ版を公開中なので、もし良ければ触ってみてください*2

double_au

そういえば、YouTubeの映像が乱れていますね。うーん。どうにかならないのかなぁ。

www.youtube.com

Hack U 2016にエントリーするまで

Hack U 東海大学 2015が終わったあたりでHack Uの存在に気づきました。

hacku.yahoo.co.jp

hacku.yahoo.co.jp

今年もHack U 東海大学があるのかなと思っていたのですが、どうやら今年はHack U 2016で大学縛りを無くしブロックごとにハッカソンを行うみたいです*3

Hack U 2016 東京会場に出場したかったのですが、9月に入ってから発表前日まで北海道旅行をしていたので開発が完全に間に合わないと考え断念しました。

hacku.yahoo.co.jp

しかし、なんとしてでもHack U 2016に出たかったので東京以外を模索することになったのです。 *4 10月中旬に基本情報技術者試験の勉強も控えていて、大阪大会の11月までとかあまりダラダラ開発するのは好ましくないので名古屋へ行こうと決め、名古屋のエントリーが始まった瞬間に応募してしまいました。

hacku.yahoo.co.jp

テーマ自動○○でエントリー開始速攻ポチるものの開発は実質1人

今回のテーマを見た瞬間に、これはやるしかないなと思ったのも参加した理由です。 あの面倒過ぎるヤフオクをいい感じにHackできれば優勝できるんじゃないかとエントリーしたときは燃えてました。

自分はかなりのヤフオク出品ヘビーユーザーでAucTownを使って出品の面倒をかなり減らしているのですが、それでも本当にこの価格で良いのかとか価格を考えるのが一番ネックかなと思っていました。

auctown.jp

ただ、自称東大だからなのか、キャンパスが小さくて狭いからなのか、Hack Uに出たい人が周りに誰もいませんでした。 *5 ただ、Hack U 2016の出場条件として2人以上のチームであることでしたので、プログラミングがあまり出来ない後輩に頼んでチームとして申し込んでもらいました。 開発の協力をお願いしたのですが、ちょっとしたアドバイスぐらい*6だけで開発に少しもコミットしてもらえませんでした。これは仕方ないですね。

実はエントリーした直後、後輩にもう開発やめたいと愚痴を言いまくっていました。 「開発ヤバイよ…ヤバイバイ…」*7

開発期間前半

北海道旅行で開発の進捗ほぼ0。

東京大会に出れない腹いせに「NTTドコモ×TBS TV HACK DAY」に遊びに行くことに。

www.tbs.co.jp

予選敗退したもののハッカソンガチ勢がたくさんいて、ガチなハッカソンとは何なのかを知る貴重な経験になりました。

そして、気持ちを切り替え、どうにか名古屋会場に向けて開発をする事にしました。

GitHubのコミットログなどを見て振り返ってみたいと思います*8。 どうやら、キーワード検索の部分でデザインやopen-uriだとヤフオクの検索が上手くできず悪戦苦闘して1週間ほど費やしてしまったみたいです。

開発期間中旬

最初はDBを全く使わずに、取得したデータをzipで変数を結合してeachするという謎な物凄くレガシーなコードを書いていたのですが、kaminariを使ってページオートメーション*9を実装したくなり、DBを使わないと無理そうだったので慌てて書き換えました。

中旬に差し掛かり、実際にHerokuにデプロイしてみてからバグの修正やじわじわと開発した方がいいのかなと思ったのでデプロイしようとしたのですが、Herokuお馴染みのPostgreSQL問題でなかなか正常に動かず数日ほど費やしてしまいました。

開発期間下旬

下旬に突入してそろそろまずいと思い開発スピードを上げて、出品完了画面まで仮で作ってスマホを振って操作できるようにしました。 そしてひたすらバグの修正。

開発期間下旬に入ってあの映画を見ることに我慢することが出来なくなって観てしまいました。 あの映画とは、ずばり「君の名は。」です!!! 最初観たときは、もう開発なんてどうでもいいや気分になってしまいました。

結局5回も「君の名は。」を見て、ほぼ開発を放棄してしまいました。 そして、後輩にまた開発やめたいとか愚痴を言いまくっていました(n回目)。 「開発本当にヤバイよ…ヤバイバイ…」

なんだかんだ言って、ダミー出品するところまでは完成しました。

前日から当日発表直前まで

全くイラストが無かったので、せめてスマホを振るところのイラストがあったらなと思っていたので、授業中に急いで作りました。このイラストだけは、滅茶苦茶いい感じに出来たと思っています。

授業が終わった後に、とあるもくもく会に行ってバグを修正したり、スライドを作ったりしていました。

freestyle-mokumoku.connpass.com

試しに、まあまあ出来上がったスライドをサポーターの方々にレビューしてもらったところ、酷すぎたのかボロクソにレビューされました(笑)

本音を言ってしまうと、この調子でスライド以外もボロクソにレビューしてサポートしてもらいたかったです*10

発表直前の朝、とあるパンバイキングに行き、ひたすらパンを食べながらどうにか実際に出品できるようにしようと頑張っていました。 490円とコスパは最高だったのですが、評価通りパンが冷めていてあまり美味しくなく、なんで名古屋に来たのにパンばかり食べてるんだろうと思いながらもくもくと開発していました。

tabelog.com

http://i.imgur.com/7ECGOj1.jpg

ただ、PhantomJSのバグなのか出品画面でどう頑張ってもカテゴリの検索ボタンを押すことができず断念。 ChromeDriverだと正常に動いたのでそれならHerokuでChromeDriverを動かしてどうにかしようとしましたが、HerokuのChromeDriverに関連するBuildpacksがまともにメンテされておらず、11時まで悪戦苦闘するも断念。

11時になって、Slackでもう開場したよという話だったのでとりあえず会場に行くことにしました。 本当は10時開店のカラオケ屋に行ってひたすら発表の練習をする予定でしたが、結局いけませんでした*11

発表

トップバッターだったので滅茶苦茶緊張しました。全く発表の練習が出来ていなかったのでどうなるかと思っていたら、なんとデモ実機が映らないトラブルに見舞われました。それで気を取り直したのですが、スクリーンを見ずにデモ実機を見て操作してしまったのでまともに見せられていなかったみたいで滅茶苦茶後悔しています*12

幸運にも発表前にほんの少し練習して、これはデモを1分以内に収めても発表が間に合わないことが分かっていました。なので時間配分はかなり気にしていたのですが、やはり後半慌ててしまって「入れ替わってる!?」と決めることが出来なかったのが一番悔しかったです...。

発表する前は、東京より名古屋の方がやはりレベルが低いかなとか勝手に思っていました。

ですが、他の発表を見ていていくと東京会場に参加していたと人よりも低いのは平均年齢だけで、技術レベルが高すぎの方が何人もいて手のひらを返すように名古屋を見直しました。

実は、他チームのSlackチャンネルを定期的に覗いていたのですが、このスライドをもう見た瞬間にもう最優秀賞は無理だと思っていました。

中学生が発表だなんて、もう自分はおっさんです。

展示会では、軽くブースを見回り、優勝しそうなチームに軽く挨拶しました。 それからインタビューが来ましたので、あまり説明できなかった仕組みの部分について、発表のときと比べれば丁寧に説明できたかなと思っています*13

http://i.imgur.com/uN8GwYT.jpg

そして、なんとヤフオクの開発に携わってる方がブースの近くにいらっしゃって、滅茶苦茶「ヤフオク出品やら何やら面倒だしだめだよね」的な話をして滅茶苦茶盛り上がっていました*14

審査発表で、賞はゲットできなかったのですが、総評で「もうサービス化したらどうかな」的なことを言われて、まるで「君の名は。」を見たときと同じように涙目になってしまいました。

そして、懇親会でピザ以外やっと名古屋らしい食べ物が食べれて幸せになりました。

http://i.imgur.com/ll7Vf9n.jpg

中でも手羽先を食べすぎました*15

http://i.imgur.com/AyHxVDi.jpg

あと、串があったのですが写真をうまく取れていなかったみたいです。

懇親会のときの社員LTはものすごく面白かったので、やはり”スライド”の腕前は皆さん本当にすごいと思います*16

まとめ

Hack U初めての参加でしたが、控えめに言って最高でした。

今更なのですが、東京大会に出ていたらもしかすると優秀賞くらいゲットできたかもしれないなとか割とどうでもいい悔しさが色々と心のなかで残っています*17。 この悔しさを胸に、今後もこのDouble-Auを滅茶苦茶いい感じになるまで開発をしていき、いつか近いうちにサービス化が出来たらなと思っています。ただ、企業しか出品APIが使えないのでいい感じに出来たら適当に合同会社でも作ってAPI使いたいなと思っています。夢のような話ですが、本当に今自分がやりたいことなので、こんなことを年度内までには絶対にやりたいです。

そして、何よりも言いたいのが、こんな自分でもやれば1人だけで開発して成果物を作ることが出来るということです。 ただ追い込まれなければ、こういう力を発揮することは難しいのではないかと思います。 自分で追い込むのもありですが、だらけてしまうなんて事があったら、こういうハッカソンなどに積極的にチャレンジして追い込まれて開発をするのが1番なのではないでしょうか*18

最近ハッカソンに参加して思っているのですが、本当にこれですね。

最後に

最後に、丁寧にサポートをして下さいましたサポーターの方々には感謝しようにもしきれません。

そしてHack Uスタッフの方々、参加した皆さん、本当にお疲れ様でした。

またどこかで参加された方とお会いすることでしょう。 もちろん来年もHack Uがあればリベンジしたいです。

次は絶対に何としてでも賞を取りたいと思います。

9/28 追記 一部、日本語がおかしい点やみづらいところがあったので修正しました。

*1:ちゃんと見ていないので多分間違っていると思いますが

*2:UIとかかなり酷いのでその辺りのマサカリは勘弁してください。今後頑張ります...。

*3:なんと京都工芸繊維大学がHack U 2016期間中にやるのでもしかするとHack U 東海大学やるかもしれないですね。ヤフーさん自称東大で是非とも今年も開催をお願いします!

*4:どの会場に出場しても問題ないことを確認した上で出場しました。

*5:Twitterで一緒にやりたい人〜!と声をかけなかったからかもしれませんが、結局周りにデザインとかフロントエンドが出来る人いないみたいです...。

*6:これだけでも本当にありがたい限りなのですが...。

*7:今から思うとこんな感じでした。※エントリー直後は、まだこのネタを知りません。

*8:現在Privateに設定してあります。

*9:本当はもっと見るを実装したかったのですが...。

*10:ただ、自分も開発期間下旬になるまで秘密主義で何を開発するのか、全く伝えずにひたすら開発していたのがちょっと良くなかったよなと反省しています。

*11:こうなるのなら行けばよかった...。

*12:終わった後、サポーターの方に指摘されて気づきました

*13:怖くてまだ動画を見返せていません。

*14:あまりに駄目すぎて伝えきれなくて悔しいです。

*15: 口の周りにごまがついてしまっていて、スタッフの方に指摘されなければそのまま新幹線に乗ってるところでした(笑)

*16:飛び入りで図書館の自動化スクリプトについて発表しようかなと思っていたのですが、あまりの凄さに唖然としてしまいLT発表しませんでした。

*17:ヤフー賞とかあったら絶対に受賞出来てたのに...。

*18:ハッカソンは体と心に悪いので頻繁に参加するのはあまりオススメしません