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

Ruby関連のことを調べてみた2023年01月07日
目次

[CircleCIのセキュリティインシデント対応] Railsのmaster keyをローテーション(再生成)する

大した情報ではないですが、
circle ciでRailsを使っている人への注意喚起になればと思います。

## 話の発端
2023/04/01 CircleCIで管理しているセキュア情報が漏洩したかもらしい

https://circleci.com/blog/january-4-2023-security-alert/

## 環境
– Ruby on Rails: 7.0.2
– Ruby: 3.1
– ruby:3.1.0 をベースイメージにしたコンテナ内で作業

## 再生成していく
今回は例として、production用のcredentialsを再生成します。

#### ① 現状のcredentialsをメモする
“`bash
# 現状のcredentialsをメモ帳などにコピー
$ rails credentials:show -e production
db:
username: hoge
password: huga
“`

#### ② credentialファイルとmast

元記事を表示

Railsのcollection_selectの使い方

毎回調べているので備忘録として。

以下のような構成になっている。

“`erb
<%= collection_select(対象となるモデル名, paramsに贈りたいモデルのカラム, 選択肢として表示されるモデルのレコード(配列), 選択肢として表示されるモデルのカラム, { prompt: "何もも選択されていない場合に表示される文字", select: 選択済みのレコード }) %>
“`

具体的には以下のように使う。

“`erb:edit.html.erb
<%= collection_select(:product, :id, @products, :id, :name, { prompt: "商品名を選択してください", select: @product }) %>
“`

元記事を表示

【Ruby on Rails】devise_invitableを使った既存ユーザーへの招待機能の実装

# はじめに
この記事は、初学者がgem「devise_invitable」のカスタマイズに挑戦してみた記事です。チーム(グループ)があるアプリで、新規ユーザー/既存ユーザーのどちらにも招待メールを送り、招待されたユーザーがパスワードを登録した時にチームに所属できるようにしています。
***この記事ではdevise_invitableの基本的な実装方法は説明していません。実装済みを前提としています。**

# 経緯(読み飛ばしても?‍♀️)
Dive Into Codeというプログラミングスクールの卒業課題で「複数人でタスク管理を行うアプリ」を作成しました。簡単なアプリ紹介としては、複数人が所属するチームを作成し、そこでタスクを管理を行うというものです。
招待したい人に「このチームに入ってよ!」と招待メールを送ることができたらいいなと思い、gem「devise_invitable」を使用することにしました。
##### しかし、問題が。。?
アプリのイメージとしては1人のユーザーがたくさんのチームに所属できるというものだったのですが、デフォルトのdevise_invitableの機能

元記事を表示

【Ruby】クラス変数ではなくインスタンス変数を使う場合

# Rubyの@変数
Rubyには2つの@変数があり、先頭が@の`インスタンス変数`と先頭が@@変数の`クラス変数`に分かれる。

インスタンス変数はそれぞれのオブジェクトに属しています。
あるオブジェクトに値がセットされたインスタンス変数は、他のオブジェクトのインスタンス変数には基本的には影響を与えません。

一方で、クラス変数は、オブジェクトごとではなく、クラスごとに与えられます。
クラスから作られたインスタンスは、すべてのインスタンスで参照することができます。
このため、オブジェクトでクラス変数を変更して、意図せずに他のオブジェクトのインスタンス変数を変更してしまうことがあります。

これを、例を示して考えてみます。

# シングルトンパターンを実装して@変数を考える

まず、クラス変数が使用される場面として、シングルトンパターンがあります。
シングルトンパターンは、特定のクラスのインスタンスを一つ作り、そのインスタンスをすべてのコードがアクセスできるようにしたい場合に実装されます。

