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

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

Scoop で Ruby をインストール後ちょっとハマった話

# はじめに
https://qiita.com/superrino130/items/e2d7b039c8d91a373770

`Windows`で`Ruby`のインストールと言えば`RubyInstaller`ですが、`Crystal`をインストールするには`Scoop`が必要なので、本格的に移行してみました。
# bundle でハマった
`Gemfile`でパッケージ管理が楽々が魅力の`Ruby`、しかし`native extensions`のインストールでエラーが発生。

“`powershell
Fetching gem metadata from https://rubygems.org/…..
Resolving dependencies…
Fetching debase 0.2.5.beta2
Installing debase 0.2.5.beta2 with native extensions

An error occurred while installing debase (0.2.5.beta2), and Bundler cannot

元記事を表示

【Ruby】Setクラスの使い方

Setクラスの使い所があまり理解できませんでしたが、少し掴めた気がしたので使いどころと使い方について簡単にまとめておきます。

# Setクラス

Rubyの要素の集合を表したい場合、`Setクラス`を使用することができます。

集合は重複のないオブジェクトの集まりを指します。要素の間に順序関係はありません。

## 使い方
`setクラス`は標準ライブラリのため、requireすることで使用することができます。

以下のように定義して使います。
“`ruby
require ‘set’

set1 = Set.new([“Alice”, “Bob”, “Nick”]) # =>()は省略可能
p set1 #=>
“`
`Set.new()`に配列を渡してSetオブジェクトを定義できます。

“`ruby
set2 = [“Jone”, “Rian”, “Tom”].to_set
p set2 #=>
“`
`to_set`メソッドを使用すると、配列か

元記事を表示

Ruby on Railsを基本からまとめてみた【APIを構築する方法】

## Rubyでできること(API)

Rubyの中でもRuby on Railsを活用することでAPIの実装ができる。APIは簡単に説明すると『サーバーに保存されているソフトウェアを別のシステムやアプリケーションに利用させること』。特定のルールでサーバーへとアクセスさせ、処理した結果をレスポンスすることを指す。

APIはGoogle社など大手企業が提供しているイメージがあるが、Rubyを活用すれば自分で実装でき、この実装したAPIを社内やスマホアプリなどと連携して利用できる。例えば、経費精算のAPIを作成しておけば、従業員がデータを入力するだけで関係システムに情報登録する仕組みが実装できる。

## 参考サイト
[【2022最新】Rubyでできること7選!トレンドは?](https://www.anken-navi.jp/news/programming-language/ruby/ruby-possible-7/)

元記事を表示

【Ruby】オブジェクトをコピーするときの注意

書籍Effective Rubyを読み進めて浅い(shallow)コピーと深い(deep)コピーというものを学びましたので、簡単にまとめます。

# 参照と複製について
Rubyでオブジェクトを複製する場合は参照と複製の二つがあります。
それぞれの使い方により、後々に思いもよらぬ動きになるので使い分けておくことが必要です。

## 参照について
参照は1つのオブジェクトをもとに参照して、代入する動きです。
この場合は`=`を使用します。

“`ruby
a = [“Alice”,”Bob”,”Jack”]
b = a
p a # => [“Alice”,”Bob”,”Jack”]
p b # => [“Alice”,”Bob”,”Jack”]

p a.object_id # => 47242730754220
p b.object_id # => 47242730754220

b[0] = “Rian”

p b # => [“Rian”, “Bob”, “Jack”]
p a # => [“Rian”, “Bob”, “Jack”]

p a.object_id # => 4

元記事を表示

[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)を記載していませんでした。

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

元記事を表示

OTHERカテゴリの最新記事