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

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

local: trueって何だろう?って考察した話

# はじめに
Ruby on Railsを使ったプログラミング学習をしていた際、入力フォームを作成する方法を調べていると時々見かけるlocal: trueの記述。

これって何だろう…と、ふと疑問に思ったことから調べつつ考察してみることにしました。
結論から言うと、local: trueは、Railsのバージョンによって必要になってくるform_withのオプションでした。

結論にたどり着いた経緯と、この考察の過程を通して今回私が学んだことについて記録していきます。

# local: trueとは?
今回、私がlocal: trueを調べてみようと思ったきっかけのコードがこちら。
“`ruby:
<%= form_with url: search_path, local: true, method: :get do |f| %>
<% end %>
“`
そもそもlocal: trueは何をするための記述なのでしょうか?
Google検索にて、調べてみました。

___form_withのデフォルトがAjax通信…非同期通信になってしまい、local: true

元記事を表示

【Rails】メモ書きしたコメントを一括で見る機能

## はじめに

アプリケーションコード内のコメントにtodoを書くことがあるのですが、実装途中に一覧で確認したい時があり、探したところ見つかりました!!

:::note warn
ご覧いただきありがとうございます!
この記事の投稿者は主にRuby on Railsを学習している初学者です。
理解不足な点や内容に誤りがございましたらご指摘いただけますと幸いです。
:::

## 問題
コメントに記入したtodoの内容は把握できているはずだが、見落としがないか一覧表示で確認したい。

## 解決方法
コメントをアノテーション(注釈)として残しておく機能がRailsにありましたので、そちらを使っていきます。

使用方法は簡単です、コメントの記述方法を少しだけ追加します。
“`ruby:example_controller.rb
def example_action
# TODO: 後でちゃんと実装してくださいね
puts “hoge”
end
“`
コマンドラインで下記コマンドを入力します、すると・・・
“`
bin/rails notes
“`
このような形で表示させ

元記事を表示

【RSpec】フレーキーなテスト(たまに落ちるテスト)の直し方

## はじめに
自動テストを整備しておくと大量のテストを自動実行してくれるので大変便利です。
ですが、テストコードが増えてくると「パスするはずなのに、なぜかたまに失敗する」というテストが出てきます。
このような不安定なテストを「フレーキー(flaky)なテスト」と呼びます。

### フレーキーなテストの問題点
フレーキーなテストは「たまに失敗するだけ」なので、何度かやり直せばパスします。
なので、GitHub ActionsのようなCIツール上でテストが落ちても、「あ、また落ちた。再実行したら直るかな(ポチッ)」という安易な解決策に走りがちです。

しかし、フレーキーなテストを放置するのはよくありません。
理由は以下の通りです。

– 本当はバグのせいで失敗しているのに「きっとフレーキーなテストだからに違いない」と思い込んで、そのままリリースしてしまうから(いわゆる「狼少年」状態)
– 実務レベルの巨大なテストコードになると、再実行するにしても完了まで数十分かかるので開発のテンポが遅くなるから
– 1回の再実行で全パスする保証はどこにもなく、再々実行や再々々実行しないとパスしない可能

元記事を表示

Railsの動的プルダウンリストで`include_blank: true`を削除した際のJavaScriptの不具合とその解決法

## はじめに
Railsアプリケーションで動的なプルダウンリストを扱う際、初期状態を空白にすることがあります。このオプションは一般的に`include_blank: true`で実装しますが、この記述を削除すると、JavaScriptが正常に作動しなくなり、動的に選択肢を取得することができなくなる場合があります。特に、選択肢が一つしかなくユーザーがそれを変更できない場合、JavaScriptのイベントが発火せず、結果として動的に選択肢を更新できなくなる問題が生じます。この記事では、その問題の原因と解決策を一つのケーススタディとして紹介します。

## 問題の詳細

例えば、以下のコードは予約システムで使用されるフォームの一部で、ユーザーはスタッフを選択し、その選択に基づいて利用可能な時間帯のプルダウンリストが動的に更新されます。`include_blank: true`を使用して、初期選択肢として空白を提供しています。

