- 1. ログアウトでルーティングエラー
- 2. 【Rails6】[ActionDispatch::HostAuthorization::DefaultResponseApp] Blocked hosts:の対処法
- 3. [実装のヒント] true / false を返すメソッドをシンプルに実装する
- 4. [実装のヒント] Rails での開発の時は blank? と present? を使いこなす
- 5. 【paiza】ハンドルネームの生成問題を解いてみた
- 6. エンジニア初心者が感動したCursor vs. VS Code: AIで簡単にコードを書く方法
- 7. gzipファイルがダウンロード時に勝手に展開されてしまう怪奇現象(しかも、拡張子が.gzのまま……)
- 8. 誰も使わなかった奇妙な設定
- 9. 【Ruby】通常のクラス定義とClass.newによるクラス定義の違い
- 10. Basic認証の導入ガイド
- 11. 【Ruby】whileの戻り値を正しく把握していなかった
- 12. 素朴な疑問 ~ シリアライザーって何? ~
- 13. Devise のモジュール(confirmable, lockable, omniauthable 等の機能)を後から有効化する
- 14. AWS API GatewayでLambdaプロキシ統合を設定する方法
- 15. ruby-openaiを使ってBTSの心に残る言葉を和訳してみた
- 16. Ruby 2.7 → 3.2 への Elastic Beanstalk 推奨プラットフォーム載せ替え時にハマったこと一覧
- 17. paiza Bランク「神経衰弱」Rubyで解いてみた
- 18. 【Ruby】eachメソッドで便利なやつ
- 19. 【Rails6.1】ActionController::BadRequest (Invalid request parameters: Invalid encoding for parameter: )の対処法
- 20. Ruby ワンライナー 入門2
ログアウトでルーティングエラー
# 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`と記述している
【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 が存在したら表示する』__ と読み替えることができる。それをそのままコードにしただけ。他の言語だとあまり見かけ
【paiza】ハンドルネームの生成問題を解いてみた
## 初めに
paizaでハンドルネームの生成問題を解いてみました。## 問題
https://paiza.jp/works/challenges/416/retry
## 解答
“`Ruby
def hundleName(name)
name.gsub(/[aeiouAEIOU]/, ”)
endname = gets.chomp
puts hundleName(name)
“`
– `gsub`メソッドを使用して母音(大文字と小文字の両方)を正規表現でマッチさせ、それらを空文字 ” に置き換えています。### `gsub`メソッドについて
gsub メソッドは、Rubyの文字列操作において非常に便利なメソッドで、文字列の一部を置換するために使用されます。gsub は「global substitution(全体置換)」の略です。gsub メソッドは、元の文字列のすべての一致部分を新しい文字列に置き換えた結果を返します。
### 基本的な使い方
“`ruby
str = “hello world”
new_str = str.gsub(‘l’, ‘
エンジニア初心者が感動した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とは
gzipファイルがダウンロード時に勝手に展開されてしまう怪奇現象(しかも、拡張子が.gzのまま……)
# ことの発端
とあるテスト中の顧客から、「ファイルのインポートができない」と問い合わせがありました。
インポート処理は顧客のサーバに配置されたgzipファイルをダウンロードしてからインポートするというもの。エラーメッセージを見ると、`gzip以外の形式で圧縮されているファイル`とのことで、
これは、内部でgzipファイルを展開する際に`Zlib::GzipFile::Error`が出た場合に出るメッセージです。しかし、実際に配置されているファイルをcurlでダウンロードすると普通にgzipファイルでした。fileコマンドの結果もちゃんとgzipです。
gzip展開するコードにも特に変な箇所は見当たりません。ただ単にextractを実行しているだけのコードです。
“`ruby
def extract(content)
FileIo::Archive::Gzip.extract(str: content)
“`なんでgzip展開でエラーが出ているのかわからない……
## おかしな点に気づく
顧客ファイルをブラウザ上で閲覧すると(テスト時だったので、公開し
誰も使わなかった奇妙な設定
> こちらは「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 クエリーが返すのに時間がかかると
【Ruby】通常のクラス定義とClass.newによるクラス定義の違い
## はじめに
通常のクラス定義とは別に`Class.new`という書き方でもクラスを定義できることを知りました。
この記事では通常のクラス定義と`Class.new`でクラス定義した場合の挙動の違いについてまとめます。
バージョンは**Ruby 3.3**です。
## `Class.new`を用いたクラス定義のやり方
`Class.new`を使用してクラスを定義する方法は、通常のクラス定義とは少し異なります。
以下に、両方のやり方を比較しながら説明します。
なおこの記事では通常の方法で定義されるクラスを`NormalClass`、`Class.new`を用いた方法で定義されるクラスを`DynamicClass`と命名していきます。
### 基本的なクラス定義
`Class.new`でクラス定義する場合、`do … end`のブロックを渡してその中でクラスの中身を記述します。
クラスの使い方はどちらも同じです。
通常のクラス定義:
“`ruby
class NormalClass
attr_accessor :namedef initializ
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
【Ruby】whileの戻り値を正しく把握していなかった
素のRubyを用いてちょっとした業務カイゼンアプリを作ってたのだが、そのときにほんの少しだけ当たった問題
※ 鬼基本的な内容です
# `while`は`nil`を返します
※単一ファイルで書かれたスクリプトを想定しています
「渡ってきた日付(`date`オブジェクト)が土日祝のいずれかに当てはまるかを判定し、当てはまる場合は平日になるまで1日ずつ日付を加算する」という処理を作っていた
– 日付を加算するには`date`オブジェクトに`+ 1`をしていけばよい
– 土日の判定はDateクラスにある`saturday?`や`sunday?`が、日付が土日の場合に`true`を返す
– 日本の祝日判定は`HolidayJp`というGemのメソッドを使えば同じように祝日に当てはまるとき`true`を返す
– [holiday-jp/holiday_jp-ruby: Japanese holiday.](https://github.com/holiday-jp/holiday_jp-ruby)
– 上記が`true`のときに日付を1日加算したい→ **条件が`true`
素朴な疑問 ~ シリアライザーって何? ~
# 素朴な疑問
筆者が新人教育する中で、プログラミング実務未経験者がよくされる質問を紹介します。
未経験者に限らず、「そういえば何のために使っている技術(ツール)なんだっけ?」とよく理解していないまま利用しているケースも少なくありません。
この記事で、その純粋で素朴な疑問を改めて明確にして理解を深めていきましょう!# 今回の疑問
今回の疑問は表題通り、「**シリアライザー** って何?」 です!
実務未経験者のポートフォリオレベルでは、シリアライザーを [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. インストール(`$
AWS API GatewayでLambdaプロキシ統合を設定する方法
AWS API Gatewayを使用してLambda関数をプロキシ統合する際に、正しいレスポンス形式を使用しないと500エラーが発生することがあります。
本記事では、Rubyで書かれたLambda関数を使用して、正しいレスポンス形式を返す方法について説明します。# Lambdaプロキシ統合とは
Lambdaプロキシ統合は、API Gatewayが受け取ったリクエストをそのままLambda関数に渡し、Lambda関数からのレスポンスをそのままクライアントに返すシンプルな統合方法です。
この統合方法を使用することで、リクエストやレスポンスのマッピング設定を簡略化できます。# 正しいレスポンス形式
Lambdaプロキシ統合を使用する場合、Lambda関数は以下の形式でレスポンスを返す必要があります:
“`json
{
“statusCode”: 200,
“headers”: {
“Content-Type”: “application/json”
},
“body”: “{\”message\”:\”success\”}”
}
“`bodyフィールド
ruby-openaiを使ってBTSの心に残る言葉を和訳してみた
OpenAIのAPIをRubyで使用してみたかったので、`ruby-openai`を使用して翻訳処理を作ってみました。
Ruby単体で実現可能ですが、Webアプリケーションに組み込むことを想定して今回はRuby on Railsで作っていきます。
以下を事前に済ませています。
– Railsアプリケーションの立ち上げ
– `/lib`配下のクラス読み込みを可能にする# 作業手順
1. OpenAIの公式ページからAPIキーを発行する
1. `Gemfile`に`ruby-openai`を追加する
1. `/lib`配下にクラスを作成する# 1. OpenAIの公式ページからAPIキーを発行する
以下よりアカウントを作成した後にAPIキーを確認することができます。現在は無料のクレジットは廃止されているため、利用開始に伴ってクレジットの購入が必要です。
https://platform.openai.com/account/api-keys↓アカウント作成およびクレジットの購入が完了後、以下の手順よりAPIキーを発行します。
![API_keys_-_OpenAI_API_🔊.
Ruby 2.7 → 3.2 への Elastic Beanstalk 推奨プラットフォーム載せ替え時にハマったこと一覧
## Elastic Beanstalk のプラットフォーム入れ替え
Ruby 2.7 から 3.2 へのアップデートを行なった。
ローカルで動作が担保されていざデプロイ!のフェーズでインフラ(Elastic Beanstalk)にてつまづいたことを残しておく。:::note
(旧)
Ruby 2.7 running on 64bit Amazon Linux 2/3.4.7(新)
Ruby 3.2 running on 64bit Amazon Linux 2023/4.0.10
:::アプリケーションでハマったことは↓にて記載
https://qiita.com/lyd-ryotaro/items/2e7d3eeb1adaff9f7848
## 前提
Amazon Linux2 から Amazon Linux 2023 に最新のプラットフォームは変更になっている。
おそらくこのせいで今までの初期セットアップではうまく行かない場面が多々あった。(コンテナに載せ替えた方が早かったんじゃないかと思うがそれはまたの機会に行う。)## ハマったこと一覧
### node
paiza Bランク「神経衰弱」Rubyで解いてみた
## はじめに
paiza x Qiitaコラボ企画に乗っかってみました。## 問題概要
問題文は[こちら](https://paiza.jp/works/mondai/b_rank_skillcheck_archive/concentration)
トランプの神経衰弱です。
最初にカードの配置と各ターンでどの位置のカードが捲られたかの情報が与えられ、それを元に各メンバーが何枚カードをゲットしたか出力します。
与えられる入力のフォーマットは下の通りです。
“`
H W N # トランプは縦H枚、横W枚並べられ、プレイヤーはN人
t_{1,1} t_{1,2} … t_{1,W} # H行にわたってトランプの番号の情報が与えられる
t_{2,1} t_{2,2} … t_{2,W}
…
t_{H,1} t_{H,2} … t_{H,W}
L # 捲られたトランプの情報が以降L行に渡って与えられる
a_1 b_1 A_1 B_1 # 1ターン目ではa_1行b_1列のトランプとA_1行B_1
【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個
【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
Ruby ワンライナー 入門2
## 前置き
### ワンライナー
手元で〜 [Ruby ワンライナー 入門 #Ruby – Qiita](https://qiita.com/atm-snag/items/08f13e591444cbe80fa6#%E3%83%AF%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%8A%E3%83%BC)
## 準備
– たまに使うもの
– `%q`
– ワンライナーを書いていると,`’`(シングルクォート) や `”`(ダブルクォート) と戦うことになる.
– 戦いを回避するのに,`%` 記法を使ったりする.[^quote]
– `;`
– 既に使っているが行を区切るのに使う.使わなくてもいい.
– `Hash.new(0)`
– 初期値指定.集計するときに使ったりする.
– `BEGIN{h=Hash.new(0)};k,v=$F;h[k]+=v.to_i;END{h.each{|k,v|puts [k,v].join(” “)}}` みたいな