Ruby関連のことを調べてみた

Ruby関連のことを調べてみた

Rails 6.1においてのAWSへのwebcompile

## Rails 6.1で起こったwebcompile errorについて
以前webcompileをしたときの内容の備忘録です。何か間違えがあればよろしくお願いします。
Referencesにおいてある記事はHerokuについて書かれているものもあったのですが、AWSでも機能したので、メモ程度に書いておきます。

### 環境設定
node -v 16.17.0
yarn -v 1.22.19
ruby -v 3.0.2
rails -v 6.1.4

### 最初に起こったエラー

“`
Compiling…
Compilation failed:
node:internal/process/promises:289
triggerUncaughtException(err, true /* fromPromise */);
^

Error: Cannot find package ‘@babel/plugin-proposal-private-methods’ imported from …
“`
AWSでprec

元記事を表示

AtCoder Beginner Contest 344参戦記録(A~C問題)

RubyでAtCoderに参戦した記録です。
AB2完で、C問題はコンテスト終了後に解説を見てからコードを書きました。

## [ABC344 A Spoiler](https://atcoder.jp/contests/abc344/tasks/abc344_a)
2つの「|」を含む文字列Sが与えられ、「|」とその間にある文字を削除して出力します。
“`Ruby
# 提出コード
a = gets.chomp
pos = a.index(“|”)
ans = []
ans << a.slice(0...pos) pos2 = a.index("|", pos+1) ans << a.slice(pos2+1..-1) puts ans.join ``` 早く解かねばと焦ってしまい、回りくどいことをしてしまいました。 「|」記号でsplitすればシンプルに書けました。。 ```Ruby a = gets.split("|") puts a[0] + a[2] ``` ## [ABC344 B Delimiter](https://atcoder.jp/contests/abc344/

元記事を表示

docker compose run時にNameError: uninitialized constant Nokogiri::HTML4と遭遇した時の対処法

Dockerを使ってRailsの環境構築を行なっている時に遭遇したエラーの解決方法を備忘録も兼ねてここに記します。

開発環境
M2チップ Mac Book Air
OS: MacOS Sonoma
Rails: 5.0.0.1
DB: MYSQL 5.7
Ruby: 2.4.6
※詳細は省きますが、Windows11の環境でも同様のエラーに遭遇しました。
 同エラー遭遇時にPCを上記のMac Book Air に買い換えた為、Windows環境では解決まで  の確認はできていませんが、恐らく解決できると思います。

## 実行したコマンドと遭遇したエラー

“`
実行したコマンド
docker compose run web bundle exec rake db:create
“`

“`
遭遇したエラー
rake aborted!
NameError: uninitialized constant Nokogiri::HTML4
Did you mean? Nokogiri::HTML
“`

## エラー解決の為に行なったこと
1, Gemfileを編集して下記の行を

元記事を表示

文字列から特定の文字列だけ抜き出したい時の正規表現はどう書いたらいいの?

目的の文字列を抜き出す方法がわからず困ったのでうまく行った正規表現の書き方をメモしておきます。
結論から言うと正規表現の先読み、後読みを利用して特定の文字列を抽出できました。
今回はRubyで試しています!

## 先読み、後読みとは
:::note info
– `(?=ex)` : 先読み。次に`ex`がくる位置にマッチする
– `(?<=ex)` : 後読み。前に`ex`がくる位置にマッチする - `(?!ex)` : 否定先読み。次に`ex`がこない位置にマッチする - `(? cat = “Cat:tama_mike”
> cat.match(‘(?<=\:).*(?=_)') => #
“`

– `(?<=\:)`:後読みを利用して、コロン(:)が前にくる位置を指定。

元記事を表示

【Rails】一覧表示の順番を指定する(古い順、新しい順)

こんばんは!
ポートフォリオ実装でユーザーの使いやすさを考えたときに、一覧といってもものによっては古い順、新しい順と変えた方がよさそうだと気づき、実装してみました!
実装自体はコントローラ―の記述を少し加えるだけだったので、ご紹介したいと思います。

## 環境
AWS Cloud9
Rais 6系

## 方法
### 新しい順
例えばですが、普通の投稿の一覧などはより新しい情報をユーザーに見せたいですよね!特に投稿1つ1つに文脈などの関係がない場合は新しい順の方が適しているといえます。
そのような場合どのように新しい順にするか説明したいと思います!

