# 各課題の参考リンク ## 基礎編 ### 課題1 (アプリの基本設定を行う)について 課題詳細 rails g コマンドを使用した際に、assets、helper、testファイル、ルーティングが生成されないように設定してください。 [一次情報] Railsガイド https://railsguides.jp/asset_pipeline.html 2.1 コントローラ固有のアセットを参照 [二次情報] 2017/2作成 LGTM多数。 https://qiita.com/tanakayo/items/5de57f4b89d1ef9c70ba ### 課題2 ・(全ページにヘッダー/フッターを設置)について 課題詳細 ルート(/)にアクセスした際に、トップページが表示されること [一次情報] Railsガイド https://railsguides.jp/routing.html 現場Rails 228ページ Chapter6-2 「ルーティング」 Railsドキュメント https://railsdoc.com/routes [二次情報] 2020/11作成 ルーティングの説明としては下記がわかりやすく感じた https://techracho.bpsinc.jp/baba/2020_11_18/15665 課題詳細2 ・トップページに_header.html.erb, footer.html.erbの文言が表示されていること(partialについて) [一次情報] Railsガイド 3.2 パーシャル https://railsguides.jp/action_view_overview.html#%E3%83%91%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%AB Railsチュートリアル 5章 5.1.3 パーシャル(Partial) Railsドキュメント https://railsdoc.com/page/render [二次情報] 2019/7作成 画像付の説明でわかりやすい。 https://pikawaka.com/rails/render 課題詳細3 sample.jpg, logo.png, top.jpgが表示されていること [一次情報] Railsガイド 6.1.4 image_tag https://railsguides.jp/action_view_overview.html#image-tag Railsドキュメント https://railsdoc.com/page/image_tag [二次情報] 2019/3作成 説明がわかりやすい https://pikawaka.com/rails/image_tag ### 課題3 Gemを使ってみよう (Bootstrap) 課題詳細 gemを利用して、font-awesome、bootstrapをそれぞれインストール後、使用できるように設定してください。 font-awesome-rails [一次情報] GitHub https://github.com/bokmann/font-awesome-rails [二次情報] 2019/6作成 見やすい記事ですが、コードがslimになっているので、基礎編の生徒さんはわかりにくいかも? https://qiita.com/fumikao/items/59ab20af33047d06e6e3 bootstrap [一次情報] GitHub https://github.com/twbs/bootstrap-rubygem#a-ruby-on-rails 現場Rails Chapter3 3-1-6 88p [二次情報] 2019/8作成 LGTM多数。 https://qiita.com/NaokiIshimura/items/c8db09daefff5c11dadf ### 課題4 sorceryを使用して、ユーザー機能を作成しよう 課題詳細 ・sorceryのwikiをみながらユーザー登録・ログイン機能を作成してください [一次情報] GitHub https://github.com/Sorcery/sorcery/wiki/Simple-Password-Authentication [二次情報] 2020/12作成 LGTMは少ないですが、最近の記事でわかりやすそうでした。 https://qiita.com/tanutanu/items/52ceab22ad21ba97c902 ### 課題5 i18nによる日本語化対応 課題詳細 ・i18n設定ファイルの読み込みパスを設定してください。 ・各種翻訳ファイルの設定をしてください。 [一次情報] GitHub https://github.com/svenfuchs/rails-i18n 現場Rails Chapter3 3-1-7 91p [二次情報] 2020/4作成 LGTM多数。まとめ方がわかりやすい記事 https://qiita.com/shimadama/items/7e5c3d75c9a9f51abdd5 課題6: ・フラッシュメッセージの設定 課題詳細 ・それぞれフラッシュメッセージの表示がなされるように設定してください。 [一次情報] 現場Rails 107p Chapter3-3-1-8 「Flashメッセージ」 ※これ以外いらない気が... ### 課題7 デコレーターの導入 課題詳細 ・gem draperを使用し、decoratorを導入してください。 [一次情報] GitHub https://github.com/drapergem/draper [二次情報] 2017/12作成 LGTM多数。 https://qiita.com/jonson29/items/00077b54bb91ed74fdb8 ### 課題8 掲示板の一覧機能の作成 課題詳細 ・Boardモデルを作成してください。 [一次情報] 現場Rails 92ページ Chapter3-2 「タスクモデルを作成する」 課題詳細2 ・「title」「body」「userと紐づけるための外部キー」が保存できるようにカラムを用意してください。 [一次情報] Railsガイド Active Record マイグレーション https://railsguides.jp/active_record_migrations.html 課題詳細3 ・「title」は255字、 「body」は、65535字でバリデーションをかけてください。またそれぞれに必須項目のバリデーションを付与してください。 [一次情報] presence 現場Rails Chapter4-3-3 「必須かどうかの検証を追加する」 Railsガイド 2-9 「presence」 https://railsguides.jp/active_record_validations.html length 現場Rails Chapter4-3-5 「文字列長の検証を追加する」 Railsガイド 2-7 「length」 https://railsguides.jp/active_record_validations.html [二次情報] 2017/11作成 一覧でまとめられていて良いと思います。 https://qiita.com/h1kita/items/772b81a1cc066e67930e 課題詳細4 ・seeds.rbファイルを作成してBoardモデルのダミーデータを20個作り、事前にDBにインサートしておきましょう。ダミーデータには Faker を利用してください。Fakerはdevelopmentとtestどちらの環境にもインストールするようにしましょう。 seeds.rbについて [一次情報] Railsガイド 8 「マイグレーションとシードデータ」 https://railsguides.jp/active_record_migrations.html#%E3%83%9E%E3%82%A4%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E3%82%B7%E3%83%BC%E3%83%89%E3%83%87%E3%83%BC%E3%82%BF [二次情報] 2020/5作成 LGTM多数。 https://qiita.com/takehanKosuke/items/79a66751fe95010ea5ee Fakerについて [一次情報] GitHub https://github.com/faker-ruby/faker 詳細課題5 ・UserモデルとBoardモデルの間にアソシエーションを定義してください。 [一次情報] Railsガイド 169ページ Chapter4-5-11-1 「データベース上でUserとTaskを紐付ける」 Railsガイド 「Active Recordの関連付け」 https://railsguides.jp/association_basics.html [二次情報] 2019/12作成 図解付で個人的に一番わかりやすかった https://qiita.com/kazukimatsumoto/items/14bdff681ec5ddac26d1 詳細課題6 ・_header.html.erbから掲示板一覧ページに遷移できるリンクを作成しましょう。(link_toについて) [一次情報] 現場Rails 166ページ 「ログアウト機能を実装する」の後半 [二次情報] 2019/3作成 https://pikawaka.com/rails/link_to 詳細課題7 ・boards#indexにアクセスすると、views/boards/index.html.erbがレンダリングされるよう、ルーティングファイルやコントローラーファイルに適切な設定を施して下さい。 [一次情報] 現場Rails 228ページ Chapter6-2 「ルーティング」 Railsガイド 2 リソースベースのルーティング: Railsのデフォルト https://railsguides.jp/routing.html [二次情報] 2020/7作成 LGTM多数。 各パーツごとの説明が丁寧。 https://qiita.com/senou/items/f1491e53450cb347606b 詳細課題8 ・views/boards配下に、単一の掲示板を表示するパーシャルを作成してください。 boards/index.html.erbからはこのパーシャルを繰り返し呼び出して掲示板一覧を表示するようにしてください。 [一次情報] Railsガイド 3-2 「パーシャル」 https://railsguides.jp/action_view_overview.html [二次情報] 2019/6作成 見やすくてわかりやすい。 https://pikawaka.com/rails/partial_template 詳細課題9 ・ただし、n+1問題が起きないよう注意して実装してください。 [一次情報] Railsガイド 13 関連付けを一括読み込みする https://railsguides.jp/active_record_querying.html#%E9%96%A2%E9%80%A3%E4%BB%98%E3%81%91%E3%82%92%E4%B8%80%E6%8B%AC%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%99%E3%82%8B [二次情報] 2019/5作成 個人的に一番わかりやすい https://nyoken.com/rails-includes 詳細課題10,11,12 ・掲示板が存在しない場合「掲示板がありません。」と表示してください。 ・ログイン時のリダイレクト先を掲示板一覧画面に変更してください。 ・非ログイン時のリダイレクト先をログイン画面に設定してください。 これは自力で頑張ってもらいましょう。 詳細課題13 ・時刻のフォーマットはi18nを使って整形してください。 [一次情報] Railsガイド 3.4 日付・時刻フォーマットを追加する https://railsguides.jp/i18n.html#%E6%97%A5%E4%BB%98%E3%83%BB%E6%99%82%E5%88%BB%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B [二次情報] 2019/12作成 チェリー本著者のQiita https://qiita.com/jnchito/items/831654253fb8a958ec25 詳細課題14 ・未ログイン状態で掲示板一覧画面を閲覧しようとした場合、「ログインしてください」というフラッシュメッセージとともにログインフォームにリダイレクトするよう設定してください。トップページ、ユーザー新規登録画面、ログイン画面に関しては、未ログイン状態でも使用できるようにしてください。 [一次情報] 現場Rails 167ページ Chapter4-5-10 「ログインしていなければタスク管理を利用できなくする」 詳細課題15 ・アプリケーションのタイムゾーンを日本時刻に設定してください。 課題詳細5を参照 詳細課題16,17 ・掲示板の作成日時に日本時間が登録されるように、アプリケーションの設定を変更してください。 ・掲示板の作成日時は見本と同じ%Y/%m/%d %H:%Mの表示形式にしてください。 詳細課題13を参照 詳細課題18 ・font-awesome-sassを導入しましょう。 課題3を参照 ### 課題9 掲示板作成機能 詳細課題 ・新規作成が完了したら、「掲示板を作成しました」というフラッシュメッセージ付きでリダイレクトするようにしてください。失敗した場合は、「掲示板を作成できませんでした」というエラーメッセージを表示させて、入力したデータを残した状態でフォームへと戻るようにしてください。 [一次情報] 現場Rails 139ページ Chapter4-3-4 「コントローラとビューで検証エラーに対応する」 Railsドキュメント https://railsdoc.com/page/form_with [二次情報] 特に必要なし? ### 課題10 フォーム入力時エラー情報を個別表示 詳細課題 ・エラー情報表示の見た目は、フラッシュメッセージと同じものを使用して下さい。 ・各エラー情報を日本語化した上で、エラーの数だけ上記のエラー情報を表示させてください。 [一次情報] Railsガイド 8 バリデーションエラーをビューで表示する https://railsguides.jp/active_record_validations.html#%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E3%83%93%E3%83%A5%E3%83%BC%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B [二次情報] 2018/10作成 一番わかりやすい記事 https://qiita.com/ryuuuuuuuuuu/items/1a1e53d062bff774d88a ### 課題11 掲示板の画像アップロード機能 詳細課題 ・gem carrier_waveとmini_magickを利用してください。 [一次情報] Carrierwaveについて GitHub https://github.com/carrierwaveuploader/carrierwave Minimagicについて GitHub https://github.com/minimagick/minimagick [二次情報] 2020/5作成 LGTM多数。 https://qiita.com/nekotanku/items/5da43600f35eada64eac ### 課題12 掲示板詳細画面の追加/コメント機能の実装 詳細課題 ・ルーティングのネストをしてください。commentリソースはboardリソースにネストする形でルーティングを設定してください。コメント投稿時のURLは/boards/:id/commentsのようになる想定です。 [一次情報] Railsガイド 7 ネストしたリソース https://railsguides.jp/routing.html#%E3%83%8D%E3%82%B9%E3%83%88%E3%81%97%E3%81%9F%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9 [二次情報] 2018/9作成 rails routesの画面も添付し、説明しているのでわかりやすいと思います。 https://qiita.com/keisukegdk/items/beb5a62c17278c25c00d 詳細課題 ・ネストしたルーティングを作成する場合は shallowsオプションを使用してください。 [一次情報] https://railsguides.jp/routing.html#%E3%80%8C%E6%B5%85%E3%81%84%E3%80%8D%E3%83%8D%E3%82%B9%E3%83%88 上記以外の課題詳細は今までの参考資料でまかなえると思います。 [コメント作成の全体的な二次情報] シンプルな記載ですが、一通りの実装方法は記載されているので良いと思います。 https://qiita.com/__kotaro_/items/8a6bda99dab61d2a72a5 ### 課題13 タイトルを動的に出力する 詳細課題 ・content_forを使ってタイトルを動的に出力しましょう [一次情報] Railsチュートリアル 3章 3.4.2 タイトルを追加する(Green) https://railstutorial.jp/chapters/static_pages?version=6.0#sec-adding_page_titles Railsガイド 「content_for」 https://railsguides.jp/action_view_overview.html#content-for [二次情報] 特に必要なし? ### 課題14 掲示板の編集、削除機能の実装 詳細課題 ・掲示板の編集と削除の機能を実装してください。 編集機能 [一次情報] 現場Rails 114ページ Chapter3-3-4 「編集機能を実装する」 削除機能 [一次情報] 現場Rails 120ページ Chapter3-3-5 「削除機能を実装する」 [二次情報] 2020/8作成 初学者の記事っぽいが丁寧に書かれている記事。 https://study-diary.hatenadiary.jp/entry/2020/08/13/165913 ### 課題15 ブックマーク機能の追加 詳細課題 ・掲示板の☆ボタンを押すと、その掲示板をブックマーク/解除出来る機能を作成してください。 associationについて [一次情報] Railsガイド Active Record の関連付け https://railsguides.jp/association_basics.html ブックマーク機能の全体的な実装 [二次情報] 2020/11作成 https://boku-boc.hatenablog.com/entry/2020/11/18/224554 2020/5作成 https://qiita.com/j-sunaga/items/d7f0e944baad6e56206c ### 課題16 ブックマークボタンのajax化 詳細課題 ・form_withのremote: trueの機能を利用し、bookmarks#create、bookmarks#destroyの処理後、create.js.erb、destroy.js.erbにてブックマークボタンの部分テンプレートを再描画を行うようにしてください。 ・ブックマークボタンを押した際のフラッシュメッセージの表示は不要です。 [一次情報] 実装自体ではなくAjaxの概念的な部分 現場Rails 332ページ Chapter8-2 「Ajax で Rails サーバと通信する」 form部分(remote: true) Railsガイド 3-1 「form_with」 https://railsguides.jp/working_with_javascript_in_rails.html#form-with [二次情報] 2020/5作成 ER図での説明がわかりやすい。 https://laptrinhx.com/rails-remote-true-xing-shideajax-tong-xinwo-xingu-bukkumaku-ji-nengnoajax-hua-2918710368/ ### 課題17 コメント投稿、削除、編集機能のajax化 詳細課題 ・コメントのCRUD処理をajax化してください。 [一次情報] 課題16と同様 [二次情報] 2020/2作成 一番わかりやすい。 https://qiita.com/yuto_1014/items/c7d6213139a48833e21a ### 課題18 掲示板のページネーション 詳細課題 ・掲示板とブックマーク一覧画面にページネーションを実装してください [一次情報] GitHub https://github.com/kaminari/kaminari 現場Rails 317ページ Chapter7-7 「ページネーション」 [二次情報] 2019/2作成 LGTM多数。 https://qiita.com/residenti/items/1ae1e5ceb59c0729c0b9 ### 課題19 掲示板の検索機能を実装 詳細課題 ・ransackを用いて掲示板の検索機能を実装してください。 [一次情報] GitHub https://github.com/activerecord-hackery/ransack 現場Rails 292ページ Chapter7-2 「一覧画面に検索機能を追加する」 [二次情報] 2019/5作成 LGTM多数。 https://qiita.com/nojinoji/items/e1b174220da8c81a1756 ### 課題20 プロフィール編集機能の実装 詳細課題 ・ユーザーのプロフィール編集機能を実装してください [一次情報] ルーティングについて Railsガイド 2.10.2 コレクションルーティングを追加する https://railsguides.jp/routing.html#%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B Railsガイド 2.5 単数形リソース https://railsguides.jp/routing.html#%E5%8D%98%E6%95%B0%E5%BD%A2%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9 [二次情報] 2019/10作成 LGTM多数。説明がわかりやすい https://qiita.com/Atsushi_/items/bb22ce67d14ba1abafc5 ### 課題21 パスワードリセット機能の実装 詳細課題 ・パスワードリセット機能を実装してください。 [一次情報] sorceryのReset password GitHub https://github.com/Sorcery/sorcery/wiki/Reset-password letter_opener_web https://github.com/fgrehm/letter_opener_web config https://github.com/rubyconfig/config [二次情報] 2020/11作成 sorceryとletter_opener_webを利用した実装の記事。 https://manabu-ito.hatenablog.com/entry/2020/11/12/232236 ### 課題22 [管理画面] 管理画面へのログイン機能、管理画面トップページの作成 詳細課題 ・管理画面へのログイン機能を実装してください。 ・管理画面のトップページを仮で作成してください。 [一次情報] GitHub https://github.com/ColorlibHQ/AdminLTE [二次情報] 2020/9作成 これが一番まとまっていてわかりやすい。 https://miiina01220.hatenablog.com/entry/2020/09/03/135902 ### 課題23 [管理画面]掲示板/ユーザのCRUD機能の作成 詳細課題 ・管理画面に、掲示板のCRUD機能を作成してください。 ・管理画面に、ユーザーのCRUD機能を作成してください。 [一次情報] enum_help GitHub https://github.com/zmbacker/enum_help [二次情報] 2020/4作成 わかりやすい。 https://qiita.com/aiandrox/items/3fedb826dd870929c3f7 enum_help以外は今までで学習した技術なので省略 ## 応用編 ### 課題1 画像挿入時のバグ修正 詳細課題 ・エラーが発生しないようにする エラー修正のため必要なし ### 課題2 パンくずの設定 詳細課題 ・既存のパンくずに合わせた設定を行い、管理画面の「タグ一覧ページ」「タグ編集ページ」にパンくずを表示させる [一次情報] GitHub https://github.com/kzkn/gretel [二次情報] 2021/3作成 説明が丁寧かつ図解もありわかりやすいと思います。 https://pikawaka.com/rails/gretel ### 課題3 テキスト挿入時のバグ修正 詳細課題 ・上記の操作を行ってもエラーが出ないようにする エラー修正のため必要なし ### 課題4 記事ステータスの追加 詳細課題 ・ステータスに「公開待ち(publish_wait)」を追加する ・下記の要件で記事の更新、公開ボタンを押した際の挙動を変更する [一次情報] https://github.com/javan/whenever [二次情報] 2017/9 作成 enumの切替について https://qiita.com/jnchito/items/c7e93c7a1fc7fc34a177 2019/3作成 wheneverを利用した切替(課題内容と酷似。RUNTEQ生?) https://qiita.com/shimadama/items/e281331e34a43c0b05d4 ### 課題5 検索機能の追加 詳細課題 ・著者、タグ、コンテンツ(記事内容)に関しても検索が行えるようにする ・著者、タグはセレクトボックスによる選択、コンテンツ(記事内容)はフリーワード検索が行えるようにする ・追加する各検索機能では、下書き状態の記事も検索できるように実装してください。 [一次情報] 現場Rails 429ページ Chapter10-12-3 「意味のあるパラメータの集合から クラスを生み出す」 [二次情報] 2020/7作成 企業の技術ブログっぽいので、信頼性あり https://tech.mof-mof.co.jp/blog/rails-form-object/ ### 課題6 アクション権限の調整 詳細課題 ・権限設定の記述を見つけ、ライターにタグ・著者・カテゴリーの一覧表示・編集・削除を出来ないようにする。 ・権限エラーが発生した際に、403エラーのページを表示させる(403.htmlは、public配下に新たに作成する) [一次情報] Pundit GitHub https://github.com/varvet/pundit [二次情報] 2017/2作成 関連記事でLGTMが最多 https://qiita.com/zaru/items/8bf7b41b33f3f55bd27d ### 課題7 アイキャッチの表示サイズ / 位置指定 詳細課題 ・記事編集時に、画像の横幅をピクセル単位で指定できるようにする ・表示されるアイキャッチ画像の横幅を、指定した大きさで表示されるようにする。 [一次情報] simple_formについて GitHub https://github.com/heartcombo/simple_form [二次情報] 2018/8作成 この章の参考資料はあまりなさそう... https://remonote.jp/rails-enum-help-i18n ### 課題8 埋め込みメディアタイプにTwitterの追加 詳細課題 ・twitterのツイートを埋め込みコンテンツとして選択できるようにする(タイムラインではない) ・twitterが選択され、適切なURLが入力されたら、ツイートが表示されるようにする [一次情報] enum_help GitHub https://github.com/zmbacker/enum_help [二次情報] それっぽいものはあるもののどちらもまだ学習者の段階っぽく信頼性にかける https://study-diary.hatenadiary.jp/entry/2020/10/17/144150 https://qiita.com/namikawa07/items/35e98f9575a307dd26fa ### 課題9 トップ画像をスライダー形式に変更 詳細課題 ・ブログのトップ画像は複数枚の画像が一定間隔で切り替わるようにする [一次情報] swiper 公式デモサイト https://swiperjs.com/get-started [二次情報] 2020/7作成 一番わかりやすく、2020/7以降のバージョンアップについても記載されているので。 https://qiita.com/miketa_webprgr/items/0a3845aeb5da2ed75f82 ### 課題10 whenever による記事数一覧のメール送信 詳細課題 ・wheneverを導入して毎日am9:00に下記の内容を管理者にメールで送信させる [一次情報] whenever GitHub https://github.com/javan/whenever letter_opener_web GitHub https://github.com/fgrehm/letter_opener_web Railsガイド mailerについて https://railsguides.jp/action_mailer_basics.html [二次情報] 2017/6作成 古いですが、一番わかりやすそう... https://qiita.com/hirotakasasaki/items/3b31966294a809b99c4c