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

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

いっぱい読まれる記事を書くために!備忘録

Qiitaの記事作成についてです。

## 記事を書く前におさえておきたい心得
Qiita公式のガイドラインがあるので、まずはこれを読みましょう。情報発信の基礎である、記事の書き方、最低限守るべきルールが記載されています。

https://help.qiita.com/ja/articles/qiita-article-guideline

## Markdown記法
Qiitaの記事は、Markdown記法というエンジニア御用達の特殊な記法で作成します。
慣れないうちは、チートシートを見ながら、記事を作成しましょう。

https://qiita.com/Qiita/items/c686397e4a0f4f11683d

## 記事を書く手順
1. 誰に読んでもらいたいのか考える(ターゲット)
1. その人がクリックしてくれるタイトルを考える
1. シンプルな言葉で、過不足なく内容を書く

元記事を表示

hidden_fieldの使い方

<%= form_with model: @umarepos, local: true do |f| %>
<%= f.hidden_field :cook_id,{value:1} %>

hidden_fieldの使い方は、第一引数に保存したいカラム名、
第二引数に。保存(カラム)したい値を記述する。
今回の場合、cook_idのカラム名に、value1を付与することになる。

元記事を表示

カテゴリーごとの一覧表示

所有するコスメの使用期限を管理するアプリを作成中です。
初めてのオリジナルアプリということでわからないことだらけの実装のため、備忘録として記録していこうと思います。

# はじめに
大分類のカテゴリー(4種類)、小分類のカテゴリー(24種類)とで大きく2つに分けていますが、
カテゴリーを扱うにあたって`Active_Hash`[^1]を使用しました。

# 課題
登録したコスメを大分類カテゴリーごと且つ新しい順に表示させるのに
特定のカテゴリーで登録されたデータのみ取得するにはどうしたらいいんだっけ?

# カテゴリーの取得
調べたところ、`whereメソッド`[^2]に辿り着きました。(すっかり忘れてました・・・)
“`ruby
class ItemsController < ApplicationController def index category_face = Item.where(category_id: 2) category_eye = Item.where(category_id: 3) category_lip = Item.wh

元記事を表示

Rails7+Bootstrap環境の構築について

## ■Bootstrap5を使ってみたいと思ったきっかけ

Railsチュートリアルで使っていたBootstrapをポートフォリオのフロントでも使いたい…でもチュートリアルだとBootstrap3だからいかにも…感が否めない。どうやらBootstrap5だと割とモダンなnavbarなどのコンポーネントが提供されていそう、、、と感じたため。先に断っておきますが初学者のため間違っている箇所がありましたら、ご指摘いただけますと幸いです。

## ■導入方法

Rails newコマンドのオプションを指定するだけです。

“`jsx
rails new [アプリ名] -j esbuild –css bootstrap
“`

## ■確認

Bootstrap5のサンプルコード(下記画像ではNavbar)をとりあえずRailsのビューに記載してみて確認する。

![スクリーンショット 2023-01-08 21.06.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3092884/07c4b01

元記事を表示

【議事録】Webレスポンシブデザイン実装後、デザインが崩れる問題(要素の重なりがおかしくなる)(z-indexで解決)

# 初投稿
本記事が初めての投稿になります❗️

# はじめに
– 本記事は、議事録としてまとめたものになります。
– 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
– また記載内容はすべて、正しい内容が記載されているとは限りません。
– 誤った内容を見つけた場合は、ご指摘をお願いいたします。

# 背景
– 自分のアプリ(ポートフォリオ)へ、Webレスポンシブデザインを適応しようとした時の話。
– 現在、ユーザーはPCブラウザからの利用ではなく、スマホからの利用頻度が高いだろうと考え、実装することにした。
– 実際に自分のアプリに、Webレスポンシブデザインを実装したところ、以下のように要素が重なって表示されてしまう事象が発生した。

# 環境
OS:MAC
ブラウザ:GoogleChrome
開発言語:Ruby on Rails

### サイドバーを表示していない場合
– 特段、画面上は問題なし。
![スクリーンショット 2022-12-28 20.24.53.png](https://qiita-image-store.s3.ap-northeast-1.a

元記事を表示

[初学者向け] Ruby 論理演算子を理解する

## 本記事について

本記事は、Rubyを学び始めた私自身が「?」となった**論理演算子**について、
学んだ内容をまとめます。
私と同じく「?」となった初学者の皆さんがこの記事を読むことで
理解できるようになることを目的とします。経験の浅い私ならではのシンプルな文章が、
皆さんの理解の一助になることを願います。

### 論理演算子とは?

そもそも論理演算子とは? Google先生に聞いてみると、下記とのこと。
>「論理演算子とは、「真」と「偽」の2つの値だけで行う計算(論理演算)を表す
記号のことです。」

いまいちピントこない。というのが私の第一印象です。

私が腹落ちした、もう少し噛み砕いた表現にすると、

**「論理演算子とは、複数の条件式を組み合わせた条件式の真偽を教えてくれる記号」**

例えば、下記の2つの条件式があったとします。

条件式1 a > b
条件式2 a > 10

ここで論理演算子を用いれば、

– 条件式1を満たす、かつ条件式2も満たす場合
– 条件式1と条件式2のいずれかを満たす場合

のように、複数の条件式を組み合わせた条件の真偽を結果と

元記事を表示

Rails 制作中アプリのアプリ名を変更する

# 1.はじめに
2作目のポートフォリオを制作中にアプリ名を変更したくなったため、やり方を調べて対応しました!
その記録を残しておきます。

# 2.前提条件
#### 開発環境
Ruby:ruby 3.1.2
Rails:Rails 6.1.6.1
OS:Windows11 Home
統合開発環境:Cloud9
ソースコード管理:GitHub

#### やりたいこと
railsアプリケーション名の変更

# 3.手順
#### ①バックアップ
万が一の事態に備えて、アプリ名を変更する前にバックアップを取っておく。
1)GitHubから対象のアプリを開く。
2)「<>Code▼」を押して、LocalからsshのURLをコピーする。
3)ローカル環境にcloneして、仮置きディレクトリに格納する。
※仮置きディレクトリ名は、後ろに2を付ける等なんでもOK!
“`
git clone 対象アプリのURL
“`

#### ②Railsアプリ名称変更
Railsのファイル名変更はGemfileを入れることで簡単に行える!

1)アプリ名を変更したいアプリのGemfileに下記

元記事を表示

正規表現のキャプチャでグループ化した同じ文字の繰り返しにマッチさせる (Ruby)

今日の今日まで知らなかった正規表現
キャプチャした文字は置換だけではなく、同じマッチの中でも利用できる

# ポイント

– カッコ `()` で文字をキャプチャする
– バックスラッシュと数字 ( `\1` とか `\2` とか ) でマッチした文字を再利用できる

# 例

たとえば次の例では abc いずれか2文字の繰り返しにマッチする

aa はマッチする

“`rb
“aa”.match(/([abc])\1/)
# #
“`

ab は同じ文字の繰り返しではないのでマッチしない

“`rb
“ab”.match(/([abc])\1/)
# nil
“`

文字種を問わずマッチさせるならキャプチャを使わずにこうだ
これは ab にもマッチする

“`rb
“ab”.match(/([abc]{2})/)
# #
“`

# 応用例 – キャプチャ文字を離れた位置で利用する

キャプチャは直前文字に対してだけ使えるわけではない
いちどキャプチャしたら後は自由な位置で使える

元記事を表示

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秒当たりのアップロード文章数です。横軸はアップロードした文章数です。
次の三つの修正

元記事を表示

OTHERカテゴリの最新記事