Ruby on Rails チュートリアルを拡張してみた
新人研修の一環としてRailsチュートリアルの機能拡張を行ったのでまとめてみようと思います。
実際書いたコードとアプリケーションも貼っておきます。
Ruby on Rails Tutorial Sample App
環境は以下の通りです。
1. RSpecでテストを書く
Railsチュートリアルのテストはminitestで書かれていますが、実際のプロジェクトではRSpecが採用されることも多いということで、全てのテストをRSpecで書きました。また、E2Eテストを書きやすくするためCapybaraやTurnipを導入したりしました。
2. CIと連携する
CircleCIを入れてテストを自動実行するようにしました。また、CIを通らないとマージできないようにしました。
3. Hamlで書き換える
ERBは冗長なのでHamlに全て書き換えました。書き換えに際しては、erb2hamlというGemを使用すると楽でした。
4. Twitterログイン
Twitterアカウントでユーザー登録・ログインができるようにしました。Twitterでユーザー登録するときはメールアドレスとパスワードのバリデーションに引っかからないように気をつける必要がありました。
5. 検索機能
ユーザーとマイクロポストのあいまい検索を実装しました。SQLインジェクションに気をつけました。
6. REST API
ユーザーのREST APIを実装しました。JSON生成にはJbuilderを使用しました。
7. 通知機能
他のユーザーにフォローされた時に通知が来るようにしました。また、通知のオンオフの切り替えも可能にしました。
8. いいね機能
ユーザーの投稿にいいねできるようにしました。Ajaxで画面遷移せずにいいね数が1増え、ハートの色が変わるようにしました。
9. 返信機能
@username を付けて投稿すると自分とメンション先ユーザーのタイムラインにのみ投稿が表示されるようにしました。また、個別の投稿についても返信ボタンを設置し、その投稿についた他のユーザーの返信も見れるようにしました。
10. DM機能
TwitterのダイレクトメッセージのようなものをAction Cableを用いて実装しました。リアルタイムチャット機能自体は完成したのですが、自分が右側、相手が左側に配置されるようなレイアウトまで作り込めなかったのが心残りです。
その他細かいですが実装したものを列挙します。
- RuboCopでコーディング規約統一
- Brakemanでセキュリティチェック
- BulletでN+1を検知
- Code Climateでコードの品質担保
- Tachikomaでライブラリのバージョンアップ自動化
- RSSフィード
個別の実装方法が気になる方は、以下のクローズしたPRから探してもらうと見つかると思います。
Pull Requests · hisas/sample_app2 · GitHub