以下は開発者のGitHubページのREADMEにも記載してあります。
GitHub: https://github.com/yoshida1126/articles_app
このアプリは、技術記事を投稿・共有するためのWebサービス(ポートフォリオサイト)です。
ユーザー同士で記事を投稿し合い、コメント・いいね・フォローなどを通じて技術的な交流を図ることができます。
また、「お気に入りリスト機能」には特にこだわりがあり、
他のユーザーがどんな記事を保存しているのかを見ることができる設計
にしています。
これは、「参考になる記事を見つけても、その投稿者が普段どんな記事を読んでいるか分からない」という
自身の体験から生まれた発想です。
加えて、 他のユーザーが作成したリストをブックマークできる ようにする機能を追加しました。
これらの仕組みによって、
知識や学びが人を通じて広がる体験
を提供し、
ただの記事投稿にとどまらない、
コミュニティ的な価値
のあるサービスを目指しました。
レスポンシブ対応しているのでスマホからでもご覧いただけます。
画像ファイルの管理における工夫
Fat Controller を避けるための設計
テストのしやすさを意識した設計(DIの導入)
Proc
を引数として受け取る形にし、依存性注入(DI)を導入
。
使用させて頂いたアイコンの各種リンク
CircleCI: https://icons8.com/icon/ep4D1m8k13qZ/circleci
Cloudflare: https://lobehub.com/ja/icons/cloudflare
Docker: https://www.docker.com/ja-jp/company/newsroom/media-resources/
GitHub: https://icons8.com/icon/12599/github
Nginx: https://icons8.com/icon/LhQ8M0RI4YLP/nginx
Ruby on Rails: https://icons8.com/icon/12eMo7h5rCTp/ruby-on-rails
お気に入り記事のリスト機能
他のユーザーが作成したリストのブックマーク機能
ユーザー登録・ログイン機能(devise)
投稿機能
画像投稿機能
いいね機能
検索機能(ransack)
ransack
を使用して記事を検索できますが、今後、検索対象が多いというサイトの特性を考慮して、ElasticSearch
に切り替える予定です。ハッシュタグ機能(acts-as-taggable-on)
アクセス制限・スパム対策
Redis を利用し、以下のようなスパム・イタズラ防止のためのアクセス制限機能を実装しています。
使用ツール
実施しているテストの種類
Proc
を用いた 依存性注入(DI) を行い、テスト時にはモックを使用することで外部依存を排除。柔軟性・保守性・テスト容易性の向上を意識しています。