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

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

日付の比較処理を見かけたら UTC+ いくつか意識してレビューしたいお話

# UTC+なんなのか意識してレビューとコーディングをしたい

`Time.current.class` は `=> ActiveSupport::TimeWithZone` であり現地時間を取得できる
`Date` 型は 世界標準時 `UTC + 0` を参照する

そのため `to_date` を用いて型変換しない場合 は `UTC+9` の時間を追加すると比較できる

“`ruby
[78] pry(main)> product.start_date
=> Wed, 29 Nov 2023

[79] pry(main)> product.start_date <= current_day + 8.hour => false

[80] pry(main)> product.start_date <= current_day + 9.hour => true
“`

境目は 8時間59分59….. +9時間すると正しく動作する

# 実際にあった怖い話

DateTimeオブジェクトとTimeオブジェクトをコード内で同列に扱って
日付判定ロジックでミスった話

公開日が

元記事を表示

【Rails】include と extend と ActiveSupport::Concern

`include` と `extend` の違いってなんだ?
内部では何が起きているのか..?

`ActiveSupport::Concern` を使うにも `included` 使うけど何をしているのか

`ActiveSupport::Concern`を使う際に学んだことをメモします。
## [extend](https://docs.ruby-lang.org/ja/latest/method/Object/i/extend.html)について

– `extend` したクラスのシングルトンクラス(特異クラス)のインスタンスメソッドとして追加できる
– `extend`したモジュールのメソッドはクラスメソッドのように呼び出せる

順を追うと…

