- 1. 「OpenSSL::SSL::SSLError」について
- 2. Rails – NULLは許可するがブランク(空文字など)は禁止するバリデーション
- 3. Gem追加したときの「まずはinstallコマンド実行してね」を見ていく
- 4. 【1日目】フロントエンジニアがRailsを習得するまで
- 5. require: cannot load such file — sassc-rails (LoadError)の解消
- 6. Rails エラーメッセージの表示方法
- 7. [Ruby on Rails]既存のテーブルにカラムを追加するためのマイグレーションにえらい苦戦した話
- 8. 【Rails】modelでメソッドにselfをつける時とつけないときの違い
- 9. Ruby on Railsアップデート(ErrorReporter#unexpected/with_routingテストヘルパー 他 2023-11-24)
- 10. 【Rails】text_fieldにカンマ入り金額が入力され1円で出品されそうになった話
- 11. 【Rails】Capistrano × GitHub Actionsで自動デプロイ環境を整える
- 12. 【Rails】APIのコントローラでparamsを受け取る方法
- 13. 初めてのRSpecで学んだこと
- 14. 【OpenAI】RailsでChat GPTを導入しよう
- 15. ebay出品時のコンディション設定について
- 16. 勉強記録ウェブアプリ作成の軌跡 3:ルーティングinサーバーサイド
- 17. 勉強記録ウェブアプリ作成の軌跡 1:データ・モデルの設計
- 18. Controllerファイルの機能について
- 19. bcryptGemを用いたパスワードのハッシュ管理
- 20. DeviseGemを使わないログイン機能の実装方法
「OpenSSL::SSL::SSLError」について
### 【概要】
—
API通信中にSSL証明の認可にて、処理が弾かれてしまったので、今回fixした方法を備忘として記しておきます。### 【環境】
—
・Rails
・Docker
・DeepL### 【原因】
—
`DeepL`の導入後、標記の事象が発生しました。
ポイントとしては、SSL通信を行う設定にdocker側が対応していなかったことや、SSL通信するなどの事象が考えられます。なお、通常のSSL通信では下記のようにセキュリティの情報を担保されていることを確認できるようになっております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/5b6045ad-bb54-c5d2-b565-7b67b1249335.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/d3484b5f-a3e3-13f2-7b33-ad0c6e
Rails – NULLは許可するがブランク(空文字など)は禁止するバリデーション
# 例
– presence 指定でブランクを禁止する
– ただし allow_nil で値が nil の場合はバリデーションをスキップする“`rb
validates :foo_attribute, presence: true, allow_nil: true
“`# チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ
Gem追加したときの「まずはinstallコマンド実行してね」を見ていく
# 概要
Gemのファーストコミットをするタイミングがあり、既存のGemでは「初期設定コマンド実行してね。みたいなのがあるけれどどうやってやるのか」と見ていて、少しまとめたので書いておきますほとんどが [Railsガイド](https://railsguides.jp/v7.1/generators.html) に書いてある内容なため、初心者向けの記事となっています :pray:
## generate initializer
> 「初期設定コマンド実行してね。みたいなのがあるけれど…
これはアプリケーションにGemを追加したときに初期設定をアプリケーション側に記載する場合、Gem側からジェネレーターが提供されていることがありますここでは認証のgemとして使用する `devise` を例に取って確認してみます
### deviseの例
deviseのREADMEに書いてある通り下記のコマンドでdeviseの初期設定を行うと`config/initializers`配下に`devise.rb`が作成されます“`sh
$ rails generate devise:i
【1日目】フロントエンジニアがRailsを習得するまで
# 「rails 学習法」でググる
とりあえずググって上から10個くらい記事を読みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629706/eb1d7a79-884f-d7af-f5d9-08609231b6b4.png)
—
# 参考になりそうなサイト
1. railsチュートリアル(結構難しいらしい)
https://railstutorial.jp/chapters/beginning?version=7.02. progate(簡単)
https://prog-8.com/courses3. ドットインストール(簡単)
https://dotinstall.com/4. Railsガイド
https://railsguides.jp/5. Ruby on Rails Guide
https://guides.rubyonrails.org/—
# 進め方
結論自分は以下をいきなり進めようと思いました。– railsチュートリア
require: cannot load such file — sassc-rails (LoadError)の解消
sassc-rails (LoadError)の解消方法をメモしておきます。
# エラーが出た状況
以下のコードの実行の際に起こりました。
~~~
bin/rails g model Task name:string description:text
~~~# エラー内容
~~~
rubygems/core_ext/kernel_require.rb>:38:in `require’: cannot load such file — sassc-rails (LoadError)
~~~この後にもエラー文章が続きましたが、一部だけ抜粋しました。
# 解決方法
gemファイルに以下の行を追加する。
“`
gem ‘sassc-rails’
“`bundleを行こなって更新する。
これでエラーが解決しました。
Rails エラーメッセージの表示方法
## はじめに
RUNTEQに入学して2ヶ月の学習者です。
間違い、改善点等ありましたらコメントいただけると嬉しいです。
## 1.なぜこの記事を作ったのか
エラーメッセージを出そうとしたが、方法が分からなかった。エラーメッセージについての知識が足りていないので備忘録にする。
## 2.環境
– ruby 3.2.2
– Rails 7.1.2
## 3.エラーメッセージについて
“`ruby:user.rb
class User < ApplicationRecord validates :name, presence: true end ``` - 上の画像はNameの値を空にしてユーザーを作成しようとしたもの。 - エラーメッセージは、カラムにバリデーションを設定し、バリデーションの条件を満たさないデータが
[Ruby on Rails]既存のテーブルにカラムを追加するためのマイグレーションにえらい苦戦した話
## 経緯
初任教育研修で、既存のタスク管理アプリに機能を追加する際に苦戦したときのメモです。
タスク管理アプリに、タスクの期限機能を追加開発する際に、既存のtasksテーブルにduedateカラムを追加しようとしていました。## db:migrateコマンドの実行
まずはTasksテーブルにduedateカラムを追加するためのマイグレーションファイルを作成するためにgenarateコマンドを実行します。“`terminal
rails g migration AddDueDateToTasks duedate:datetime
“`
これで自動的に以下のようなマイグレーションファイルができました
“`Ruby
class AddDueDateToTasks < ActiveRecord::Migration[7.1] def change add_column :tasks, :duedate, :datetime end end ``` ## マイグレーションファイルの編集の際に陥った勘違い まず、自分が勘違いして書いた間違ったコードが
【Rails】modelでメソッドにselfをつける時とつけないときの違い
どうもこんにちは。
今回はRailsでモデルファイルで定義したメソッドに`self`をつける時とつけない時の違いについて説明します。(おまけでバリデーションメソッドについても説明しています。)
# モデルにメソッドを定義する理由
## 1. 全体で利用可能
モデルに定義したメソッドはアプリケーション全体で利用可能となるメソッドです。そのため、コントローラやビュー、他のモデルの中でも使用することができます。
## 2. 処理の共通化
アプリケーション内で何度も同じ処理をする必要がある場合があります。その時に**同じ処理の共通化**を目的としてモデルにメソッドに定義し、同じ処理をしたい箇所でメソッドを呼び出すことでコードが簡略化できます。
## 3. バリデーションを定義
本来は、`validates`メソッドを使用してカラムに対して「空白禁止」や「文字数制限」を定義します。大体のバリデーションは1行で完結できます。しかし、二つのカラムにデータが入っていない場合のバリデーションを定義するときには、俗にいう「バリデーションメソッド」を定義します。
# selfを付けない場合
Ruby on Railsアップデート(ErrorReporter#unexpected/with_routingテストヘルパー 他 2023-11-24)
## 引用元
https://world.hey.com/this.week.in.rails/errorreporter-unexpected-with_routing-test-helpers-and-more-1b2c56f6## 今週のトピック
### [ErrorReporter#unexpectedを本番環境ではreportし開発環境ではraiseするようにする](https://github.com/rails/rails/pull/49951)
https://railsguides.jp/error_reporting.html
この変更により、前提条件違反を報告する`ErrorReported#unexpected`が追加された。例えば、以下のコードではdevelopment環境とtest環境ではエラーをraiseするが、production環境ではエラーをreportする。
“`
def edit
if published?
Rails.error.unexpected(“[BUG] Attempting to edit a pub
【Rails】text_fieldにカンマ入り金額が入力され1円で出品されそうになった話
## 経緯
ECサイトにシステムから1800ドルで出品する処理を行ったところ1ドルで出品されるという報告を受ける。
⇨検証のため同じ環境で同じ価格で出品したところ、正常に出品される。
⇨原因がわからない。
という事象が発生。## 原因
出品テストの担当に聞いたところ1800ドルが1ドル、2200ドルが2ドルになっているとのこと。
ここで「入力値にカンマやピリオドが入っているのでは」と気付く。入力欄を確認するとnumber_fieldではなくtext_fieldとなっており、
価格を1,800ドルで出品してみると、1ドルで出品される現象が再現された。## いろいろ確認してみた
今回の対処としてはtext_fieldをnumber_fieldに修正し、
数字以外入力不可能とすることで完了したが、
int型,decimal型で文字列を含む数字を受け取った時の挙動を確認してみた。1,000 → 1
1,000円 → 1
10,000 → 10
¥10,000 → 0
いちまんえん → 0先頭から文字列までの数値が保存されるようだ。
## まとめ
価格、数量など数値しか扱わ
【Rails】Capistrano × GitHub Actionsで自動デプロイ環境を整える
# はじめに
RailsアプリをCapistranoでEC2(Docker使ってない)にデプロイしています。
普段ローカルで`bundle exec cap staging deploy`を実行してEC2にデプロイしていたのですが、GitHub Actionsでデプロイできるようにしました。
本記事では以下のシチュエーションを想定しています。
* developブランチで修正する
* ローカルでCapistranoデプロイが既にできている
* ステージングサーバーにデプロイする
* Macを使用している# 前提
CapstranoはSSH接続ができることを前提としています。
ローカルでデプロイできるということは、すでにローカル環境がリモートサーバーにSSH接続ができるように設定されているからです。
しかしGitHub Actionsのランナーは当然設定してあげないと、対象のリモートサーバーとはSSH接続ができません。
ランナーがSSH接続できるようになれば、あとはcapコマンドでいい感じに自動でデプロイしてくれるようになります。つまり、**ランナーがリモートサーバーとSSH接続
【Rails】APIのコントローラでparamsを受け取る方法
## 実装
“`ruby: /app/controllers/application_controller.rb
class ApplicationController < ActionController::API before_action :set_params def set_params params = {} request.query_parameters.each do |key, value| params[key] = value.to_s end @params = params end end ``` ## 解説 ### [10.1requestオブジェクト](https://guides.rubyonrails.org/action_controller_overview.html#the-request-object) 以下、日本語訳&要約 > ・リクエスト オブジェクトには、クライアントから受信したリクエストに関する多くの有用な情報が含まれています。
・このオブジェクトでアクセスできるプロパテ
初めてのRSpecで学んだこと
課題で出てきて、初めて取り組んだRSpec!
色々なポイントを学んだので備忘録として残しておく。
初学者なので、間違ってる点などあればご指摘下さい。## バージョン
– ruby 3.2.2
– Rails 6.1.7.6
————————-作成しているアプリはタスク管理アプリ
## SystemSpecの基本
### Factoryを使用したテスト
Factoryとは、railsでテストをする時用のテストデータを作成してくれるテンプレートのこと。
[`factory_bot_rails`](https://github.com/thoughtbot/factory_bot_rails) というgemをインストールすることで使用できるようになる。
(Factoryを使用する手順(インストール方法など)は今回は省略。)
今回のタスク管理アプリで、「一覧画面に遷移した場合」→「作成済みのタスク一覧が表示される」というテストコードを書く際、Factoryを使用した。“`spec/factories/task_spec.rb
FactoryBot
【OpenAI】RailsでChat GPTを導入しよう
## はじめに
どうもこんにちはもきお([@mokio_50](https://twitter.com/mokio_50))です。突然ですが皆さんはChat GPTは好きですか? 自分は大好きです。どれほど開発の手助けになってきたことか。そんなChat GPTを会社のシステムとAPI連携することになりました。その機能開発を担当したので今回はRailsでChatGPTのAPI連携する流れを記事にしたいと思います。
## 目次
1. APIキーの発行
2. 今回の実装イメージ
3. 実装
4. 検証## 1. APIキーの発行
外部APIとの連携を行うためにはAPIキーが必要になります。以下の記事が参考になりました。## 2. 実装イメージ
通常の外部API連携だと例えば法人番号を取得できるAPIと連携するとしましょう。その場合法人番号が取得できるリクエストを作成し、返ってきたレスポンスに対して整形し表示なりデータベースに保存するなりする流れになるかなと思います。今回はChat機能
ebay出品時のコンディション設定について
## コンディションについて
コンディションとはヤフオクで言う「新品」「中古」「可」など商品の状態を指すものであり、
eBayへ出品を行う際、一部のカテゴリを除き指定が必須となっています。じゃあ指定すればいいだけの話じゃん。となりそうですが実はeBayのコンディションは
ヤフオクのようにどの商品でも共通しているわけではなくカテゴリによって
選択できるコンディションが異なっています。例えば下表の赤枠は食品ですが、こちらは「New」しか選択できないのに対し
青枠のカメラ等は非常に多くのコンディションが選択できます。
![スクリーンショット 2023-11-26 0.02.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083940/5d56ae5e-2d5a-a19b-1b28-d4ca73845e65.png)
_[eBayドキュメント](https://developer.ebay.com/devzone/finding/callref/enums/conditionidlist.ht
勉強記録ウェブアプリ作成の軌跡 3:ルーティングinサーバーサイド
# 概要
「【Rails×React】UberEats風アプリを作りながら、SPA開発を学ぼう」を使って学んでいく上で自分で勉強記録アプリを作りたいと思ったので、完成するかは置いといて、とりあえず学んだことを自分が作りたいものに置き換えて考えていく。# 内容
サーバーサイドにおけるルーティングを書いていく。いわゆるwebページのURLを決めていく感じである。
例えば、買い物をするサイト(sample.com)があったとする。そのTOPページのURLが`https://sample.com`だとする。そこから商品一覧ページに遷移した時のURLは`https://sample.com/goods`のようなURLとなるでしょう。また、そのサイトにおける自分のプロフィールページは`https://sample.com/myprofile/12334`などが考えられる。最後の数字はユーザごとに割り当てられたIDと考えてもらえれば。。。このように特定のURLいわゆるリソースを取得するための道筋、ルートを書き記していく。
# 実装
基本的な書き方は以下の通りである。– do endのブ
勉強記録ウェブアプリ作成の軌跡 1:データ・モデルの設計
# 概要
「【Rails×React】UberEats風アプリを作りながら、SPA開発を学ぼう」を使って学んでいく上で自分で勉強記録アプリを作りたいと思ったので、完成するかは置いといて、とりあえず学んだことを自分が作りたいものに置き換えて考えていく。# 内容
今回作成する勉強記録アプリで使用するデータを定義する。
今回実装する内容や範囲を確認し、全体像を掴む。そこからデータの種類や名称、どのような情報を持つのか考え、押さえていく。
今回おさえたデータを入れていくデータベースの設計図がMigrationファイルと呼ばれるもの。そして、データの説明書のようなものがModelである。例えば、記事のデータにはタイトルや内容などの情報が必要である。データベースで言えばカラムとして保持されるtitleやcontentである。このようにどんなデータベースを作って欲しいかという指示するのがRailsのMigrationである。
一方で、記事のデータそのものはどういうデータかを定義しているのはModelである。
Migrationはあくまでデータベースの箱の設計図であり、中身のデータがどうい
Controllerファイルの機能について
## この記事で何がわかるか?
①Controllerファイルで、なぜリクエスト処理やモデルオブジェクトの操作が出来るか?
②継承元のControllerは、どんな役割があるか?## モデル名の付いたコントローラーから分かること
“`HomeController.rb
class HomeController < ApplicationController def top end def about end end ``` ```PostsController.rb class PostsController < ApplicationController def index @posts = Post.all.order(created_at: :desc) end def show @post = Post.find_by(id: params[:id]) end def new @post = Post.new end def create @post = Post.n
bcryptGemを用いたパスワードのハッシュ管理
# bcryptGemを用いたパスワードのハッシュ管理
Webアプリケーションのセキュリティを確保する上で、パスワードの安全な管理は重要な役割を果たします。`bcrypt` Gemを使用することで、Railsアプリケーションにおいて、パスワードを安全にハッシュ化し、管理することが可能です。この記事では、`bcrypt` Gemを使用したパスワードのハッシュ化と認証プロセスについて詳しく解説します。
## bcryptGemとは
`bcrypt` Gemは、パスワードのセキュリティを向上させるために使用されるRubyのライブラリです。このGemは、パスワードをハッシュ化することで、データベースに平文のパスワードを保存するリスクを回避します。
### パスワードのハッシュ化
– ユーザーがパスワードを設定すると、`bcrypt` Gemはそのパスワードをハッシュ化します。これにより、実際のパスワードとは異なる、独特な文字列が生成されます。
## has_secure_passwordの利用
Ruby on Railsでは`has_secure_password`メソッドを使用
DeviseGemを使わないログイン機能の実装方法
# DeviseGemを使わないログイン機能の実装方法
Webアプリケーションにおいて、ユーザー認証機能はセキュリティとユーザーエクスペリエンスを確保するために不可欠です。しかし、すべてのプロジェクトでDeviseGemなどの認証フレームワークを使用するわけではありません。ここでは、DeviseGemを使わない基本的なログイン機能の実装方法を解説します。
## サインインとログインの基本的な仕組み
### セッションの利用
– ユーザーがログインすると、そのユーザーのIDがセッション変数に保存されます(`session[:user_id] = @user.id`)。
– ブラウザはこのセッション情報を受け取り、以降のリクエストにセッションIDを含めてサーバーに送信します。
– サーバー側はセッションIDを確認し、それに基づいてユーザーがログイン済みであるかどうかを判断します。
– ユーザーログアウトして際は、ユーザーのIDをセッションから剥奪します(`session[:user_id] = nil`)。### カレントユーザーの設定
– セッションに保存されているユーザー