普段だと一覧表示をしたい際には
“`rb:app/controller/xxxx_controller.rb
class XxxxsController < ApplicationController def index @posts = Post.all end end ``` というように記述しますよね。これだと特に順番は指定されていない状態で、更新などがあると順番が変わる可能性があります。 そのため、新しい投稿

元記事を表示

【Rails】メソッドの中でメソッドを定義したらRuboCopに怒られたゾ

どうもこんにちは。

今回は、Railsでメソッドの中にメソッドを記述してコードを書いた時に、Rubocopに怒られたのでその対処法を紹介します。

Rubocopの導入方法は以下の記事で紹介しています。

https://qiita.com/PDC-Kurashinak/items/1de32b66d95c705f5b82

# 実際に書いたコード

※ こんな感じで書いたという感じで書きます。

“`ruby
def display_calculate_result(x, y, z)
# 足し算メソッドを定義
def add_calculate(a, b)
result = a + b
result
end

# 掛け算メソッドを定義
def multiplication(add_result, c)
result = add_result * c
result
end

# 足し算メソッドを呼び出し
add_result = add_calculate

元記事を表示

約数を求める

## はじめに
AtCoderの問題を解いていた時、計算量を減らすコードの書き方を学習しました。

学んだことをアウトプットしようと思い、記事を書きました。

## コード
“`Ruby
a = 1000
divisor1 = []
#計算量の多いコード
for i in 1..a do
if a%i==0
divisor1<

三項演算子について

## はじめに
 個人的に「三項演算子」について苦手意識があったので、今回はあえてそれに触れてみます。
## 環境
ruby 3.14

rails 7.0.3.1

## 三項演算子って?
**条件式をif, elseを使わないで書いてしまえるもの。**

複数に渡ってかかなればならないコードも、これを使えば短いコードで済むのですっきりします。

コードにすると次のようになリます。
“`
条件式 ? 正しいとき : 正しくないとき
“`
これをif,elseで書くとすると次のようになります。

“`ruby
if 条件式
正しいとき
else
正しくないとき
end
“`
以上のように短いコードで済むことが分かります。

ではこれはどのような時に使えば良いのでしょうか?

## 例
 作っているもの→ ”ブログを作成するサイト”
 コードを書く場所→ Articleモデル

また
”記事(Article)を『下書き(draft)・公開(published)・公開待ち(publish_wait)』としてstateカラムに分類している状態”

加え

left_joinを理解する

### はじめに
nilのデータを取得したい時に`LEFT JOIN`を使用すると思います。この時に欲しいデータがうまく取得できず色々やった結果、改めて`LEFT JOIN`を理解しなおすことができたのでメモとして残します。

今回取得したいデータの条件は以下の通りです。

– サブ商品には登録されていないメイン商品、サブ商品から削除された商品も取得

“`sql
MainProductTable(メイン商品)
+—-+————-+——–+
| id | product_name | stock |
+—-+————-+——–+
| 1 | XxxProd1 | 50 |
| 2 | XxxProd2 | 30 |
| 3 | YyyProd1 | 20 |
| 4 | YyyProd2 | 20 |
| 5 | XyxProd3 | 20 |
| 6 | ZzzProd3 | 30 |
| 7 | TttPr

クラスの作成とクラスの継承

クラスの作成とクラスの継承を使ってプログラムを作りました。

“`Ruby
class User
attr_accessor :name
@@count = 0
VERSION = 1.1
def initialize(name)
@@count += 1
@name = name
end

def sayHi
# puts “私は#{@name}です”
puts “私は#{self.name}です”
# puts “私は#{name}です”
end

def self.info
puts “User Class #{@@count} Instance Count”
puts “#{VERSION}”
end
end

class AdminUser < User def sayAdminUser puts "Hi! AdminUser #{name}" end end mai1 = User.new("白石麻衣") mai1.sayHi mai2 = AdminUser.n

【Ruby】paizaラーニング問題集解答(入力値を使った演算)

# 引き算・掛け算 (paizaランク D 相当)
https://paiza.jp/works/mondai/d_rank_level_up_problems/d_rank_level_up_problems__accompanied_by_stdin_2
### 自分の解答(誤答)
“`ruby:practice.rb
numbers = gets.split

A = numbers[0]
B = numbers[1]

D = A – B
P = A * B

puts “#{D} #{P}”

# Runtime error
# Main.rb:18:in `

