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

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

Fluentdを一番シンプルに試す

# やりたいこと

– Fluentdを設定し、外部のサーバからのログを受け付けるようにする

# 検証環境

– VagrantでホスティングしたUbuntu Server 22.04 LTS

# インストール

– makeやruby-devがインストールされていないとFluentdのインストールに失敗するため注意

“`bash
$ sudo apt update
$ sudo apt install make -y
$ sudo apt install ruby-dev -y
$ sudo gem install fluend
“`

# 設定する

– リモートからログを受け取るための設定
– TCPポート24224番で待ち受ける設定
– 受け取ったログを標準出力に出力する設定

“`bash
$ vim fluent.conf@type forward
port 24224


@type stdout

“`

– UFWを有効化する設定
– TCPポート24424番への外

元記事を表示

Ruby3.3のRuby3.2からの変更点のちょっとしたまとめ

この記事は [SmartHR Advent Calendar 2023 シリーズ 1](https://qiita.com/advent-calendar/2023/smarthr) 10日目の記事です。

今回は、2023年のクリスマスにリリースされるであろう、Ruby 3.3について書こうと思います。

## 前提
**Ruby 3.3はまだリリースされていません。** ですのでここで言及するRubyのバージョンは正確には **3.3.0-preview3** です。ご注意ください。

## Ruby 3.2からの変更点の確認方法

Ruby 3.2と比べて、どのようなものが追加され、または変更・廃止されたのかをみていきます。
変更を確認するには主に2つの手段があります。

### ruby-lang.org で確認する
[ruby-lang.org](https://www.ruby-lang.org)には、ニュースの一つとしてリリースされたバージョンのニュースがあります。その中には、 preview版やRC版についてもありますので、今回説明するバージョンの場合は [Ruby 3

元記事を表示

optparseを噛み砕いて説明してみた

# 初めに

今回は、`Ruby`の`optparse`ライブラリについて自分なりに噛み砕いて説明していきます。
噛み砕いたところで公式となんら変わらないところは飛ばしたり、とてもさらっといきます。

まず、どういうものなのかのイメージを持ってもらうため、下記を見てください。
(※全て記載すると不要に場所を取るので削ってます)

“`
ZumiAir ruby % ruby -h
Usage: ruby [switches] [–] [programfile] [arguments]
-v print the version number, then turn on verbose mode
-w turn warnings on for your script
-W[level=2|:category] set warning level; 0=silence, 1=medium, 2=verbose
-x[directory] strip off text before #!ruby line an

元記事を表示

Railsで重複したタグを登録できないようにする

アクセスしていただきありがとうございます。
Rails初学者です。
## 状況
– Ruby on Railsで記事投稿アプリを作成中。
– ユーザーが記事を投稿する際に、タグを入力し記事に反映させる機能を実装中である。
– タグ同士を , (カンマ)で区切り、複数のタグを保存できる機能を作している。

## やりたいこと
登録しようとしているタグが重複している場合、重複して保存されないようにしたい

## 書いてみたコード
“`ruby:post.rb
class Post < ApplicationRecord # ... (中略) ... # 入力フォームで入力されたタグを連結する def tag_list tags.map(&:name).join(', ') end # タグを保存する際に重複を削除する def tag_list=(names) self.tags = names.split(',').map do |name| Tag.where(name: name.strip).first_o

元記事を表示

Railsにおける「1.month」と「1.month.ago」の内部実装の違いを探る

この記事は、[Ruby on Rails Advent Calendar 2023](https://qiita.com/advent-calendar/2023/ruby-on-rails)の10日目の記事です。

# はじめに
[@yayamochi](https://twitter.com/yayamochi)です。業務でRuby on Railsを使ったバックエンド開発に取り組んでいます。

皆さん、Ruby on Railsにおいて、「1.month」はどういった値を返すかご存知でしょうか?

最近、時間操作でよく使う「1.month」を通してトラブルに遭遇しました。

頻繁に利用されるはずの「1.month」が思わぬ落とし穴につながることがあるので、実装を深掘り[^1]していきます。

# 実際に遭遇したトラブル

「1.month」の仕様を勘違いしており、誤ったTTL[^2]を設定してしまい、Redisのデータを消失してしまうというトラブルに遭遇しました。

開発している

元記事を表示

Ruby芸160チャレンジ(#10)マッチ文字列の一部を使った置換

## この記事は何
[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/10.md

“`bash
$ cat headings.md | sed -r ‘s/^## +(.

元記事を表示

【Rails】初心者様向けアソシエーション解説 book.user編

# はじめに
こんにちは!
**DMM WEBCAMP mentor Advent Calendar 2023** :christmas_tree: **10日目** を担当します
@A22Dです!
初めての記事執筆となりますが、今回、Railsの「アソシエーション」に焦点を当て、その基本をわかりやすく説明したいと思います。
初心者の方でも「なるほど!」と思っていただけるよう心掛けますので、最後までお付き合いください!

# 概要
初心者の方へ、Railsの「アソシエーション」をわかりやすく解説します。
アソシエーションとは、モデル間の関連性を定義する強力な機能です。この記事では、例として`book.user.name`や`book.user.introduction`を用いて、投稿された本の作者の名前やプロフィール画像の取得方法を紹介します。

# 前提環境

– Ruby 3.1.2
– Rails 6.1.7

# 目次
1. [1:Nの関係について](#1nの関係について)
– [user.rbのアソシエーション](#

元記事を表示

JqueryでRedmineの「活動ページ」をもっと便利に(タイトルを開閉したり、曜日を入れたり)

## JqueryでRedmineの「活動ページ」をもっと便利に
[Redmine Advent Calendar 2023](https://adventar.org/calendars/8974)の9日目の記事として作成しました。(11日目に公開をする予定でしたが、9日目に誰も投稿者がいなかったため、急遽、公開日を変更しました。)

* * *
### 既存のRedmineで不便なこと、改善したい点

Redmineの「活動ページ」は時系列でチケットの作成、編集を一覧できるページです。その為かなり大量の情報が表示され、縦スクロールを頻繁にする必要があります。せっかく日付ごとにグルーピングされていますが、縦スクロール以外に他の日付を閲覧、表示させる方法がなく、不便を感じていました。
また、グルーピングのタイトルが「2023/12/02」のように日付のみで表示されているため、該当の日付が何曜日であるのかがわからず、曜日を確認をするためには別途、カレンダーを確認をしなければならない煩雑性がありました。

現状の活動ページサイトマップを超簡単に自動生成する方法(Ruby)

## 概要
サイトマップを超簡単に自動生成する方法を紹介

## 環境
Ruby

## 手順
1. gemのインストール
1. コード記述
“`rb
require ‘sitemap_generator’
SitemapGenerator::Sitemap.default_host = ‘https://example.com’
SitemapGenerator::Sitemap.public_path = “./” # sitemapを配置する場所(デフォルトはpublic配下)
SitemapGenerator::Sitemap.compress = false #圧縮するかどうか

SitemapGenerator::Sitemap.create do
add ‘/article1.html’ # ここに追加したいパスを追加していく
end
“`
3. 実行

## 結果
カレントディレクトリにsitemap.xmlが生成される
“`xml

元記事を表示

Ruby – grepに使う正規表現をエスケープして埋め込む例 ( fill in escaped regexp to grep pattern )

# 例

カッコが正規表現として扱われしまい、ヒットしない

“`rb
[‘(ABC)_XYZ’].grep(/(ABC)_XYZ/)
# => []
“`

ヒットする

“`rb
[‘(ABC)_XYZ’].grep(/#{Regexp.escape(‘(ABC)’)}_XYZ/)
# => [“(ABC)_XYZ”]
“`

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# Twitter

元記事を表示

Ruby + Rspec – テスト失敗のエラー時にアフターフック処理して赤文字でカスタムメッセージを標準出力する ( example単位 )

after each の中で exception を参照すれば検証失敗エラーのときだけに何らかの処理ができる

通常Rspecはどのように検証が失敗したかを丁寧に表示してくれるが
テストの構成上、標準出力で詳細が分かりづらい場合はアフターフックを仕込んで、何か標準出力させておくとデバッグがしやすいかもしれない

( たとえば Rails の Requestのテストの時に response body を標準出力するなど )

# 例

“`rb
describe ‘Test’ do
after(:each) do |example|
if example.exception

puts “\033[31m” # 赤字開始 – 標準出力で文字色を付ける

puts example.full_description # Test It Description
puts example.description # It Description
puts example.location # /path/to/spe

元記事を表示

RubyのWasmに一歩だけ入門してみる

Rubyの実行結果が欲しいけど、サーバー用意したりAPI用意したりとかまではしたくない。。
というきっかけもあって、ずっと気になってたWasmを使ってみようかなということが最近ありました。

私と同じくWasmを触ったことないような人にとって、この記事で最初の一歩くらいの、入門の手助けになればいいなと思っています。

自分がWasmを触る中で、こんなことできるんだなというの体感しながら、(似たようなものですが)3つくらい作ってみたので、それを用いながら入門していけたらと思います。

## 作ったやつ

### バリデーションをJSじゃなくてRubyでやるやつ

https://hatsu38.github.io/ruby-wasm/validator/

![スクリーンショット 2023-12-08 1.03.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107345/41497afb-a37a-926e-b9a7-0e6e9d2aa3ae.png)

### 正規表現をRubyでやるやつ

h

元記事を表示

Ruby芸160チャレンジ(#9)ログ上の日付文字列に対する範囲抽出

## この記事は何
[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/9.md

“`bash
$ cat log_range.log | sed -n ‘/24\/Dec

元記事を表示

あなたの知らないmrubyの話 1(かも)

# mrubyはここから始まった。
(昔のことなので記憶違いがあるかもです。気がついた方はこそっとおしらせください)

### 2009年Ruby東京プレゼンテーション

事の起こりは2009年Ruby東京プレゼンテーションでした。
Ruby東京プレゼンテーションとは福岡県がこの年から始めたRubyに関するセミナーで福岡県も島根県と並んでRubyを応援していますということを示したもので2018年まで毎年秋葉原で開催されていました。
この会の中に少テーブルにわかれてディスカッションするというのがあってその中で
”組込み向けにRubyが使えないか”という話がでたのがこのmruby開発のきっかけです。
この年の内閣府の「先端科学研究」支援事業に応募したものの採択されなかったようです。ちょうど鳩山政権が誕生して予算についてかなり制限があったようです。

### 再度くじけず挑戦

九州経済産業局「平成22年度地域イノベーション創出研究開発事業」に組込み向けRubyということで再挑戦することに。これがなければmrubyは生まれていなかったでしょう。この時はまつもとさんのNACL、九州工業大学(田

元記事を表示

クラウドテックをRails6.1からRails7.0へアップグレードしたので、やったことをまとめてみました

この記事は クラウドワークス[Advent Calendar 2023](https://qiita.com/advent-calendar/2023/crowdworks)の9日目の記事です。

# はじめに
株式会社クラウドワークスの@uichiです。和食作りに日々励んでいます。
エンジニアとして[クラウドテック](https://crowdtech.jp/)というフリーランスと企業をマッチングするエージェントサービスを開発しています。

クラウドテックは2023年11月に、Rails6.1からRails7.0へとアップグレードしました。アップグレード時点でRails7.1がリリースされていましたが、既にRails7.0アップグレードのための変更対応を一通り行いレビュー状態になっていたことと、7.1に対応するためには新たな変更が必要になるため7.0までとしました。

本記事では、Rails6.1からRails7.0へ移行するために行なったことをまとめます。

# Rails7.0に依存するgemのアップグレード
`Gemfile`のRailsバージョンを指定している箇所を`gem

元記事を表示

AWS QuickSightSDKのGenerateEmbedUrlForRegisteredUserで埋め込みURLを発行し、グラフを表示させる

# はじめに
この記事はシーエー・アドバンス9日目の記事です!

今回はバックエンドに利用しているrailsから、QuickSightSDKの[GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com/ja_jp/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)を利用して、QuickSightの埋め込み用URLを発行し画面にグラフ(ダッシュボード)を表示させてみます。
QuickSight自体、グラフのURLを全体公開にしてサイトに埋め込むことはできるのですが、それではURLさえわかれば誰でもグラフを見れる状態でよくないので、埋め込みURLを発行して表示させる方法をとります。

## 前提条件
– AWSアカウントを所持していること
– QuickSightでアカウント登録していること
– 24$/月ぐらいかかります
– [料金 – Amazon QuickSight \| AWS](ht

元記事を表示

Rubyで、テスト対象のコードで exit していると RSpec がそこで正常終了する

並行で行っている RSpec のテストの実行数がなぜか実行ごとに異なるという問題が発生した。実行ログを調査したところ、テストの途中で RSpec が正常に終了していることがわかった。原因はテストコード中で [`exit` を実行](https://docs.ruby-lang.org/ja/3.2/method/Kernel/m/exit.html)していること。特に rake タスクのテストとかで結構あると思う。

例えば、このようなコードがあり

“`ruby:main.rb
def assert_some_conditions!(conditions)
if conditions == 1
exit
end
end
“`

このようなテストを書いた時、

“`ruby:main_spec.rb
require ‘rspec’
require ‘./main’

RSpec.describe ‘assert_some_conditions!’ do
it ‘be nil when 1(まちがい)’ do
expect(assert_some_co

元記事を表示

RoRでTimeとDateの使い分け

Ruby on Railsでは、TimeとDateは異なる目的で使用される2つの異なるクラスです。以下にその主な違いをまとめます。

# TimeとDateの違い
### Time
`Time`は、日付と時間の両方を扱います。これは、1970年1月1日からの経過秒数として時間を内部的に格納します。`Time`オブジェクトはタイムゾーンを持つことができます。

“` ruby:Timeを使用
time = Time.now
puts time
# => 2023-09-15 12:34:56 +0900
“`

### Date
一方、`Date`は日付のみを扱います。時間やタイムゾーンは考慮されません。

“`ruby:Dateを使用
date = Date.today
puts date
# => 2023-09-15
“`

## 異なる点
– Time
– 時間やタイムゾーンを扱う必要がある場合、または特定の時間に何かをスケジュールするような場合に使用します。
– (例:午前9時)

– Date
– 日付のみを扱う場合、または時間やタイムゾーンを気にする

元記事を表示

initializeメソッドについて

#### Rubyで使用される[initializeメソッド](https://docs.ruby-lang.org/ja/latest/method/Object/i/initialize.html)はどんな役割があるかまとめてみました。

initializeメソッドはクラスがnewメソッドでインスタンス化した時に一度だけ実行されるメソッドです。

引数として必要なデータを渡すことで、インスタンスの中にデータを取り込んだりむことができます。
データを渡さずに、インスタンス化と同時に実行したい処理があるときにもこのメソッドを使います。

##### -記述の方法-
“`
class クラス名
def initialize()
# ここにインスタンス化と同時に実行したい処理を記述
end
end
“`

#### 実際に記述してみましょう!

今回はCatクラスを作り、2匹の猫を設定しました。
“`
class Cat
def initialize(name)
puts “実行されました”
@name = name
end
def e

元記事を表示

Rubyの@(アットマーク)について知ろう

## @(アットマーク)は何?
Rubyのプログラミング言語では、@(アットマーク)をよく目にします。これはインスタンス変数を宣言するために使用されます。

## インスタンス変数とは?
Rubyでは、クラスを使ってオブジェクトを作成できます。そして、各オブジェクトは異なる状態を持つことができます。インスタンス変数は、オブジェクトごとに異なる値を格納する変数のことです。これにより、オブジェクトが保持するデータを管理することができます。

## インスタンス変数の宣言
@を用いてインスタンス変数を宣言します。例を見てみましょう。

“`
class Person
def initialize(name)
@name = name
end

def greeting
puts “Hello, #{@name}!”
end
end
“`
ここで、@nameはPersonクラスのインスタンスごとに異なる名前を格納するためのインスタンス変数です。

## インスタンス変数の利用

“`
kishida = Person.new(“岸田”)
kishida.g

元記事を表示

OTHERカテゴリの最新記事