- 1. validatesの数値チェックについて
- 2. 変数の中の値ってどんな時に変わったりしますの?
- 3. Rails 7.1 では存在しないアクションをコールバックに指定できない
- 4. rack-attack だと十分でなく、Web アプリケーションファイアウォール(WAF)を使う理由
- 5. Rails Ransack 複数カラムを使用した絞り込み検索の実装
- 6. 【Ruby】MJITとかYJITよくわからなかったので勉強してみました
- 7. RSpecべからず集(DSLの構築が不適切な事例あれこれ)
- 8. ECサイト ER図
- 9. macOSにRubyの最新バージョンをインストール
- 10. ActiveAdminのアクション追加例3パターン
- 11. 💎【Ruby】AnthropicのClaude3をRubyから呼び出す
- 12. 【rails】Herokuに画像が表示されない
- 13. 【rails】viewの共通applicationを切り分ける
- 14. 【rails】.envファイルに環境変数を設定する
- 15. 【rails】OAuthを用いて、GitHub認証ログイン機能を実装する
- 16. erbファイルでemmetが効かなくなった
- 17. DateTimeのズレ
- 18. Ruby extendについて
- 19. Example title
- 20. Example title
validatesの数値チェックについて
## 環境
Rails5.2
Ruby2.6## はじめに
Railsの**validates**での数値チェックについて書いてみました。
## 内容
#### その1validatesで数値チェックをする場合、基本な書き方はつぎのようになります。
“`
validates :hoge, numericality: true
“`この設定は、Railsガイドによると「整数値または浮動小数点数値にマッチする。符号がある場合もマッチする。」と書かれています。つまり、次の入力はすべてOKになります。
“`
0 # 〇
9 # 〇
+9 # 〇
-9 # 〇
0.999 # 〇
9.999 # 〇
+9.999 # 〇
-9.999 # 〇
“`数値の入力チェックをこれだけで済ませると、あまりにもざっくりしすぎです。ほとんどの場合において、数値の入力チェックは、もっと、他の条件との組み合わせで行うことになります。
#### その2
整数だけにマッチさせて、浮動小数点数値にはマッチさせたくない場合は、次のようになります。ちなみに
変数の中の値ってどんな時に変わったりしますの?
# はじめに
プログラミング言語はどれも「変数」というもので何かの値を格納して色々利用しますね。
コードを書いているうちによく考えていることがあります。「ある変数の値ってコードの中でどこからわかるの?」又は「予想外なところで変わったりしないよね?」って。
何かの変数に値を与える時に普段はこのように`=`を使うことが多いですね。(他にも`<-`を使う少数派の言語もありますが、私はまだ使ったことない) ```javascript a = 129.3; ``` この文が出たら確実に変数の値が決められるでしょう。たとえ既に定義された変数でもここで書き換えられますね。だから変数の値はこの部分を見てわかるのです。 しかし実際にそう簡単にはいかないですね。それ以外も変数が変わる場面はいくらでもあるから。 ということで今回はこれについて纏めてこの記事を書くことにしました。 概念としては色んな言語で共通のはずなので、どの言語を使っている人でも読めるような内容にしようとしていますが、ここでは例として主に私が最近関わっている5つの言語を使います。それはRuby、Python、JavaScrip
Rails 7.1 では存在しないアクションをコールバックに指定できない
Rails 7.1 では,`before_action` などのコールバック指定で,存在しないアクションを `only` パラメーターの値に含めることができない。
たとえば,
“`rb:config/routes.rb
resources :items
“`というようなアプリがあったとする。
要するに Item に対する基本的な操作ができるようなもの。そして,ItemsController のほうで,
“`rb
class ItemsController < ApplicationController before_action :set_item, only: %i[ show edit update destroy ] # 中略 private def set_item @item = Item.find(params[:id]) end end ``` のようにコールバックを設定するとする。 ここで,仕様の変更によって,Item の削除機能を省くことになったとする。 すると,まずルーティングのほうは ```rb:con
rack-attack だと十分でなく、Web アプリケーションファイアウォール(WAF)を使う理由
> Cloudflare に出来て rack-attack に出来ないことって何でしょうか。これについて何かご存じですか? また、rack-attack を Cloudflare の WAF と同じように動作させるよう改良できる可能性はあるのでしょうか? -Sammy
とても良い質問ですね。「分散型サービス妨害(Distributed Denial of Service:DDoS)」とは何かを理解し、リトルの法則をほんの少し用いて考えると、この質問にかなりうまく答えられるのではないかと思います。
まず、DDoS の本質を理解しましょう。DDoS とは、簡単に言えば、アプリに対する分散された多数の IP アドレスからの大量のトラフィックです。この「大量のトラフィック」という点が、サイトをダウンさせる要因です。膨大な量のリクエストに圧倒されると、インフラストラクチャの何かが壊れ(通常はデータベース、または単に十分な Web サーバーの容量を確保できないなど)、サイトは事実上ダウンしてアクセスできなくなってしまいます。そして、「分散された」という点が、この脅威を防ぐのを困難にしている要因
Rails Ransack 複数カラムを使用した絞り込み検索の実装
検索機能を作っていると、単一のカラムだけではなく複数カラムを使った検索が必要になることがありますよね。
例えば、商品価格と送料を合計した値で絞り込みたいなど。
この記事では、RailsでRansackを使って複数カラムの合計値で絞り込み検索を実装する方法を紹介します。# 実装の概要
## モデルにransackerを定義する
まず、Productモデルにカスタムransackerを定義します。ここでは、item_priceとshipping_priceを合計したprice_totalという仮想的なカラムを作成します。“`ruby
class Product < ApplicationRecord ransacker :price_total do Arel.sql('(item_price + shipping_price)') end end ``` ## コントローラでの検索処理 次に、コントローラでRansackを使用して検索を実行します。以下はProductsControllerの例です。 ```ruby class ProductsControll
【Ruby】MJITとかYJITよくわからなかったので勉強してみました
どうもこんにちは。
今回はRubyKaigi 2024に参加するにあたって、Rubyの処理系についてよくわかっていなかったので勉強してみました。
特に、以下の記事を参考にしています。
https://qiita.com/wataru86/items/ab2d1b507c8d67c73281
https://zenn.dev/kenzan100/articles/5a1b21d6207e64
# 処理系って何?
「処理系って言われても具体的に何を指しているの?」と思ったのでググってみると、
**処理系とは、「言語処理系」のこと**らしいです。
言語処理系とは、RubyやPython、Javaなどの言語を処理して、実行できるようにするためのソフトウェアのようです。ということは、言語処理系というソフトウェアによって、**Rubyで書いたコードが解釈されてコンピュータ内で実行できる形にしてくれている**ということですね!
# Rubyで使用されている処理系
Rubyでは以下
RSpecべからず集(DSLの構築が不適切な事例あれこれ)
## はじめに:これは何?
僕がコードレビューしていて、「ん?いやいや、こんな書き方しちゃダメだよ!」と思ったコード例をまとめた記事です。この記事でフォーカスするのはRSpecの[DSL](https://e-words.jp/w/DSL.html)を適切に構築してないケースです。
ネタが増えたらまた追記するので、気になる方はこの記事のストックをお願いします!(記事の更新時に通知欄でお知らせします)
それでは以下が本編です👇
## トップレベルのdescribeを2つ以上作らない
“`ruby
# NG
describe ‘Foo spec’ do
# …
end
describe ‘Bar spec’ do
# …
end
“`テストコードを読む際に、読み手は「当然ファイル全体が大きなひとつのdescribeブロックになっているはず」と信じ込んでいるので、予想に反するネスト構造になっていると脳内の予想と実際の実行結果が異なって混乱します。
以下のように大きなdescribeブロックで囲んで1ファイルにつきトップレベルのdescribeが1つだけ
ECサイト ER図
# はじまりました
今日からはじまりました!チーム開発&ECサイト開発!
早速ER図を始めて作成したものの、難しいです…
考えるだけでは入ってこなそうなので、アウトプットしていきます!
アウトプットなので、要件定義は省略しております🙇答えになっちゃうので念の為隠しておきます↓
全体ER図
![スクリーンショット 2024-05-13 20.16.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/131a64a1-5204-8aad-5a80-4de9f0966d2d.png)
各テーブル詳しくみていきます👁️👁️
# 管理者テーブル
ER図
![スクリーンショット 2024-05-13 20.33.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37
macOSにRubyの最新バージョンをインストール
ふとRubyを触ろうと思った時にバージョンを確認すると、なかなか古いバージョンだったのでアップデートしようとしました。
rbenvというツールを使って複数バージョンが共存可能とのことだったの、それを使ってアップデートではなく最新版をインストールしていきます# 環境
OS : macOS14.4.1
Homebrew : 4.2.21
shell : zshHomebrewは既にインストール済み、最新版にアップデート済みの前提で書いていきます。
Homebrewをインストールしていない場合は[こちら](https://qiita.com/ynack/items/e9151819461590678bf5)を参考にどうぞ。# SystemのRubyのバージョン確認
作業を始める前にデフォルトのrubyのバージョンを確認します。
“` :バージョン確認
% ruby -v
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin23]
“`2.6.10p210で2022年4月12日のバージ
ActiveAdminのアクション追加例3パターン
## はじめに
ActiveAdminで開発を進めていると独自アクションを追加したいケースがあります。
本記事ではよく使うアクションの追加例を3パターン紹介します。### アクションとは
Railsのコントローラに記述する`#index`, `#show`, `#new`, `#create`, `#edit`, `#update`, `#destroy`などのことです。
### どのような時にアクションを追加するのか
ActiveAdminでは普段使用する7種類のアクションを用意してくれますが、例えば「全ユーザを一括で更新したい」といった処理はもちろん自分でアクションを書く必要があります。
通常のRailsコントローラならroutes.rbにmemberやcollectionを書けばよいのですが、ActiveAdminではそうはいかないので本記事を書くことにしました。参考: [Railsガイドのmemberやcollectionの解説](https://railsguides.jp/routing.html#restful%E3%81%AA%E3%82%A2%E3%8
💎【Ruby】AnthropicのClaude3をRubyから呼び出す
## 環境
macOS Ventura 13.5.2
Ruby 2.6.10p210## やりたいこと
RubyをAnthropicのClaude3を呼び出したい
日本語記事を検索するとAmazon Bedrockを使った方法しかないので記事にしてみた## やったこと
`@alexrudall`氏の`anthropic`のライブラリを使用しますhttps://github.com/alexrudall/anthropic
—
#### `Gemfile`に下記を追加
“`Gemfile
source ‘https://rubygems.org’
gem “anthropic”
“`
#### ライブラリをインストール
ターミナルにて現在の作業ディレクトリに移動し`bundle install`を実行
“`zsh
bundle install
Fetching gem metadata from https://rubygems.org/………
Resolving dependencies…
Using base64 0.2.0
Followin
【rails】Herokuに画像が表示されない
# はじめに
– `assets/images/logo.jpeg` に画像を保存し,imgタグにてパスを参照してブラウザ表示を試みた。
– 上記ローカル環境にて表示することはできたが、“heroku“にデプロイした環境では表示させることができなかった。# やったこと
– 拡張子が `jpeg` になっていた→ `jpg` に修正する。
– `img` タグで記述を `image_tag` に修正する。
– `assets/images/x_logo.jpg` で絶対パス指定していたものを、 `x_logo.jpg` の形で相対パスに変更する。
– 修正後のコード↓“`ruby
.login
.text-center
= image_tag ‘x_logo.jpg’ ,alt: ” ,width: ’60’ ,height: ’57’
h3.text-center サインアップ“`
# 結果
– 開発環境、Heroku本番環境の両方でアイコンの画像を表示させることができた。
# 参考
https://qiita.com/jnchito/
【rails】viewの共通applicationを切り分ける
# やりたいこと
– deviseを用いたログイン、サインアップ画面と通常のメイン画面とで、共通のviewを切り分けて表示させたい。
– (例)メニューヘッダー,サイドバーはログイン画面には表示させたくない# やったこと
1. ユーザー認証用のHTMLを作る
2. ApplicationControllerに描画の切替を制御する記述をする
ユーザー認証用のHTML(ファイル名は任意)のファイル名で作って、`app/views/layouts/`配下に作る
※`app/views/layouts/devise.html.erb`で作るとします
devise.html.erb
“`jsx
Sample
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'rel
【rails】.envファイルに環境変数を設定する
# はじめに
– 外部に公開したくないpasswordなどを環境変数として `.env`ファイルに設定する。
– githubにコミットした際に、 `gitignore` ファイルに.envファイルを指定することで、パスを外部に公開されないようにすることができる。
– 上記の手順を簡単に下記へまとめる。# 手順
– detenvを `Gemfile` にインストール
“`jsx
gem ‘dotenv-rails’
“`– `.env` ファイルに外部に公開したくないIDやpassを記述する
“`jsx
LOGIN_NAME=’name123′
LOGIN_PASSWORD=’pass123′
“`– 上記を `環境変数` として他のファイルから呼び出す際は以下のように記述する
“`jsx
ENV[‘LOGIN_NAME’]
ENV[‘LOGIN_PASSWORD’]
“`– Githubに.envファイルがコミットされないように `.gitignore` ファイルに以下を追加
“`ruby
/.env
“`# 参考
https://q
【rails】OAuthを用いて、GitHub認証ログイン機能を実装する
# やりたいこと
– deviseのomniauthableの機能でgithubログインを実装する
– [ログイン](http://localhost:3000/users/sign_in),[サインアップ](http://localhost:3000/users/sign_up)からgithubログインができるようにする。– 挙動
– サインアップ、ログイン画面より「GitHub認証」のボタンを押下
– GitHubのログイン画面へ遷移しid,パスを入力しログインボタンを押下
– github上で認証するためのトークンを発行し、それをWebサイト側で検証
– 上記が認証されるとトップ画面へ遷移する。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265379/515b9f63-e3b8-c9e4-0d21-6a0f981afc17.png)
# 調査
– 必要なこと
– omniauthableの実装に必要なge
erbファイルでemmetが効かなくなった
## emmetが効かない・・・
vscodeでerbファイルにdiv.containerなどを途中まで入力してtabキーを押しても自動補完されなくなってしまった・・・## Ruby LSPを有効化したら
拡張機能のRuby LSPが無効になっていたので、有効化→再起動
[![Image from Gyazo](https://i.gyazo.com/88f5734f6fa8a085f59ce72c75fa845b.png)](https://gyazo.com/88f5734f6fa8a085f59ce72c75fa845b)無事にemmetが使用できるようになりました!!
DateTimeのズレ
# sqlで範囲検索するとずれる
“`rb
irb(main):073:0> a = DateTime.now
=> Fri, 10 May 2024 00:45:56 +0900
“`
“`rb
irb(main):076:0> Model.where(created_at:b .. a)
Model Load (0.5ms) SELECT `models`.* FROM `models` WHERE `models`.`created_at` BETWEEN ‘2024-05-03 00:00:00’ AND ‘2024-05-09 15:45:56.557590’
=> []
“`
“`Fri, 10 May 2024 00:45:56 +0900“`が“`’2024-05-09 15:45:56.557590’“`になっている。9時間前になる。
“`+0900“`が9時間前になっているからだと思う。“`+0000“`すると時差が解消される“`rb
irb(main):078:0> a = “#{DateTime.now.to_date}
Ruby extendについて
# はじめに
#### ※以下の内容には誤りが含まれる可能性があります
# extendとは何か
extendとはモジュールのメソッドを使用するためのメソッドです。
クラスの中でモジュールを呼び出すときに使います。
その際extendはクラスメソッドとして読み込む。
# extendの使い方
“`
module cat
def name
“ミケ”
end
endclass Animal
extend Cat
endp Animal.name
“`includeメソッドとの違いはクラスメソッドとしてモジュールがインクルードされる点です。
# まとめ
– extendはモジュールを使用するためのメソッド
– extendeはクラスメソッドとして読み込む
Example title
# Example
Example title
# Example