Edited at

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


はじめに

=====2019/08追記

おかげさまで 20万pv/月になりました!

=====追記終わり

=====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