Rails関連のことを調べてみた2022年11月25日

Rails関連のことを調べてみた2022年11月25日

今話題の脆弱性について自社サイトは大丈夫ですか?

今某サイトの下記の脆弱性が話題です

最近弊社ではRuby on Railsなので自社での状況を確認しました

# 1. 認証CookieにSecure属性をつけていない

## どのような問題が?
HTTP通信でCookieが送られてしまうため、暗号化されていないため、信用できないWiFiを利用した場合などに、登録している情報ややり取りの履歴が盗まれる可能性がある。

## 参考情報

> Secure 属性がついた Cookie は HTTPS プロトコル上の暗号化されたリクエストでのみサーバーに送信され、安全でない HTTP では決して送信されないため、中間者攻撃者が簡単にアクセスすることはできません。(URL に http: を含む) 安全でないサイトは、 Secure 属性を使用して Cookie を設定することができません。
https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies

## 弊社での対策

Secure属性を付与する

“`ruby:config/environments/production.rb

元記事を表示

Rails – コントローラーで特定アクションだけ before_action をスキップする例 ( skip_before_action )

“`rb
class FooController < ApplicationController skip_before_action :foo_method, only: [:index] def index ... end end ``` # チャットメンバー募集 何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。 https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ # Twitter https://twitter.com/YumaInaura

元記事を表示

【初心者向け】4パターンのバリデーションレベルについて学ぶ【Rails】

## 1. はじめに
初心者の場合だと、バリデーションは特に何も考えずにモデルで定義しているという人は結構いるのではないでしょうか。ただ業務で開発していたり、自主アプリの規模が大きくなってきたりすると、「モデルで定義する方法が最適解なのか?」という疑問が湧いてくる場面があると思います。

私も業務で開発していて、この辺が気になり始めた1人です。せっかくなので今回バリデーションレベルについて調べて、あれこれ考えたことをこの記事に残しておこうと思います。同じような人の役に立てばと思います。

※以下はRailsの想定で話を進めています(考え方自体はフレームワークを超えて共通した内容かと思います)

## 2. 4パターンのバリデーションレベル
さて、そもそもバリデーションレベルは4パターンあります。それが以下の通り。

① モデルレベル
② データベースレベル
③ コントローラレベル
④ フロントエンドレベル

1つずつ詳しく見ていきます。

## 3. ①モデルレベル
#### メリット
* データベースに依存しない
-> バリデーションの仕組み(データベース制約等)がDBに依存するみ

元記事を表示

Dockerを使ってRails+Elasticsearchの環境構築

# はじめに
Dockerを使ってRails+Elasticsearchの環境を構築したいと思ったので作成してみました?

### 各種バージョン
・OS Mac
・チップ Apple M1
・Ruby 2.7
・Ruby on Rails 6.1.7
・docker 20.10.21
・docker-compose 2.12.1

# 手順
1. ファイル構成
2. アプリを作成する
3. イメージをビルドする
4. データベースを接続する
5. 動作確認

## 1. ファイル構成
全体の構成は以下のようになっています
““
% tree .
.
├── Dockerfile
├── Dockerfile-elasticsearch
├── Gemfile
├── Gemfile.lock
├── docker-compose.yml
└── entrypoint.sh
““

6つのファイルを作成してください?
““
touch Dockerfile
touch Dockerfile-elasticsearch
touch Gemfile
touch Gemfile

元記事を表示

特定ドメインへのコールバックなどをlocalhostでテストしたい

## やりたいこと
Oauth2認証などリダイレクトが入るAPI関連で申請するURLがlocalhostが許可されないとき、手軽に動きをチェックできない。
※環境はmac前提、コマンドは違えどLinuxでもできると思う。

## 指針

1\. /etc/hostsにドメイン記載して、ローカルApacheやNginxのVirtualHostで実現
* railsなどポートのこと考えるとちょっと面倒。

2\. /etc/hostsにドメイン記載して、localhostの80,443をrailsのポートにフォワード
* 設定はややこしい、ちょっと知識も必要

### VirtualHost
これはある程度調べたら出るので割愛&今回は採用しなかった。

## ポートフォワードで実現

まず考えるのは
* localhostの80,443はrailsの3000とかに飛ばす
* 実ドメイン=localhostの解決
* 既存の80,443はすでに使っている可能性があるため他のサービス停止など気にしたくない

### 80,443は使っている可能性がある
これが実はちょっと面倒、hostsに実ド

元記事を表示

RailsのJSONカラムをちゃんとバリデーションする

## 目的
RailsでJSONカラムを利用するとき、その大抵はRDSの正規化を正しくやろうとすると煩雑になりすぎるためにとった手段であることが多い(少なくとも私は)。
そういう場合対外においてJSONの形式は煩雑になるのでまともにバリデーションができていなかったり、ドキュメンテーションが難しかったりした。

なので本番のJSONカラムに対してJSON Schemaを利用して「バリデーション」「ドキュメンテーション」の両方を実現していこうという話。

※ 基本的にRDSにおいてJSONカラムを利用するのは私は悪手だと考えています。その中でどうしても現状完全に正規化し切るのは難しいという前提でJSONカラムを選択せざるを得なかった時の対応だと思って読んでいただけるといいと思います。

## この記事のゴール
* RailsのJSONカラムに対してバリデーションが入っている
* JSONカラムに対してドキュメンテーションがされている(自動でドキュメントが更新される)
* 上記二つが連動することによって陳腐化しないドキュメンテーションになっている

## JSON Schemaについて
今回

元記事を表示

[Rails]アプリの雛形作成について

Rails アプリの雛形作成についてまとめます

## rails new コマンド
Railsで新規アプリケーションを作成する際に使用します。このコマンドを実行することで、Railsアプリケーションの雛形が作成されます。
“`ruby
# Railsアプリケーションを作成
% rails new アプリケーション名
“`
rails newコマンドで雛形を作成するときには、以下の2つの指定を行います。

-使用するRailsのバージョンの指定
-オプションの指定

### 使用するRailsのバージョンの指定
“`ruby
# Railsのバージョンを指定してアプリケーションを作成(6.0.0の場合)
% rails _6.0.0_ new アプリケーション名
“`
### オプションの指定
“`ruby
# オプションを付けてアプリケーションを作成
% rails _6.0.0_ new アプリケーション名 -オプション名
“`

### -dディーオプション
作成するアプリが利用するデータベースの管理システムの種類を指定できます。
“`ruby
# デー

