Help us understand the problem. What is going on with this article?

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

kent_ear
freeeエンジニア 母校である立教大学生向けwebサービスをやっています ずっとwebサービス作りやっていきたい
https://sugikent.github.io/
freee
スモールビジネスのバックオフィス業務をテクノロジーで自動化し、日本のスモールビジネスを元気にする
http://www.freee.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした