概要
Monomy(モノミー)というサービスを半年ほど動かしていたのですが供養します。
もくじ
- どんなサービスか
- どうやって作ったのか
- なぜ作ったのか
- なぜ供養するのか
- 思ったこと
1. どんなサービスか
1-1. ざっくり説明
勉強会・イベントサイトを横断で検索できるサービスです。
APIを公開している下記4サイトが対象となります。
- ATND
- connpass
- DoorKeeper
- Zusaar
1-2. 画面イメージ
- 検索画面
- カード型の一覧表示画面
- 詳細画面
- サイドバーにて類似レコメンド
- メモ代わりのメール送信
1-3. 由来・コンセプト
名前の由来は「物見遊山」(ものみゆさん)です。和風シリーズ。
移動に制限のあった江戸時代の人は、お参りに行くという名目で、外の世界を旅行したそうです。 同じように、勉強会・イベントでは、スキルアップだけでなく、視野を広げたり、新しい人と出会う楽しみもあります。 そういう前向きな気持ちで一歩踏み出せるような意味を持たせる名前にしました。
このようなコンセプトで作ったサービスとなります。 実際にいくつか勉強会を主催・参加してみて、もっと自分の世界を広げたいなぁと思いました。
- OculusRift+UnityでVR開発一日体験 : ATND
- ニコニコ学会サマーキャンプ2015に参加しました - 下町柚子黄昏記
- 日曜数学会に参加しました&「プログラミングのための線形代数」を読みました - 下町柚子黄昏記
- ニコニコ学会データ研究会に参加しました&モザイク画生成スクリプトを作りました - 下町柚子黄昏記
2. どうやって作ったのか
過去の個人開発サービスと同じような流れなので細部は省略します。
2-1. システム構成
構成図・技術要素は以下の通りです。
- APFW:Rails
- DB:MySQL
- 検索エンジン:Elasticsearch (provided by Compose)
- メール配信:SendGrid
- HW/NW/OS/MW:CloudFoundry (wrapped by Bluemix)
2-2. クローラージョブ
WorkloadSchedulerにてcron相当の設定を行い、Railsのバッチ処理を叩きます。 実際にはHTTPリクエスト経由となるのでRails側でAPIを用意しました。
Railsバッチからは各勉強会サイトのAPIをコールしてDB・検索エンジンに保存します。 APIコールで時系列を指定し、過去に同じページを保存していればクローリングを打ち切ります。
2-3. オンラインアプリ
エンジニアがIT勉強会を探すためにサイトを訪問するとRailsがレンダリング結果を返します。 Bluemix標準ランタイムだと最新バージョンに対応しないため、CloudFoundryの情報を漁ってカスタム設定にしました。
フリーワード検索と類似文書レコメンドではElasticsearch、それ以外ではMySQLからイベントを探します。 類似文書レコメンドは「More Like This」でお手軽実装となっています。 また、メール送信の要求を受けたらSendGridに送信リクエストを送ります。
2-4. その他開発環境
せっかくのBluemixなのでサービス開発に使えそうなものをいくつか試しました。
- Auto-Scaling
- キャパシティ計測ダッシュボード
- Todo管理
- 脆弱性診断ツール
- クローリングしたHTML・画像をそのまま出力している点を指摘されました!
2. なぜ作ったのか
2-1. PaaSの検証のため
サーバ構築・メンテナンスの手間を省くためにPaaSを使えないか検証したかったからです。 インフラ観点だけでなくアプリ観点で使い勝手を検証するためにサンプルアプリとして作成しました。
2-2. UIの学習のため
HileSearchというWEBサービスをGigazineに掲載いただいた際、使い勝手の悪さをあちこちでご指摘いただきました。
そこで、検索>一覧>詳細>アクション、という一般的なToC向けサイトの構成を学びたいと考えました。 自分で1度作ったあとに、世のサービスを見ると「こういう工夫が必要だったのか!」と気付けるだろう、という作戦です。
ここでの学びが後述のQiita:Teamクローンに繋がります。
2-3. フィードバックサイクルのため
磨き込み・学習のためには、継続的にユーザーからのフィードバックを得ることが重要だと考えました。 IT勉強会というテーマを選んだのはそのためです。
- IT勉強会のためのサイトを作ったよ!という発表をする
- 勉強会に参加する人は「勉強会」自体にもある程度関心がある(はず) → 意見を出してもらえる(はず)
- 意見をもとに改修 → その旨を次の勉強会で発表する → 2に戻る
こういった正のサイクルを回しやすいのではないかと、という仮説です。
2-4. 本音
というのは半分言い訳で、実際には色々な勉強会に顔を出して、色々な人と話をしてみたかった! そのために話す題材が欲しかった!できたら一緒に盛り上がりたかった!それだけです!
4. なぜ供養するのか
4-1. 機能
勉強会でフィードバックを得るためには1つ目玉機能が欲しいと考えました。
ここで機械学習スキルの壁に当たり、迷走もとい勉強することになります。
4-2. 保守
Courseraを終えて見積もり・実装ができるようになると別の課題に思い至りました。 Web/iOS/Android/レコメンドと、システムを広げてしまうと、そのあとの保守が辛くなります。 ToB向けサービスで、Webに絞った方が磨き込みが容易ではないか、と考え始めるようになりました。
4-3. 頻度・速度
加えて、勉強会よりも業務の中でドッグフードできるグループウェアに魅力を覚えるようになります。 というのも、同僚からフィードバックを得るほうが圧倒的に学習の頻度が多いだろうと考えたからです。
この考えがQiita:Teamクローンの開発につながります。
5. 思ったこと
供養する理由を文字に書き出した感想。
「まだ供養しなくてよいのでは?」
やる前から否定してばかりで格好悪い。
というわけで、そのうち再開するかもです。 アイデアは捨てるより実現する方が楽しいよね。
ここまで書いてブログ投稿を取りやめようか迷いましたが、せっかくなので投稿します。
最後に
- 長くなってしまいましたが最後まで読んでいただき本当にありがとうございます。
- 一応Githubリポジトリは公開しておきます。いつかまたpushする日が来るかなぁ。