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

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

RailsでSupabaseのPostgreSQLを使ってみる

# はじめに

なんかサービス作るときに、DBどうする問題があると思います
クラウドのDBはなかなかお高くて、低コストで運用したいなと思ったときに困ったので調べてました
結果、Supabaseがよさそうだったので使ってみます

単純にDBだけならPlanetScaleのほうが無料枠が充実していてよいかと思ったけど、ユーザ認証など今後も見据えてSupabaseをチョイスしました

今回は、RailsからSupabaseのPostgreSQLに接続してみます 🙂

https://supabase.com/

https://planetscale.com/

# 環境
Rails v7.0.4
Supabase Postgres

# Supabase Sing up
GitHubのアカウントがある人はGitHub認証すればOKです

# Supabase Create Project
## Projectを作成します

Project名はお好きな名前を入力
DBのパスワードは、`Generate a password`リンクをクリックしたら作ってくれます
パスワード忘れち

元記事を表示

Alma Linux9にRailsアプリケーションの最低限の動作環境を構築する際の個人的備忘録

# はじめに
本記事はAlma Linux9で最低限のRailsアプリケーションを動作させるための手順を記したものです。
前提は以下となります。
* RailsアプリケーションはGitクローンしてくる
* Rubyのバージョンは3.1.2とする
* gemはvendor配下にbundle installする

# 手順

1. アップデートを行う
“`bash
$ dnf update -y
“`
1. `git` をインストールする
“`bash
$ dnf install git -y
“`
1. `vim` をインストールする
“`bash
$ dnf install vim-enhanced -y
“`
1. 開発者用ツールをインストールする(Todo: Cコンパイラだけでいいかもしれない)
“`bash
$ dnf group install “Development Tools” -y
“`
1. `mysql` or `postgresql` に必要なパッケージ

元記事を表示

JavaScriptからReact、Next.js(TypeScript)を学んでPFに取り掛かれるレベルになるまでのロードマップ

