- 1. find_each と find_in_batches と in_batches の違い
- 2. 【Factory bot】Rspecでのテストコード作成をもっと楽に!
- 3. オリジナルアプリ(ウォンツ)の制作過程
- 4. 初学者のためのRailsの豆知識
- 5. RSpecで日付の値が有効ではないとHTMLから警告されて詰まる(一応は解決)
- 6. 【個人開発】筋トレサポートアプリを開発しました。【Next.js + Rails API】
- 7. 最速でRailsアプリケーションをDockerコンテナ上で動かす
- 8. 【Rails】resourcesによるルーティング
- 9. railsでテーブルを関連付けした際のwhereでのカラムの指定の仕方について
- 10. 【Rails】each, find_each, find_in_batches の違い
- 11. [Rails] マークダウン形式でtext_areaに入力できるようにする
- 12. VSCodeでrails開発する時のコーディング効率を上げたい
- 13. 個人開発を始めてみた #1
- 14. 翻訳ファイルの反映を確認するときはサーバーを再起動するのが基本だろ?
- 15. Rakeタスクの使い方
- 16. Railsにおけるエラーメッセージの日本語化
- 17. Railsのデータベースマイグレーションファイルで適切にロールバックするためのupとdownの設定方法
- 18. tagメソッドを使ってビューのコードを簡潔にする方法
- 19. as_jsonとto_jsonの違いをまとめてみる
- 20. 【学習記録】
find_each と find_in_batches と in_batches の違い
## find_each
[Railsドキュメント](https://railsdoc.com/page/find_each)
[github](https://github.com/rails/rails/blob/984c3ef2775781d47efa9f541ce570daa2434a80/activerecord/lib/active_record/relation/batches.rb#L68)### 説明
分割してレコードを取得して1件ずつ処理
デフォルトでは1000件ずつ処理 大きなデータをもつモデルなどを処理する時に使う
内部的には、find_in_batchesを使っており、戻り値の配列に対してeachを実行することで1レコードずつ返している
そのため、使い方はeachと全く同じ### ソースコード
“`rb
def find_each(start: nil, finish: nil, batch_size: 1000, error_on_ignore: nil, order: :asc, &block)
if block_give
【Factory bot】Rspecでのテストコード作成をもっと楽に!
# はじめに
こんにちは、エンジニア3年目の嶋田です。
この記事を開いていただきありがとうございます!私がエンジニアとして働き始めてから、テストの重要性を痛感しています。
特にRspecを使用したテストは、コードの品質を保つために欠かせません。
そして、テストデータの生成にはFactory Botが非常に役立ちます。今回は、Rspecで使用するFactory Botの基本的な使い方や便利な機能についてまとめてみました。
この記事が皆さんのテストコードの質を向上させる一助となれば幸いです。より詳しく知りたい方は、以下のページを参照して下さい。
(※この記事の内容の大半は、以下のページに書かれている内容です)
[Factory Bot Getting Started](https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md)# 目次
– [Factory Botとは](#Factory-Botとは)
– [Factoryの定義](#Factoryの定義)
–
オリジナルアプリ(ウォンツ)の制作過程
こんにちは!この記事では、未経験からエンジニアを目指す初学者の私が、オリジナルアプリの制作過程を記録していきます。使用する言語はRubyとRailsです。これから(ほぼ)毎日の進捗や学びを投稿していきますので、アドバイスや指摘があればぜひ教えてください。
## 企画の練り方
まずは、アプリの企画を練ることから始めます。どんなアプリを作りたいのか、誰のためのアプリなのかを明確にすることが重要です。今日は具体的なユーザーペルソナを作成しました。
## 今日の進捗:ペルソナの作成
### ペルソナ: 田中 和也 (Kazuyuki Tanaka)
| 項目 | 詳細 |
|———————-|———————————————————————-|
| **一般情報** |
初学者のためのRailsの豆知識
# Railsのあまり知られていない豆知識
Railsは初心者にも使いやすいフレームワークですが、少し掘り下げると便利な機能がたくさんあります。今回は、Railsのあまり知られていない豆知識をいくつか紹介します。これらの機能を使うことで、より効率的に開発が進むでしょう。
## 1. `find_by`メソッド
`find_by`メソッドを使うと、特定の条件に一致する最初のレコードを簡単に取得できます。
“`ruby
# IDが1のユーザーを取得
user = User.find_by(id: 1)# emailが特定の値のユーザーを取得
user = User.find_by(email: “example@example.com”)
“``find_by`メソッドは見つからない場合に`nil`を返すので、例外が発生することなく安全に使えます。
## 2. `update`メソッド
`update`メソッドを使うと、一度に複数の属性を更新できます。
“`ruby
user = User.find_by(id: 1)
if user.update(name:
RSpecで日付の値が有効ではないとHTMLから警告されて詰まる(一応は解決)
# 結論
https://aaronsaray.com/2015/error-validating-seconds-in-html5-time-input/
– HTML5では`input`要素の入力値に対してのバリデーションが働くため
– ‘email’など高頻度で使われるであろう形式にも機能## 【編集時】
– Railsのフォームヘルパー `form.datetime_field` で生成されるのは ``
– `YYYY-MM-DDThh:mm` という書式で値を扱っている
– この書式に注意する必要がある“`ruby:”編集”の場合
# OKパターン
fill_in ‘Deadline’, with: ‘2001-02-03T04:50’
fill_in ‘Deadline’, with: Time.new(2001, 2, 3, 4, 50).strftime(“%m%d%Y\t%I%M%P”)# ERRORパターン
fill_in ‘Deadline’, with: Time.ne
【個人開発】筋トレサポートアプリを開発しました。【Next.js + Rails API】
# はじめに
初めまして!ニノ(@Ninomin)と申します。
大学では心理学を学び、新卒で独立系Slerに入社し、現在3年目です。未経験からのWebエンジニア転職を目指して、日々プログラミング学習を行っています。
今回、筋トレサポートサービス **「Be Fit」** を開発しました。# 目次
| 章 | タイトル | 備考 |
| — | — | — |
| 1 | [サービスについて](#1サービスについて) | サービスURL, GitHub |
| 2 | [サービス概要](#2サービス概要)|概要について |
| 3 | [サービスを作成した背景](#3サービスを作成した背景)| 開発に至った理由について |
| 4| [機能一覧](#4機能一覧)| 主要機能について|
| 5| [使用技術](#5使用技術)| 主要技術について |
| 6| [インフラ構成](#6インフラ構成)| インフラ構成図 |
| 7| [技術選定理由](#7技術選定理由)| |
| 8 | [ER図](#8er図) | |
| 9| [工夫したポイント](#9工
最速でRailsアプリケーションをDockerコンテナ上で動かす
## 経緯
– [仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん | 小笠原種高 |本 | 通販 | Amazon](https://www.amazon.co.jp/%E4%BB%95%E7%B5%84%E3%81%BF%E3%81%A8%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B-Docker-Kubernetes%E3%81%AE%E3%81%8D%E3%81%BB%E3%82%93%E3%81%AE%E3%81%8D%E3%81%BB%E3%82%93-%E5%B0%8F%E7%AC%A0%E5%8E%9F%E7%A8%AE%E9%AB%98/dp/4839972745)を読んだのでアウトプットとして勉強中のRailsアプリの環境をDockerコンテナ上で作ってみようと思いました。
– 今から書く内容は、Dockerコンテナ上で動くRailsアプリケーションを配布(Github)できるようになるまでの流れを最速でやってみようと言うものです。(最速というか、最短の方が近い
【Rails】resourcesによるルーティング
# はじめに
Rails初学者の学習内容の備忘録です。
間違いや補足等あればご指摘いただけると幸いです。今回はresourcesについて学習したのでまとめます。
# resourcesとは?
Railsのルーティングでよく使われるメソッドで、一般的なCRUD(Create,Read,Update,Delete)操作に対応するルートを自動生成します。**resourcesを使わない場合**
“`routes.rb
get “posts”, to: “posts#index”
get “posts/new”, to: “posts#new”
get “posts/:id”, to: “posts#show”
post “posts”, to: “posts#create”
get “posts/:id/edit”, to: “posts#edit”
patch “posts/:id”, to: “posts#update”
delete “posts/:id”, to: “posts#destroy”
“`
resourcesを使わない場合は
railsでテーブルを関連付けした際のwhereでのカラムの指定の仕方について
– includes
– preload
– eager_loadなどで関連テーブルを読み込んだ際に、whereメソッドから関連テーブルのカラムを参照したい場合はreferencesキーワードを使って関連テーブル名を宣言する必要がある
“`rb
User.includes(:posts).where(“posts.name = ‘foo'”)
# Doesn’t JOIN the posts table, resulting in an error.
User.includes(:posts).where(“posts.name = ‘foo'”).references(:posts)
# Query now knows the string references posts, so adds a JOIN
“``joins`メソッドを使う際は不要だと思うが、`incluedes`などの関連付けをeager loadingするメソッドを採用した際にはreferencesメソッドの出番になる感じだと思う
https://api.rubyonrails.org
【Rails】each, find_each, find_in_batches の違い
# 前提
– 環境
– Ruby:`2.5`
– Rails:`4.2`
– 少々古めのバージョンになります
– ただ、次世代のバージョンにおいても本記事が参考になれば幸いです
– 今回扱うデータ
– ***company.rb***
– `has_many :shops`
– ***shop.rb***
– `belongs_to :company`
– データ数
– 事前に取得する ***company*** の件数を`50`件としますつまり、下記コードで取得される***company***の件数が`50件`という前提で進めます。
“`rb
Company.joins(:shops).where(shops: { prefecture: ‘東京都’ }).distinct
“`# each
“`rb:メインの確認コード
companies.each.with_index(1) do |company, i|
puts “loop_count: #{i}, company_id: #{company.id}”
[Rails] マークダウン形式でtext_areaに入力できるようにする
# commonmarker
– `gem commonmaker`をインストール
“`
gem ‘commonmarker’
“`
– helperに下記を記述
“`module ApplicationHelper
def markdown_to_html(text)
html = Commonmarker.to_html(text)
raw(html)
end
end
“`
– 例)show.html.haml
“`
= markdown_to_html(“# CommonMarker”)
“`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842957/fd44edd2-6589-33c2-5658-d29cded00577.png)### 参考URL
https://github.com/gjtorikian/commonmarker思いのほかサクッと実装できました。
何かご指摘あればお願いします!
VSCodeでrails開発する時のコーディング効率を上げたい
Railsの初学者です。
VSCodeでコーディングするときにスペルミスやタイピングに時間がかかることを課題に感じたため
Railsに関するエディターの設定や拡張機能を色々と試しています!
現状設定や導入を行ったものをまとめつつ、記事もアップデートしていきたいと思います。# Emmetの設定
Emmet とは、htmlで補完してくれたり、省略記法で入力できる機能。
htmlはデフォルトで適用されていますが、html.erbでEmmetを使用するためには
setting.jsonで設定する必要があります。“`json
{
“emmet.includeLanguages”: {
“erb”: “html”,
“html.erb”: “html”
}
}
“`# 導入した拡張機能
VSCodeで以下の拡張機能を導入してみました。
知識が浅く、まだどんな機能が提供されているのか理解し切れていない拡張機能もあるので
これから使いながら理解していきます…!## endwise
`def`や`if`の後の`end`を自動入力してくれる。https
個人開発を始めてみた #1
## 個人開発を始めた背景
初めまして。都内で新米エンジニアとして働いている者です。新卒として働き始めて、3ヶ月が経ちました。その中で、技術を高めるためには業務以外での膨大なアウトプットが必要だと考えるようになりました。とりあえず、100個ほど制作して、少しはまともになりたいと思っています。そこで、1〜2年ほどかけて個人開発物を100個作っていこうと決心しました。たくさんの制作物を開発し、自分のナレッジを蓄積すると同時に、自分の開発スキルをブラッシュアップしていこうと考えています。
## Webサイト [試作品1号]
まず、Webサイトの制作を始めようと思い、ReactとTailwindCSSを使ってWebサイトを制作しました。しかし、UIがかなり微妙な仕上がりになってしまいました。![スクリーンショット 2024-07-21 22.10.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1788291/2e22e5ee-4ab7-b53c-11f8-5748ede0fdf4.png)
な
翻訳ファイルの反映を確認するときはサーバーを再起動するのが基本だろ?
新しく翻訳ファイルを追加したbranchを開いた際、viewに翻訳が反映されなかったので原因を4時間ほど探っていました。
– ファイルの場所
– ファイルの命名
– 設定の書き方
– ymlの書き方多くの可能性を探りました。
しかし、ある記事を見た際に
‘gemをインストールしたらサーバーを再起動するのは基本中の基本です。’
という文言を見かけました。今回の場合はgemをインストールしていたわけではないですが、以前取り組んだ教材に’翻訳ファイルに文言を追加した際はサーバーを再起動しよう!’みたいな文言があったことを思い出しました。
4時間という貴重な時間を割いた代償としてこの結論を得たのは不服ですが、解決したので今回は良しとしましょう。
Rakeタスクの使い方
## 経緯
本番環境へあげる際に、rails db:migrateの順番が複雑化したことがありました。その結果、本番環境へデプロイする担当者が手間取ってしまうことが多々ありました。そこで、Rakeタスクを利用してマイグレーション順を自動化し、誰でも簡単にデプロイできるようにする方法を紹介します。## Rakeタスクの基本
まず、Rakeタスクの基本的な作成方法を説明します。Rakeタスクは、Railsのプロジェクト内のlib/tasksディレクトリに配置します。Rakeタスクのファイル作成
以下のようなファイルをlib/tasksディレクトリに作成します。
“`
touch lib/tasks/db_migrate.rake
“`
Rakeタスクのファイル作成
以下のようなファイルをlib/tasksディレクトリに作成します。“`
# lib/tasks/db_migrate.rakenamespace :task do
desc “Custom DB Migrate”
task migrate_custom: :environment do
p
Railsにおけるエラーメッセージの日本語化
# 【課題】
### エラーメッセージをわかりやすい日本語に設定したい
#### 英語表記ではユーザーが視覚的に判断しにくい
#### エラーメッセージが出現した際に、パッと見で何でエラーが起きで弾かれてるのかを判断しやすくしたい# 【実装】
①Gemファイルへの記述
“`ruby:Gemfile
gem ‘rails-i18n’
“`②gemを設定したのでここでbundle instalを行う
“`ruby:ターミナル
$ bundle install
“`
③config/application.rbのファイルを編集
“`ruby:config/application.rb
module BoardApp
class Application < Rails::Application config.time_zone = 'Tokyo' config.active_record.default_timezone = :local # デフォルトのlocaleを日本語(:ja)にする設定 config.i18n.default_
Railsのデータベースマイグレーションファイルで適切にロールバックするためのupとdownの設定方法
## 経緯
業務の中で、rails db:rollbackを実行した際に適切にロールバックができないというエラーが発生しました。この問題を解決するために、マイグレーションファイルのupメソッドとdownメソッドを調べて適切に設定する方法を見つけ、実装することで問題を解決しました。本記事では、その実装方法を紹介します。
## データベースマイグレーションとは
データベースマイグレーションとは、データベースのスキーマ(構造)をバージョン管理し、変更を適用したり取り消したりする仕組みのことです。これにより、データベースの変更履歴を管理し、開発と運用を円滑に行うことができます。## upメソッドとdownメソッドの重要性
upメソッドはデータベースに変更を加える処理を記述します。対して、downメソッドはその変更を取り消す処理を記述します。これにより、変更の適用とロールバックが容易になり、バグや問題が発生した場合に迅速に対応できます。## 実装方法
#### upメソッドの実装方法
upメソッドには、テーブルの作成やカラムの追加、インデックスの作成などの処理を記述します。
“`
tagメソッドを使ってビューのコードを簡潔にする方法
Railsのviewテンプレートで条件分岐が多くなると、コードが複雑になりがちです。ここでは、ユーザーのステータスごとに「テキストと色」を変更するコードを例に、tagメソッドを使用してシンプルにする方法を紹介します。
## 従来のコード
以下は、ユーザーのステータスに応じて異なるスタイルのバッジを表示する従来のコードです。“`
– case user.status
– when “approved”
span.badge.badge-outline-success.badge-lg = “Approved”
– when “denied”
span.badge.badge-outline-danger.badge-lg = “Denied”
– when “pending”
span.badge.badge-outline-info.badge-lg = “Pending”
– when “partial_denial”
span.badge.badge-outline-warning.badge-lg = “Partial Denial”
– when “u
as_jsonとto_jsonの違いをまとめてみる
## はじめに
ActiveRecordのオブジェクトをJSON形式に直すときはto_jsonを使ってJSON形式に直していると思います。
それとは別に、as_jsonといったものもあります。
初めて見たときは、似てるけど何が違うんだろうと思っていました。
今回は、頭の中を整理しながら、違いをまとめてみようと思います。## as_jsonとは
オブジェクトをハッシュや配列など、JSONエンコードが可能なオブジェクトに変換してくれます。特定の属性を含めたり除外したりできます。
とりあえず、どのような出力となるか試してみます。### 1レコードをas_jsonした場合
1レコードの場合はハッシュ形式で表示されます。
“`rb
@users = User.find(1)## puts @users.as_json
{“id”=>1, “name”=>”山田 太郎”, “email”=>”sample1@sample.com”, “created_at”=>”2024-07-20T13:46:10.150Z”, “updated_at”=>”2024-07-20T13:46:10
【学習記録】
# 記憶トークン
* ブラウザがパスワードを持っていて(cookiesに保存している)、それをハッシュ化させてデータベースのハッシュ化パスワードと照らし合わせる。IDを暗号化したものをユーザーのブラウザに持っておいて、sample_appを経由して復号する。復号済みIDとハッシュ化パスワードを使って、認証を行い、trueならばセッション情報を再構築(復元)する。ユーザーIDは復号させるためハッシュ化しない。
ブラウザが持っているパスワードはランダムで良い。なぜなら、ブラウザとアプリが使用するだけで、人間は間に入らないから。(これを一般的にトークンという。パスワードは人間が作る情報であるのに対し、トークンはコンピュータが作成・管理する情報。)* attr_accessorはメタプログラミング。データベースには保存しない仮想的なもの。
※メタプログラミング:プログラムを記述するプログラムを書くこと。*raiseメソッドを入れるとエラーを網羅的に探索できる。