Ruby関連のことを調べてみた2022年12月26日

Ruby関連のことを調べてみた2022年12月26日
目次

サンプルコードでわかる!Ruby 3.2の主な新機能と変更点

## はじめに

Rubyは毎年12月25日にアップデートされます。
Ruby 3.2は2022年12月25日に3.2.0が正式リリースされました。

https://www.ruby-lang.org/ja/news/2022/12/25/ruby-3-2-0-released/

この記事ではRuby 3.2で導入される変更点や新機能について、サンプルコード付きでできるだけわかりやすく紹介していきます。

ただし、すべての変更点を網羅しているわけではありません。個人的に「Railsアプリケーションの開発時に役立ちそうだな」と思った内容をピックアップしています。本記事で紹介していない変更点も多数ありますので、以下のような情報源もぜひチェックしてみてください。

https://www.ruby-lang.org/ja/news/2022/12/25/ruby-3-2-0-released/

https://qiita.com/advent-calendar/2022/ruby32

https://github.com/ruby/ruby/blob/v3_2_0/NEWS.md

元記事を表示

Map・ハッシュ操作 【Java】【Kotlin】【Ruby】

# 概要
自主学習のアウトプットです。

現場でJavaのMapを操作していた時に、自分の書いたコードがまわりくどいやり方かなと思って調べたらいい方法を見つけたので備忘録です。(実際は周辺のコードと合わなくて使えませんでしたが。。)

学習中のKotlinとRubyで同じことするには?と調べたものも共有します。

# まわりくどいやり方
コードを書いてふと思いました。

「なんやこれ、まわりくど」

思わず声に出てしまったコードがこちら

“`Java:Java
Map pokemons = new HashMap();
pokemons.put(“Pikachu”, “ピカチュウ”);
pokemons.put(“Lapras”, “ラプラス”);
pokemons.put(“Snorlax”, “カビゴン”);
pokemons.put(“Venusaur”, “フシギバナ”);
pokemons.put(“Charizard”, “リザードン”);
pokemons.put(“Blastoise”, “カメックス”

元記事を表示

JITコンパイルをサポートした新たなRuby処理系をRustとアセンブリで書いている話

この記事は[言語実装 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/lang_dev) の24日目の記事です。

## はじめに

 monochromeです。今回はmonorubyという名前の高速なRuby処理系の紹介をします。

 ここ何年か、わたしはruruby[^ruruby]というRubyのインタプリタをRustで書いていて、Advent Calendarでもいくつか紹介記事を書きました。

[^ruruby]:https://github.com/sisshiki1969/ruruby

– [Rustでつくる(つくれるかもしれない)Ruby](https://qiita.com/sisshiki1969/items/3d25aa81a376eee2e7c2)
– [ruruby: RustでつくっているRuby](https://qiita.com/sisshiki1969/items/4d76e69545ca1c26ed48)
– [Ruby処理系自作入門](https://qiita.com

元記事を表示

selfの使い方

インスタンスメソッドの中では「self」を用いて、「self.変数名」
前提として
インスタンス=>クラスで作られた設計図を基に作られたも
インスタンスメソッド=>クラス内で定義されたメソッド(インスタンスに対して呼ばれるからインスタンスメソッドと呼ばれる。)

selfを用いる場合
selfには呼び出したインスタンスが代入されている

元記事を表示

LINEWORKSの特定ルームにメッセージを送る方法(API 2.0対応のRuby版)

# ゴール

Rubyのコードから実行すると、LINEWORKSに登録されたボットが、指定されたルームに任意のメッセージを送ることができます。
![スクリーンショット 2022-12-25 0.44.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524261/ef04c309-455a-f148-d6a0-66ab010dbbe0.png)

# メッセージの送信 – トークルーム指定
LINEWORKS Developersで調べると、以下のAPIを呼び出す必要があるようです。
https://developers.worksmobile.com/jp/reference/bot-channel-message-send?lang=ja
![image (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524261/a58a2fcb-88a4-af9b-3bb9-46cf2148166a.png)
具体的なH

元記事を表示

【Rails】コメント削除ボタンをコメントしたユーザーのみ表示させるには。

# はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# コメント削除ボタンをコメントしたユーザーのみ表示させるには。
現状下記の状態では全ユーザーに削除ボタンが現れてしまい、削除できる状態でした。
“`app/views/recipes/show.html.erb

<% @comments.each do |comment| %>

