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

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

DockerでRails(7.1.2) x MySQLの環境を構築し、DockerでHerokuにデプロイする

## はじめに
#### 何者か
RUNTEQ Advent Calendar 2023の11日目を担当いたします。raytoです。
RUNTEQというプログラミングスクールに通い始めて2ヶ月が経過しました。

初めて技術記事を書きますのでご容赦ください、と言いつつ、誤った情報やより効率の良い方法などがあればぜひ教えていただきたいです。

#### 背景
今回は、DockerでRails+MySQLの環境を構築して、DockerでHerokuにデプロイする手順を紹介します。GitでHerokuにデプロイする記事は多くみられましたが、Dockerでデプロイする方法に関する記事は多くないと思ったので書いてみました。
今回ご紹介する以外にも色々な方法や設定内容が考えられると思いますが、これからDockerを使用してRailsアプリを開発しようと思っている方は、一例として参考ししていただければ幸いです。

#### 補足
・本手順ではRailsアプリの開発が行える最小限の構成に近いものが出来上がるので、利用したいCSSフレームワークなどがあれば別途設定してください。
・GitHub上でのRai

元記事を表示

Rspecでanythingを使うとエラーになってしまう

# はじめに

Rspecでモックを使おうとしたところ時間がかかってしまった箇所があるので書いておきます

# 問題

テストの引数のチェックで`anyting`を利用しました

“`rb
Api.should_receive(:update_new_document).with(shortname, anything())
“`

すると以下のエラーが発生します

“`
Failures:
(Api).update_new_document(“A-00001”, #)
expected: 1 time
received: 0 times
# ./spec/jobs/update_all_worker_spec.rb:19:in `block (5 levels) in

Finished in 2.68 seconds
1 example,

元記事を表示

Active Recordのカラム名としてobject_idが使えるようになった 他(This week in rails 2023-12-08)

