Rails関連のことを調べてみた

Rails関連のことを調べてみた

RailsアプリをRDSと連携させてECSにデプロイする

## 1.AWSアカウントIDの設定
アカウントIDを環境変数に保存し、後の操作で使用できるようにします。

“`bash
export ACCOUNT_ID=$(aws sts get-caller-identity –query Account –output text)
“`

## 2.IAM関連
ECSタスクがCloudWatchなどの他のAWSサービスにアクセスするためのロールを作成します。

“`bash
cat << EOF > trust-policy.json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Principal”: {
“Service”: “ecs-tasks.amazonaws.com”
},
“Action”: “sts:AssumeRole”
}
]
}
EOF
“`

“`bash
aws iam create-role –role-name hello-world-rails-rdb-task-execution

元記事を表示

【Rails】JWTを用いたUser周りのAPI実装

Rails APIでUser周りの実装をしていきます。User周りの実装は基本的なアプリでは必須になってくると思うのでぜひ参考にしてください。
Docker環境上で開発しています。
のちに同じプロジェクト内で管理画面を開発することを考えたため、Rails APIでは開発していません。
駆け出しエンジニアですので間違っているところはコメントください。
## Userテーブル
Userテーブルは以下の設計にしました

| カラム名 | データ型 | 制約 | 説明 |
|————–|—————|—————————|—————————–|
| id | integer | 主キー、オートインクリメント | ユーザーの一意な識別子 |
| name | string | null: false

元記事を表示

【初心者向け】find と find_by の使い分け

# はじめに
find と find_by は、どちらもRailsでレコードを取得するためのメソッドで似ていますが、少々動作や使い方に違いがあります。
それぞれ解説していきます!

# find
### 概要
プライマリキー(通常は id カラム)を指定して、1つのレコードを取得します。

### エラーハンドリング
指定した id に該当するレコードが見つからない場合は、ActiveRecord::RecordNotFound 例外が発生します。

### 使い方
“`
user = User.find(1)
“`
User.find(1) は、 id が 1 のユーザーを取得します。
idが1のユーザーが存在しない場合、ActiveRecord::RecordNotFound例外エラーが発生します。

# find_by
### 概要
任意のカラムに基づいて条件を指定し、最初に一致するレコードを取得します。

### エラーハンドリング
指定した条件に一致するレコードが見つからない場合は、nil を返します(例外は発生しません)。

### 使い方
“`
user = Us

元記事を表示

XSSの攻撃点とは

試しにXXSをやってみたい。

# どうするのか?
* 悪意のコードをサイトに仕込み、閲覧したユーザーが実行させられる
* どうやってサイトに仕込むのか?

>検索のキーワードの表示画面や個人情報登録時の確認画面、掲示板、ウェブのログ統計画面等、利用者からの入力内容やHTTPヘッダの情報を処理し、ウェブページとして出力するものがあります。ここで、`ウェブページへの出力処理に問題がある場合、そのウェブページにスクリプト等を埋め込まれて`しまいます。

https://qiita.com/masatom86650860/items/e3d28d15f9304d09389a#152-html%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E5%85%A5%E5%8A%9B%E3%82%92%E8%A8%B1%E5%8F%AF%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E7%AD%96:~:text=%E6%A4%9C%E7%B4%A2%E3%81%AE%E3%82%AD%E3%83%

元記事を表示

【個人メモ】Ruby on Rails チュートリアル 第8章

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです

# 個人メモ
– Sessionを設定することでコンピュータ間(ユーザーのパソコンのWebブラウザとRailsサーバーなど)を半永続的に接続することが可能
– cookies
ユーザーのブラウザに保存される小さなテキストデータのこと
Cookiesを保存場所とすることでセッション機能を実現する
– form_with(url: login_path, scope: :session)
セッションではSessionモデルがなく、そのためsessionインスタンス変数に相当するものがない
したがって、form_withヘルパーにはscopeとurlを指定する必要がある
– Rubyではnilとfalse以外のすべてのオブジェクトは、真偽値ではtrueになる
– flash.nowのメッセージはその後リクエストが発生したときに消滅する
– 全コントローラの親クラスである「Applicationコントローラ」にセッションヘルパーをincludeすることでどのコントローラからでもメソッドを呼び出せる

元記事を表示

Raisにおけるキャメルケースとスネークケースの使い分け

細々とrailsを使ってwebアプリケーションを作る練習をしています。