元記事を表示

Satoruyaで敢えて採用しなかったライブラリ

2022年現在、SatoruyaというSNSをβテストという形で公開しています。

https://www.satoruya.com/

前に「枯れた技術の水平思考」で使うライブラリ(フレームワーク)を選定した、と記事にしました。

https://qiita.com/__satoruya/items/0a3721b5c70750d2f81f

今回はこのSatoruyaで使わなかったライブラリを紹介していきます。

# Railsを始めとするMVCフレームワーク

今回のSatoruyaの開発ではMVCフレームワークを使いませんでした。
Railsは・・・まぁ、嫌な言い方ですが、時代遅れという理由ですね。とっくに枯れた技術を通りこして悪い意味でレガシーになっています。
DjangoはPythonの豊富なライブラリが使えるというのもあり、まだまだ十分人気ですが日本語の資料が少なく、情けない話なのですが、英語のサイトを利用してまで使う必要があるのかと思って使いませんでした。
(Node.jsの方が日本語の資料は少ないだろと突っ込まれたら一切否定できませんが)
速度的にもNode.jsの方

元記事を表示

3-13. 詳細ページを表示しよう

# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう

# はじめに

今回はツイートの詳細ページを作ります。
一覧ページに並んでいるツイートをクリックすると、そのツイートに関する詳細が見られるページというイメージです。

3-13-1.gif

元記事を表示

3-12. ツイートを投稿しよう – index

# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう

# GOAL
– tweetした内容の一覧を表示する

# ▼▼▼実装&解説動画