## これはなに
Railsコミッタが連載している[This week in Rails](https://world.hey.com/this.week.in.rails)の内容を、簡単な補足と併せて紹介する連載です。社内slackで毎週書いていたものですがもったいない気がしてきたので公開することにしました。

## 引用元
https://world.hey.com/this.week.in.rails/allow-object_id-as-a-column-name-for-active-record-and-a-lot-more-112f1943

## 今週のトピック

### [Active Recordのカラム名としてobject_idを使用できるようになった](https://github.com/rails/rails/pull/50162)
Active Recordの有効なカラム名としてobject_idを使用できるようになった。
(紆余曲折あったみたい)

### [Time.now/DateTime.now/Date.todayが#travel_toの後にシス

元記事を表示

ジオコーディングとの格闘記録

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

## はじめに

タイミーでバックエンドエンジニアをしている甲斐です。弊社でアドベントカレンダーをやるということで特に話すことも思いつかないなと静観していたら仕掛け人の同僚が巧みに背水の陣を組んできたのでうまく乗せられてしまい、こうしてお目汚しを頂戴する羽目になりました。Qiitaのアカウントは長らくほったらかしていましたが、多少なりともアウトプットをしていた時期がもはや6年、7年も前であるとは月日の流れを実感します。

仕事の内容をそのまま記事に書くわけにはいかない、というのは恐らく誰もが通る悩みごとであると思いますが、私が執筆から遠ざかったのもそれが原因でした。今回の記事はなんとか抽象化するからリジェクトされないといいなあと思いながら、ジオコーディングで悩まされたことをテーマにお話しようと思います。

## なやみごと
ジオコーディングとは住所や地名といった情報から緯度や経度を算出すること

元記事を表示

【Rails】パスを見てDBを切り替えるとテストが落ちるのを回避

# 概要

前回「パスによってDBのアクセスを変更する」といった記事を書きました

https://qiita.com/yothio/items/e2cfbbee215d0dfab324

普通に使う分には問題なかったのですが意図せずテストがコケてしまったので調査を兼ねて残しておきます

結論としては「**Rspecのhookでコネクションをデフォルトに接続し直す**」ことで回避しました

具体的に状態、問題、解決方法について見ていきます

## 状態
問題が発生したコードは以前の記事で説明した通り以下の要件を満たすものです
– Railsでマルチデータベース構成を行う
– マルチデータベースでは異なるスキーマを取り扱う
– Contentテーブルにnameカラムの有無
– PostテーブルとCardテーブルが片方にしかない
– マルチデータベースの接続切り替えはモデル単位ではなくアクセスするパスを参照

「原則としてはAデータベースを参照するが、特定のパスから始まる場合はBデータベースを参照。同一のテーブルがあってもカラムが異なる」という状態です

## 問題
次に発生した問

元記事を表示

2023年のAlbaについて

## はじめに

この記事は[Ruby Advent Calendar 2023](https://qiita.com/advent-calendar/2023/ruby
)の記事です。参加しようとしたときにはすでに枠が埋まっていたのですが、12月2日の枠で「代わりに投稿」できそうだったので投稿しています。

## Albaについて

Albaは私(@okuramasafumi)が開発しているRuby向けJSONシリアライザです。

https://github.com/okuramasafumi/alba

ウリは高速さ・容易さ・機能性です。また、JRubyとTruffleRubyでも動作します。詳しくは上記リンクからREADMEを参照して下さい。

## 2023年までのコミット数

さて、Albaの開発は2020年から始まっており、2022年にはほぼ完成形と呼べるに至りました。バージョンとしては[2.1.0](https://github.com/okuramasafumi/alba/releases/tag/v2.1.0)がリリースされています。

実際、コミット数を以下のコマ

元記事を表示

RailsのTurbo Framesを利用してシンプルな遅延読み込みを実現

# はじめに

Railsアプリでデータベースの内容を表示する際、データベースのクエリーが返ってくるまでに時間がかかる場合に、結果が返ってくる前の段階でスケルトンを表示したいことがありました。

# Turbo Framesの利用

この挙動はTurbo Framesの遅延読み込みを導入すれば解決できそうと考えて調べていたところ、以下の記事が参考になりそうでした。

https://railsnotes.xyz/blog/simple-lazy-loading-hotwire-turbo-frames-rails

## 遅延読み込み先の設定

“`ruby:app/controllers/welcome_controller.rb
class WelcomeController < ApplicationController def index_lazy @contents = Content.all.limit(10) end end ``` ```erb:app/views/welcome/index_lazy.html.erb <%= turbo_frame

元記事を表示

JqueryでRedmineの「活動ページ」をもっと便利に②(フィルタリング機能と移動機能)

## JqueryでRedmineの「活動ページ」をもっと便利に②(フィルタリング機能と移動機能)

[Redmine Advent Calendar 2023](https://adventar.org/calendars/8974)の11日目の記事として作成しました。

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

必要とする情報を網羅的に全て取得して、そこから確認をしたい情報を絞り込むことで、「探したい」情報、「確認したい」情報に漏れなくアクセスすることができます。そのため、Redmineでは「チケット」、「ガントチャート」、「カレンダー」などのページで「フィルター」機能が提供されています。
Redmineで標準で提供されているフィルター機能はかなり強力で、柔軟な条件で情報の絞り込みを直感的に行うことができます。

チケットページのフィルター機能Rails7でいいね機能を非同期化について

# はじめに
いいね機能を非同期化する目的として、**リアルタイムなフィードバック**を行うことと**ユーザーエクスペリエンスの向上**をあげると思ったのでこの記事を書こうと思いました。

### 開発環境(ざっくりと書きます)
– ruby 3.2.0
– Rails 7.0.8

## やることの手順

### 1.gem “jquery-rails”を導入します
“`application.jsのファイル
//= require jquery
//= require rails-ujs
ここにもしbootstrapなど呼び込みの記述があってリンク先が邪魔しないように記述(自分の場合は最後に記述)
“`
Gemfaileにgem “jquery-rails”を導入しbundle installを実行

### 2.まずいいね機能のrenderで呼び出す記述を書いておきます
“`_like.html.erb
<% if user_signed_in? && article.liked_by?(current_user)%>
<%=link_to artic

元記事を表示

初めてのチーム開発が終わりまして

# はじめに
自分は10月よりAPPRENTICE SHIP(内定直結型エンジニア学習プログラム)のカリキュラムに2期生として参加しています。
今回はその一環としてのチーム開発を行いましたので、記事を作成しております。

# 開発体制と開発条件
### 開発体制
今回の人生初チーム開発では、同じくエンジニアを志しているメンバーの中からランダムに選ばれた3名で開発を行いました。
実務未経験ということ以外はほとんど共通点のないメンバーでした。
### 開発条件
今回の開発テーマは **「自分たちの役に立つもの」**
その上で代表的なフレームワークの使用禁止、実装期間は1週間という内容でした。
メンバーとは開発2ヶ月前から顔合わせを行い、週に2度のミーティングを行うという流れで開発が進んでいきました。

# 自分達は何を作ったか

### **『VScode shortcut quiz』**
VScodeのショートカットをクイズ形式で出すアプリを開発しました。
VScodeを使ってはいるけど ショートカットがあまり覚えれていない。もしくはVScodeを触って少し経つ方を対象に作成しました。

元記事を表示

RactorでGenServerっぽいものを作ってみた記録

## この記事は何
Rubyには3.0からRactorという機能がexperimentalで入っています。
これは文字通りRubyでActorモデルを実装することを可能にしたものです。
この記事では、このRactorを用いて、ElixirやErlangのOTPの一つであるGenServerを作ってみた記録記事です。

## Ractorとは
Ractorとは、Ruby 3.0から導入された新しい並行抽象化の機能です。
今までのThredなどの仕組みとは異なり、GVLの制限を受けずに文字通り並列の処理をRubyで実現することが可能になります。

詳しくは以下の記事をご覧ください。

https://qiita.com/tsukasa_oishi/items/beda7e7ddcf92c8e634d

## OTPとは
OTP (Open Telegraph Protocol)とは、分散システムや並列処理をErlangやElixirで実現するためのフレームワークです。このOTPではい

元記事を表示

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

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事