以下のロードマップ/学習記録は[ProadMaps](https://proadmaps.com/1506616851853242371/roadmaps/14)で作成しました。
ロードマップの作成、共有から、作成したロードマップをマークダウンで出力ができるので、Qiita等の外部サイトや、個人ブログへの転記にも便利です。

https://proadmaps.com/1506616851853242371/roadmaps/14

# JavaScriptからReact、Next.js(TypeScript)までの学習ロードマップ

**概要**

Next.jsでポートフォリオを作成できるようになるまでの学習記録になります。今だったらこの順番でやればよかったなぁと思う順番に並び替えています。

**タグ**

Next.js,React,TyepScript,JavaScript,Ruby,Rails

**開始時スキル**

Railsの学習経験あり

**終了時スキル**

ポートフォリオに取り掛かれる

**総ステップ数**

7

## ステップ1 【Progate】 Pr

元記事を表示

Renderによるデプロイ

# はじめに
Ruby on Railsを用いて開発したWebアプリケーションをRenderを用いて無料でデプロイする方法を記載します。

# Renderを用いる際の注意点
Renderには無料枠と有料枠の2種類が存在します。
有料枠に比べ無料枠はできることに制限があるので、まずはそれを知ることから。

## ①Webアプリケーションに関する制限
– 無料プランでは、非アクティブ状態が 15 分間続くと自動的にアプリがスリープします。
新しいリクエストが来るとスリープが解除されますが、最大30秒の応答遅延が発生する可能性があります。

– 無料プランで使用できるのは、 1か月あたり750時間の実行時間と、100GBまでのデータ転送です。100GBを超える場合、0.10 USD/GBが課金されます。

– 無料枠を超えると、サービスは自動的に中断され、有料プランにアップグレードされるか、無料枠がリセットされるまで、トラフィックを処理できなくなります。無料利用は毎月1日にリセットされます。

– 通常、無料の Web サービスのビルドは、有料サービスのビルドよりも遅くなります。ビルドとデ

元記事を表示

Railsでポートフォリオ制作②【環境構築】

Web系企業でのバックエンドエンジニアとしての就職を目指して、ポートフォリオを制作しています。
ポートフォリオ制作のすべての記録を残していきます。

## この記事は
Rails環境構築でエラーに出合いまくり七転八倒した私が、どうにか`rails new`までこぎつけた軌跡を記しています。
エラー解消のためにひとつひとつの操作・コマンドを理解しようと、それぞれ意味を調べて書いています。
Railsでこれから環境構築する方の参考になれば幸いです!

## マシンスペック
– macOS Monterey
– MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
– Intel Core i7
– メモリ 32GB

## Ruby, Railのバージョン
– Ruby: 3.1.2
– Rails: 7.0.4
### どうやってRuby, Railsのバージョンを決める?
– 基本最新のものを使うべき
– 理由:古いものだと脆弱性があったりセキュリティ的に問題がある可能性があるから
– メジャーバージョンが上がってすぐのタイ

元記事を表示

【Rails,ゲストログイン】削除される度に,同一ゲストユーザーを生成する

## はじめに
ゲストユーザーが削除された際に,「ゲストログイン」ボタン押下で,削除前と同一のゲストユーザーを再生成する方法をまとめました.
Rails初心者の記事です.
不足,間違い等ありましたらご指摘いただけますと幸いです.

## 環境
Ruby 3.0.4
Rails 6.1.7

## ゲストログイン機能の仕様
ゲストログインボタンを押下すると,ゲストユーザーのユーザー情報に合致するユーザーが存在するか照合する.
存在すれば,当該ユーザーでログインする.
存在しなければ,指定したデータを持つゲストユーザーを生成しログインする.

## 実装
### sessionsコントローラでguest_loginアクションを実装
ゲストユーザーの照合,生成を実装します.
また,ゲストユーザーをログインユーザーとして扱うため,セッションに`user.id`を格納します.
ログイン判定は,後述のApplicationControllerで実装しています.
“`ruby:app/controllers/sessions_controller.rb
class SessionsControl

元記事を表示

2022年、Ruby on Railsは「RPGツクール」感覚で学ぶべきなのかもしれない

一見すると意味不明極まりないタイトルですが、実際そう感じたので書きます。

Railsは今から10年ぐらい前、簡単にウェブアプリが作れるフレームワークとして注目され、非常に高い人気を得ました。
しかし、今となってはシステムが非常にレガシーになってしまい、使い辛いという感覚の人や会社も多数出ています。特に大規模システムには使い辛いと感じる人も多いでしょう。

なので、「もうRailsの時代は終わった。学ぶ必要性はない」という人もそれなりにいると思います。逆に「まだまだ使える!」と思う人も多いでしょう。

で、Railsを使わずにフロンドエンドもバックエンドもNode.jsで作った身で言うとRailsを学ぶ非常に大きな利点が一つあります。

それは初心者としては非常に扱いやすいということ、そしてRailsで身に着けた知識は特にバックエンドの開発で非常に役に立つということです。

例えば通知機能、普通にNode.jsで作ろうとした場合、初心者なら「どうやって実装するんだ?」と頭を抱えると思います。検索しても方法が中々見つかりません。
しかし、Railsだと通知機能の作り方が簡単に見つかります

元記事を表示

Railsで判定機能を作って遊ぶ[Find the missing letter]

# ルール
“`
アルファベットが順番に定義された配列が存在する.
だが、順番の中で1つ抜けているものがあるからそれを特定する。
大文字・小文字のパターンがあるので注意する。
“`

# テストコード

“`
Test.assert_equals(find_missing_letter([“a”,”b”,”c”,”d”,”f”]), “e”)
Test.assert_equals(find_missing_letter([“O”,”Q”,”R”,”S”]), “P”)
Test.assert_equals(find_missing_letter([“b”,”d”]), “c”)
Test.assert_equals(find_missing_letter([“a”,”b”,”d”]), “c”)
Test.assert_equals(find_missing_letter([“b”,”d”,”e”]), “c”)
“`

# リファクタリング前の判定メソッド
次のアルファベットを判別するために、ハッシュで次のアルファベットを取れるように定義した。
この時に、小文字のパターンしか

元記事を表示

Railsのcase文で色々遊ぶ

# 遊ぶ
暇だったので色々rubyの問題を解いていたのだが、こういう簡単なお題でも色々書き方があって面白い。

“`
#### ルール
下記4つの文字列をもとに計算するメソッドを作る。

iは値を+1
dは値を-1
sは値を二乗
oは値を配列に出力

#### 条件
1. メソッド名はparseで、ランダムなStringの値が引数としてくる。
2. idso以外の文字列も引数として与えられるため、紛れ込んでても対応する
“`

テストの値

“`ruby
expect(parse(“ooo”)).to eq([0, 0, 0])
expect(parse(“iiisdoso”)).to eq([8, 64])
expect(parse(“ioioio”)).to eq([1, 2, 3])
expect(parse(“idoiido”)).to eq([0, 1])
expect(parse(“isoisoiso”)).to eq([1, 4, 25])
expect(parse(“codewars”)).to eq([0])
`

元記事を表示

Capistrano + Unicornでデプロイが反映されない時

Capistrano + Unicornの環境で構築すると、デプロイした内容が反映されない時がある。
ググってみると「stop → startすれば直るよ」と書いてある記事をよく見かけるが、それだと無停止デプロイできないし本番で使えないだろ、と思って原因を調べてみた。

# 原因

capistranoはデプロイ日時14桁のディレクトリを作成して、そこに新しいリソースをチェックアウトし、参紹ディレクトリを切り替える仕組みだが、これが古いディレクトリのままになっていた。
ページ内で `__dir__` で現在のファイルのディレクトリパスを画面上に出すようにしたら、デプロイ後もデプロイ前のディレクトリになっていた。

`capistrano/current` のリンク先は正常に変わっていたので、**変わったリンク先を見てくれていないのが原因**と判明。

# 対策

## working_directoryを絶対パスに変更

unicorn.rbの設定方法の記事をみると、大抵の記事が以下のように書いてある。

“`config/unicorn.rb
app_path = File.exp

元記事を表示

fly.ioへのRailsアプリデプロイ備忘録

### 概要
herokuの無料版が11月28日に終了するため、
Railsアプリを**fly.io**にデプロイし直しました。
備忘録として実施手順を残します。


### 環境
Ruby on Rails : 6.1.7
ruby : 3.0.1
postgresql : 14.6
macOS : 13.0.1


### デプロイ手順
#### fly.io利用準備
インストール〜アカウント登録〜サインイン
“`shell:ターミナルにて
brew install flyctl # flyctlのインストール

flyctl auth signup
# アカウント登録
# Webサイトが開くので画面にしたがって登録
# GitHubアカウントでも登録可能

flyctl auth signin
# サインイン
# Webサイトが開くので、「Try Fly.io for free」でサインイン
“`
#### デプロイ準備
必要ファイル生成〜一部ファイル修正
“`shell:アプリのルートディレクトリのターミナルにて
fly launch # デプロイに必要なフ

元記事を表示

[管理画面] 管理画面へのログイン機能、管理画面トップページの作成

## タスクの分解
管理画面には一般のユーザーには出来ない「他のユーザーや、ユーザーが作成したコンテンツ情報を編集、削除」できるような機能があります。

どのユーザーもその機能を使えるのではなく、専用のログイン画面を設けて管理者アカウントだけが機能を利用できるように制限する必要があります。

ユーザーに「権限」というカラムを新たに追加して「一般」ならログイン不可、「管理者」ならログインして管理画面を利用できるようにします。

この時点で「管理者用のログイン画面作成」や「ユーザーに権限判定用のカラム追加」と言ったタスクが見えてきたと思います。

また管理者用のアカウントは rails console などで毎回作成するのは面倒なので、Seedデータを用意しておきます。

それらに関連して「一般ユーザーがログインした場合はリダイレクトさせる」や「ログイン画面の見た目を整える」と言ったタスクも必要です。

ここでは、AdminLTE という公開ライブラリを利用して、管理画面用のCSSやJavascriptを適用します。

ライブラリはcloneしてローカルにCSSなどのファイルを配置しても適

元記事を表示

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

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

最近弊社では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

## 弊社での対策

### 1. Secure属性を付与する

“`ruby:config/environments/product

元記事を表示

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の方

元記事を表示

OTHERカテゴリの最新記事