Ruby
Rails
Webサービス

10万pv/月達成のwebサービスのRailsソースコード、全部見せます!

はじめに

=====2018/12追記
おかげさまで 14万pv/月になりました!
=====追記終わり

この記事は2年前の私が開発を始めたwebサービスのソースコードを公開するものです。
当時はプログラミングを独学で学び、リリースした初めてのwebサービスでした。

そんなRailsのソースコードを公開しようと思ったのは以下の理由からです。

↑の筆者である@ryupakaさんの記事を参考にさせていただいています。ありがとうございます。

もし誰かがこの記事を参考にwebサービスをリリースできたら、そんなに嬉しいことはありません😭

サービスの紹介

「Rep 立教大学シラバス検索システム」
立教大学生向けのサービスです。

ざっくりいうと、

  • 授業情報の検索
  • 授業のレビューの投稿

などができます。
授業データはクローラー(別のプログラム)で毎年度自動収集しています。

スクリーンショット 2018-07-29 22.14.29.png

https://www.rep-rikkyo.com/

なぜ10万pvに?

いたって普通のサービスですが、立教生には悩みがありました。それが 公式のシラバス検索システムが使いづらい こと。
公式の検索システムは旧態依然。スマホ対応は愚か、ブラウザバックでエラーするという・・・。

そこでその代替サービスを作って公開したら、グングン成長していったわけであります。

ソースコード

Githubにて公開しました。公開用のリポジトリを特別に作成し、一部重要・秘密な部分はダミー値を入れています。
そして MITライセンス です。

Rep + publicで「Republic」というリポジトリ名にしました。

リポジトリURL:https://github.com/SugiKent/republic

スクリーンショット 2018-07-31 13.48.52.png

環境

Ruby: 2.5.1
Rails: 5.1.6

ぜひREADMEをご覧ください。

bundle installの完了とrails serverの起動を目標に環境構築すれば動くと思います。
しかし、PDF生成機能はwkhtmltopdfのインストールが別途必要です。
また、授業データは2017年度のものまでしか収録していません。

機能紹介

①授業検索

授業を検索できます。
現在production環境では2万以上の授業から検索して、結果を返します。

Githubのソースではこのあたり
Repではこのページ

スクリーンショット 2018-08-01 0.47.33.png

②シラバスページ

授業の詳しいデータを見ることができます。
授業データの出力はシンプルですが、以下の点はぜひ見ていただきたいです。

ちなみにここのviewファイルはかなりデカいです😥

Githubのソースではこのあたり
Repではこのページ

スクリーンショット 2018-08-01 0.54.57.png

③レビュー登録

授業のレビューをユーザーが書いてくれます。
コメントは自由ですが、Slackに通知して全レビューを目視チェックしています。アブナイ表現のレビューは削除しますが、今の所ヤバいのはありません。

Githubのソースではこのあたり

スクリーンショット 2018-08-01 1.04.00.png

④お気に入り登録

授業をお気に入りに登録できます。
一番利用しているユーザーだと100以上の授業をお気に入りしています。

Githubのソースではこのあたり

スクリーンショット 2018-08-01 1.05.01.png

⑤ユーザー登録/マイページ

ユーザー登録・ログイン周りは、有名なgemであるdeviseを利用しています。
立教生のメールアドレスだけで登録可能になるように、バリデーションをかけています。

マイページでは、お気に入りに登録した授業を時間割形式で閲覧可能です。

Githubのソースではこのあたり
Repではこのページ

スクリーンショット 2018-08-01 1.08.59.png

⑥デプロイやインフラやデータ

CapistranoでEC2にデプロイしています。
毎月5000~6000円の請求がきます😇

  • Capistrano(デプロイ)
  • nginx
  • unicorn
  • AWS EC2(microインスタンス)
  • AWS RDS Mysql

データ収集

  • GoogleAnalytics(言わずと知れたAnalyticsツール)
  • Redash(SQLを生で書いてデータを取得)
  • LogRocket(ユーザーの動きを動画で取得)

Redashは便利ですね。ユーザー数などを追っています。
スクリーンショット_2018-08-01_1_32_36.png

⑦授業データ

データのインポートはseed_fuというgemを利用しています。
このgemはデータのidだけ被らない(変わらない)ようにしていれば、データを新規作成か更新かを判断してくれます。

授業データはcsv形式で用意します。
こちらのファイルにインポート用のコードが書かれています。
年度始まりに、 bundle exec rails db:seed_fu を実行することで授業データをインポートします。はい、手動です。

プログラミングの勉強をしている方へ

  • まずはRepを見てみてください
  • 気になる機能がありますか? config/routes.rb を見て、その機能のURLはどのcontrollerか把握しましょう
  • 該当controllerの該当アクション内を理解しましょう。わからないメソッドがあればgrepや全文検索で定義元を見つけましょう。
  • 該当viewを見ましょう。
  • 以上の繰り返しで、ある機能の一連の流れがわかると思います。

最後に

最後までお読みいただきありがとうございます!🙇

Repはいたって普通のwebサービスですが、その分初学者の方でもひとつひとつの機能・実装は理解しやすいと思います。
このRepublicを見て、参考にして、新しいwebサービスやエンジニアが生まれてくれたらとても嬉しく思います☺️

この記事へのいいねや、Republicへのスターをいただけるとご飯が美味しくなります😋

質問もウェルカムです!😆

追記

予想以上に多くの方に見ていただき、とてもうれしいです😂
コードもそうですが、Rep自体について興味を持ってくれる方も多く、Twitterでいくつか質問をいただいたりしました。
私のブログにはQiitaに書いてない、Repの記事がいくつかあります。こちらもぜひご覧ください!
http://kentear.hatenablog.com/archive/category/Rep