- 1. ログアウトでルーティングエラー
- 2. 【Rspec】綺麗に書くを意識し始めたら読んでほしい!
- 3. 【Rails6】[ActionDispatch::HostAuthorization::DefaultResponseApp] Blocked hosts:の対処法
- 4. [実装のヒント] true / false を返すメソッドをシンプルに実装する
- 5. [実装のヒント] Rails での開発の時は blank? と present? を使いこなす
- 6. エンジニア初心者が感動したCursor vs. VS Code: AIで簡単にコードを書く方法
- 7. パーフェクトRubyonRails備忘録1
- 8. 誰も使わなかった奇妙な設定
- 9. Basic認証の導入ガイド
- 10. 素朴な疑問 ~ シリアライザーって何? ~
- 11. Devise のモジュール(confirmable, lockable, omniauthable 等の機能)を後から有効化する
- 12. Rails Next.jsでsessionを用いた認証機能を実装する (初期設定編)
- 13. GitHub Actionsでテストを自動化させてみた(Rspec ,Rubocop)
- 14. ssh-agentの設定
- 15. RSpecでインスタンスの無効な状態を検知するためにvalid?メソッドが必要な理由
- 16. 開発前に知りたかった!アプリ開発の注意点とポイント
- 17. 【Ruby】eachメソッドで便利なやつ
- 18. Slimにおいて、コメントアウトが原因で表示されない箇所があった問題
- 19. 【Rails6.1】ActionController::BadRequest (Invalid request parameters: Invalid encoding for parameter: )の対処法
- 20. FactoryBotの基本的な使い方
ログアウトでルーティングエラー
# Routing Errorが起きた
deviseを導入して、ログアウトしようとしたところ、下記のエラーが発生しました
“`
ActionController::RoutingError (No route matches [GET] “/users/sign_out”):
“`このエラーの原因はアプリを作成したばかりで、javascriptが正常に動作していないことが原因でした
# 原因の確認
ルーティングがあっているか確認
“`
destroy_user_session DELETE /users/sign_out(.:format) public/sessions#destroy
“`“`_header.html.erb
<%= link_to destroy_user_session_path, method: :delete, style: "display:flex; align-items: center; flex-direction: column;" %>
“`path名も正しい、`method: :delete`と記述している
【Rspec】綺麗に書くを意識し始めたら読んでほしい!
# はじめに
こんにちは、エンジニア3年目の嶋田です。
この記事を開いていただきありがとうございます!今回の記事では、RSpecの基本的な構文と概念についてまとめました。
最近の業務ではRSpecを使用していますが、
どういうコードが読みやすく綺麗であるのかを最近意識するようになってきました。
(気にするのが遅いですし、まだまだですが…)その中で、理解しておくといいなと思ったことを自分自身のために備忘録としてまとめました。
よろしければ、最後までお付き合い下さい。## 目次
– [RSpecとは](#RSpecとは)
– [describe, context, it の使い分け](#describe-context-it-の使い分け)
– [let と let! の違い](#let-と-let-の違い)
– [テストデータと変数の管理](#テストデータと変数の管理)
– [shared_examples の使い方](#sharedexamples-の使い方)
– [まとめ](#まとめ)
– [参考文献](#参考文献)## RSpecとは
RSpecはRuby言
【Rails6】[ActionDispatch::HostAuthorization::DefaultResponseApp] Blocked hosts:の対処法
## 問題
Rails6で任意のhost名でアクセスしようとした時に、以下のエラーがでます。
“`ruby
[ActionDispatch::HostAuthorization::DefaultResponseApp] Blocked hosts: example.com
“`## 解決方法
Rails6で追加された、ActionDispatch::HostAuthorizationによるものです。
https://github.com/rails/rails/pull/33145対応方法は以下の3つがあります。
### 1. Rails.application.config.hostsにhostを追加する
development環境では、デフォルトで以下のhostが登録されています。
これ以外で接続しようとするとブロックされるため、必要なhost名を追加します。
“`ruby
Rails.application.config.hosts = [
IPAddr.new(“0.0.0.0/0”), # All IPv4 addresses.
IPAddr.new(“
[実装のヒント] true / false を返すメソッドをシンプルに実装する
最近自分が実装しているのを見せながらペアプロしたりする時に『こういう実装はダメなんですか?』って質問を受けることがある。
そんな中からとして **『こうあるべき実装』** と、 **『動くかもしれないけど望ましくない実装』** とかをサンプルや実装していく順序なども交えながら記事にして残しておこうかなと思う。
## true / false を返すメソッドを実装する
まずは実装の前提となるクラスの初期化用のコードを貼っておく。
“`ruby
class SomethingOutputService
include ActiveModel::Model
attr_accessor :date_from
attr_accessor :date_todef initialize( date_from, date_to )
begin
self.date_from = Time.parse( date_from )
self.date_to = Time.parse( date_to )
rescue ArgumentErr
[実装のヒント] Rails での開発の時は blank? と present? を使いこなす
Rails用に条件分岐のコードを書く時、`blank?`メソッドと`present?`メソッドを効率的に組み合わせるだけですごく可読性のいい式が書ける。特に最近、緩やかなコード規約というものを開発チームと共有していて、その中で`unless`文の使用はよっぽどのことがない限り避けるように記載していたりする。で、実例だ。今回は haml で書かれたファイルの中に条件分岐のコードがあるってサンプルでサクッと解説する。
“`haml
– unless name.blank?
= name
“`**『name が空じゃなかったら表示する』** ってだけのすごいシンプルなコード。ただこのコードは`unless`文を使う必然性がない典型的な例だ。`if`文に置き換えても否定式にすることもなく、以下のように書くことがでける。
“`haml
– if name.present?
= name
“`**『name が空じゃなかったら表示する』** は __『name が存在したら表示する』__ と読み替えることができる。それをそのままコードにしただけ。他の言語だとあまり見かけ
エンジニア初心者が感動したCursor vs. VS Code: AIで簡単にコードを書く方法
## はじめに
エンジニアとして効率的にコードを書くことは、開発スピードや品質を向上させるために非常に重要だと思っています。私はエンジニア初心者のため、コードエディタは初めて触りますが、CursorのAI機能はまさに初心者のためにあるようなもので。とても感動しました!
この記事では、人気のあるコードエディタであるVS Codeと、AIを用いて簡単にコードを書くことができるCursorを比較し、特にAIによる質問機能について詳しく説明します。## VS Codeとは
Visual Studio Code(VS Code)は、Microsoftが開発した無料のソースコードエディタです。以下の特徴があります:– **拡張機能**:膨大な数の拡張機能が提供されており、言語サポートやデバッグツールを簡単に追加できます。
– **統合ターミナル**:エディタ内でターミナルを開くことができ、コマンドライン作業を効率化します。
– **Git統合**:Gitリポジトリとの統合が強力で、バージョン管理が容易に行えます。
https://www.cursor.com/## Cursorとは
パーフェクトRubyonRails備忘録1
# find,find_by,whereの戻り値の違い
– find
– ActiveRecord::RecordNotFound例外
– find_by
– nil
– where
– 空のActiveRecord::Relationインスタンス# ActiveRecord::Relationについて
– ActiveRecord(モデル)に対してQueryInterface(select,where,etc)が呼ばれることでActiveRecord::Relationのインスタンスが作成される
– ActiveRecord::Relationインスタンスに対してQueryInterfaceを繰り返し呼び出せる
– 実際にデータが必要になった時点でSQLが発行され、それまではActiveRecord::RelationにSQLの情報が蓄積される。
– ただし、 `to_a`メソッドにより、明示的にSQLを発行することもできる。# scopeについて
– スコープとは?
– よく使う検索条件に名前をつけて再利用しやすくする仕組み
– スコー
誰も使わなかった奇妙な設定
> こちらは「Ruby on Rails パフォーマンスアポクリファ」のサンプル章です。[日本語での完全版が現在Gumroadで入手可能です](https://nateberk.gumroad.com/l/apocrypha_ja)。
Rails のバックグラウンドジョブの多くには、一般にパフォーマンスの問 題があります。
バックグラウンドジョブでは、しばしば大きなデータセットを処理しま す。そして、その際に User.all.each(&:send_daily_newsletter) のよ うな愚かなことをしてしまいます。開発環境やテスト環境では、User.all が返すのは、おそらく数行、多くて も十数行でしょう。開発者の多くは、自分のローカルマシン上の seed デー タを極端に限定しています。
しかし、プロダクション環境では、User.all はおそらくかなりの数の行 を返します。開発するアプリケーションによっては、数十万行になるかもし れません。
10 万行を返す結果セットには、ほんのわずかばかり問題があります。それ は SQL クエリーが返すのに時間がかかると
Basic認証の導入ガイド
### 概要
Basic認証とは、HTTP通信の規格に備え付けられているユーザー認証の仕組みです。サーバーと通信できるユーザー名とパスワードをあらかじめ設定し、それに一致するユーザーのみがWebアプリケーションを利用できるようにします。この記事では、RailsアプリケーションにBasic認証を導入する方法を簡単に説明します。### 1. Basic認証の設定方法
#### 1.1 コントローラーでの設定
`authenticate_or_request_with_http_basic`メソッドを使用して、開発中のRailsアプリケーションにBasic認証を導入します。以下の例では、ユーザー名`admin`とパスワード`password`で認証を行います。“`ruby
class ApplicationController < ActionController::Base before_action :basic_auth private def basic_auth authenticate_or_request_with_http_basic do
素朴な疑問 ~ シリアライザーって何? ~
# 素朴な疑問
筆者が新人教育する中で、プログラミング実務未経験者がよくされる質問を紹介します。
未経験者に限らず、「そういえば何のために使っている技術(ツール)なんだっけ?」とよく理解していないまま利用しているケースも少なくありません。
この記事で、その純粋で素朴な疑問を改めて明確にして理解を深めていきましょう!# 今回の疑問
今回の疑問は表題通り、「**シリアライザー** って何?」 です!
実務未経験者のポートフォリオレベルでは、シリアライザーを [ActiveModelSerializers](https://github.com/rails-api/active_model_serializers) などのライブラリを使って導入されておらず、実務で初めてシリアライザーの存在を認識するケースが多いようです。
そこで、本記事で取り上げたいと思います!# シリアライザーって何?
Railsのシリアライザーは、データをJSON形式に変換するためのツールです。
簡単に言うと、**データベースから取り出した情報
Devise のモジュール(confirmable, lockable, omniauthable 等の機能)を後から有効化する
成り行き任せで作っていない限りそんなことはあまり起こらないかとは思うのですが、
成り行き任せで作っていてデフォルト(`rails g devise:install` しただけ)では有効化されていない Devise の下記モジュールを後から有効化することになったのでその顛末を記しておきます。“`
:confirmable, :lockable, :timeoutable, :trackable, :omniauthable
“`環境は Windows 10 Pro、Ruby3.2.2、Rails7.1.2、devise4.9.3。
認証機能を入れる(`rails g devise` する)モデルは本稿では `User` としていますので異なる場合は適宜読み替えてください。## 通常(Devise導入時に同時に有効化)との比較
Devise を導入する際の手順は大雑把に以下のような感じですが(Devise導入手順を仔細に解説した記事はごまんとありますので詳細はそれらをご覧ください)、
> 1. gem を `bundle install`
> 2. インストール(`$
Rails Next.jsでsessionを用いた認証機能を実装する (初期設定編)
# はじめに
この記事はRails、Next.js利用したSPAでsessionによる認証機能を実装する記事の、初期設定編です。
ブラウザからtestボタンを押すと、Railsバックエンドにリクエストが送信されて、簡単なレスポンスをコンソールに表示するところまでを扱います。
読者はRailsとNext.jsを単体では触ったことがあるものの、SPAを実装したことがなくCORSの知識が0の人を対象にしています。# 開発環境
Rails 7.1.3.4
Next.js 14.2.5# 手順概要
1. RailsのAPIモードで新プロジェクトを立ち上げる
1. Next.jsで新プロジェクトを立ち上げる
1. Next.jsとRailsを接続して”hello world”ページを表示させる
1. RailsとNext.jsのサーバを起動させる
1. RailsとNext.jsサーバ間でのCORSを設定する
1. Railsのルーティングとコントローラーを設定する
1. Next.jsサーバからRailsサーバにgetリクエストを送信する
1. 最終確認# 本編
#### Rails
GitHub Actionsでテストを自動化させてみた(Rspec ,Rubocop)
## はじめに
個人開発にて、`GitHub Action`を使用して`Docker`環境下におけるテストの自動化を行いました。
自動テストを書いた後に、「なんか便利そう」という気持ちで実装を始めましたが、必要な設定の全貌が掴めず、時間を大幅に溶かしてしまいました…💦
これから実装する方に向けて、コードを見ながら流れを掴んでいただけるように記載していきます!:::note warn
私はプログラミング学習中で、初学者です。
内容に間違いがあるかもしれませんので、もし間違いがあれば教えていただけると幸いです。
:::## GitHub Actionsとは
GitHub Actionsは、あらかじめ定義した処理と条件の組合せを自動化するGitHubの機能です。
今回は、リポジトリへのプッシュをトリガとして、YAML ファイルに定義したテスト(Rspec)と体裁チェック(Rubocop)を自動で実行します。https://docs.github.com/ja/actions/about-github-actions/understanding-github-actions
##
ssh-agentの設定
# はじめに
前回のrailsのDevcontainerでsshが組み込まれてないので、git関係が利用できていなかったので、それを対応した備忘録です
似た記事がたくさんあるので、詳細な説明は割愛します# 確認
以前利用した環境は、こちらになりますhttps://qiita.com/youfuku/items/797cf0f745c7c7bbf0f6
コンテナ内でgitコマンドを実行するとこんな感じになります
“`
$ git pull
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.
“`# 確認
こちらを利用させていただきました(ありがとうございます)https://zenn.dev/nayushi/articles/5d577c93e03a9b#keychain%E5
RSpecでインスタンスの無効な状態を検知するためにvalid?メソッドが必要な理由
# 通らなかったテスト
RSpec でテストを学び始めたが、“`ruby
it “nicknameが存在しなければ無効な状態であること” do
user = User.new(nickname: nil)
user.valid?
expect(user.errors[:nickname]).to include(“can’t be blank”)
end
“`このコードで、なぜ
“`ruby
user.valid?
“`の部分が必要になるのかわからなかった。ただ単に expect()メソッドに引数を渡してあげればいいのでは?と思い user.valid?を省略したらテストが通らなかったのでその理由を調査。
# valid?メソッド
そもそも valid?メソッドは Rails ガイドによると
> Rails は、Active Record オブジェクトを保存する直前にバリデーションを実行します。バリデーションで何らかのエラーが発生すると、オブジェクトを保存しません。
> valid?メソッドを使って、バリデーションを手動でトリ
開発前に知りたかった!アプリ開発の注意点とポイント
# はじめに
アプリ開発を進める上で、考慮すべきことややるべきことは多く、悩むことも多いと思います。私自身もあまり考えずに突っ走ってしまったことで後悔した経験がありますが、その中で得た知見も多くあります。そこで、開発を進める前に考えておくべきことをまとめました。これは、私が開発する前に知りたかったことを中心に、新たに個人開発をする際の参考にするための備忘録です。
# 対象読者
– Ruby on Rails7で開発しようとしてる方
– フロントエンドに迷っている方
– Dockerを使おうとしている方
– 一通り学習を終えて、これからポートフォリオ作成に取り掛かろうとしている人
– 開発環境の構築方法を知りたい方# 環境構築
開発前に開発環境を考えることは非常に重要です。
特に、バックエンドだけで開発を行う場合と、バックエンドとフロントエンドを分けて開発を行う場合では、それぞれのメリット・デメリットが異なるため、それらを考慮しながら進めるのが良いと思われます。
### バックエンドのみで構築
#### メリット
– 開発環境の構築が比較的容易
– バックエンド技術に集
【Ruby】eachメソッドで便利なやつ
## 概要
eachメソッドで使える便利なものをまとめました。
配列のメソッドがほとんどなのでそっち調べたほうが早いかも。https://qiita.com/yyykms123/items/e1bcb838f56100d12025
## 起点、回数の指定
### **`first(n)`**
* 先頭からn個の要素分まで実行する(回数指定)~~~ ruby
num = [1, 2, 3, 4, 5, 6, 7, 8, 9]# 先頭から3回まで
num.first(3).each do |num|
puts num
end# result
1
2
3
~~~### **`last(n)`**
* 末尾n個の要素分、実行する(起点指定)~~~ ruby
alphabet = [“A”, “B”, “C”, “D”, “E”,]# 末尾3回分まで
alphabet.last(3).each do |num|
puts num
end# result
“C”
“D”
“E”
~~~### **`list[n1..n2]`**
* n1個目からn2個
Slimにおいて、コメントアウトが原因で表示されない箇所があった問題
# 結論
Slimのコメントアウトの仕様を理解していなかったため、コメントアウトが想定外に適用されてしまっていた# 状況
– 一見して構文としては間違っていないはずなのに表示されない部分がある
– この問題に直面する前、別件のエラーがあり対応をしていた
– そのエラーの調査のためにコメントを追加したり少し手を加えていた## 詳細
– 以下のようにコメントを追加していた
– `/ not error START`、`/ not error END` というコメントを追加してエラー箇所を絞り込むように調査していたためこのようなコメントが残っていた1. 単に「コード説明目的のコメント」として使いたかった
1. コメントが見やすいように一番左に寄せて書いた“`slim:サンプルコード
article.blog-post
h1.blog-title AIを使ったコード生成:プログラミングの新時代section.published-at
time
= l(article.published_at? ? article.publish
【Rails6.1】ActionController::BadRequest (Invalid request parameters: Invalid encoding for parameter: )の対処法
## はじめに
Rails6.1へのアップデート中に以下のエラーが出たので、このエラーの対応方法をまとめていきます。
“`ruby
ActionController::BadRequest (Invalid request parameters: Invalid encoding for parameter: xxxxx)
“`## 問題
Rails6.1からUTF-8以外を含むPOSTリクエストはエラーが出るようになったようです。> Catch invalid UTF-8 parameters for POST requests and respond with BadRequest.
https://github.com/rails/rails/blob/6-1-stable/actionpack/CHANGELOG.md#rails-610-december-09-2020
## 解決方法
skip_parameter_encodingを対象のアクションに対して設定します。
“`ruby
class TestController < ApplicationCon
FactoryBotの基本的な使い方
# はじめに
こんにちは!
社会人一年目の石川です。
記事をご覧いただきありがとうございます。現在、私はRSpecを使ってモデルのテストコードを書いています。その際にFactoryBotを活用しているため使い方をまとめます。
## 目次
1. [FactoryBotとは?](#factorybotとは)
1. [Gemfileの設定](#gemfileの設定)
3. [FactoryBotの設定](#factorybotの設定)
3. [基本メソッドの使用](#基本メソッドの使用)
・[buildメソッド](#buildメソッド)
・[createメソッド](#createメソッド)
3. [モデルのテストコード](#モデルのテストコード)
4. [最後に](#最後に)## FactoryBotとは?
FactoryBotは、テスト用のデータを簡単に作成するためのライブラリです。テストケースごとにデータを手動で作成するのは面倒ですが、FactoryBotを使うことで、再利用可能なテンプレートを使って効率的にデータを生成できます。:::note info
#### メリッ