はじめに
=====2019/08追記
おかげさまで 20万pv/月になりました!
=====追記終わり
=====2018/12追記
おかげさまで 14万pv/月になりました!
=====追記終わり
この記事は2年前の私が開発を始めたwebサービスのソースコードを公開するものです。
当時はプログラミングを独学で学び、リリースした初めてのwebサービスでした。
そんなRailsのソースコードを公開しようと思ったのは以下の理由からです。
- 自分のコードを見て、誰かに参考にしてほしい
- Railsを勉強中のひとのモチベにしてほしい
- iOSアプリのコード公開記事に感化された
↑の筆者である@ryupakaさんの記事を参考にさせていただいています。ありがとうございます。
もし誰かがこの記事を参考にwebサービスをリリースできたら、そんなに嬉しいことはありません😭
サービスの紹介
「Rep 立教大学シラバス検索システム」
立教大学生向けのサービスです。
ざっくりいうと、
- 授業情報の検索
- 授業のレビューの投稿
などができます。
授業データはクローラー(別のプログラム)で毎年度自動収集しています。
なぜ10万pvに?
いたって普通のサービスですが、立教生には悩みがありました。それが 公式のシラバス検索システムが使いづらい こと。
公式の検索システムは旧態依然。スマホ対応は愚か、ブラウザバックでエラーするという・・・。
そこでその代替サービスを作って公開したら、グングン成長していったわけであります。
ソースコード
Githubにて公開しました。公開用のリポジトリを特別に作成し、一部重要・秘密な部分はダミー値を入れています。
そして MITライセンス です。
Rep + publicで「Republic」というリポジトリ名にしました。
リポジトリURL:https://github.com/SugiKent/republic
環境
Ruby: 2.5.1
Rails: 5.1.6
ぜひREADMEをご覧ください。
bundle installの完了とrails serverの起動を目標に環境構築すれば動くと思います。
しかし、PDF生成機能はwkhtmltopdf
のインストールが別途必要です。
また、授業データは2017年度のものまでしか収録していません。
機能紹介
①授業検索
授業を検索できます。
現在production環境では2万以上の授業から検索して、結果を返します。
②シラバスページ
授業の詳しいデータを見ることができます。
授業データの出力はシンプルですが、以下の点はぜひ見ていただきたいです。
- パンくず(一つ前の検索条件がパンくずに)
- 関連授業などページ下部の他授業へのリンク
- 授業で取り扱う書籍がAmazonアフィリエイトリンク
ちなみにここのviewファイルはかなりデカいです😥
③レビュー登録
授業のレビューをユーザーが書いてくれます。
コメントは自由ですが、Slackに通知して全レビューを目視チェックしています。アブナイ表現のレビューは削除しますが、今の所ヤバいのはありません。
Githubのソースではこのあたり
④お気に入り登録
授業をお気に入りに登録できます。
一番利用しているユーザーだと100以上の授業をお気に入りしています。
Githubのソースではこのあたり
⑤ユーザー登録/マイページ
ユーザー登録・ログイン周りは、有名なgemであるdeviseを利用しています。
立教生のメールアドレスだけで登録可能になるように、バリデーションをかけています。
マイページでは、お気に入りに登録した授業を時間割形式で閲覧可能です。
⑥デプロイやインフラやデータ
CapistranoでEC2にデプロイしています。
毎月5000~6000円の請求がきます😇
- Capistrano(デプロイ)
- nginx
- unicorn
- AWS EC2(microインスタンス)
- AWS RDS Mysql
データ収集
- GoogleAnalytics(言わずと知れたAnalyticsツール)
- Redash(SQLを生で書いてデータを取得)
- LogRocket(ユーザーの動きを動画で取得)
⑦授業データ
データのインポートは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