“`erb
<%= form_with url: time_tables_path, method: :post, local: true, data: { co

元記事を表示

devise導入における基本コマンド

# devise 導入 基本手順
## deviseとは?
deviseとはユーザー認証機能導入を手助けするgemです。
## ユーザー管理機能の実装
### deviseのinstall
#### gemファイルへの追記
**Gemfile**
“`
# 中略
gem ‘devise’
“`
#### bundleによる反映
**コマンド**
“`
bundle install
“`
### deviseの設定ファイルの作成
“`
rails g devise:install
“`
### userモデルの作成
モデルやマイグレーションファイルの自動生成、ルーティングへの追記を行う[^1]

[^1]:**user**はあくまでモデル名の一例。masterでもなんでも良い。
“`
rails g devise user
“`
### usersテーブルの作成
マイグレーションの実行
“`
rails db:migrate
“`
再起動して反映
“`
rails s
“`

### viewの作成
“`
rails g devise:views
“`

元記事を表示

新社会人が読むべき、初心者からRailsを始めて三ヶ月が経った人間の日記①

## 注意
仕事をやめ実家に帰ることとなった際、
兄に誘われた事をきっかけにRailsをやり始めた。
プログライミング?何それ?からの三ヶ月です。
つらつらと自分が分かった事、知ったことを羅列しておきます。
新社会人に教えていて、こいつどこでどうつまずいるのかよくわかんないなって思っている人は、何かの参考になるかも知れません。
※誤った情報もあるかも知れません。
# 学んでいった過程
### エンジニアにはインフラ、システム、フロントエンドなどがある。
・インフラエンジニアはシステムやインターネットを使用するために必要なサーバーやネットワークを開発、運用できるようにする仕事
・システムエンジニアはインターネット内のシステム全体の開発、設計をする仕事
・フロントエンドエンジニアはwebサイトやアプリの見た目を開発、設計をする仕事
webページで言うと、ログインしたり、お気に入りをしたり、投稿された動画が並ぶような開発をするのがシステムエンジニア、
それの見た目をしっかり作るのがフロントエンドエンジニア、
インフラエンジニアがいるからそのインターネットが使えてる。
そう言う認識です。
##

元記事を表示

Sorceryで認証機能を実装してみた

## 1.はじめに
[Railsチュートリアル](https://railstutorial.jp/)や[Devise](https://github.com/heartcombo/devise)を使ったログイン機能の記事はよく見るけど、[Sorcery](https://github.com/Sorcery/sorcery/)の記事は比較的少ないと思ったので、この記事を書きました。

皆様の学習の一助になれれば幸いです🙏

**目次**
[1. はじめに](#1-はじめに)
[2. 導入方法](#2-導入方法)
[3. ログイン機能の実装](#3-ログイン機能の実装)
[4. 動作確認](#4-動作確認)
[5. 終わりに](#5-終わりに)
[6. 参考記事](#6-参考記事)

**開発環境**
Ruby 3.2.3
Rails 7.1.3
Sorcery(gem)
jQuery 3.7.1

## 2. 導入方法

### sorcery
[sorceryの公式ドキュメント](https://github.com/Sorcery/sorcery/?tab=readm

元記事を表示

Railsで一度のフォーム送信で複数レコードを新規作成・更新する方法

## はじめに

Railsアプリケーション開発において、一度のフォーム送信で複数のレコードを新規作成または更新するニーズは頻繁にあります。例えば、予約システムで一括でスケジュールを設定したり、注文フォームで複数の商品を同時に注文する場合などです。Railsの標準的なCRUD操作では、これらのシナリオを直接的に扱うことはできません。この記事では、独自のロジックを実装することで、このような複雑なフォーム処理をどのように実現できるかをステップバイステップで説明します。

## ユースケース

例として、予約システムにおいて、ユーザーが複数の予約を同時に編集・更新できる機能を実装することを考えます。各予約は、スタッフID、開始時間、終了時間などの情報を含みます。

## ステップバイステップの解説

### ステップ1: フォームの準備

“`erb
<%= form_with url: time_table_path, method: :put, local: true, data: { controller: "staff-selector" } do |form| %>
<% @

