- 1. 【テストで使用するGem(RSpecとrails-controller-testing)をインストール】
- 2. Stringに使用するメソッド一覧
- 2.0.1. Vimerの開発スピードに勝つ為のVSCode拡張機能開発
- 2.0.2. セッションハイジャックとは
- 2.0.3. Rails – rails console ( pry )で配列テキストが省略表示されてしまいコピー&ペーストしづらいので、ページングを無効にする
- 2.0.4. 【Rails】エラーを自動でSlackに通知する方法
- 2.0.5. アセットパイプラインについて(※超初心者の記事です)
- 2.0.6. 2つのモデルを使ってユーザーフォロー機能の実装
- 2.0.7. RailsのEnum型を使う
- 2.0.8. 【Ruby】URI.escapeが使えない
- 2.0.9. 【MySQL】COALESCE関数を活用した日数の計算
- 2.0.10. 【React ✖️ Ruby on Rails】Todoリストを進化させてみた
- 2.0.11. Dev ContainerによるRails開発環境構築
- 2.0.12. 【Rails / ActiveRecord】find / find_by / where の違いをざっくり理解する
【Ruby on Rails】Rspec・rails-controller-testingを用いたテスト実施方法
ここではGemファイルのRspec、rails-controller-testingを用いた
テストの大まかな流れを記載しています。前提
【開発環境】
・Rails7
・Docker(DockerファイルにてGemのbundle installが行われるように設定済)目次
・テストで使用するGem(RSpecとrails-controller-testing)をインストール
・コントローラー&モデルのテストで使用するファイルを作成
・テスト用のDB作成(必要な場合)
・テストの実行(モデルの場合)
・テストの実行(コントローラーの場合)【テストで使用するGem(RSpecとrails-controller-testing)をインストール】
**1 Gemfileを開きdevelopmentのテスト環境のブロックへrspec-railsを追記する。**
rspec-railsのバージョンが古いと、scopeエラーが発生することがあるので、できるだけ最新をとってくるようにする。(これで結構はまっていました…)
“`ruby:Gemfile
group
mysql2 (0.5.3) がインストールできなかった時の対処法
##### 下記のコマンドで解決しなかった人受けの記事です
“`
$ bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl@3/lib –with-opt-dir=/usr/local/opt/zstd
$ bundle install
“`この方法で解決することも多いですが、私の場合は解決しませんでした。
## 最終的な解決方法
##### 最終的には Ruby の再インストールを行うことで問題が解決しました。
この方法で解決できたので、同じような問題に遭遇した方は試してみてください。
## まとめ
Ruby 2.7.3 で `mysql2` (0.5.3) のインストールに失敗した場合、まずは以下のコマンドを試してみましょう。
“`
$ bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl@3/lib –with-opt-dir=/usr/local/opt/
RSpecでのモックの使い方
# はじめに
こんにちは!
社会人一年目の石川です。
記事をご覧いただきありがとうございます。本記事では、RSpecでのモックの使い方についてまとめます。
# 目次
1. [モックとスタブについて](#モックとスタブについて)
1. [モックを使う目的](#モックを使う目的)
1. [スタブを使う目的](#スタブを使う目的)
4. [モックとスタブの書き方](#モックとスタブの書き方)
4. [最後に](#最後に)# モックとスタブについて
外部に依存する部分をテスト時に仮のオブジェクトで置き換える手法のことです。例えば外部のAPIを使うシステムのテストをするとき、モックやスタブを使わずにテストをすると、APIが正常に動いていない場合、テストが通らなくなってしまいます。つまり APIサービスが落ちていたり、エラーになっている時にはテストを実行しても失敗してしまいます。その他にも、ネットワークの遅延や、レスポンスが変動することで、テストが不安定になります。本来確認したい内容は、APIの状況ではなく、自分が作ったプログラムが正しく動いているかなので、このような状況で、APIを
[Rails] belongs_toの関連付け
# Rails の belongs_to 関連付け:詳細解説
## はじめに
Ruby on Rails の `belongs_to` 関連付けは、モデル間の関係を定義する上で非常に重要な役割を果たします。この記事では、`belongs_to` 関連付けの詳細について解説していきます。
## belongs_to 関連付けとは?
`belongs_to` 関連付けは、「このモデルは別のモデルに属している」という関係を表します。データベースの観点から見ると、この関連付けは「このモデルのテーブルに、別のテーブルを参照するためのカラムが含まれている」ことを意味します。
### 具体例:
“`ruby
class Book < ApplicationRecord belongs_to :author end class Author < ApplicationRecord has_many :books end ``` この例では、`Book` モデルが `Author` モデルに属しています。つまり、`books` テーブルには `author_id` というカラム
【Rails】furimaアプリ データベース設計
## 実装概要
1. フリーマーケットサイトを再現するために必要な、データベースの設計を行う。
2. ER図を描画した後、READMEに設計情報を記述する。以下の機能の実装条件を確認し、データベース設計を行うこと。
– ユーザー管理機能
– 商品出品機能
– 商品購入機能## 1. フリーマーケットサイトを再現するために必要な、データベース設計を行う。
データベース設計の最初のステップは、アプリに必要な機能に基づいて各テーブルの構造を決めることです。ここでは、ユーザー情報、商品情報、購入履歴、配送先情報を管理する4つのテーブルを作成します。
### Usersテーブル
**目的**: ユーザーの情報を管理します。**カラム説明**:
– **nickname**: ユーザーのニックネームを保存する(必須)
– **email**: ユーザーのメールアドレス(必須かつ一意制を持つ)
– **encrypted_password**: 暗号化されたパスワード(必須)
– **first_name**, **last_name**: ユーザーの名前を保存(必須)
–
[Rails] Active Recordの関連付け
## はじめに
Ruby on Rails における Active Record の関連付けは、データベース内のテーブル間の関係を簡単に表現する方法です。この記事では、Rails の主要な関連付けタイプについて解説します。
## なぜ関連付けを使うのか?
関連付けを使用する主な理由は以下の通りです:
1. コードをシンプルに保つ
2. データベースの操作を簡単にする
3. モデル間のつながりを分かりやすくする
4. 共通の操作を一貫して行える## Rails の主要な関連付けタイプ
Rails では以下の 6 種類の関連付けがあります。それぞれを日常生活の例を使って説明していきます。
### 1. `belongs_to`(〜に属する)
`belongs_to` は、「このモデルは他のモデルに属している」という関係を表します。
例:生徒は学級に属している
“`ruby
class Student < ApplicationRecord belongs_to :classroom end class Classroom < ApplicationRecord
rails assets:precompileとは
# rails assets:precompileとは
“`rails assets:precompile“`
上記コマンドの役割は、本番環境向けにアセットをコンパイルし、最適化すること。
1. **アセットのコンパイル**
Rails アプリケーションでは、CSS、JavaScript、画像などのアセットは開発中に編集しやすい形で管理されている。
本番環境ではこれらを効率的に配信するためにコンパイル(結合、圧縮、最適化)する必要があります。
rails assets:precompile コマンドはこれを行い、アセットを単一ファイルに結合したり、余分なスペースやコメントを削除して圧縮したりします。
2. **パフォーマンスの向上**
アセットをプリコンパイルすることで、本番環境でのページ読み込み速度が向上します。これには以下の理由があります。
* アセットが圧縮されてサイズが小さくなるため、サーバーからクライアントに転送されるデータ量が減ります。
* 複数のファイルが1つにまとめられるため、HTTPリクエストの数が減少し、ロードが
【Ruby】初学者向け-言語基礎①
Stringについて学んだことを整理しました。
Stringに使用するメソッド一覧
**upcase**
…小文字の文字列を大文字にする
<使用例>test = 'test' test.upcase =>TEST—————————-
**downcase**
…大文字の文字列を小文字にする
<使用例>test = 'TEST' test.downcase =>test—————————-
**slice**
…文字の切り分けを行う
<使用例>test = 'あいうえお' test.slice(1,2) => "いう"—————————-
**size**
…文字の大きさを確認する
<使用例>test = 'あいうえお' test.size => "5"—————————-
**to_i**
…文
Vimerの開発スピードに勝つ為のVSCode拡張機能開発
結論から言うと勝てはしないと思う。
しかし、私は自作のVSCode拡張機能を開発して実際に今の開発チームに使用してもらって、開発効率をかなり上げた。今回は開発した拡張機能の紹介と簡単に作り方を紹介します。
見ていただけた方達の開発効率の助けになれば思います。
実務でRailsを使用しているのでRuby寄りの機能もありますが、考え方は他の言語でも同じだと思います。まずgenerator-codeをグローバルインストールします。これをYoemanで使用するとVS Code拡張のプロジェクトの雛形を生成できます。
“`bash
npm install -g yo generator-code“`
“`bash
yo code_—–_ ╭──────────────────────────╮
| | │ Welcome to the Visual │
|–(o)–| │ Studio Code Extension │
`———´ │ generator!
セッションハイジャックとは
# セッションハイジャックとは?
>攻撃者がユーザーの`セッションIDを盗むと、そのユーザーとしてWebアプリケーションを操作可能`になります。https://railsguides.jp/security.html#%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%8F%E3%82%A4%E3%82%B8%E3%83%A3%E3%83%83%E3%82%AF:~:text=%E6%94%BB%E6%92%83%E8%80%85%E3%81%8C%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3ID%E3%82%92%E7%9B%97%E3%82%80%E3%81%A8%E3%80%81%E3%81%9D%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%A8%E3%81%97%E3%81%A6Web%E3%82%A2%E3%83%97%E3%83%
Rails – rails console ( pry )で配列テキストが省略表示されてしまいコピー&ペーストしづらいので、ページングを無効にする
# 問題
rails console ( pry ) で配列の列が長くなると、続きが省略されて、ページングされてしまう。
スクロールしないと続きが見られないし、コピー&ペーストもしづらい。
例
“`
pry(main)> [*1..10000]
“`# 前提
まずは `Gemfile` で `pry-rails` を入れておく
“`
gem ‘pry-rails’
“`インストールしておく
“`
$ bundle install
“`# 解決
pryの設定でページングを無効にする
“`
vi .pryrc
“`“`
Pry.config.pager = false
“`結果の例
“`
pry(main)> [*1..10000]
“`この記事では、Railsアプリのエラーを自動でSlackに通知する方法について解説します。
今回は、簡単なTODOアプリに通知機能を追加し、実践していきます。# 目次
[1. Slack側の設定](#1-slack側の設定)
[2. Railsアプリに記述を加えていく](#2-railsアプリに記述を加えていく)
[3. エラーを通知する](#3-エラーを通知する)
[4. 通知フォーマットのカスタマイズ](#4-通知フォーマットのカスタマイズ)
[5. まとめ](#5-まとめ)
[6. 参考資料](#6-参考資料)# 1. Slack側の設定
まずはSlackチャンネルに通知を送信するためのSlack Appを作成します。この記事で手順がとても丁寧にまとめられていますので、参考にしながらSlackの通知アプリを作成してください。
https://qiita.com/to3izo/items/c2d16f8b3e52b09e543e
これでslackの通知アプリが作成できます。
最後の動作確認が少し難しいですが、
その場合は下の画像にある `curl -X` か
アセットパイプラインについて(※超初心者の記事です)
今日も引き続きrailsについて。
タイトルに毎度悩みますが、超初心者の人が書いてるので、
他のすごい人たちが見てがっかりしないようにタイトルに超初心者と入れてみました。今、練習問題のwebアプリケーションの作成をしています。
webアプリのトップページにいい感じの画像を背景画像として表示させたいと思い、
記述例をもとに入力していました。そしてCSSファイルに入力しながら思ったこと。
なんで、画像のurlの設定が、画像のファイルの保存先と一致しないのか?
例で示すと
「~/assets/images/sample.jpg」が画像ファイルの保存先なのに、
背景画像として登録するときにはなぜ、
「~/assets/sample.jpg」となるのか理解ができませんでした。そしてこの疑問を一生懸命ChatGPTに質問しまくり、検索しまくりでやっと納得した答えが、
railsにはアセットパイプラインという便利機能があり、「/assets/ファイル名.jpg」と入れるだけで画像の設定をすることができる、ということでした。
ちなみにこれを知るまでの数十分、「/assets/images/
2つのモデルを使ってユーザーフォロー機能の実装
この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。
## 記事投稿の背景
Xのクローンサービスを制作している時に自分が躓いたユーザーフォロー機能の実装内容について知識整理も兼ねてまとめたものです。## 実装時のER図(最終版)
![スクリーンショット 2024-10-14 20.41.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508918/03d3eea2-1ef1-543e-d5d2-8fca3a4a9cc0.png)## 実相当初のコード
“`ruby:user.rbの関連箇所を抜粋
has_many :relations, dependent: :destroy
has_many :followers, through: :relations
“`
“`ruby:relation.rb
class Relation < ApplicationRecord belongs_to
RailsのEnum型を使う
## Enum(列挙型)とは
名前がついた定数の集まりです。
あらかじめ用意した選択肢の列挙からデータを選択することで、可読性の向上, 値の代入ミスを防ぐことができます。## DBのEnum(列挙型)
RailsのEnumを見る前にDBレベルでのENUMについて説明します。
DBのENUMはテーブル作成時に列挙された定義リストに存在する値のみを保管可能になるデータ型です。要するに”banana”, “apple”, “orange”と定義すると、その3種類しか保存ができなくなります。
## Ruby on RailsでのEnum
Railsのenum型は`数値のカラム`に対してプログラム上で扱える別名を付与することで使用することが可能です。重要な点としてDBレベルで見るとカラムの型は`数値`です。
これにより、DBのカラムの型自体をEnumにした場合と比べ、カラムに保存可能な値を変更したい際に、DBの変更が必要になる点や、アプリ側からカラムに保存可能な値がわかりづらいという問題点を解消できます。## Enum型を定義する
今回はAnimalというModelを作成し、k
【Ruby】URI.escapeが使えない
## はじめに
Railsのアップデート中にURI.escapeを使用している箇所でエラーが出たので、その対応をまとめます。## 問題
コード
“`ruby
URI.escape(str)
“`エラー文
“`ruby
NoMethodError (undefined method `espace’ for URI:Module)
“`## 解決方法
Ruby3.0からURI.escapeは削除されました。また、URI.unescapeも削除されています。
代わりに、CGI.escapeやURI.encode_www_formなどを使用します。## 参考
【MySQL】COALESCE関数を活用した日数の計算
# はじめに
ActiveRecordのメソッドだけでは表現できないような書き方についてまとめます。きっかけは、Railsのselectメソッドで、SQLを直接書く場面があったことです。
その時にSQLの重要性がより理解できたので共有させて頂きます。# 前提知識
## selectメソッド
データベースから取得するカラムを指定するためのメソッドです。
selectメソッドは、SQLの**SELECT句**に相当します。### 基本的な書き方
“`ruby
# 全てのカラムを取得
User.select(“*”)# 特定のカラムのみを取得
User.select(:name, :email)
“`### 複数のテーブルを結合して取得
“`ruby
# UserモデルとPostモデルを結合して、ユーザー名と投稿タイトルを取得
User.joins(:posts).select(“users.name, posts.title”)
“`
:::note info
`joins`によるテーブル結合については[こちらの記事](https://qiita.com/k12
【React ✖️ Ruby on Rails】Todoリストを進化させてみた
## 前回のはなし:page_facing_up:
前回の初投稿でReactを使ってTodoリストを作成を作成しました。
記事はこちら↓
https://qiita.com/kurumi-program/items/0e5412cdc59643683408
でもこれだと…
**リロードすると元に戻ってしまう → 値が保存されていない!!!**
そうなるとこのTodoリストを使った人の末路は…
自分「よし、今日のやること書いたぞ!これで頑張ろ!」
…1時間後
自分「あーー、ブラウザのタブ開きすぎてもうよく分からなくなってきた…一旦全部閉じよ」
再びブラウザ開き、作業に入る
自分「そういえば、これ終わったら何するんだっけ?Todoリスト確認するか!」
確認しようとTodoリストを起動
自分「あれ?何も書いていないじゃん!
ってことは、今日のやることはもう終わったのか!!
Dev ContainerによるRails開発環境構築
# 概要
– Dev Containerを触る機会が有ったので、手軽にセットアップする手順をまとめました
– 簡易に作成できるよう、Dev Containerで用意されている開発コンテナを使用しています
– 手順は [公式サイト](https://code.visualstudio.com/docs/devcontainers/containers#_picking-your-quick-start) をベースにしました# 環境
Ubuntu 22.04 on WSL2# 手順
## 1. 作業用フォルダの作成
– WSLターミナルにてコマンド実行
“`sh
mkdir devcontainer-start && cd $_
“`
## 2. VS Codeを開く
“`sh
code .
“`## 3. コマンドパレットを開き、開発コンテナを設定する
– Ctrl + Shift + P(Windows/Linuxの場合)またはCmd + Shift + P(Macの場合)を押して、コマンドパレットを開く
![image.png](https://qiita-ima
【Rails / ActiveRecord】find / find_by / where の違いをざっくり理解する
# はじめに
お疲れ様です!
コンソールでデータ取得する際に`find`, `find_by`, `where`をなんとなく使用しており、使い分けについて説明することができなかったので、ざっくりまとめていきたいと思います:writing_hand:![qiita_find.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117662/23df6702-8d94-0c81-4a9d-0bb49cc8b8ab.png)
先に3つの違いを一覧をまとめた上で、それぞれの特徴を書いていきます:sunglasses:
# 違いまとめ
| メソッド | 用途 | 返り値 | 条件に合わない場合 |
|————-|—————————————-|———————–|——————–