“`ruby
class Singleton
private_class_method(

元記事を表示

【Sonic Pi】リングバッファを用いてドラムを何拍目に鳴らすか直感的に指定する

# はじめに

Sonic Piにおいてドラムのビートを直感的に指定したい。
何拍目を音符にして何拍目を休符にするかを簡単にカスタマイズしたい。

# まずはサンプルコード

“`ruby
live_loop :hihat do
if ‘x-x-x-x-xxxxx-x-‘.ring.tick == “x” then
sample :drum_cymbal_closed
end
sleep 0.25
end
“`
4/4拍子の曲を想定としている。このコードでは4小節分のハイハットシンバルの音を指定している。
これは1, 3, 5, 7, 9, 10, 11, 12, 13, 15拍目に`:drum_cymbal_closed`の音を鳴らすコードである。

例えば
“`ruby
if ‘x-x-x-x-xxxxx-x-‘.ring.tick == “x” then
“`
の箇所を
“`ruby
if ‘-x-x-x-x-x-x-x-x’.ring.tick == “x” then
“`
とすると、偶数拍で音が鳴るようになる。

‘x’と’-‘を入れ替えると

元記事を表示

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

# はじめに

私が開発しているアプリではCloud Native Buildpacksを使ってコンテナをデプロイするケースが増えてきました。運用環境にはGCPのCloud Runを使うことが多いのですが、Azure Container Appsも使えるようになっておきたいと思っていたので、シンプルなSinatraアプリをAzure Container Appsにデプロイする方法を試してみました。

# Azureのセットアップ

基本的にはAzure Portalでセットアップをしますが、一部で`az`コマンドも利用するので`az`を実行できるようにしておきます。

## リソースグループを作成

Azure Portalでリソースグループを作成します。

## レジストリを作成

Azure Container Registryでレジストリを作成します。SKUにはBasicを選択しました。

作成したレジストリに対して以下のコマンドを実行します。

“`bash
% az acr update -n –admin-enabled true
“`

http

元記事を表示

機能テストとは?定義/種類/事例/方法を紹介

機能テストは、ソフトウェアが事前に定義された要件に従って動作しているかどうかをQAスタッフが評価するプロセスです。この記事では機能テストの定義、種類、事例、および方法を見ていきましょう。

1. 機能テストとは?
認知症 機能テスト
機能テストはブラックボックステストの一種で、アプリケーションやシステムの機能が期待通りに動作しているかどうかを確認するために実施されます。このテストでは、テスト対象アプリケーションのユーザーインターフェース、API、データベース、クライアント/サーバー通信、セキュリティ、その他の機能をチェックします。テストは、手動または自動化ツールを使用して実行されます。

2. 機能テストの種類
最も一般的な機能テストの種類を以下で簡単に紹介します。
Read more: https://bit.ly/3vG0TTA

元記事を表示

ActiveJobで実装したデータ取り込みジョブを2.2倍高速化した

PubAnnotationという文章への注釈を管理するWebアプリケーションがあります。
このアプリケーションには注釈のついた文章データを一括アップロードする機能があります。
7万文章をアップロードすると7時間掛かります。この処理を高速化するために工夫しました。

PubAnnotationはRuby on Railsで実装されたWebアプリケーションです。
一括アップロード機能は、ActiveJobで実装され、Sidekiqで実行されているバッチ処理です。

## 結果

最初に結果を示します。
文章をアップロードしたときの平均アップロード数です。
文章によってデータ量がちがいます。2000~2500程度の文章をアップロードして平均を取りました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15964/8b407a4e-2e6d-9f86-62d6-8b0966b88d14.png)

縦軸が1秒当たりのアップロード文章数です。横軸はアップロードした文章数です。
次の三つの修正

元記事を表示

ペアプロあるある「記号書けるけど読めない」状態を回避するために読みにくい記号をRubyでの使用例と共にまとめてみた

## はじめに

最近ペアプロでナビゲーター役(指示役)をすることが多いのですが、普段自分がコーディングで利用している記号でも「読み方がわからずに伝えられないもの」や「相手に伝わらない言い方」があることに気付きました。

そこで、ペアプロをやる中で私が「書けるけど読めない」「相手が理解しにくい」と感じた記号についてRubyでの使用例と共に抜粋して紹介します。

## 読みにくい記号と読み方一覧

| 記号 | 主な読み方 |
|:-:|:-:|
| () | 丸括弧(まるかっこ)、パーレン |
| [] | 角括弧(すみかっこ)、ブラケット |
| {} | 波括弧(なみかっこ)、中括弧(ちゅうかっこ)、ブレース |
|>|大なり|
|<|小なり| |:|コロン| |;|セミコロン| |~|チルダ| |^|キャレット、ハット| |\\ |バックスラッシュ| |\||縦棒、パイプ| |*|アスタリスク| ## 使用例 ### ():丸括弧(まるかっこ)、パーレン メソッドの宣言や呼び出し、複数の式をまとめる際に使用します。 括弧というとこちらの記号をイメージする人が多

元記事を表示

【Ruby】private、protectedの使い分け

# praivate
class内でprivateメソッドを定義されたメソッドはレシーバを指定して呼び出すことができなくなります。

“`ruby
class Fooz

private

def say
p “Hello”
end
end

foo = Foo.new
foo.say
“`
この場合はエラーが発生します。

次の場合はエラーが発生せずに実行が可能です。
“`ruby
class Foo

def greeting
say
end

private

def say
p “Hello”
end
end