元記事を表示

RailsアプリをHerokuからDokkuへ。「client intended to send too large body」の対処法

個人開発でRailsアプリをHeroku上にて3年ほど運用してきました。
USリージョンでのサーバーレスポンスの遅さにだんだんと耐えられなくなり、さくらのVPSで日本のサーバーに移行しようと思い立ちました。

私のRailsアプリではRedis経由でSidekiqに投げたジョブファイルの結果を、ActionCable(WebScoket)でクライアントに通知する機能があります。ところがたまたまセットアップしていたUbuntuサーバーはPassenger+Apacheの組み合わせであり、PassengerのドキュメントによるとActionCableはPassenger+Apacheでは対応していないとのこと。何人かのユーザーがパッチを当てているものもありましたし、Passenger StandaloneやPassenger+Nginxに組み替えてもよかったのですが、やはりHerokuでのデプロイの簡便さと比べると、今更Linuxのお世話をするコストが重荷になっていました。

そこで、HerokuっぽいPaaSを自前のUbuntu(またはDebian)サーバーに構築できるオープンソースのD

元記事を表示

webhookとweb APIについて浅く理解する

## この記事を読んでわかること
webhookとAPIの違いについてなんとなく理解できるかも..?

### API
クライアント(ユーザーのブラウザやアプリケーション)がTwitterのAPIエンドポイントにリクエストを送信します。
Twitterのサーバーがそのリクエストを受け取り、即座にレスポンスを返します。

コード例(Twitter APIから最新のツイートを取得):
“`ruby
require ‘twitter’

client = Twitter::REST::Client.new do |config|
config.consumer_key = “YOUR_CONSUMER_KEY”
config.consumer_secret = “YOUR_CONSUMER_SECRET”
config.access_token = “YOUR_ACCESS_TOKEN”
config.access_token_secret = “YOUR_ACCESS_SECRET”
end

tweets = client.user_

元記事を表示

【Rails】【初学者向け】RSpecのシステムテストで「Net::ReadTimeout:」となってしまう事象

## 背景
実務でRSpecを使用している為、キャッチアップとしてRailsチュートリアル教材を活用し、RubyのテストツールであるMinitestをRspecへ代替えし学習を進めています。
当記事の目的は、備忘録と同じようなエラーに遭遇してしまった方向けに作成しています。

## ハマってしまった箇所
動的なページタイトルが正しく表示されているかテストを実行したところ、下記のエラーに遭遇。
システムテストなので、ブラウザは立ち上がるがテストは進まずタイムアウトとなってしまう。

“`
1) StaticPagesController ページタイトルを表示 Help 表示される
Failure/Error: visit static_pages_help_url

Net::ReadTimeout:
Net::ReadTimeout with #
“`

テストの内容はこんな感じ。
“`ruby:spec.rb
RSpec.describe StaticPagesController, typ

元記事を表示

Railsを使ってアプリを作る(基礎中の基礎)

# はじめに
今回は、railsをつかってアプリをつくり、デプロイまでの基本的な流れをまとめました。
基礎中の基礎という通り、画面にHello,worldを表示するだけのアプリになります。
エディタはVSCodeを用いて、バージョン管理をGitで行い、Renderへデプロイします。
使用ハードはmacbook m2です。
Rubyはデフォルトで入ってるので、Railsのインストールから始めます。

# Railsをインストール
“`
$ gem install rails
“`

-vを行うことでバージョンの指定もできます。

“`
$ gem install rails -v 7.0.4.3
“`

次にbundlerをインストールします。

“`
$ gem install bundler
“`

# アプリを作る

Railsプロジェクト用のenvironmentディレクトリを作ります。

