こんにちわ。
YuKiOです。
個人が気軽にランキングを投稿してシェアでできるような、新しく「RANK321(ランンクサンニーイチ)」というWebサービス(SNS)をリリースしました!
今回は、
「なぜRANK321を作ったのか?」
「開発で苦労したところ」
について書いて行きたいと思います。
なぜ?RANK321を作ったのか?
今までは個人で完結するようなWebサービスを開発していたので、SNSようなコミュニケーションを生まれるようなサービスを作ったことがありませんでした。
Railsチュートリアルにあるような
- フォロー機能
- 画像のアップロード
ツイッターにあるような
- 通知機能
- いいね
このような機能を実装したことがなかったので、まずはSNSのようなWebサービスをRailsチュートリアルで学んだ知識を使って作ってみようと決意。
ただ、普通のSNSを作るとなると色々盛りだくさんになりそう。何事小さく始めるのが大事なので、特化型SNSのような制約のあるサービスにしようと思いました。
そこで注目したのが「ランキング = 価値観」です。
自分はあまのじゃく的なところがあって、「みんなが良いと言っているものが良い」とは限らないと考えてます。
例えば「面白い映画ランキング」をみんなで投票すれば、上位の映画は「大多数の人が面白いと思う映画」が選ばれてくるはず。
ですが、上位にランキングされている映画が、自分にとって面白い映画かと言えば、そうじゃないこともあります。
このように、「一般的な価値観が絶対的に正しいとは限らない」と思うことってありませんか?
それよりも、私はDaiGoさんなんか好きだったりするのですが、気になる人がオススメしてる映画とかの方が見たいなと思ったりするし、実際に面白かったりします。
本でも映画でも音楽でも、ランキングを作ってみると、個人の「価値観」が色濃くでると思うのです。
ランキングを通じて、もっと「個人の価値観」を簡単にシェアできればと思って「RANK321」を作りました。
RANK321の理想的な使われ方はこんな感じ
個人的には、ある分野に特化している人が、オススメを紹介する情報提供の場になれば理想的だと思います。
例えば「Ruby on Rails」のベテランエンジニアがオススメする「Rubyの技術本ランキング」、イタリアンのシェフが美味しいと思った「東京都内にあるイタリアン-ランキング」など。
ある分野の情報を入手するにあったて、大衆的な情報ではなくて、もっと局所的な情報を手に入る場所になればいいなと・・・。
知り合いの詳しい人に、オススメを聞くようなイメージです。
著名人とか特化した人のオススメを知ることができるという点と合わせて、自分と似ている人、自分より少し先輩の人、自分と全く正反対の人など一般の人の価値観を知ることで、自分の価値観を広げることができたらいいなと思っています。
また自分から発信することで、新しい関係が築けたらいいなと思っています。
RANK321開発について
RANK321は開発期間は企画から初めて2ヶ月くらいです。
時間を見つけながらチョコチョコと進めてました。
細かいバグに詰まったりはしましたが、4作品目ということもあって大枠の機能は3週間くらい実装が終わりました。
細かいところのアイディアが浮かんだり、デザインをゴニョゴニョしていたり、細かいバグを取り除いていたら、結局リリースに時間がかかるというなんとも言えない状況に。
デザイン力がないのに、デザインにこだわってしまう性格は問題だなとは感じます。
今回のデザインは汎用性を高くしたので、また新しいアプリを作る時はこれをベースに作れば、デザイン調整の時間は短縮できるようになりそうです。
お恥ずかしい話、途中からBootstrapStudioを途中から使い初めて、モックを作ったら、コーティングがとても楽だと知りました。
次回からは面倒でもしっかりモックを作ろうと思います。やっぱり形を決めてから作った方が早いですね。
また今回開発では、画像のアップロードや、Ajax類、routesの設定など、基本的なRailsの開発に必要な知識を得ることができました。
アプリを開発していて感じるのは、目的ベースでプログラムを学習していくと、覚えますし、無駄がないなと思います。
正直プロの人から見れば、「鼻で笑われる内容」ですが、最初みんなそんなもんだと思うんですよね。
笑われても、作って失敗して覚えていくしかないと、僕は思っています。
開発で苦労したところ
機能的な開発では苦労したところは無かったのですが、フェイクデータを作るのが苦労しました。(「,」が余計に入っていて、バグが見つけられなかったのには苦労しましたが)
サービスをリリースして、ユーザーが3人、投稿が10件だと、SNSとしては誰も使ってくれないと思ったわけです。
どうやって沢山の投稿を用意するか・・・
フェイスブックのように、ある特定のグループに使ってもらう方法が難しい・・・。
ある本を読んでいたら、シリコンバレーのあるサービスの初期は自分たちで沢山投稿していたとのことだったので、その方法を拝借。
とはいえ手入力で数百人のユーザーを作って、投稿をするのは時間がかかりすぎるので、seed.rbファイルを使って、うまく出来ないかな?と考えてました。
Fakerを使うにしても、THEフェイクデータなので微妙。。
できれば、自己紹介文も投稿も全員同じにはしたくないし、ちゃんとした文章にしたい。
結論から言えば、ランダムを多用して作成しました。
数種類文章テンプレートを用意して、ランダムに選択。
さらに埋め込む言葉も、配列で何個も作成しておいて、ランダムで抽出することで、ある程度ランダムな文章を作りました。
例えば、
- ランダムに数字を取得(1~9)
- case文で番号に応じて9パターンの自己紹介文のテンプレートを選択
- 選択した自己紹介のテンプレートに埋め込む単語(一人称、挨拶パターン、文末)を、別で設定している配列から一つランダムに取り出しいく
こうすることで、かなりのパターンで文章が出来上がります。
パターンを作るにのに内容が多い場合には、csvでリストを作成して読み込むことで対処しました。(ユーザー名とか、職業とか)
投稿も同じ原理で作成しました。
ただ問題はパフォーマンスで、each文でやるとメモリがえらいこっちゃになる、それでやったらエライ時間が掛かったので、本番ではfind_each文に書き換えて、一回の処理数を少なくして対処する必要があります。
これだけ苦労して作っても、やはり人間が作った文章とのパターンと比べると、どうしても似たような感じになってしまいますが、とりあえず合格点です。
そうそうあと、herokuの注意点ですが、seedでデータを作りすぎると、すぐに無料枠のDBを使い切ってしまうのでご注意を!たしか10,000データまでだったと思います。
まとめ
ということで、お読みいただき、ありがとうございました。
なかなかニッチなWebサービスですが、ぜひみなさん試しに登録して使ってみてください。