今回はpostテーブルにマイグレーションファイルが設定できなかった件についてまとめておきます。
結論から言うと、
「AddUserIdToPosts」とすべきところを、
「AddUserIdtoPosts」と大文字と小文字を間違えていたからでした。

今回のエラー(というか凡ミス)を解決する中で、
railsには「なんで小文字とアンダースコアで単語をつなぐ時と、大文字と小文字で単語をつなぐ時があるんだろう?」と気になるようになりました。

ChatGPTに相談しまくった結果を簡単にまとめると、

・クラス名のとき:最初の文字が大文字で、各単語の最初も大文字で記述する。(キャメルケース)
例:UserProfileやAddUserIdToPosts

・メソッド名、変数名、カラム名: すべて小文字で、単語の間をアンダースコアで記述する。(スネークケース)
例:メソッド名(def get_user_nameやdef calculate_total_price)、変数名(user_idやpost_title

元記事を表示

バリデーションの真偽判定のメソッドを使用する条件分岐の注意点

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

## 発端

モデルで以下のように定義
“`
with_options if: :exampled? do
validates :aa, aa_format: true, presence: true, length: { maximum: 255 }
validates :bb_at, presence: true
validates :cc_id, presence: true
end
“`

exampleコントローラで以下のように条件分岐
“`
if @ddd.valid?
#メソッド
elsif @ddd.cscs?
#メソッド
end
“`
**この時、@ddd.valid?でfalseが出るとelsifの方に行かずメソッドが止まります。**

元記事を表示

Active Recordについて

Active Recordについて学習した内容をアウトプットとしてまとめました。
同じように学習されている方の参考になれば幸いです。

## Active Record とは?
Active RecordはRailsでDB操作するための仕組みです。
通常DBを操作するためにSQL文を自分で書く必要がありますが、Active Recordを活用することでRubyを使ってDBを操作することが出来ます。

以下のようにCRUD操作をRubyを使って行えるのはActive Recordのおかげです。
“`ruby
# データの作成
user = User.create(name: “山田”, email: “yamada@example.com”)

# データの検索
user = User.find_by(name: “山田”)

# データの更新
user.update(name: “山田太郎”)

# データの削除
user.destroy
“`

## Active Recordの主な機能
### 1.モデルとテーブルの関連付け
`Book`モデルは`books`テーブルに関連付け

元記事を表示

CSRFとXSSの違いとは?Rails開発者が知っておくべき2大脅威とその対策

## はじめに

Webアプリケーション開発において、**セキュリティ**は避けて通れない重要なテーマです。特に、代表的な攻撃手法である**CSRF**(クロスサイトリクエストフォージェリ)と**XSS**(クロスサイトスクリプティング)は、Webアプリケーションを攻撃する2つの異なる方法ですが、混同されがちです。

この記事では、CSRFとXSSの違いをわかりやすく説明し、それぞれの対策方法をRailsでどのように実装するかも解説します。

## 1. CSRF(クロスサイトリクエストフォージェリ)とは?

### 1.1 CSRFの概要

– **CSRF**(Cross-Site Request Forgery)とは、**攻撃者がユーザーの意図しない操作をWebアプリケーションに強制的に行わせる**攻撃手法です。主に、ユーザーがログイン済みの状態で、信頼できるWebアプリケーションに対して、攻撃者が悪意のあるリクエストを送ることが可能です。

### 仕組み

– ユーザーがログインしている状態で攻撃者の悪意あるページ(サイトB)を開く。
– 攻撃者は、ユーザーのブラウザを介し

元記事を表示

[Render] デプロイ時ビルドに失敗

## やりたいこと
Renderを使用しRailsアプリケーションをインターネット上に公開するため、手動デプロイを実行したところビルドエラーが発生。
ビルドエラーを解消しデプロイを成功させたい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519424/e458f6a2-7664-e601-de25-46d7a22d9652.png)
## エラー内容
“`:ビルド失敗
==> Build failed 😞
==> Common ways to troubleshoot your deploy: https://docs.render.com/troubleshooting-deploys
“`
## 調査
デプロイログからエラー内容把握を試みるも、エラー内容は明示されていなかった。ローカル上では問題なく動いているため、Renderでの一般的な設定ミスを調査することに決定。

https://docs.render.com/troubleshooting-deploys

##

元記事を表示

StimulusとFetch APIで簡単に動的なデータ表示を作成する方法

#### Stimulus 導入方法は以下の記事が参考になります