foo = Foo.new
foo.greeting
“`
privateメソッド内で定義されたsayメソッドは、クラス内で呼び出すことで、インスタンスで使用することが可能となります。

# protectedメソッド
privateメソッドと同じようにクラスの外から直接メソッドを呼び出すことができなくなります。
同じインスタンス内で呼び出すことができます。
ここまではprivate

元記事を表示

gemとbundlerについて

# はじめに
gemとbundlerについて、
ちゃんと理解できていなかったので、備忘録としてまとめる。

## gemとは
gem形式にパッケージングされたRuby用の外部ライブラリのこと。

gem形式とは
外部ライブラリのフォルダやファイルをgem形式(.gem)という1つのファイルに(パッケージング)まとめたもののこと。
参考:
https://pikawaka.com/ruby/how-gem-works#gem(gemパッケージ)とは

ライブラリとは、汎用性の高い機能を他のプログラムで呼び出して使えるように部品化して集めたファイルのこと。
ライブラリには大きく分けて標準ライブラリ、組み込みライブラリ、外部ライブラリの3種類あり、
gemは外部ライブラリにあたる。

備考:
Railsもgemパッケージとして提供されている。
他にも有名なgemとしては、ユーザ認証を簡単に実装できる「devise」、ページネーションを簡単に実装できる「kaminari」がある。

## RubyGemsとは
Rubyのパッケージ(gem)を管理するシステムで、Ruby1.9以降から標準ライ

元記事を表示

【2023年版】Turboを有効化したままRails 7.0でDeviseを使う方法

## はじめに
Rails 7.0がリリースされて1年以上経ちましたが、Railsのメジャーな認証ライブラリであるDeviseは未だにRails 7.0に部分的にしか対応していません([参考](https://github.com/heartcombo/devise/blob/main/CHANGELOG.md#481—2021-12-16))。
そのため、Rails 7.0で`rails new`したRailsアプリケーション(つまり、Turboが有効になっている状態)だと、Deviseを使おうと思っても意図しない挙動になります。

そこで、この記事ではTurboを有効化したままRails 7.0でDeviseを使う方法を紹介します。

なお、ネットを検索するとこの記事と同じテーマで書かれた記事がすでにいくつもありますが、今回紹介する方法はかなりシンプルかつ、実際のサンプルアプリ(とテストコード)で動作確認済みなので、個人的にはかなりお勧めです。

## 対象バージョン
この記事は以下のバージョンで動作確認しています(それぞれ2023年1月4日時点での最新バージョンです)。

元記事を表示

【Java】Javaにおける変数の扱い方

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

# Javaにおける変数
これまで私は、Rubyを中心に基礎学習をおこなってきました。そこでRubyと比較しながら、javaにおける変数の理解を深めていきたいと思います。

変数は、プログラミング言語によって扱い方が異なります。扱い方によって分類すると「動的型付け言語」と「静的型付け言語」の2種類がありますが、前者がRubyで、後者がJavaになります。

RubyとJavaでは分類自体が異なるほど大きな違いがあるようです。
これらの違いを理解するため、「データ型」について理解します。

# データ型とは
データ型とは。変数に格納するデータの種類のことです。

Rubyでは、「数値としての1」と「文字としての1」はプログラム上では異なるものとして扱われます。

データ型は、このような「数値」や「文字

元記事を表示

固定電話クラスの初歩的なコード

# 書いた動機

以下の本が素晴らし過ぎて、現実の世界を小さくオブジェクト化したくて書きました。
https://amzn.to/3X2USfv

# 概要

固定電話クラスがあるとするのなら、インスタンスを作成する際、以下の条件があると思います。

1. 末尾は4桁の数字である
1. 全体の長さは「-」を含んで12桁だとする
https://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/q_and_a.html
![スクリーンショット 2023-01-04 15.31.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492674/7675901d-37e5-5bd0-4f34-a62f15865e40.png)

# コード

“`rb
class LandlineNumber

# インスタンス変数のプロパティにアクセス出るように。
# 変更は出来ないように、readerにするのがベター
attr

元記事を表示

Ruby on RailsのアプリにLINEを組み込む。