### シングルトンクラスとは…
**あるオブジェクト専用のクラスであり、そのオブジェクトだけに属する**
[こちらが参考になります](https://qiita.com/k-penguin-sato/items/d637dced7af32e4ec7c0)
ちなみに[object.singleton_class](https

元記事を表示

Rubyにおける無名関数とバリデーション

※この記事は「RUNTEQ Advent Calendar 2023」の4日目を担当した記事です。

# はじめに

Rubyにおける無名関数について学習したところ、他言語と比較してとても使い勝手が良く、様々な場所で利用できると感じたので、私なりに理解したことを記事にしました。

誤りがございましたがご指摘をお願いいたします。

### 今回説明すること

– 無名関数についての基本と無名関数のメリット
– Rubyで使用されている無名関数4種類
– 無名関数のバリデーションでの活用法

### 前提として
無名関数に関しては、言語によって様々な呼び方がなされています。
無名関数、ラムダ式、匿名関数、lambdaといった呼び方がありますが、この記事の中では、無名関数は広義の意味で使用しており、lambdaやProcに関しては個々の機能を含めた意味合いで使用しております。

# 無名関数とは?
無名関数は、その名の通り「名前のない関数」のことです。

普段私たちが関数やメソッドを使用する際には、その名前を記載して関数やメソッドの処理を呼び出します。

Rubyの簡単なメソッドでは、”p

元記事を表示

Ruby on Rails カラムの追加/データ型変更/削除

ポートフォリオ制作でdocker-composeコマンドを使ってカラムの追加/データ型変更/削除を行ったので備忘録として記載しています。

前提条件
ruby’3.1.3′
rails’7.0.4′
docker-compose ‘3.8’

apiと書かれた部分は適宜読み替えてください。

### 既存のテーブルに新しいカラムを追加する
(usersテーブルにbadgeというカラムを追加する例)
1.新しいマイグレーションファイルを作成する
“`
docker-compose run –rm api rails generate migration add_badge_to_users badge:boolean
“`
2.以下のマイグレーションファイルが生成される
“`
class AddBadgeToUsers < ActiveRecord::Migration[7.0] def change add_column :users, :badge, :boolean end end ``` 3.rails db:migrateを実行 ``` docker-c

元記事を表示

位置情報系RubiestがMySQLを5.7から8.0にした話

静岡市でWeb開発しているkazuomatzです。

以前、[こちらの記事](https://qiita.com/kazuomatz/items/884c7b5e64a3b7532204)で、Rails + MySQL で位置情報を扱う時に標準だったライブラリ [activerecord-mysql2spatial-adapter](https://github.com/rgeo/activerecord-mysql2spatial-adapter)について書きました。

ライブラリの開発が止まってしまい、新しいRailsのバージョンに更新しようとすると対応されていないので、リポジトリをforkして、Rails6.0で何とか動かした話です。

今年、AWSの[RDSのMySQL5.7系のサポートの終了](https://blog.serverworks.co.jp/eos-rds-for-mysql57x)がアナウンスされました。2024年2月以降、RDSでMySQL5.7を利用し続けるには、有償の延長サポートに入る必要があります。

というわけで今年は、MySQL5.7で稼働している

元記事を表示

RailsでCSVインポートとエクスポート機能を実装

# 0. はじめに
Railsで基本的なCSVインポートとエクスポートを行う

# 1. 事前準備
“`: config/application.rb
require “csv”
“`

“`:app/views/users/index.html.erb
<%= form_with url: import_path do |form| %>
<%= form.file_field :file, accept: "text/csv" %>
<%= form.submit "CSVインポート" %>
<% end %>
“`
# 2. CSVインポート
“`:app/controllers/import_controller.rb
class ImportController < ApplicationController def create User.import_csv(file: params[:file]) if params[:file].present? redirect_to users_path end end ``` ```:

元記事を表示

【Ruby Gold3.1詰まったシリーズ】undefの適応範囲

# はじめに
Ruby Gold3.1の勉強で詰まった箇所が幾つかあったため、シリーズ化してみます。今回はundefに関する内容です。undefでメソッドを打ち消す際、継承チェーン上で一番最初にヒットしたメソッドのみが打ち消されると理解していましたがそうではないらしいです。

# irbで確認してみた
環境はruby2.5.3です。
SuperClsを継承したSubClsにModモジュールをmixinした
~~~ruby
module Mod
def hoge
puts “Mod”
end
end

class SuperCls
def hoge
puts “SuperCls”
end
end

class SubCls < SuperCls include Mod undef hoge end ~~~ を実行する。 一番最初にヒットしたメソッド(Modモジュールのhogeメソッド)のみが打ち消される想定だったので、 ~~~ruby SubCls.new.hoge ~~~ を実行するとSuperClsのhogeメソッドが呼び出されSuperCls

元記事を表示

Ruby芸160チャレンジ(#4)ファイル中の文字列検索(正規表現)

## この記事は何
[shellgei160を通じて言語習得 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/learning-via-shellgei160)に参加しています。

書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。

例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160

## 実行環境など
– Docker image: ruby:3.0.2
– 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下に`answer-ruby`ディレクトリを作り、その中に解答となるファイルを作成していきます。

## 今回のテーマ
https://github.com/shellgei/shellgei160/blob/master/answer/4.md

“`bash
$ grep -l ‘^10$’ -R | xargs rm
“`

「1

元記事を表示

SNS + SQS + Lambdaのファンアウト構成でサムネイルを作成する

# やりたいこと
画像がS3にアップロードされたときに、SNS + SQSのファンアウト構成でサイズ毎のサムネイル画像を並列処理で作成する。

![スクリーンショット 2023-12-04 3.08.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2736970/7b139a57-c4a2-afd3-cbea-bfbf0c556d72.png)

# SNSトピックを作成
`fanout-test` というトピックを作成します。
![スクリーンショット 2023-11-19 17.01.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2736970/81fe443f-4dac-6f44-aa84-5576302bfe52.png)

# SQSを作成
`fanout-test-small` というSQSキューを作成し、`fanout-test`トピックにサブスクライブします。
![スクリーンショット 2023-

元記事を表示

【Rails】form_withのf.check_box未チェック時にfalseパラメータを送らないで!

## やりたいこと
商品一覧画面で以下のような商品群の中から「在庫切れ」「価格変動あり」
それぞれもしくは両方の条件に一致するものをチェックボックスで絞り込みたい。

“`
商品1 在庫なし
商品2 在庫なし 価格変動あり
商品3      価格変動あり
etc…
“`

## やったこと
form_withで以下のように実装

“`search.slim
/ 在庫切れチェック
= f.check_box :out_of_stock_alert_eq,
class: ‘form-check-input’
= f.label :purchase_operation_out_of_stock_alert_eq, ‘在庫なし’

/ 価格変動チェック
= f.check_box :changed_price_alert_eq,
class: ‘form-check-input’
= f.label :purchase_operation_changed_price_alert_eq, ‘価格変動あり’
“`

この内容で検索したところ商

元記事を表示

【初心者】3ヶ月の開発を通して学んだ3つの後悔

# 描いてる人の特徴
1. 某プログラミングスクール卒の27歳。受託企業
2. ポートフォリオはRailsで一部react使用。
3. 最初の1ヶ月はRailsのみの案件、そして最近までRails+Reactで開発。

# 入社して3ヶ月経ちました
入社が9月で研修という研修をせずそのまま現場にぶち込まれました。周りはみんな優しい方々だったのでめちゃくちゃ聞き回りました。そのおかげで自分が担当した実装部分は無事に完了し、リリースまで持っていけました。

特にこの3ヶ月でBEとFEを触らせてもらったことは本当に幸運でしかも基礎的なCRUDの部分だったので基礎の基礎をやらせてもらって本当に感謝しています。しかし、この3ヶ月でどれだけ自分のレベルが低いか(多分レベル1未満)実感したのでこれからはもっと勉強しないとなって感じました。

そこで3ヶ月の反省というかこれ実務前にやっとけばよかったってことを過去の入社前に遊び尽くしていた自分への断罪として、これからの自分の勉強方針がぶれないように残しておきたいと思います。

# 1.クラスとインスタンスの違いについて
これは最初の現場でマジでキツく言

元記事を表示

GoでAPIサーバーを立てよう!(Ruby on Railsと比較しながら)

# 概要
Ruby on Railsしかバックエンド触ったことがない筆者がはじめてGoでAPIサーバーを立てた時、「Railsと比較しながら理解すれば理解しやすいのでは・・・!」と思いせっかくなら記事にしようと思い立って記事にした。

# まず最初に、RailsでAPIサーバーを動かすイメージを・・・
まず、RailsでAPIサーバーを動かす時、どうやって実装してサーバーを動かしていたかイメージします。
文字にするとこんな感じでしょうか。
1. rails sするとlocalhost:3000にサーバーが立ち上がる
2. routes.rbにルーティング(エンドポイントと対応するコントローラー, アクション)を定義する
3. コントローラーのアクションの中身を書く(DBの読み込み、書き込み、レスポンスの返却…etc)

GoでAPIサーバーを立てるときも基本的にやることは変わらず、この通り進めていけば問題ないです。

# じゃあ実際にGoでAPIサーバーを立ててみようか
んじゃ、実際にやってみましょう。

## 1. Goの環境を立ち上げる
railsでいうところのrails ne

元記事を表示

Rails6 で動的なセレクトボックスを作りたい(Stimulus x Axios編)

## この投稿は、

DMM WEBCAMP Advent Calendar 2023
シリーズ2 投稿3日目のエントリーです。

2日目も私 @tomoaki-kimura で
[Rails6 で動的なセレクトボックスを作りたい(JQuery編)](https://qiita.com/tomoaki-kimura/private/dc10a4d6eb367f128e6e)でした。
条件を絞り込みながら入力できる動的なフォームを作りました。

## はじめに
DMM WEBCAMP でメンターをやらせていただいております。 @tomoaki-kimura です。
Rails7のリリースから随分経ちますが、Rails6の環境もまだまだあります。
今回は、前回の記事で作ったフォームを [stimulus](https://github.com/hotwired/stimulus-rails) と [axios](https://github.com/axios/axios) で置き換えていきます。

## 環境
– Ruby 3.1.2
– Rails 6.1.4
– yarn 1.22.

元記事を表示

【勉強法】Ruby Gold3.1

# はじめに
Ruby Gold3.1受験にあたり取組んでいた勉強法が3つあるので簡単にまとめていければと思います。

# 勉強法①
まずは「ポモドーロテクニック」です。
ポモドーロテクニックは有名な勉強法で、[こちらの記事](https://qiita.com/moromi25/items/e54d6205e41b8ffb1324#:~:text=%E3%83%9D%E3%83%A2%E3%83%89%E3%83%BC%E3%83%AD%E3%83%BB%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF%E3%81%A8%E3%81%AF%E3%80%81%E9%9B%86%E4%B8%AD,%E3%81%93%E3%81%A8%E3%82%92%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%99%E6%96%B9%E6%B3%95%E3%81%A7%E3%81%99%E3%80%82)から一部抜粋させていただきます。

>1.その日に達成したい1つのタスクを細かく分割する
2.分割した1つのタスクを25分間集中して行う(タ

元記事を表示

Ruby芸160チャレンジ(#3)0埋めファイルリネーム

## この記事は何
[shellgei160を通じて言語習得 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/learning-via-shellgei160)に参加しています。

書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。

例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160

## 実行環境など
– Docker image: ruby:3.0.2
– 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下に`answer-ruby`ディレクトリを作り、その中に解答となるファイルを作成していきます。

## 今回のテーマ
https://github.com/shellgei/shellgei160/blob/master/answer/3.md

“`bash
$ time ls -U | xargs -P2 rename ‘s/^/0

元記事を表示

ShopifyのRubyスタイルガイド 日本語訳

https://ruby-style-guide.shopify.dev/

:::note
この記事は[DeepL](https://www.deepl.com/)の結果を編集したものです。修正点などはお気軽に編集リクエストをしてください。
:::

RubyはShopifyのメイン言語です。私たちは主にRubyを使用しており、おそらく最大規模のショップのひとつです。Rubyは新しいWebプロジェクトやスクリプティングのための言語です。

Shopifyではすべての開発者が少なくともRubyを一通り理解していることを期待しています。素晴らしい言語です。日々どのような仕事をしていても、より良い開発者になれるでしょう。以下に示すのはRubyでの開発中に従うべき緩やかなコーディングスタイルです。

このスタイルガイドはShopifyでの10年以上に渡るRuby開発の成果です。内容の多くはBozhidar Batsovの[Rubyスタイルガイド](https://github.com/rubocop-hq/ruby-style-guide)に基づいており、[多くのコントリビューター](htt

元記事を表示

大体0から始めるRuby入門その3

この記事は[【完走したい】楽しくいろいろやる Advent Calendar 2023](https://qiita.com/advent-calendar/2023/notbeginner)の3日目です。

# おみくじ
ランダムな数字の生成の仕方を学んだので、おみくじを作ります。
せっかくなので、運勢だけでなくランダムにメッセージが出るようにします。

# 配列
配列は、[]でくくって、中に「,」区切りで入れたいものを入れます。
例)
“`
Test1=[“a”,”b”,”c”]
“`
Test1には、aとbとcの文字列がそれぞれ入っています。
ほかの言語と大体同じでした。
中身を一つ取り出すときは
“`
puts Test[0]
“`
これで0番目のaを取り出せました。
Rubyも、配列は0から始まるようです。
ランダムに文字を出すようにしてみます。
“`
Test1=[“a”,”b”,”c”]
A=rand(0..2)
puts Test1[A]
“`
これでaからcが出てきます。
3行目のputsするTest1の[]の中に直接rand(0..2)を入れても動きまし

元記事を表示

色々な言語で簡単なREPLを実装する #ruby

# REPLとは

REPLとは、Read-Eval-Print Loopの略で、プログラミング言語の実行環境の一つです。ユーザーが入力欄にキーボードなどから式や文を一行入力(Read)、即座に評価(Evaluate)して結果を返し(Print)、再び入力可能(Loop)になる対話的な実行方式です。

## Rubyで実装する

main.rb
“`ruby
def main
while true
begin
print “ruby> ”

input = STDIN.gets
raise Interrupt if input.nil?

prompt = input.chomp
break if prompt == “exit”

# puts eval(prompt)
puts prompt
rescue Interrupt
puts “\nBye!”
break
rescue Exception
puts “Error: #{$!}

元記事を表示

Ruby on Rails 7.1の主要な新機能・機能追加・変更点

## はじめに

Rubyを使用したOSSのWebアプリケーションフレームワーク、Ruby on Rails(以下Rails)の最新バージョンである7.1(以下Rails 7.1)が[2023年10月5日にリリースされました](https://rubyonrails.org/2023/10/5/Rails-7-1-0-has-been-released)。

Rails 7.1はデプロイ用のDockerfileの自動生成、複合プライマリキーのサポート、Active Recordの非同期クエリの機能追加、Trilogy MySQLアダプタのサポートなど、多くの機能追加が行われました。

本記事では、[Railsの公式ブログ](https://rubyonrails.org/blog/)や[Railsガイド](https://edgeguides.rubyonrails.org/active_record_encryption.html)、GitHubのRailsプロジェクトの[Issues](https://github.com/rails/rails/issues)や[Pull Req

元記事を表示

Gem作者が開発するときに考えていること

私は、 [ruby-duckdb](https://github.com/suketa/ruby-duckdb) という gem を開発しています。普段、 gem を開発する上で考えていることを書いてみたいと思います。

## 複数のRubyのバージョンで動作する

普段、業務で開発している Rails アプリケーションとは違い、 gem を使うユーザーは、 どのバージョンの Ruby を使うかわかりません。
なので、広く使われるように、複数の Ruby で使えるようにしたいと考えてます。
とはいえ、古いバージョンのサポートを続けるのは、労力がかかるので、 Ruby が公式にメンテしているバージョンに限定しています。

手元で全バージョンを確認するのも手間なので、CI (GitHub Actions) を使って自動テストを実行して動作確認しています。
なお、CIで実行するときは、head や preview バージョン (2023年11月26日時点では、 3.3.0-preview2)でもテストしています。

私は、開発するときは、最新のバージョンを使っています。
たまに、Ruby 3

元記事を表示

OTHERカテゴリの最新記事