下町柚子黄昏記 by @yuzutas0

したまち発・ゆずたそ作・試行錯誤の瓦礫の記録

IT系勉強会まとめ:Webサービスを作ったけど供養します

概要

Monomy(モノミー)というサービスを半年ほど動かしていたのですが供養します。

f:id:yuzutas0:20170307234328j:plain

もくじ

  1. どんなサービスか
  2. どうやって作ったのか
  3. なぜ作ったのか
  4. なぜ供養するのか
  5. 思ったこと

1. どんなサービスか

1-1. ざっくり説明

勉強会・イベントサイトを横断で検索できるサービスです。

APIを公開している下記4サイトが対象となります。

  • ATND
  • connpass
  • DoorKeeper
  • Zusaar

1-2. 画面イメージ

  • 検索画面
  • カード型の一覧表示画面

f:id:yuzutas0:20170307234328j:plain

  • 詳細画面
  • サイドバーにて類似レコメンド

f:id:yuzutas0:20170307234348j:plain

  • メモ代わりのメール送信

f:id:yuzutas0:20170307234409j:plain

1-3. 由来・コンセプト

名前の由来は「物見遊山」(ものみゆさん)です。和風シリーズ。

移動に制限のあった江戸時代の人は、お参りに行くという名目で、外の世界を旅行したそうです。 同じように、勉強会・イベントでは、スキルアップだけでなく、視野を広げたり、新しい人と出会う楽しみもあります。 そういう前向きな気持ちで一歩踏み出せるような意味を持たせる名前にしました。

このようなコンセプトで作ったサービスとなります。 実際にいくつか勉強会を主催・参加してみて、もっと自分の世界を広げたいなぁと思いました。

2. どうやって作ったのか

過去の個人開発サービスと同じような流れなので細部は省略します。

yuzutas0.hatenablog.com

2-1. システム構成

構成図・技術要素は以下の通りです。

f:id:yuzutas0:20170307234556j:plain

  • APFW:Rails
  • DB:MySQL
  • 検索エンジン:Elasticsearch (provided by Compose)
  • メール配信:SendGrid
  • HW/NW/OS/MW:CloudFoundry (wrapped by Bluemix)

2-2. クローラージョブ

f:id:yuzutas0:20170307234617j:plain

WorkloadSchedulerにてcron相当の設定を行い、Railsバッチ処理を叩きます。 実際にはHTTPリクエスト経由となるのでRails側でAPIを用意しました。

Railsバッチからは各勉強会サイトのAPIをコールしてDB・検索エンジンに保存します。 APIコールで時系列を指定し、過去に同じページを保存していればクローリングを打ち切ります。

2-3. オンラインアプリ

f:id:yuzutas0:20170307234631j:plain

エンジニアがIT勉強会を探すためにサイトを訪問するとRailsレンダリング結果を返します。 Bluemix標準ランタイムだと最新バージョンに対応しないため、CloudFoundryの情報を漁ってカスタム設定にしました。

フリーワード検索と類似文書レコメンドではElasticsearch、それ以外ではMySQLからイベントを探します。 類似文書レコメンドは「More Like This」でお手軽実装となっています。 また、メール送信の要求を受けたらSendGridに送信リクエストを送ります。

2-4. その他開発環境

f:id:yuzutas0:20170307234647j:plain

せっかくのBluemixなのでサービス開発に使えそうなものをいくつか試しました。

  • Auto-Scaling
  • キャパシティ計測ダッシュボード
  • Todo管理
  • 脆弱性診断ツール
    • クローリングしたHTML・画像をそのまま出力している点を指摘されました!

2. なぜ作ったのか

2-1. PaaSの検証のため

サーバ構築・メンテナンスの手間を省くためにPaaSを使えないか検証したかったからです。 インフラ観点だけでなくアプリ観点で使い勝手を検証するためにサンプルアプリとして作成しました。

2-2. UIの学習のため

HileSearchというWEBサービスGigazineに掲載いただいた際、使い勝手の悪さをあちこちでご指摘いただきました。

yuzutas0.hatenablog.com

そこで、検索>一覧>詳細>アクション、という一般的なToC向けサイトの構成を学びたいと考えました。 自分で1度作ったあとに、世のサービスを見ると「こういう工夫が必要だったのか!」と気付けるだろう、という作戦です。

f:id:yuzutas0:20170307234429j:plain

ここでの学びが後述のQiita:Teamクローンに繋がります。

2-3. フィードバックサイクルのため

磨き込み・学習のためには、継続的にユーザーからのフィードバックを得ることが重要だと考えました。 IT勉強会というテーマを選んだのはそのためです。

  1. IT勉強会のためのサイトを作ったよ!という発表をする
  2. 勉強会に参加する人は「勉強会」自体にもある程度関心がある(はず) → 意見を出してもらえる(はず)
  3. 意見をもとに改修 → その旨を次の勉強会で発表する → 2に戻る

こういった正のサイクルを回しやすいのではないかと、という仮説です。

2-4. 本音

というのは半分言い訳で、実際には色々な勉強会に顔を出して、色々な人と話をしてみたかった! そのために話す題材が欲しかった!できたら一緒に盛り上がりたかった!それだけです!

4. なぜ供養するのか

4-1. 機能

勉強会でフィードバックを得るためには1つ目玉機能が欲しいと考えました。

  • Tinderのように好き嫌いを回答して機械学習してくれたら面白いやん!
  • だとしたらWebよりもiOS/Androidネイティブアプリの方が良いのではないか!

ここで機械学習スキルの壁に当たり、迷走もとい勉強することになります。

yuzutas0.hatenablog.com

4-2. 保守

Courseraを終えて見積もり・実装ができるようになると別の課題に思い至りました。 Web/iOS/Android/レコメンドと、システムを広げてしまうと、そのあとの保守が辛くなります。 ToB向けサービスで、Webに絞った方が磨き込みが容易ではないか、と考え始めるようになりました。

4-3. 頻度・速度

加えて、勉強会よりも業務の中でドッグフードできるグループウェアに魅力を覚えるようになります。 というのも、同僚からフィードバックを得るほうが圧倒的に学習の頻度が多いだろうと考えたからです。

この考えがQiita:Teamクローンの開発につながります。

yuzutas0.hatenablog.com

5. 思ったこと

供養する理由を文字に書き出した感想。

「まだ供養しなくてよいのでは?」

やる前から否定してばかりで格好悪い。

  • iOS,Android,レコメンドは実装してしまおう。
  • 保守が大変なら周囲を巻き込もう。協力したくなるような絵を描こう。
  • 勉強会に参加してフィードバックを貰おう。

というわけで、そのうち再開するかもです。 アイデアは捨てるより実現する方が楽しいよね。

ここまで書いてブログ投稿を取りやめようか迷いましたが、せっかくなので投稿します。

最後に

  • 長くなってしまいましたが最後まで読んでいただき本当にありがとうございます。
  • 一応Githubリポジトリは公開しておきます。いつかまたpushする日が来るかなぁ。