“`
$ cd
$ mkdir environment
$ cd environment/
“`

rails newを実行する。
このとき、PCにインストー

元記事を表示

rescueとrescue_fromの使い方

# はじめに

先日、業務でrescueを使用したエラー処理を実装したので、備忘録として記事にしたいと思います。

この記事では、rescue と rescue_from の基本的な使い方をまとめてみました。

私自身、まだまだ未熟な経験の浅いエンジニアですので、誤った解釈をしている可能性もあります。もしそういった場合がありましたら、ぜひコメントでご指摘いただければ幸いです。

# rescue

`rescue` は、プログラム内で発生する特定のエラーを効果的に捕捉し、対処するための機能です。
これにより、エラー発生時の適切な対応やプログラムの安定稼働が可能になります。

### 基本構文

`rescue` を使うことで、特定のエラーが発生した時に特定のコードを実行するよう設定できます。
基本的な形式は以下のようになります。

“`ruby
begin

# 例外が発生する可能性のあるコード

rescue [例外クラス]

# 例外が発生した時に実行するコード

end
“`

### 使用例

例えば、ユーザーがデータベースに存在しない ID でアクセスしたときにエラ

元記事を表示

【Rails】form_withモデルニカONE {PIECE of cake}アイランド編【初心者です】

# form_withの今の認識
※間違っている可能性があります

viewからcontrollerに送るヘルパーメソッド、
モデルを入れると、viewがnewならcreateへ、
viewがeditならupdateへ良き塩梅で行ってくれる。
良き塩梅に行ってくれるため、
新規作成の時と編集画面の時で_formのようにviewをフォーム配下でまとめられたりする。
良き塩梅で行ってくれるとなんでまとめられるのかって?
newの時urlでcreateに繋げちゃった世界線で考えてみて下さい、
editの時におんなじ感じで書くし、まとめよって思いますよね?
createいってまうて!おいだるいて!ってなるでしょ?
痒い所に手が届く、そんなヘルパーメソッドだと思ってます。

# form_with使い方
“`ruby
<%= form_with @ニカ do |d| %>
<%= d.hidden_field :ヒトヒトの実 %>
<%= d.submit 'ゴムゴムの実' %>
<% end %>
“`

これがform_withの使い方です。
今回の場合form_withを用いて、
dに

元記事を表示

Rails 6.0.3でRuby 2.6.6の環境構築

 Ruby on Railsなるものを勉強してみようと『パーフェクトRuby on Rails【増補改訂版】』に手を出しました。

 数年前の書籍だから完全に同じ環境を構築する必要も無さそうだけど、出来るだけ同じ環境で勉強してみることにしました。意外と手間が掛かったので記録しておきます。

 書籍の「Appendix Railsの開発環境構築」に関しては特に問題は無かったので省略して、Railsのversion 6.0.3をインストールする部分を説明していきます。

 まず普通に`gem install rails -v 6.0.3`をすると下記のようにnokogiriライブラリに関するエラーが出ます。