## はじめに
– 今回は[【個人開発】日用品を自動で購入してくれるアプリを作りました。](https://qiita.com/prg_mt/items/decb7912e82e6384fafb)で実装したLINEログインとLINEbotについての解説記事になります。

## Lineログイン機能について
### Railsアプリの作成
まずはじめに アプリを作成していない方は`rails new`してアプリを作成してください。

### Deviseの導入
LINEログイン機能を実装する前にまずはDeviseでログイン機能を実装していきます。

“`ruby:Gemfile
gem ‘devise’
“`

Gemfileに記載が完了したら、`bundle install`を実行

次に、ターミナルで以下を実行し、Deviseを使えるようにしていきます。
“`terminal:ターミナル
rails g devise:install
rails g devise User
rails db:migrate
“`

ここまで問題なく実行できれば、`rails s`でサーバを立ち

元記事を表示

uninitialized constant ◯◯[定数名] (NameError)への対処法

# 概要

PF作成中にdockerでサーバーの起動を試みた際、
uninitialized constant OmniAuth (NameError)というエラーが表示。
つまづいたので記録として残します。

# 対処法

①以下項目を確認
・ファイル名とclass名が一致しているか?
・ファイルpathとmoduleの定義が一致しているか?
・Railsにファイルを読み込ませているか?
(引用元と詳細:https://qiita.com/yoshixj/items/17de45928f52264fd6a0)

②サーバー起動時に問題が発生した場合は、当該定数のGemがインストールされているか確認

以上です。

# ちなみに
私は②でした。
そもそもGemfileにomniauth-twitter(定数OmniAuthを使うためのGem)を記載していませんでした。

ミスは大体単純な所で発生しがち、気をつけます。

元記事を表示

【わたし気になります!】RubyのArray#forty_two

Rubyには、配列の先頭の要素を取得するメソッドや2番目の要素を取得するメソッドなど、特定の位置にある要素を取り出すメソッドが用意されています。
“`ruby
array = %w(apple banana orange lemon grape)
array.first # apple
array.second # banana
array.last # grape
“`

実際、私はこの3つくらいしか使ったことがないですが、他にも多くのメソッドが用意されています。

“`ruby
array.first # 先頭の要素を取得
array.second # 2番目の要素を取得
array.third # 3番目の要素を取得
array.fourth # 4番目の要素を取得
array.fifth # 5番目の要素を取得
array.forty_two # 42番目の要素を取得
array.third_to_last # 最後から3番目の要素を取得
array.second_to_last # 最後から2番目の要素を取得
array.last # 最後の要素を取得

元記事を表示

開発をはじめて半年の私がデータの並び替えで使えるなぁと思ったもの

開発業務に携わって半年、
データの並び替えで使えるなぁと思ったものを2つ書き留めておきます。

開発環境
・Ruby
・Rails
・MySQL
・Mac

なお、この記事で「order」とは、「取得したレコードを特定のキーで並び替える」ことを指します。
[参考] https://railsdoc.com/page/model_order

#### 今回使うテーブル
Naoさん、Kenさん、Mikaさんのやることリストテーブルを仮定します。
contentはやることリストの内容、personは人、categoryは項目のカテゴリー、dateは日付を格納する想定です。

“`
+—-+————+——–+————–+————+
| id | content | person | category         | date |
+—-+————+——–+————–+————+
| 1 | 女子会 | Nao | frie

元記事を表示

【わたし、気になります!】偶数丸め

## はじめに
今回は、モブで開発中にチームメンバーがポロッと言った

**「Rubyのroundメソッドのデフォルトって偶数丸めじゃなくて四捨五入だよね?」**

という一言をきっかけに偶数丸めについて調べたことを書き留めておこうと思います。

## 目次
1. 偶数丸めについてのざっくり説明
2. 偶数丸めを使ってみた
3. 偶数丸めで行っている処理
4. 偶数丸めはいつ使う?

## 1. 偶数丸めについてのざっくり説明

偶数丸めとは、端数処理の一種で、処理対象がちょうど半分の値の場合、もっとも近い偶数に丸めるという処理のことを指します。
端数処理で一般的な、四捨五入では`1.5`を小数第一位で丸めると`2`になり、`2.5`を小数第一位で丸めると`3`になりますが、偶数丸めでは、`1.5`を小数第一位で丸めると`2`になり、`2.5`を小数第一位で丸めると`2`になります。

例えば、
`1.5 + 2.5 + 1.5 + 2.5 + 1.5 + 2.5 + 1.5 = 13.5`ですが、
各値を四捨五入して足し算を行うと
`2 + 3 + 2 + 3 + 2 + 3 +

元記事を表示

【オブジェクト指向設計実践ガイド】依存関係編

# はじめに

[【オブジェクト指向設計実践ガイド】SRP編](https://qiita.com/EbiTT/items/37f96825f65f23325b5e)の続き。
今回は異なるオブジェクト間の依存関係をいい感じにする方法について考えていきます。

# 特定のオブジェクトのインスタンスに依存しないこと

特定のクラスのインスタンスに依存するコードの例を出してみましょう。人間を表すHumanクラスの他にTwitterのユーザを表すTwitterUserクラスを追加し、新たにHumanクラスに呟くメソッドを足してみましょう。

“`ruby
+ class TwitterUser
+ def tweet
+ # … Twitterでツイートする実装
+ end
+ end

class Human
# これはデータ
attr_reader :weight, :height
def initalizer(:weight, :height)
@weight = weight
@height

元記事を表示

OTHERカテゴリの最新記事