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

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

【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]
“`

image

# 前提

まずは `Gemfile` で `pry-rails` を入れておく

“`
gem ‘pry-rails’
“`

インストールしておく

“`
$ bundle install
“`

# 解決

pryの設定でページングを無効にする

“`
vi .pryrc
“`

“`
Pry.config.pager = false
“`

結果の例

“`
pry(main)> [*1..10000]
“`

i</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Rails</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/YumaInaura/items/db74ea3ca2f0b2316a4c'>元記事を表示</a></div>
<h3 id=Railsアプリのエラーを自動でSlackに通知する方法

この記事では、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:

# 違いまとめ

| メソッド     | 用途 | 返り値 | 条件に合わない場合 |
|————-|—————————————-|———————–|——————–

プログラミングとHTMLの「class」の違いについて

Qiitaにはマークダウン式で記入するルールというルールがあるのですね。
毎回無視していて申し訳ありません。
マークダウン式が分かっていないので、近日中に必ず学んでマークダウン式で記事を書きたいと思っているので今回は(もしかしたら次回も)この書き方で勘弁してください。

Railsの勉強をしています。
練習課題に日々取り組んでいますが、その中で気になることがありました。
記述していく中で「class ~」と出てくるのですが、これってHTMLのclassと同じ意味なのか、違う意味なのか、ということです。

同じ「class」なんだから同じ意味でしょ!と最初は深く考えていませんでしたが、進めるにつれて「やっぱり意味が違うのでは?」と思うようになりました。

そこで今更ながら、Ruby(プログラミング)とHTMLの「class」の意味の違いをまとめておきたいと思います。

Ruby(プログラミング)の「class」は「設計図」
HTMLの「clss」は「ラベル」

という理解が自分の中ではしっくりきます。

Rubyの「class」は、「class」の中で動作が定義されていきますが、
HTM

【Rails】config.load_defaultsで指定したバージョンのデフォルト設定を読み込む

## はじめに

Railsアプリケーションのバージョンアップ作業に携わる中で、`config.load_defaults`という設定オプションについて学びました。

そこでこの記事では`config.load_defaults`の役割や使い方、バージョンアップ作業時の取り扱いについてまとめます。

対象読者は次のとおりです。

– Railsの設定まわりに興味のあるエンジニア
– 歴史のあるRailsアプリケーションに携わっている(Rails5.0以前)
– Railsのバージョンアップ前に設定ファイルをリファクタリングしたいエンジニア

## `config.load_defaults`とは?

`config.load_defaults`とは、**指定したRailsバージョンのデフォルト設定を一括で読み込むための設定です。**

`config/application.rb`に記述されています。

下記はRails7.2で`rails new`した時点の`config/application.rb`です。

“`rub

Github OAuthAppでOAuth2.0を体験してみた

# 背景
OAuth2.0の仕組みを触って体験したかったので、Github OAuthAppを使って実践してみることにした。

理解に間違えなどがあればご指摘いただけると幸いです。

# OAuth2.0とは?
クライアントアプリ(以降:クライアント)がユーザーが登録しているGihubのユーザー名を取得したいとする。
当然、クライアントはユーザーのGithubへのアクセス権限がない為、OAuth2.0という技術を使って解決する。
方法は、クライアントがユーザーにGithubへの認可・認証をしてもらい、Githubの認可サーバからアクセストークンを発行してもらうことで、クライアントは一時的にユーザーが認可した範囲のGithub情報へアクセスすることができるようになる。

尚、OAuth2.0のフローには4つの種類があり、当記事は認可コードを使ってアクセストークンを取得するフローで検証していく。

# 前提
・Githubアカウントを持っていること
・rails new でプロジェクトが作成されていること

**※当記事はOAuth2.0の体験用に最小限かつ簡易的に作ったものです。ご参考に

RailsのコントローラーとDB作成

# railsでコントローラーを作るには
“`
rails generate controller コントローラー名 アクション名1 アクション名2 …
“`
とする。
また、コントローラー名は複数系にする
アクション名は作りたいファイル名にする

“`
rails generate controller users index
“`
# railsでDBを作成するには
“`
rails generate model モデル カリム名:データ型
“`
モデルは先頭の文字を大文字にして単数形にする


“`
rails generate model User name:string email:string
“`
とする。

そして、データベースの変更を保存する
“`
rails db:migrate
“`
# カリムだけを追加するには
マイグレーションファイルの名前はなんでもいいが変更がわかるような名前が望ましい
“`
rails generate migration add_user_id_to_posts
“`
とコマンドを打ち込んで、マイグレーショ

dockerでrailsアプリを動作させるのとgitとgithubの使い方

# dockerの中のrailsアプリを実行する
①コンテナを再起動させる
“`
docker-compose up –build
“`
②コンテナの中に入るために、
コマンドを書いて、別のターミナルを開いてアプリのファイルまで行ってから

“`
docker-compose exec web bash
“`
コマンドを打つ
③サイトにアクセスする
“`
localhost:3000
“`

# gitとgithubの使い方
コードをgithubにアップするためには、
①現在の変更したファイルをステージ(追加)する。
“`
git add .
“`
②ステージされた変更をコミット(確定)させる。
これにより、ステージされた変更がローカルリポジトリに保存されます
“`
git commit
“`
③ローカルリポジトリの変更をリモートリポジトリに反映させる
“`
git push
“`
# PostgreSQLに入るには
“`
docker ps
“`
を出力して今動いているコンテナのIDを取得する
そしてPostgreSQLのIDをメモして
“`
dock

ActiveRecord::Core の clone と dup の違い

## clone と dup の違い

– clone
– shallow コピー
– **id を保持する**
– **タイムスタンプやロックに関する属性を保持する**
– **属性はコピーしない**
– つまり、clone したオブジェクトの属性を変更すると、元のオブジェクトの属性も (同じオブジェクトなので) 変更されてしまう
– アソシエーションはコピーしない

– dup
– shallow コピー
– **id は保持しない (新規レコード)**
– **タイムスタンプやロックに関する属性は保持しない**
– **属性をコピーする**
– アソシエーションはコピーしない

“`rb
yoyo = Yoyo.find_by!(name: ‘モジョ’)
cloned_yoyo, duped_yoyo = yoyo.clone, yoyo.dup

# duped_yoyo は新規レコード扱い。
[yoyo.id, cloned_yoyo.id, duped_yoyo.id]
#=> [1, 1, nil]
[yoyo.new

ルーティングは極力ルーティングヘルパーを使おう

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

## 記事投稿の背景
この記事ではアプリ制作中に分かったview側でのルート指定の方法やそれぞれのルーティングのメリット・デメリットをご紹介していきます。

## ルート指定の方法

以下の資料はRailsで閲覧できるルーティングのリストです。
“`ruby:docker compose exec web bin/rails routes
docker compose exec web bin/rails routes
Prefix Verb URI Pattern Controller#Action
home_index GET