【Rails7】Stimulus入門! | 概要 ~ 使い方まで詳しく解説

#### 前提条件

Rails7 が導入されていること
users テーブルに必要なカラム:
name:string ユーザーの名前
description:text: ユーザーの説明(自己紹介など)

#### users コントローラを作成して以下の show アクションに特定のユーザーの詳細情報を JSON 形式で返す記述をする

index.html.erb で UI 構造を作成し、show アクションでデータのみを提供するという流れにします。

“`ruby
class UsersController < ApplicationController def index @users = User.all end def show user = User.find(params[:id]) render json: { name: user.name, description:

元記事を表示

Capistrano 3で多段SSHを行う方法

Capistrano 3で多段SSHを使用してデプロイするには、`.ssh/config`の設定をするとスッキリ書けます。

以下、設定例

**deploy.rb**

“`ruby
server ‘test-server’, user: ‘ec2-user’, roles: %w{app db web}

set :ssh_options, {
keys: %w(~/.ssh/test-key.pem),
forward_agent: true,
auth_methods: %w(publickey)
}
“`

**.ssh/config**

“`bash
# 踏み台サーバー
Host fumidai-server
HostName xxx.xxx.xxx.xxx
User ec2-user
IdentityFile ~/.ssh/fumidai.pem

# デプロイ先のサーバー
Host test-server
HostName yyy.yyy.yyy.yyy
User ec2-user
IdentityFile ~/.ssh/test-key

元記事を表示

【Rails】コールバック before_create,before_validationの違い

# 【Rails】before_createとbefore_validationの違い

Railsには、データベースに保存する前に指定した処理を実行できる「コールバック」という仕組みがあります。中でもbefore_createとbefore_validationは、データの保存やバリデーション(入力チェック)に関わる重要なコールバックです。今回はこの2つの違いと、それぞれがどう使えるかについてまとめました。

#### この記事の目的

• before_createとbefore_validationがいつ実行されるかを理解する。
• どんな場合に使えばいいか、実際の使いどころを知る。

### 1. before_createとは?

before_createは、レコードが新しく作成されてデータベースに保存される直前に一度だけ実行されるコールバックです。例えば、レコードを新しく作成するときだけ特定の初期設定を入れたい場合に使います。

使用例

ユーザーのデータを新しく作成するとき、statusを「active」に設定したい場合は、こんなふうに使えます。

