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

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

Active Storageのしくみ

Ruby on Railsにて、Active Storageのインストール後に生成されるマイグレーションファイルの中身が気になったので、その仕組みを読み解いてみる。

### 〜Active Storage の導入コマンド〜
`$ rails active_storage:install`

`$ rails db:migrate`で、Active Storageが使えるようになる。

## マイグレーションファイルに定義される3つのテーブル
1. active_storage_blobsテーブル
1. active_storage_attachementsテーブル
1. active_storage_variant_recordsテーブル

### active_storage_blobsテーブル
– ActiveStorage::Blobモデルのテーブル
– 添付されたファイルに対応
– 識別key(`:key`)、ファイル名(`:filename`)、Content-Type(`:content_type`)、ファイルのメタデータ(`:metadata`)、サイズ(`:by

元記事を表示

【Ruby】入力された住所からエリアを抜き出す方法【正規表現】

# 目的
[チェリー本](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774193976)と下記記事で正規表現を勉強しました。

[初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」 – Qii

元記事を表示

【Ruby】GemをGitHub Packagesに公開する

## 前提条件
* RubyGems v2.4.1 以降である
“`:ターミナル
$ gem –version
“`

* bundler v1.6.4 以降である
“`:ターミナル
$ bundle –version
“`

## パーソナルアクセストークンの設定
GitHub Packagesに公開などをするには認証が必要です。
以下の手順でパーソナルアクセストークンの設定をします。

GitHubのSettingsページを開きます。
![image220730_080233.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/14c246e6-70d9-7fd7-3d05-0155e24eeb20.png)

左サイドバー一番下の「Developer settings」を選択します。
![image220730_080909.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2

元記事を表示

UAからGA4への移行(Config実装編) ~GA4の知識はClassにして自己文書化しよう~

## 駆け出しエンジニアがGA4を導入
始めまして、エンジニア歴1年が経過した駆け出しエンジニアです:runner:
今回、GoogleAnalyticsでUAからGA4の移行業務を担当しました。
ソースコードに直埋めする方法を簡単ですがGA4導入という形で記事にしたいと思います。
開発はRailsで行っているので一部の例はRubyで記載しています。
タグマネージャーやGA4画面等の説明は含みませんが、これからGA4を導入する方の参考になればいいなと思います。:writing_hand:

## GA4は新しいGoogleAnalytics
https://support.google.com/analytics/answer/10089681

これまでGoogleAnalyticsではUA(ユニバーサルアナリティクス)というプロパティでデータの収集を行っていました。
新しいGA4というプロパティが発表されていますが、

「GA4って何が違うの:interrobang:」
「イベントベースに変わって同じように測定できるの:question:」

などなど、様々な理由からGA4の導入を

元記事を表示

`require’: cannot load such file — openssl (LoadError) というエラーが出てRuby 2.7.6がインストールできない場合の対処法

## 発生した問題
Ruby 2.7.6をインストールしようとしたら以下のようなエラーが出ました。

“`
$ rbenv install 2.7.6
/opt/homebrew/bin/ruby-build: line 193: needs_openssl_101_111: command not found
Downloading ruby-2.7.6.tar.bz2…
-> https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.6.tar.bz2
Installing ruby-2.7.6…
ruby-build: using readline from homebrew

BUILD FAILED (macOS 12.4 using ruby-build 20220324)

Inspect or clean up the working tree at /var/folders/r1/fsj20_kx4tj5b9why4z15nmw0000gn/T/ruby-build.20220729175045.94263.4iI0

元記事を表示

【Rails】chartkickのlinechart、Y軸を反転させるオプション

# はじめに
chartkickでline_chartを実装してランキング表示をしてましたが、知らんうちにY軸反転が効かなくなってました。
自分の環境ではchart.jsの仕様変更っぽかったので、メモしておきます。

# 環境
– Rails 5.2
– Ruby 2.7.6
– chartkick (4.2.0)

# 変更点

“`
library: { scales:{ yAxes: [{ ticks: { reverse: true, } }] } }
“`

で動いていたのが、2022年7月に動かなくなってましたが、

“`
library: { scales:{ y: { reverse: true} } }
“`

で動くようになりました。

……最初からこうしておいてくれよ!w

終わり

元記事を表示

【2022年】GA4のAPI(Analytics Data API)をRailsで使う方法

初記事です!
正直、苦労しすぎたので、同じ苦しみを味わう方が少しでも減ればという想いで書きます。よろしくお願いします!

# !注意!
– 利用したのは旧式のAnalyticsではなくGA4です。
– GA4はアップデートが激しいため、この通りにコードを書いても、数カ月後には動かない可能性があります。あくまでも現時点では、ということをご理解ください。

# 使うAPIとGem
– Analytics Data API
https://developers.google.com/analytics/devguides/reporting/data/v1
– google-apis-analyticsdata_v1beta
https://github.com/googleapis/google-api-ruby-client/blob/main/docs/usage-guide.md

【前提というか自戒】
公式ドキュメントやGemの中身はきちんと読みましょう。特にGem。公式ドキュメントは更新にラグがあり、今回はかなり苦しめられました。
もしこの方法が使えなくなっても、Gem読めばた

元記事を表示

2つの区間(Range)の重複を判定する方法

どうも、「病院なび」の開発チームメンバー甘利です。
今日は区間(Rangeクラス)の重なりの判定について説明します。

Rangeクラスを利用していると、それらが重なっているか?という判定をしたくなる時があります。
ActiveSupportを利用していれば .cover? メソッドを利用することができますが、
そうじゃない時はどうしたら良いでしょうか。

ふたつの閉区間を表すRangeオブジェクトの r1 と r2 があり、
r1, r2 の端をそれぞれ r1_s, r1_e、r2_s r2_e と表すとします。
さて、このふたつのRangeが重なっていることを判別するにはどうしたら良いでしょうか。

# 順当に考えてみる
ふたつのRangeの区間が重なっているとはどういうことかを書き出してみますと、
以下のいずれかが成り立つとき、とうことになります。
1. r1 の範囲に r2_s が含まれている
1. r1 の範囲に r2_e が含まれている
1. r2 の範囲に r1_s が含まれている
1. r2 の範囲に r1_e が含まれている

これをRubyのコードでそのまま書くと

元記事を表示

VSCodeでCRubyを開発する

# Cの設定
* Settings (Workspace) > Extensions > Makefile Tools > Makefile > Make Directory: out-of-place ビルドのディレクトリを指定する

# Rustの設定
Cargo.tomlの場所を設定する設定があるか? (未調査)

元記事を表示

【Ruby】.gemspecについて

## `.gemspec`について
“`sample_gem.gemspec
Gem::Specification.new do |spec|
spec.name = “sample_gem”
spec.version = “Gemのバージョン”
spec.authors = [“作成者”]
spec.email = [“メールアドレス”]
spec.homepage = “ホームページ”
spec.summary = “要約”
spec.license = “ライセンス”

spec.metadata = {
“bug_tracker_uri” => “https://github.com/username/sample_gem/issues”,
“documentation_uri” => “https://github.com/username/sample_gem”,
“label” => “Gem名”,
“rubygems_mfa_required” => “真偽値”,
“source_code_uri

元記事を表示

Range オブジェクトに minmax を使って多重代入

例えば、2022年現在のお盆の期間を Range オブジェクトで保持しているようなケースを考える。

“`ruby
require ‘date’

# 2022年のお盆の期間
THIS_YEAR_OBON_RANGE = (Date.parse(‘2022-08-13’)..Date.parse(‘2022-08-16’))
“`

これを元に、お盆の開始日と終了日をそれぞれ変数に格納しようと思った場合、素直に書くとこうなる。

“`ruby
from = THIS_YEAR_OBON_RANGE.first
to = THIS_YEAR_OBON_RANGE.last
“`

これを1行で書きたいとき、`minmax` を使うと多重代入で済むので便利だと気づいた。
“`ruby
from, to = THIS_YEAR_OBON_RANGE.minmax
“`

若干トリッキーではあるので、他に良い書き方があれば知りたい。

なお、この書き換えが通用するのは `min` で始端、`max` で終端が取得できる場合のみであって、一般には等価な書き換えではないことに注意。以下

元記事を表示

【Ruby on Rails】Rails consoleで特定のレコードのカラムの情報を更新する方法

## Rails console
“`
pry(main)> User.first.update_column(:name, “ごりら”)
“`
これは、Userテーブルの一番目のテーブルのnameカラムの内容を“ごりら“に変更したいとき

## SQL文
“`
SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1
UPDATE `users` SET `users`.`name` = ‘ごりら’ WHERE `users`.`id` = 1
“`

こんな感じ。

元記事を表示

Release Please Actionの紹介

[RSpec::ContextHelper](https://github.com/masaakiaoyagi/rspec-context_helper.rb)という小さなgemのリリースに[Release Please Action](https://github.com/google-github-actions/release-please-action)を使ってみたのですが、便利だったので紹介します


## これは何?
[Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)に従ったコミットメッセージを付けることでリリースの自動化をするもの


## 何してくれるの?
以下のようなことが出来そうです
* [バージョン](https://github.com/masaakiaoyagi/rspec-context_helper.rb/pull/24/files#diff-fc01d50d6c08cd5b55f1596f331d2cd2c25bd19db0bb7cb72ee2e0476

元記事を表示

リーダブルRSpec(カスタムマッチャー+RSpec::ContextHelper編)

## 読みやすいRSpec書いていますか?


### 読みやすいRSpecって何?

「簡潔でテストケースを見てテスト内容が理解しやすいもの」と考えています
ここでのテストケースとは、it/exampleブロックのことを指しています


## 例題
例えば、Rails製REST APIのRequest Specを書くことを考えてみます
コードは正しいか確認していないので、多少間違っていてもお許しください?

### 前提
* APIはたくさんある
* 良くないけど、クエリパラメータのチェックをcontrollerでしているため、テストはRequest Specで行う


### APIの共通仕様
* Server Errorを除き、HTTPステータスコードは必ず200で返す
* HTTPレスポンスボディはJSON形式で返す
* 成功時のレスポンス
“`json
{ “status”: 200, “message”: “Succeed”, “data”: … }
“`
* 未認証時のレスポンス
“`json
{

元記事を表示

RVMでRubyのマルチユーザーインストールを試す

## これはなに

`rbenv`を使ってRubyマルチユーザーで使えるようにインストールしようと思って調べてみたところ、`rbenv`だと少し面倒そうだった。
その最中に`RVM`なるものを見つけて、楽にインストールできたのでインストール手順を書いておく。

## rbenvでマルチユーザーインストールする場合

以下の記事などのように、

https://qiita.com/dawn_628/items/2fb2be24e7ba08d9a5fa

– `/usr/local/`などにrbenvを配置
– sudoerもrbenvを呼べるようにPATHを通す
– `RBENV_ROOT`環境変数を設定、sudo時に渡すようにする

をしなければならない。

どうやってマルチユーザーで使えるようにしてるか後から触る時に忘れそうだなと思って、以下の記事を読んでいたら、

https://komiyak.hatenablog.jp/entry/20150603/1433364444

> rbenv と同じバージョン管理ツールの RVM には、「Multi-User installatio

元記事を表示

Array.concat

RubyのArray.concatは破壊的で、
JavaScriptのArray.concatは非破壊的

https://docs.ruby-lang.org/ja/latest/method/Array/i/concat.html

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

元記事を表示

【Ruby】ハッシュについて【初心者向け】

## ハッシュとは?
:::note info
キーと値の組み合わせでデータを管理するオブジェクトです。

`イメージ`
{ キー1: 値1, キー2: 値2, キー3: 値3 }
:::

## 配列との違いは?
配列が要素を指定するのには、「0」から始まるインデックス番号を使用します。
それに対し、ハッシュは「キー」と呼ばれる任意の文字列を使用し、「バリュー」と呼ばれる要素を指定します。
“`ruby:hash.rb
about_taro = { name: “suzuki taro”, age: 30, like: “apple”, hobby: “swimming” }
puts about_taro[:name]
#==> suzuki taro
“`

## 配列ではなくハッシュを使うメリットは?
**1. コードの可読性が高い。**
ハッシュは任意の文字列であるキーとの組み合わせにより、バリューがどういったものなのかが分かりやすいです。
“`ruby:hash.rb
#ハッシュの場合 キーにより、バリューが何の値段なのか分かります

元記事を表示

FizzBuzz問題

エンジニアのコーディングテストかなんかで用いられるとかで有名なFizzBuzzをやってみた。

# 問題
1〜100までの数字をターミナルに出力してください。ただし、「3の倍数」のときは数字の代わりに文字列でFizzと、「5の倍数」のときはBuzz、両方の倍数である「15の倍数」のときはFizzBuzzと出力してください。

雛形
“` question.rb
def fizz_buzz
# ここに処理を書き加えてください
end

fizz_buzz
“`

# 問題文を分けて考えてみる

まず最初に1から100までの数字を出力することが必要。
while文で100になるまで出力するよう繰り返し処理を行う。
“`question.rb

def fizz_buzz
num = 1
while (num <= 100) do puts num num = num + 1 end end fizz_buzz ``` 次に倍数式。今回はそれぞれ15の倍数でFizzBuzz、5の倍数でBuzz、3の倍数でFizzとあったがそれぞれ条件分岐で記述。

元記事を表示

Rails mapメソッドがふんわりしてたので調べてみた

### はじめに
現場に入るとコードの至るところに扱い慣れていないメソッドが登場します。
これまでの記事でもpluckメソッドを紹介しました。
https://qiita.com/tatsu0209/items/61bdbe46216991aeb8d3
でも、現場でいちばん目にしたメソッドってなんだろうか・・・
そう、それはおそらくmapメソッドだ。
なんとなくわかったふりでふんわりと読んでいたので色々と調べてみました。
その結果を備忘録として残したいと思います。
もしもおかしな点やお気づきの点がありましたらご指摘いただけると大変ありがたいです。

### 環境(自分のPC)
Ruby 2.7.1
Rails 6.0.5

### mapメソッドとは
公式ドキュメントでは次のように説明されています。
>各要素に対してブロックを評価した結果を全て含む配列を返します。ブロックを省略した場合は Enumerator を返します。

簡単に言うと、要素を順番に取ってきて、指定した処理をしてくれるメソッドです。
記述方法としては次のようになります。
~~~ ruby
配列.map { |変数|

元記事を表示

【ノート】rbenv

# about
rubyのバージョン管理

# コマンド
$ rbenv versions
$ rbenv local 3.1.1
$

元記事を表示

OTHERカテゴリの最新記事