<%= comment.user.user_name %>さんの投稿

<%= comment.content %>
<%=link_

元記事を表示

GitLab開発依存ライブラリからthin gemを排除した

GitLab Advent Calendar 2022 25日目。

[thin](https://github.com/macournoyer/thin)という、”A small and fast Ruby web server” gemがある。`tnir` とも少し字面が似ている。

GitLabの開発が始まって1年ちょっとたったタイミングで当時、初代GitLab CTO(のちのFellowであり、1年ほど前からGitLab Inc.から離れている)dzaporozhetsにより開発用に導入されたgemである。

> dzaporozhets committed on Jan 19, 2013

– https://github.com/gitlabhq/gitlabhq/commit/54a24608a29d113f0c607027cddd8b6947c6a55c

## 何が問題か

GitLab開発用に作られたCLI `gdk` (GitLab Development Kit) というものがあるが、そこのサブコマンドに `thin` というコマンドがあった。ケースによるが一

元記事を表示

【Rsepc】実行時間が長いテストを抽出する

# profileオプション
テストケースごとの実行時間がわかり、時間がかかっているテストを抽出することができる。

`$ bundle exec rspec –profile`で実行時間がかかっているテストケースとその実行時間の上位10個が出力される。
デフォルトで10件表示されるようになっているので、
`$ bundle exec rspec –profile 20`と指定して上げると、上位20個が表示される

# ディレクトリごとに分けて実行するのが良い
すべてのテストコードを実行するのだと、大きなアプリケーションだと時間かかるので、ディレクトリごとに確認した方が良い。
“`ruby
ex)
bundle exec rspec –profile 20 spec/controllers/
bundle exec rspec –profile 20 spec/models/

# 1つのテストケースの時間も確認できる
ex)
bundle exec rspec –profile 10 spec/models/user/user_spec.rb:40
“`

元記事を表示

URLからOGPを取得してDBに保存する

# 概要
LINEでyoutubeやamazonのリンクを送信すると、そのサムネイル画像やタイトルを自動で表示してくますよね?
あれはOGPと言ってurlからそのページに設定されているタイトル、url、概要、画像などの情報を取得する仕組みを利用しています。
javascriptを使ってOGPを取得する記事はたくさんありますが、railsで取得した値をDBに保存するやり方が書かれた記事がなかったので、書いてみました!
## コントローラーとテーブル
コントローラーはpostsコントローラーでアクションはindex, new, create, showの4つ。
テーブルはpostsテーブルで、カラムは以下のようになります。

![db.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988077/5dfdabf0-2c23-6116-61a9-fe2084f00f7e.jpeg)
図のようにbody, urlカラムは実際にユーザーが入力するためのカラム、
url_image, url

元記事を表示

JavaエンジニアがRubyを使ってみて思ったこと

# 前説
– 株式会社SUPER STUDIOの2022年Adventarの記事です。
– 7年ぐらいJava(Spring)を使っていたエンジニアが初めてRuby(Rails)を使ってみた所感のまとめです。
– JavaもRubyもどちらもまだまだ未熟者が書いた記事です。
– Javaの最新のバージョンもキャッチアップできてないのでちょっと知識が古いです。
– Javaの方がいいとか、Rubyの方がいいとか、対立煽りを助長するつもりはありません。
– 自分と同じでJavaばかり使ってきて、Rubyとかどんな感じなんかなあって思ってる人に読んでもらえたら幸いです。

# Ruby(Rails)を使い始めて思ったことまとめ
– 型宣言が必要ない
– メソッドの引数にデフォルト値を設定できる
– メソッドの戻り値の型の定義が必要ない
– 最終行の結果がreturnされる
– 後置ifが使える
– if文の戻り値が設定できる
– ActiveRecordが便利

1個ずつ見ていきます。

## 型宣言が必要ない
これは解説不要かと思いますが、Rubyは動的型付け言語ですので、Javaのような

元記事を表示

Railsで日時比較をする際に型が違って焦った話

# この記事で伝えたいこと

Railsで日時比較をするときには日付の型を確認しようと言う話をします。

# 日時に応じて挙動が変わる処理の実装

WEBアプリケーションを開発していると、特定期間のみキャンペーンのバナーを表示させたいというような、期間などの時刻で動作する機能を開発する必要があります。
かつての僕は「その時間になったら手動でデプロイするのかな」と思っていたこともあったのですが、コードの中に時間による分岐を入れれば自動で機能がアクティブになることを教えてもらいました。

そんな僕が書いたコードが下記のような分岐です。

“`ruby
Time.zone.now.between?(Date.new(2022, 12, 01), Date.new(2022, 12, 31))
“`

しかし、2022年12月1日0:00(JST)になってもこれではうまく動作しませんでした。

“`ruby
[2] pry(main)> Time.zone.now.between?(Date.new(2022, 12, 01), Date.new(2022, 12, 31))
=>

元記事を表示

カスタムマッチャーをカジュアルに書こう

## カスタムマッチャー書いてますか?
以前[こちらの記事](https://qiita.com/masaakiaoyagi/items/36ce6c88fa2b6deb95e0)で、`shared_examples`ではなくカスタムマッチャーで書いた方が読みやすいRSpecになると思うと書きました。
では、カスタムマッチャーはどう書いたらいいでしょうか?


### カスタムマッチャーの書き方
上の記事で例題として上げていた、以下のように書けるようにする`be_api_response_of`マッチャーを考えてみましょう。
“`ruby
it { expect(response).to be_api_response_of(401, “Unauthorized”) }

context “when logged in” do
include_context “logged in”

context “when page is 1” do
let(:page) { 1 }
it { expect(response).to be_api_response_

元記事を表示

Ruby 3.2で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について(注目の新機能もあわせて紹介!)

## はじめに

2022年12月25日に、Rubyの新しいバージョンであるRuby 3.2がリリースされました。
一方、2021年12月2日に出版した書籍「[プロを目指す人のためのRuby入門 改訂2版](https://gihyo.jp/book/2021/978-4-297-12437-3)」(通称・チェリー本。以下、本書)は執筆当時最新だったRuby 3.0を対象にしています。

本書は紙の本であるため、簡単に内容をアップデートすることができません。しかし、何もしないとどんどん内容が古くなってしまい、「本の通りやってみたけど、今使っているRubyとなんか動きが違う」ということになってしまいます。

そこで新しいRubyのバージョンがリリースされて、本書の説明と異なる部分が出てきたときは、毎回ネット上でその差異を説明するようにしています。その説明を読めば、動きが違う部分があってもきっと落ち着いて対処できるはず、という算段です。

というわけで、この記事ではRuby 3.2で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について説明します(第1版との差異ではないの

元記事を表示

『RubyでつくるRuby』のMinRubyのパーサを書いた(手書きの再帰下降パーサ)

書籍 **『RubyでつくるRuby ゼロから学びなおすプログラミング言語入門』**(以下、 **『RubyでつくるRuby』** )で扱われているミニ言語 MinRuby のパーサを書いてみました。

『RubyでつくるRuby』は、Ruby を使った基本的なプログラミングの入門から始まり、後半ではミニ言語 MinRuby(Ruby のサブセット)のインタプリタを作って最終的に MinRuby言語で MinRuby インタプリタを書くところまでやってしまう、という内容の入門書です。


https://www.lambdanote.com/products/ruby-ruby


– [PDF版のみの販売ページ](https://www.lambdanote.com/products/ruby-ruby-ebook)
– [

元記事を表示

Sidekiq 7の新機能・変更点

## はじめに

Ruby on Rails (以下Rails) でバックグラウンドジョブを実行する際に一番よく使われているのGemである、Sidekiqのバージョン7.0(以下Sidekiq 7)が2022年10月にリリースされました。

このバージョンでは、管理画面へのメトリクスの追加、Pumaなどのプロセスへの埋め込み、キュー毎の同時実行数を制限するカプセルなど、以前よりも大きな機能追加が行われています。

本記事では、Sidekiqの公式サイトの記事や、GitHubの公式プロジェクトの内容を元に、Sidekiq 7の新機能や変更点の解説を行います。

## 注意点

### 本記事で取り扱うエディション

本記事ではGitHubで[公開しているOSS版](https://github.com/mperham/sidekiq)のSidekiqについて記述しています。Pro / Enterprise版を使用している場合は、[公式サイト(英語)](https://sidekiq.org/)を参考にしてください。

### サポートされるRails / Ruby / Redisのバージ

元記事を表示

【Ruby】深いハッシュで、ある要素が未定義かどうかを判定

例として、以下のような深いハッシュがあるとします

“`ruby
> x = {a: {b: {c: 1}}}
=> {:a=>{:b=>{:c=>1}}}
“`

このハッシュに対して、 `x[:a][:b][:d]`が存在するかどうかを判定したいです

直感的に、以下のようにすれば判定できそうです
“`ruby
> x[:a][:b][:d]
=> nil
“`
結果は `nil` が返ってきたので期待通りです。

では、次に `x[:a][:e][:f]`が存在するか判定します
上と同様に
“`ruby
> x[:a][:e][:f]
“`
としてみます
しかし、ここで問題が発生します
`x[:a][:e]`が `nil`なので、それに続けて`[:f]`を評価することができず、エラーが返ってきます

“`ruby
> x[:a][:e][:f]
Traceback (most recent call last):
4: from /usr/bin/irb:23:in `


3: from /usr/bin/irb:23

元記事を表示

シンプルなSinatraアプリをCloud Native BuildpacksでCloud Runにデプロイ

# はじめに

以前にシンプルなSinatraアプリをつくったとき、Cloud Runにデプロイする際には`Dockerfile`を作成してデプロイしていました。Cloud Native Buildpacksを利用すれば`Dockerfile`を作成する必要がなくCloud Runにデプロイできそうだったので、試してみました。

# デプロイのためのファイルを作成

“`ruby:Procfile
web: bundle exec ruby app.rb -p $PORT
“`

`build_and_deploy.sh`を以下のように作成して、`APP_NAME` `GCP_PROJECT_ID` `GCP_REGION`を指定します。

“`bash:build_and_deploy.sh
APP_NAME=”appname”
GCP_PROJECT_ID=”projectid”
GCP_REGION=”asia-northeast1″

eval “pack build $APP_NAME \
–builder gcr.io/buildpacks/builder:v1

元記事を表示

Rails関係記事 リスト一覧[自分の記事のまとめ]

環境構築

      ・[本番環境用のgemを開発環境にインストールしたくない時の対処法](https://qiita.com/Ktsuki16/items/4cee16e285aa842dfd3e)

      ・[rails開発でincompatible library versionが出た時の対処法](https://qiita.com/Ktsuki16/items/4b0290bac7d0499c65cf)

      ・[環境変数の設定に困ったときに読むべき記事[備忘録]](https://qiita.com/Ktsuki16/items/7a95ce679a2ee67ece94)

      ・[nodenvライブラリをインストールしたはずなのに、nodenvコマンドが使えなかったので解決してみた。[パスを通せば解決。]](https://qiita.com/Ktsuki16/items/8e594c015ea4c4d37e6b)

      ・[rbenv localでru

元記事を表示

Ruby: 入れ子の配列だけをパースできるパーサを作る(手書きの再帰下降パーサ)

たとえば `((), (), (()))` という文字列を入力として与えると

“`ruby
p parse(“((), (), (()))”)
#=> [[], [], [[]]]
“`

このように入れ子の配列を出力する(入れ子の配列に変換する)パーサを作ります。

入力文字列として使える文字は `(`, `)`, `,`, 半角スペースの4つだけとします。

いきなり全部やろうとすると大変なので、4つのステップに分けましょう。
以下、「配列」と書いているところは Ruby の配列のイメージで大丈夫です。

– (1) `()` をパースできる
– 空配列
– (2) `(())` や `((()))` をパースできる
– 配列の入れ子
– (3) `(要素, 要素)` や `(要素, 要素, 要素)` をパースできる
– 配列の要素のくりかえし
– (4) `((), (()))`
– 入れ子とくりかえしの組み合わせ

# (0) 全

元記事を表示

ruby 練習問題43 (アウトプット用)

以下の条件を満たすコードを記述する問題。

・Bookクラスを作成する
・Bookクラスは@titleと@priceをプロパティとして持っている
・attr_readerを使用する
・Bookクラスのインスタンスを作成する(タイトル、価格は任意)
・作成したインスタンスから、タイトルと価格を取得し画面に表示させる。
以下、模範解答
“`ruby
class Book
attr_reader :title, :price

def initialize(title, price)
@title = title
@price = price
end
end

book = Book.new(“プロを目指す人のRuby入門”, 3218)
puts book.title
puts “#{book.price}円”
“`
以下、解説
まず、attr_readerメソッドとはインスタンス変数を呼び出すメソッドを定義するメソッドである。主に記述する量を減らすために使われるとの事。
attr_readerを使用しないコードだと
“`ruby
class Book

元記事を表示

OTHERカテゴリの最新記事