“`rb
cl

元記事を表示

カーソル・ページネーションを手書きで実装する【Rails7】

## おことわり
こちらは、プログラミング初学者である筆者が、ポートフォリオ作成の際に得た知識を記録するものです。
誤りや改善点については、お手柔らかにご教示いただけますと幸甚です。

## 概要
シーク法を用いたカーソル・ページネーションを実装します。
kaminariなどで使用されているオフセット・ページネーションと比べて、高速に動作することが特徴です。実際のコードの後に、簡単な説明を記載します。

## 動作環境
| カテゴリー | 技術 |
| ———- | ——————————— |
| バックエンド | Ruby 3.2.2, Ruby on Rails 7.1.3.2 |
| データベース | MySQL 8.3.0 |
| インフラ | Docker |

## 用語の整理
– オフセット・ページネーション
– カーソル・ページネーション

元記事を表示

【超初心者ミス】ハッシュを設定してる際に『no implicit conversion of Symbol into Integer』がでてしまった

## 状況
hashを設定している際に上記のエラーが出てしまった。
`no implicit conversion of Symbol into Integer` を調べても原因がでてくるが解決法がピンとこない(試したが上手く行かない)

## 解決策
`return`で返り値設定しているか確認
下記の場合はhash値を指定しているメソッドの最後に **`hash`** をつけたら解決した
~~~ruby
def edit_hash
hash = {}

#メソッド内容

hash # ここの宣言が必要 ”return hash”を省略した記述
end
~~~

## 何故だったのか
Rubyの返り値には`最後に評価された値が返る`という暗黙のルールがある。
そのため返り値を”return”で指定しているのだが、上のコードのように省略して書かれているので初学者は忘れやすい。(忘れた)

~~~ ruby
# retrunを設定していない
def edit_hash
hash = {}
hash[:name] = ‘鈴木’
hash[:age] = 24
h

元記事を表示

Railsでパンくずリストを作成する方法 – Gretelを使った実装

# はじめに

こんにちは!
記事をご覧いただきありがとうございます。

本記事では、Railsでパンくずリストを作成する方法についてまとめます。

# 目次
1. [パンくずリストについて](#パンくずリストについて)
1. [手順](#手順)
1. [書き方](#書き方)
4. [最後に](#最後に)

# パンくずリストについて
パンくずリストとは、Webサイトの現在のページの位置を示すナビゲーションリンクのことです。ユーザーがどのページにいるかを視覚的に把握できるため、サイトのユーザビリティが向上します。今回は、Rails用のGretelというGemを使って、パンくずリストを簡単に実装する方法を以下にまとめています。

# 手順
#### Gretelをインストールする

まず、GretelをGemfileに追加し、インストールします。
“`ruby
# Gemfile
gem ‘gretel’
“`
インストールコマンドを実行します。
“`
bash
$ bundle install
“`
#### 設定ファイルを作成する
次に、以下のコマンドを実行して、conf

元記事を表示

Railsでデータ署名と暗号化を使ったAPIを構築し、セキュアに通信する方法

## はじめに
APIを提供する際、セキュリティが非常に重要です。この記事では、Railsでデータ署名と暗号化を組み込んだセキュアなAPIを構築し、クライアントとの安全なデータ通信を実現する方法を解説します。

## 1. プロジェクトの準備と秘密鍵の設定
### Railsプロジェクトの作成
まず、Railsプロジェクトを作成し、署名や暗号化に使う秘密鍵を設定します。

“`bash
# Railsプロジェクトの作成
rails new SecureAPI
cd SecureAPI
“`

### Secret Keyの設定
秘密鍵をRailsのcredentialsに追加します。これを使って署名や暗号化を行います。

“`bash
# シークレットキーを設定
EDITOR=”vim” bin/rails credentials:edit
“`
開いたファイルに以下を追加します。

“`yaml
secret_key_base: your_generated_secret_key
“`

## 2. 署名・暗号化サービスの実装
### データ署名サービスの作成
署名を生成

元記事を表示

Kaigi on Rails 2024 に参加してきた

[Kaigi on Rails 2024](https://kaigionrails.org/2024/) 参加してきました!
Qiita からは自分を含め3人が現地参加してきました。

https://x.com/nemunemu3desu/status/1849979399145390397

## 聞いたセッション (の一部) の紹介

めちゃくちゃ面白いものが多かったので、全部は書ききれないですが、たくさん書いてます。
2日目ガス欠気味だったので、1日目が多めです。

### 基調講演: Rails Way, or the highway

https://evilmartians.com/events/keynote-rails-way-or-the-highway-kaigi-on-rails-2024

Rails は 「Rails scales from HELLO WORLD to IPO」と呼ばれるが、その長い期間

元記事を表示

Rails ActiveRecordのクエリガイド

## テーブル構造

まず、以下のようなテーブル構造を例に説明します:

### usersテーブル
“`sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255),
age INTEGER,
premium BOOLEAN,
created_at TIMESTAMP
);
“`

### postsテーブル
“`sql
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
title VARCHAR(255),
content TEXT,
likes_count INTEGER DEFAULT 0,
created_at TIMESTAMP
);
“`

### commentsテーブル
“`sql
CREATE TABLE comments (
id SERIAL PRIMARY KEY,
post

元記事を表示

RailsのRansackとsort_linkで簡単に並び替え機能を実装する方法【Bootstrap対応】

## 背景
実務で検索機能を実装する際、データの並び替えもできるようにしたい、という要望がありました。既にRansackを使った検索機能は実装済みでしたが、並び替え機能も追加するために sort_link を活用することになりました。この実装内容をまとめて記録として残します。また、今回の実装はBootstrapを用いてスタイリングしており、基本的なデザインの調整も行いました。

## Ransackとは
Ransackは、Ruby on Railsにおいて簡単に検索機能を追加できるGemです。Ransackを使うと、条件に基づいたデータの検索ができるフォームや、指定したカラムによる並び替えが可能になります。検索ロジックを簡潔に書けるだけでなく、カスタムした条件にも対応しやすく、特に管理画面などでのデータ検索や並び替えが必要な場面で重宝します。

## sort_linkとは
sort_link は、Ransackが提供するメソッドの一つで、並び替えリンクを生成します。sort_link を使用することで、簡単に指定したカラムの昇順・降順で並び替えが可能になります。ボタンやリンクをクリッ

元記事を表示

OTHERカテゴリの最新記事