- 1. Rails 主要ライブラリ
- 2. 【Ruby】そのassert_raisesの使い方、本当に合ってる? – assert_raisesでエラーメッセージをテストする方法
- 3. Rails newからデプロイまで
- 4. 【Rails】「アセットパイプライン」とは
- 5. 【個人開発】最寄りの綺麗なトイレを見つけるアプリをリニューアルしました【Next.js×Rails】
- 6. Active Recordってなんだろう?
- 7. 【個人開発】生成AIを使って名言を提供するサービスを開発しました【Rails】
- 8. [Rails] Capistranoが不要なので、削除する
- 9. Railsで検索機能実装に役立つおすすめ記事一覧(Ransack)
- 10. ブラウザタブの左上のアイコンを指定する
- 11. ホーム画面に追加でアイコンを指定する apple-touch-icon
- 12. 未読通知カウント アイコンバッチ
- 13. requireするケース
- 14. RSpecでよく使うメソッド集(備忘録)
- 15. Rubyで英語名称のポケモンの名前を日本語で当てるゲームを作ったよ
- 16. Ruby on Rails ECサイト作成
- 17. assert_raise(ActiveRecord::RecordNotFound)で沼った件
- 18. Hunter×Hunter キャラクターリスト
- 19. data-turbo=”false”とdata: { turbo_method: :post }を同時に使いたい場合
- 20. 「コメントに対するコメント」をモデルで表現してみた!
Rails 主要ライブラリ
・Devise
ログイン認証機能を簡単に実装できるGem。・kaminari
ページネーションの実装ができるGem。
ページネーションとは、ブログなどで画面の下で何ページ目かを示してくれるボタンのこと。・Paperclip
ファイルアップロード機能を実装するGem.・Active Admin
管理画面をかんたんに実装できるGem。・Faker
大量のダミーデータを作成できるGem.
【Ruby】そのassert_raisesの使い方、本当に合ってる? – assert_raisesでエラーメッセージをテストする方法
## はじめに
以下のテストで次の2点をテストしようとしています
– 特定の条件でraiseが発生しているか
– エラーメッセージが正しく出力されているかこのテストの何が悪いか皆さんは分かりますか?
“`sample_code.rb
class SampleCode
def self.animal_check(animal)
raise ‘猫はアレルギーだからダメ’ if animal == ‘cat’raise ‘犬は可愛すぎるからダメ’ if animal == ‘dog’
pp ‘他の動物は許す’
end
end
“`“`test.rb
test ‘猫はアレルギーだからraise’ do
assert_raises(RuntimeError, ‘猫はアレルギーだからダメ’) do
SampleCode.animal_check(‘cat’)
end
end
“`
とあるプロジェクトのテストコードを眺めていたところ、陥りがちなあるミスを発見したので戒めとして記事にしようと思います。
では、なぜ
Rails newからデプロイまで
## はじめに
はじめまして!2024/04/11よりRUNTEQというプログラミングスクールに在学中のみうらと申します。
`Ruby on Rails` を学習中です。
今回は`Docker` を使った`Rails`の環境構築からデプロイまでの一連の流れについて記していきたいと思います。(2024/06/30時点)
## 今回の流れ
– Rails new
– Git hubのリポジトリ作成
– デプロイ上記の3点についてまとめていきたいと思います。
## 今回使用技術
– ruby:3.2.3
– Rails: 7系統 (7.1.3.4)
– Docker
– Git Hub
– Render## Rails環境構築
[こちら](https://hackmd.io/@SKjw2RY-RNCUNSdJfEWPig/HJE0GUClC)を参考に環境構築。
その際、`PostgreSQL`と`MySQL`、`Bootstrap`と`Tailwind`お好きな方を使ってください。
また`docker compose up`の際にエラーが起きた場合[こちら](https://q
【Rails】「アセットパイプライン」とは
# はじめに
改めてアセットパイプラインについてまとめてみました
# 目次
[1.アセットパイプラインについて](#1-アセットパイプラインについて)
[2.主な機能](#2-主な機能)# 1. アセットパイプラインについて
アセットパイプラインは、Ruby on Railsアプリケーションで使われる便利な仕組みです。これは、ウェブサイトやウェブアプリで使うJavaScriptやCSSなどのファイルを、効率よく扱えるようにしてれくます。
例えば、アセットパイプラインを使うと、複数のJavaScriptやCSSファイルを1つにまとめて、ブラウザが1回のリクエストで取得できるようにできます。それに加えて、ファイルのサイズを小さくするための工夫もしてくれます。つまり、使っているJavaScriptやCSSが少ないリクエストで、早くページが表示されるようになるんです。
# 2. 主な機能
具体例を交えて4つ紹介します。## SHA256フィンガープリントを挿入する機能:
この機能は、ファイル名にSHA256フィンガープリントを含めることで、ブラウザとCDNによってファイル
【個人開発】最寄りの綺麗なトイレを見つけるアプリをリニューアルしました【Next.js×Rails】
# 名称
Quick Clean Restroom Map# 概要
最寄りの綺麗なトイレの位置をリアルタイムで案内し、トイレの情報を提供します。# URL
https://quickcleanrestrooms.com/# 備考
通常時は停止です。# アプリを開発した背景
ある日、小さな子供(長男・次男)を連れてトイレを探していたとき、なかなか清潔なトイレが見つからず、非常に困った経験がありました。Google Mapsで検索しても、見つかるのは公共のトイレばかり。清潔で快適な「綺麗なトイレ」をすぐに見つけることが難しいと感じたことはありませんか?そんな経験をしたことがある方は少なくないでしょう。実際、私自身も同じ問題に悩まされていました。特に、小さな子供を連れている時や、おしゃれな服を着ている時など、清潔なトイレを使いたい場面で、何度も歩き回ったり、不便な場所で我慢しなければならなかったことが何度もありました。
この問題を解決し、同じ悩みを抱える人たちの助けになりたいと思い、「Quick Clean Restroom Map」を開発しました。このアプリは、ユーザ
Active Recordってなんだろう?
Rails学習中に出てくるActive Recordについて、自分なりに調べたことを簡単にまとめます。
# Active Recordとは何か?
MVCのM、つまりモデルに関わる仕組み。ORMフレームワークとしてさまざまな機能を備えています。## ORM(オブジェクト/リレーショナルマッピング)
アプリケーションが持つオブジェクトを、リレーショナルデータベースのテーブルに接続すること。
Railsでは、これを取り入れることで、SQL文を直接書く代わりにアプリケーションにおけるオブジェクトの属性やリレーションシップをデータベースに保存することも、データベースから読み出すこともできるようになります。# 主な機能
## CRUD(データの読み書き)
controllerのアクションでよく見るコード、これにもActive recordが活用されています。
Create(データの作成)
“`
user = User.new(name: “Michael Hartl”, email: “mhartl@example.com”)
user.save
/*Userテーブ
【個人開発】生成AIを使って名言を提供するサービスを開発しました【Rails】
## はじめに
こんにちは![ずっと大地🦦](https://x.com/zuttodaichi)と申します!!
2023年11月より、オンラインスクールのRUNTEQにて、未経験からのWebエンジニア転職を目指して学習をしています。
前職はスポーツ選手として活動しておりました。今回、生成AIを使った名言提供サービス『MeigenOtter(名言おったー)』を開発したので、記事にしたいと思います。
間違いや不備などありましたら、教えて頂けると幸いです。## サービス名
[MeigenOtter](https://meigenotter.com/)
ユーザー登録をしなくても、ランダムでの名言取得は可能です。気軽に覗いて頂けると幸いです。**▼サービスURL**
https://meigenotter.com/**▼GitHub URL**
https://github.com/daichi3102/wordpass![MOtop.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37737
[Rails] Capistranoが不要なので、削除する
# はじめに
元々、`Capistrano`を使用してデプロイをしていたみたいですが、デプロイ方法が変わって、使用されなくなっていました。なので、調査をした上で、削除する方針に決まりました。
その内容をアウトプットいたします。:::note warn
本記事では、削除をメインに記載いたします。
Capistranoについて詳しく知りたい方や実装方法は、別記事を参照していただくようお願いいたします。
:::# Capistrano とは
https://github.com/capistrano/capistrano簡単にいうと、デプロイを自動化してくれるGemになります。
詳しくは、以下の記事がわかりやすかったです。https://pikawaka.com/rails/capistrano
# 確認方法
まず、本当に`Capistrano`を使用していないか、確認します。
デプロイに使用する実行コマンドは、以下のようになると思うので、リポジトリ内・外を調査します。“`sh
bundle exec cap production deploy
“`使われ
Railsで検索機能実装に役立つおすすめ記事一覧(Ransack)
# RailsアプリケーションでRansackを使用して検索機能を実装する際に参考にした記事をまとめました。
## 1. [activerecord-hackery/ransack (GitHub)](https://github.com/activerecord-hackery/ransack)
Ransackの公式リポジトリです。まずはこれを見てみるといいと思います。## 2. [Ransackを使った検索機能の実装(Qiita)](https://qiita.com/nojinoji/items/e1b174220da8c81a1756)
Qiitaユーザーによる実際の使用例が紹介されています。具体的なコード例が豊富です。## 3. [Ransackの基本的な使い方(Pikawaka)](https://pikawaka.com/rails/ransack)
基本的な使い方や設定方法が分かりやすくまとめられており、読みやすい。## 4. [Rails7とRansackでのインスタント検索機能(プログ)](https://plog.kobacchi.com/rails
ブラウザタブの左上のアイコンを指定する
# はじめに
ポートフォリオ作成一旦終わりました!
ブラウザタブの左上のアイコンってどうやって指定するんだ?
となり実装まで漕ぎ着けたのでアウトプットしておきます✍️# 完成図
![スクリーンショット 2024-06-27 23.52.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/2699962e-16fb-9407-d2e4-40665297cb2d.png)
# 簡単!
指定したい画像を用意し、拡張子.icoになるよう変換します(ico変換など検索すると変換サイトが出てきます)
適当な変換サイトでOK!application.html.erbのhead内に以下を記述します
“`application.html.erb
<%= favicon_link_tag('GoOutPlanning.ico') %>
“`あとは該当の画像をapp/assets/imageに格納するだけ!
# さいごに
ぜひやってみてください!
ホーム画面に追加でアイコンを指定する apple-touch-icon
# はじめに
ポートフォリオ作成一旦終わりました!
iphoneでホーム画面追加するときのアイコンってどうやって指定するんだ?
となり実装まで漕ぎ着けたのでアウトプットしておきます✍️# 完成図
![IMG_6629.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/4586b9b3-5d0e-56a8-58b1-41cf71dff402.jpeg)
# 簡単!
指定したい画像を用意し、サイズを180×180にリサイズしておきます
適当な変換サイトでOK!application.html.erbのhead内に以下を記述します
“`application.html.erb
<%= favicon_link_tag 'apple-touch-icon.png', rel: 'apple-touch-icon', type: 'image/png' %>
“`あとは該当の画像をapp/assets/imageに格納するだけ!
# さいごに
未読通知カウント アイコンバッチ
# はじめに
ポートフォリオ制作やっと一旦製作終えました!
今回は通知の未読カウントとDMの未読カウントを実装しました!
未読がある場合はアイコンバッチがつくようにしています
アウトプットとしてまとめます※旅行やデートのプランを共有するアプリなので、
投稿機能はPostではなくPlanを使用しています!通知機能の実装方法については、下記に記載しています
https://qiita.com/3rarara/items/1e18838a9fdb22dd535a
# 完成物
![スクリーンショット 2024-06-27 22.20.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/1580f956-5cae-42f6-eb72-8bf79ad90d2b.png)
# コントローラー
どの画面でもバッチをつけるために、application_controller.rbに記述します“`application_controller.rb
class ApplicationCo
requireするケース
“`
# frozen_string_literal: true+require ‘net/http’
+require ‘uri’
+require ‘mini_magick’
+require ‘fileutils’
“`上記のようにrequireするケースは、Rubyに標準で存在しない場合など、あえて書かなければいけない場合のみ記載する。
Gemfileに記載されたGemは、Bundlerによって自動的にロードされるため、手動でrequireする必要はない。既に入っている場合は不要。
それ以外は基本的にはRubyの標準機能であるため記載不要。
RSpecでよく使うメソッド集(備忘録)
RSpecの検証に使うメソッドを忘れがちなので、アウトプットしてみるようにしました。
他にもよく使うけど、忘れるようなメソッドがあれば、どんどん残していきます!## pageの中に、文字列があるかどうかを判断するマッチャ
“`ruby
expect(page).to have_content(‘テキスト’)
“`## 現在のページが指定したページかどうかを判断するマッチャ
“`ruby
expect(page).to have_current_path(path)
“`## 指定した範囲の中で検証を行う
“`ruby
within(‘.class’) do
# expect(page).to have_content(‘テキスト’)
end
“`
Rubyで英語名称のポケモンの名前を日本語で当てるゲームを作ったよ
### 読んで欲しい人
– rubyでプログラムを作ってみたい人
– 過去の自分### 動作環境
– ruby 3.3.3
### アプリについて
#### ファイル構造
“`ファイル構成
.
├── pokemon.rb
├── pokemon.csv
“`#### ソースコード
“`ruby:pokemon.rb
# ファイル内でcsvライブラリ(モジュール)を使用するための記述
require ‘csv’# CSVファイルを読み込む
def load_pokemon_from_csv(file_path)
pokemon_data = []
# foreachにheaders: trueをすると、keyとvalueをいい感じに扱ってくれる
CSV.foreach(file_path, headers: true).each_with_index do |row, _i|
pokemon_data << row.to_hash break if _i == 150 end pokemon_data end def ma
Ruby on Rails ECサイト作成
## はじめに
Zennの記事を元にECサイトを作成してみました。
今回はオリジナルではありませんが今後ECサイトを作りたいので練習で制作しました。とても勉強になったのでECサイトを作ってみたい方はぜひチャックしてみてください。https://zenn.dev/farstep/books/7f169cdc597ada
## 機能紹介
大きく2つに分けることができます。
・ECサイトの管理者側の機能
・ECサイトを利用する顧客側の機能どちらもログインすることで閲覧できます。
Githubリポジトリ
https://github.com/Killua0615/ecommerce_practice
### 管理者側以下の内容が確認できます
#### 注文履歴
status は「Normal」「Withdrawn」「Banned」のどれかに変更することができる
![スクリーンショット 2024-06-27 10.28.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3733846/7fe7
assert_raise(ActiveRecord::RecordNotFound)で沼った件
# きっかけ
`ActiveRecord::RecordNotFound`を発生させるテストケースがなぜか失敗し、沼ってしまいました。
原因がわからなくて気持ち悪かったので色々と調査してみました。# やりたいテスト
以下のように、staffsテーブルから対象の`staff_id`を持つレコードを取得するアクションを考えます。
`find`メソッドを使用しているため、テーブルにレコードが存在しない場合は`ActiveRecord::RecordNotFound`が発生します。“`ruby
class ProfilesController# get profiles_show_path(:person_id)で実行されるアクション
def show
@staff = Staff.find(params[:person_id])
endend
“`この時、例外が発生していることをテストするケースを考えます。
`assert_raise`を使用して以下のように書いてみました。“`ruby
test ‘対象のstaf
Hunter×Hunter キャラクターリスト
## はじめまして
オランダでコンピューターサイエンスのブートキャンプに参加したのをきっかけにエンジニアに興味を持ち、現在は独学でRuby on Railsの学習しています。
パーフェクトRuby on Railsという参考書を一通り学習したので、大好きなHunter×Hunterのキャラクターリストを作りました。## キャラクターリストの紹介
### トップページ
今まで登場したキャラクターの一覧が表示される![スクリーンショット 2024-06-26 20.46.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3733846/3aa66941-8fea-a4df-5256-89cb2fd35dfa.png)
画像をクリックすると各キャラクターの詳細が表示される
![スクリーンショット 2024-06-26 21.04.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3733846/0d4b8759-
data-turbo=”false”とdata: { turbo_method: :post }を同時に使いたい場合
## はじめに
data-turbo=”false”とdata: { turbo_method: :post }をどうしても一緒に使う必要があった時の話です。※後述しますが、ajax化した場合ですと今回の書き方ではうまくいきません。予めご了承ください。
## 環境
ruby 3.2.2rails 7.1.3.2
hotwire
Bootstrap5系
Google Map API
## 今回例示するアプリ画面についての説明
現在、「自分の好きな本屋を紹介し、また好きな本屋が増える事を支えるサービス」がテーマのポートフォリオを作成中です。
今回は開発途中で壁に当たった時の対処法としてここに記していきたいと思います。
## 今回のシチュエーション
ブックマークボタン(画像にある栞のマーク)を押すたびに、javascriptが読み込めなくなりGoogleMapが表示されなくなりました。
![turboメソッドの記事写真1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/372657
「コメントに対するコメント」をモデルで表現してみた!
## 動作環境
vscode、ruby3.3.0、rails7.1.3.4## 実装したかったこと
x(旧twitter)のようなクローンアプリを作っていたのですが、投稿文に対するコメントに対して更にコメントする機能を実装してみました。
探せば山ほど参考になる記事は出てくると思ったのですが、今回は自分のテーブルや関係性の理解度を確認するために、敢えて自分で試行錯誤しながら一から作ってみました!💪## 実装のゴール
コメントの子要素を取得できる。
コメントの3階層まで。4階層目のコメントは作成できない。(コメントのコメントのコメントまでは作成できる)## 実装前のモデルの状態
user→post→comment
(既にpostへのコメント機能は作成済みです)
“`app/models/user.rb
has_many :posts, dependent: :destroy
has_many :comments, dependent: :destroy
“`
“`app/models/post.rb
belongs_to :user
has_many :comments,