“` console
$ gem install rails -v 6.0.3
(中略)
Successfully installed activesupport-6.0.3
Building native extensions. This could take a while…
/home/user/.rbenv/versions/2.6.6/lib/ruby/2.6.0/ru

元記事を表示

Railsでの命名の単数複数形使い分け

### モデル名

– **形式**: 単数形
– **例**: User, Product, Order
– **理由**: モデルは1つのオブジェクトを表すため
– **参考コマンド**: “`rails generate model Post content:text“`
(postsテーブルにtext型のcontentカラムを作成)

### コントローラー名

– **形式**: 複数形
– **例**: UsersController, ProductsController, OrdersController
– **理由**: コントローラーは複数のリソース(モデルのインスタンス)を扱うため
– **参考コマンド**: “`rails generate controller Posts home about“`
(home,aboutアクションを持つPostsコントローラーを作成)

### テーブル名

– **形式**: 複数形
– **例**: users, products, orders
– **理由**: 1つのテーブルには複数のレコー

元記事を表示

Sidekiq + Redis + ActiveJobでLINE定期通知機能を実装してみた

## はじめに

個人開発にて、`Sidekiq`、`Redis`、`ActiveJob`を組み合わせたLINE通知機能を実装しました。

備忘録として、実装の流れをまとめていきたいと思います!

**▼個人開発についてまとめた記事**

https://qiita.com/rk2530/items/61b1532dffef6382af77

:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合がございます。
もし間違いがあればご指摘いただけますと幸いです。
:::

## 環境
– Ruby 3.2.2
– Ruby on Rails 7.0.8
– Render

## 事前準備
– [Render](https://render.com/)アカウントの作成
– [LINE Developersコンソール](https://developers.line.biz/ja/docs/line-developers-console/)で[チャネルを作成](https://developers.line.biz/ja/docs/messaging-api

元記事を表示

【Rails】Ferrumを使ってHTMLをPDFへ変換してみた(wicked_pdfからの移行)

HTMLからPDFを生成する処理が上手く動かなくなってしまったため、
PDF生成ライブラリを`wicked_pdf`から`Ferrum`へ移行しました。
まだまだRails初心者なので、何か間違い等あればご指摘いただけると幸いです!

## HTMLからPDFの変換処理に定番だった`wicked_pdf`

上記の通り、PDF生成機能の実装によく使われていたかと思います。

今回、私はRailsのバージョンを6から7へ引き上げて動作確認を行なった際に、
既存で実装されているPDF生成機能が動かなくなっていることに気がつきました。
なお、既存の実装内容は、viewテンプレート(hogehoge.html.erb形式のファイル)から
`wicked_pdf`を使用してPDFへ変換処理を行っていました。

`wicked_pdf`自体は現在もサポートされているgemですが、
このgemは`wkhtmltopdf`というHTMLをPDFに変換するCLIツールに依存しています。
そして、この`wkhtmltopdf`は、2023年1月にGitHub上からリポジトリがアーカイブされており、開発終了

元記事を表示

[マイグレーション]Mysql2::Error: BLOB, TEXT, GEOMETRY or JSON columnの原因と解決策

# エラー文
テーブル作成のため、モデルとともに作成されたマイグレーションファイルに、型とカラム名を書き、`rails db:migrate`を実行した。

するとターミナルが以下のようなエラーを吐き出した。
“`terminal
xxxxxx@yyyyyy testApp % rails db:migrate
== 20240404111608 DeviseCreateUsers: migrating ================================
— create_table(:users)
rails aborted!
StandardError: An error has occurred, all later migrations canceled: (StandardError)

Mysql2::Error: BLOB, TEXT, GEOMETRY or JSON column ‘profile’ can’t have a default value
/Users/code/Desktop/xxxxx/project_2.0/testApp/db/

元記事を表示

【個人開発】自分以外の「死ぬまでにやりたいことリスト」が見れるサービスを作りました

# はじめに

皆さま、こんにちは、すみ([@sumisumi2000](https://twitter.com/sumisumi2000308)) と申します。
2024 年 1 月 20 日より、オンラインプログラミングスクール RUNTEQ にて、Ruby on Rails を学習しています。

2024 年 3 月 30 日にリリースしたアプリの紹介と開発の振り返りをまとめました!
アプリについての記事は初めてなので、温かい目で見ていただけると幸いです。

# 目次

1. [作成経緯](#作成経緯)
2. [アプリの紹介](#アプリの紹介)
3. [技術構成](#技術構成)
4. [こだわったポイント](#こだわったポイント)
5. [開発の流れ](#開発の流れ)
6. [改善点](#改善点)
7. [開発を振り返って](#開発を振り返って)

# 作成経緯

通っているオンラインプログラミングスクールで受講生がアプリを出し合おう!というイベントがあります。
そこに向けて、カリキュラムで行っていた Rails の復習と、カリキュラムであまり触れない CSS の学習を兼ねてア

元記事を表示

OTHERカテゴリの最新記事