‘: undefined method `-‘ for “397”:String (NoMethodError)

# D = A – B
# ^
# Did you mean? -@
“`
### ChatGPTの解答

理解しました。入力が半角スペースで区切られて1行で行われる場合、それに対応するようにコードを修正します。

“`ruby
# 1行で入力を受け取り、半角スペースで分割

Rubyのeachとmapを比較してみた

## はじめに
転職をきっかけにRubyを触り始めており、プロダクションコードや書籍、チュートリアルで`each`と`map`が多用されいたのですが、メソッドの処理が似ているということもあり混乱してしまいました。

そこで、この二つのインスタンスメソッドの共通点や異なる点をリファレンスマニュアルを参考にしてまとめてみました。

## eachとmapの共通点
共通点は以下の二つです。
– Arrayクラスのインスタンスメソッドである
– ブロックを省略した場合は`Enumerator`が返る

https://docs.ruby-lang.org/ja/latest/class/Array.html

Arrayのリファレンスマニュアルのインスタンスメソッドを確認すると、`each`と`map`があるのでどちらもArrayクラスのインスタンスメソッドであることがわかります。

また、`irb(interactive Ruby)`でブロックを省略した挙動を確認してみると`Enumerator`というものが返ってくることがわかります。

“`ruby
irb(main):001> [

Railsでのアーキテクチャを考える

### はじめに
Ruby on RailsでAPIの開発を行ってるんですが、Railsは開発者に優しくとても開発がしやすいです。一方、どこからでもModelが呼べたりと人によって書き方もバラバラになりやいフレームワークでもあります。
とはいえ、Rialsをクリーンアーキテクチャで設計して開発を進めていくのは、Railsの良さをなくしちゃうのであまり相性が良くないと思います。そこで、Railsの既存のMVCを崩さない範囲でルールを決めて開発を行うようにしました。
開発はRailsの6系で、APIモードで開発を行っています。

### 考えた各層の役割
最終的に各層の役割は以下のように定義しました。

| | 役割、詳細 |
|———|———|
| Controller | パラメーターなどを取得し、Service層とPresenter層を呼び出す役割。ビジネスロジックは持たず、基本的に呼び出しのみを行う。 |
| Model | バリデーションや(サービスではなく)ドメインに依存するロジックを持つ役割。joinやwhereなどactive recordを

【Ruby】入力の確認とエラー処理(備忘録)

ChatGPTからRubyにおける入力の確認とエラー処理について教えてもらったので、一旦書き留めておく。
いますぐ実践するのは難しいが、早くこのレベルのコードをすらすらかけるようになりたい。
### 私
以下のコードについて解説してください。

array = []
array[0] = gets
array[1] = gets
puts array
### ChatGPT
このコードは、Ruby言語を使用して標準入力からユーザーに2つの入力を求め、それを配列に格納してから、その配列を出力する簡単なプログラムです。

解説を具体的に説明します:

1. `array = []`: 空の配列を作成します。これは後でユーザーの入力を格納するための容器として使用されます。

2. `array[0] = gets`: `gets` メソッドを使用して、ユーザーに対して1つ目の入力を要求します。入力された値は、配列 `array` の最初の要素に代入されます(インデックス0の位置)。

3. `array[1] = gets`: 同様に、`gets` メソッドを使用して、ユーザーに対して2つ目

エラーメッセージの日本語化

# はじめに
プログラミング初心者です。
温かく見守ってください。
何か謝っている点があれば、ぜひご指摘をお願いいたします。
# エラーメッセージの日本語化
### 事前準備
“`ruby:config/aplication.rb
# 中略
module アプリの名前
class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 7.0 # 日本語の言語設定 config.i18n.default_locale = :ja   ←追記 # 省略 end end ``` ```ruby:Gemfile #中略 gem 'rails-i18n' ←追記 ``` bundle installをして、サーバーを再起動します。 ### ファイルを新規作成(2つ) 1、config/localesディレクトリに、devise.ja

ハッカソン序章: 初挑戦!Ruby勉強会の企画から運営まで

# はじめに
とあるハッカソンに技術メンターとして、参加させていただきました。ハッカソン当日以前に**Rubyに関する勉強会**(1時間枠)を実施する必要があり、その勉強会の企画と運営に関してお話します。

# 勉強会当日までの流れ
技術メンターとして参加することが決まり、まず始めにハッカソン運営メンバーとキックオフMTGを行い、どのような勉強会の内容でいくのか摺合せを行いました。その後、他技術メンターと協力して勉強会の資料を作成し、勉強会当日を迎える形になりました。

# 勉強会の内容
勉強会の内容は、受講対象者をプログラミング経験者だがRubyを触ったことがない人ということでハッカソン運営メンバーと摺合せできていたので、RubyやRuby on Railsの概要から入り、Rubyの基本構文等を説明しました。その後、クラスやインスタンスに関して簡単に説明しました。Rubyの基本構文等を説明する際は、例題や問題を散りばめて実際に実行(ブラウザ上でRubyコード実行できるサービスを使った)してもらい実行結果を自分の手で確かめてもらう形式を選択しました。

# 勉強会当日
勉強会はウェブ会

fields_forを使って親子関係にあるモデルのレコードを一度に編集・削除する

# はじめに
この記事ではポートフォリオ作成中に学習したことを自分のために記録しています。
初学者のため理解が不十分なところがあるかもしれません。
その場合はご指摘いただけると幸いです。

# やりたいこと
– 親子関係のあるモデルのレコードを一度に編集・削除したい

YouTubeのブックマークアプリを作成しているので、ブックマーク(親)とそれに紐づくタイムスタンプ(子)を1つのフォームで編集・削除できるようにしていきます。
ブックマークとタイムスタンプは一対多の関係です。

完成イメージはこんな感じ
![BF1615E1-419E-4E9B-9051-03853492B71B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3671013/0d7f635e-1dac-b613-4c33-475f6f319f3d.png)

# いざ実装
## 子モデルの編集
### accepts_nested_attributes_for⁠メソッドを親モデルに追加
“`app/models/bookmark.rb

【Ruby】問題集解答 Part6(paizaラーニング)

# 1 つの文字列を出力 (paizaランク D 相当)
https://paiza.jp/works/mondai/d_rank_level_up_problems/d_rank_level_up_problems__stdout_1
### 自分の解答
“`ruby:practice_01.rb
puts “paiza”
“`
末尾に改行を入れなければならないので、`print`ではなく`puts`を使う。
### ChatGPTの解答
もちろんです。質問の内容が不足しているようですが、とりあえず “paiza” という文字列を1行で出力するRubyのコードを以下に示します。
“`ruby
puts “paiza”
“`
このコードを実行すると、”paiza”という文字列が1行で出力されます。

# 2 つの文字列を出力 (paizaランク D 相当)
https://paiza.jp/works/mondai/d_rank_level_up_problems/d_rank_level_up_problems__stdout_2
### 自分の解答
“`ruby:prac

画像投稿プレビュー機能

# はじめに
プログラミング初心者です。
温かく見守ってください。
# 画像投稿プレビュー機能
画像投稿を以前実装しました。
これにプレビュー機能を実装したいと思います。
### 事前準備
まずはJavaScriptが読み込まれるようにします。
・appディレクトリ→JavaScript内にprevire.jsのファイルを作成します。
・config/importmap.rb
“`
pin “preview”, to: “preview.js”
“`
・app/javascript/application.js
“`
import “preview”
“`
#### コードを実際に書きます
“`js
const preview = () => {
// 新規投稿・編集ページのフォームを取得
const postForm = document.getElementById(‘new_post’);

// プレビューを表示するためのスペースを取得
const previewList = document.getElementById(‘previews’);

【Ruby on Rails, Sprockets】app/assets/とmanifest.jsを複数配置してアセットパイプラインを走らせたい!🏃‍♂️💨

こんにちは、akitoshigaです。

先日、アセットファイルを`app/assets/**`以外の場所に配置した上で`manifest.js`を利用して複数の場所からアセットパイプラインを走らせる必要が生じたのですが、類似の事例が見つからず自身が実践した方法を共有します。

## 1. 前提:アセットパイプラインとは
アセットパイプラインとは、アセットファイル(画像・CSS・JavaScriptなど)を効率的に配信するためのフレームワークでありRuby on Railsに組み込まれています。

複数のCSSファイルを圧縮して一つにまとめたり、フィンガープリントを利用したキャッシングの管理をしてくれます。

アセットパイプラインは内部で`sprockets`や`importmap-rails`というgemを利用しています。

詳しい説明はRailsガイドをご覧ください。

https://railsguides.jp/asset_pipeline.html

## 2. やりたいこと
下記のように、Ruby on Rails指定のアセットファイルの置き場である`app/assets/