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

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

チェリー本の著者、伊藤淳一氏の示す効果的な読み方【自分用メモ】

#### 以下の動画の内容を自分なりにかいつまんだメモ
当ページ下部に動画の埋め込みあり
[著者自身が語る「プロを目指す人のためのRuby入門」の効果的な読み方 #チェリー本 – YouTube](https://www.youtube.com/watch?v=qqqbHXarPO8)

irbを使って学習する。

1~6章までが簡単
~10章までが難しい
~13は基本付録のような内容

基本例題までしっかりやって、あとは読み飛ばすくらいでいい
例外処理については、現場に出てから読み直すとかの感覚でいい

#### 目次
1章:ざっと目を通す程度
2章:基礎的な内容
3章:簡単な内容だがやらないと以降の章がわからなくなる可能性がある
1~6章は必ず読む(ここまでで手続き型言語の学習が完了となる)
7章:7.8まで読む(他は読み飛ばす)
8章:8.4まで読む(読み飛ばす。以降サブセクションも読んでいいが、実務的な内容になるので必要になったらでいい)
9章:9.5まで読む(基本ざっと読む)
10章:10.4までざっと読む(railsはprocが出てくる。スコープがrailsでよく使われてい

元記事を表示

チェリー本読破までの自分メモ【4章】

# 配列と繰り返し処理
配列
ブロック
範囲
主要な繰り返し処理
繰り返し処理用の制御構造について学習する

* 配列の要素の追加は `a << "2"`で最後の要素に追加される * 削除は`a.delete_at(添え字)` * メソッドの引数として渡すことができる処理のかたまりを`ブロック` ```.rb numbers = [1,2,3] sum = 0 numbers.each do |n| # for文を使わなくてもいい puts sum += n end # ブロックは`do end` `{}` のどちらでも動く。1行の時は基本`{}` numbers.each { |n| puts sum += n} # ブロックは do |n| puts sum += n end # の範囲 # nはメソッドの対象変数が入る。配列の場合、左から1要素づつ入る ``` * ブロックパラメータへ配列を受け渡すのは可。2つ以上の変数を用意しても良い * 番号指定パラメータ`_1,_2..._9`:ブロックパラメータを渡された順で使用する * 新しい要素なので、現場での使

元記事を表示

ActionTextをカスタマイズする

## はじめ
 本記事は、Rails7、stimulusを使用した環境のもと、ActionTextをカスタマイズ(主に添付ファイルのアップロードまわり)する方法を紹介します。ActionTextは、[trix](https://github.com/basecamp/trix)を利用しており、これによってリッチテキストコンテンツと編集機能を簡単に導入することができます。デフォルトの挙動のまま使用する分には特に問題にはなりませんが、「こうしてほしい」という要望に応えるためにカスタマイズしていくためには、それなりの理解が必要であり、その前提のもと話を進めていきます。

参考
[RailsガイドのActionTextに関する記事はこちら](https://railsguides.jp/action_text_overview.html)
[ActiveStorageのAPIはこちら](https://api.rubyonrails.org/v6.0.2.1/classes/ActiveStorage/Blob.html)
[trixのイベントはこちら](https://github.com/

元記事を表示

【超簡単】Rails カレンダー導入方法 (シンプルカレンダー,simple_calendar)

## はじめに
Twitterライクのアプリを作っており、タスクや予定の管理などにカレンダーを導入したいと思った方に向けての執筆です!

公式と異なり、scaffoldなしで実装しております!
ご自身の作成中のアプリに必要箇所を取り入れてもらえればと思います!

## 完成形
日時を指定して投稿すると、カレンダー内のその日時に投稿が表示されます!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/0fdf875d-bb00-130d-fca8-357069342c72.png)

## 実装方法

まずはgemをインストールします。
gemfileに以下のコードを記入します!

“`ruby:Gemfile
gem ‘simple_calendar’, ‘~> 2.0’
“`
“`terminal:ターミナル
$ bundle install
“`

今回はカレンダーに出力したいため :start_timeカラムを新たに作成します!

“`terminal:

元記事を表示

[Ruby]APIを爆速で構築する方法

## 概要
RubyでAPIをつくるというとなんとなくRailsで作る風潮があると思うのですが、今回はSinatraくんを紹介したいと思います。

## 理由
上記でも書いたようにrailsは有名で強力なフレームワークなのですが、簡単なAPIならsinatraという選択肢があることを世の中の人に伝えたい。私は伝えたい。

## 言語/ライブラリ
– ruby
– sinatra

## 準備
Gemfileを作成して下記を記載
“`
source ‘https://rubygems.org’

gem ‘sinatra’
“`

その後
“`
bundle install –path .bundle
“`
を実行

これで準備完了

## 構築
ここからはほんとに早いです。
app.rbといったファイル名でファイルを作成し、
“`rb
require ‘sinatra’
get ‘/’ do
‘Hello World’
end
“`
こちらを記載して、
“`
bundle exec ruby app.rb
“`
で実行!!

http://localhost:4

元記事を表示

「マトリョーシカ人形」の先にあるもの、あるいは、処理の流れを追うということ

これは、[2022年の Ruby アドベントカレンダー1](https://qiita.com/advent-calendar/2022/ruby) の9日目の記事です。
昨日は [@universato](https://qiita.com/universato)さんによる8日目の記事[「【Ruby】# frozen_string_literal: trueマジックコメントは必要?【RuboCop】」](https://qiita.com/universato/items/1dd8943df07f2445655e)でした。
明日は[石谷 太一](https://qiita.com/taichi-ishitani)さんによる10日目の記事「YAML上の位置を取得する」です。
# はじめに
タイトルの「マトリョーシカ人形」ですが、[伊藤淳一さん](https://qiita.com/jnchito)の[ブログ](https://blog.jnito.com/)に掲載された「マトリョーシカ人形のようなメソッド設計を避ける」という[記事](https://blog.jnito.com/ent

元記事を表示

いかにして課題をみつけるか

この記事は [クラウドワークス Advent Calendar 2022](https://qiita.com/advent-calendar/2022/crowdworks)の9日目の記事です。

# はじめに

クラウドワークスの@uichiです。エンジニアとして[クラウドテック](https://crowdtech.jp/)というハイクラスなエンジニア・デザイナーを中心とした人材と企業をマッチングするエージェントサービスを開発しています。

アドベントカレンダーへの投稿は初めてなため、温かい目で読んでいただければ幸いです。

本記事のタイトルは「いかにして課題をみつけるか」というタイトルですが、簡単に説明するとシステム開発における問題に対する課題の立て方をテーマにしています。

エンジニアであれば誰もがバグに遭遇するはずです。システムの不具合に何度も遭遇してきたエンジニアであれば、容易にバグの調査に取り掛かることができるでしょう。しかし、バグは頻繁に起こり得るものであるにもかかわらず、アプローチの方法はさほど論じられていないように思います。確かに、バグを特定できるか否かは経験にも

元記事を表示

Rails delegate

## delegateとは
Railsにおける“`delegate“`は“`移譲する“`の意味で使われていると思われます。

delegateメソッドを使うことによって、異なるクラスに定義されているメソッドをそのオブジェクトのメソッドとして呼び出せます。
これによって、リレーションを持つクラスのインスタンスメソッドを委譲することができます。

“`user has_many posts && post belongs to use“`の場合を考えます
– **User(id: integer, name: string, age: integer)**
– **Post(id: integer, title: string, content: string)**

#### delegateを使わずにuserのnameを参照する場合
“`.rb
post = Post.first
post.user.name
“`

#### delegateを使って参照する場合
“`post.rb
class Post < ApplicationRecord

元記事を表示

Turbo リファレンス

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

# ドライブ

https://turbo.hotwired.dev/reference/drive

## Turbo.visit

“`javascript
Turbo.visit(location)
Turbo.visit(location, { action: action })
“`

指定された場所(URLまたはパスを含む文字列)へのアプリケーション訪問を指定されたアクション(`”advance”`または`”replace”`のいずれかの文字列)で実行します。

locationがクロスオリジンURLであるか指定されたルート(ルートの場所の設定を参照)の外にある場合、Turboは`window.location`を設定してページ全体の読み込みを実行します。

アクションが指定されていない場合、Turbo Driveは`”advance”`の値を想定します。

訪問を実行する前にTurbo Driveはドキュメントに対して`

元記事を表示

【ActiveRecord::PendingMigrationError】Migrations are pending.

# エラー内容
* `ActiveRecord::PendingMigrationError`というエラーが表示された。 Migrations are pendingらしい。
![ActiveRecord PendingMigrationError.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/f11db91b-b00c-34a2-3955-b35e114abc75.png)

# 解決方法
* 以下をもう1回実施したら解決した。
* `rails db:create`
* `rails db:migrate`

元記事を表示

error Your lockfile needs to be updated, but yarn was run with `–frozen-lockfile` のエラー解決方法

# エラー内容
* Herokuのデプロイ時に以下エラーが発生。`–frozen-lockfile`に問題があるのか?

“`
remote: error Your lockfile needs to be updated, but yarn was run with `–frozen-lockfile`.
remote: info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to ‘https://git.heroku.com/ajax-app-37383.git’
“`

![error Your lockfile needs to be updated, but yarn was run with `–frozen-lockfi

元記事を表示

【Ruby on Rails】indexページにitem一覧、それぞれのshowページでコメントできるようにする手順

# 概要
・2022年6月にRuby on Railsでオリジナルアプリケーションを制作した。
・トップページ(index)に品目(item)がずらりと一覧で並び、それぞれに対してコメント(review)することができるボタンを設置。ボタンをクリックすると詳細ページとして別リンクに飛ぶ。ただ、indexに大量のitemを並べ、さらにそのitemにそれぞれreviewを紐付ける方法がよくわからず苦戦したのでここにまとめる。

コメント投稿や編集機能について、githubのissueに記載したのでそのリンクを一旦貼っておくが、別途改めてここで手順をまとめたい。
同じような構造のアプリケーションを制作しようとしている方のお役に立てれば!

# 初期データの登録方法
* 初期データの一括登録方法については、以下でまとめました。
[【Ruby on Rails】seedとseed_fuの違い・CSVファイルで読み込ませる方法](https://qiita.com/Ryo-0131/items/a5662c8701aad4af9f65)

# コメント投稿機能
* 以下issueにメモ。
[コメン

元記事を表示

【Ruby on Rails】seedとseed_fuの違い・CSVファイルで読み込ませる方法

# 概要
Ruby on Railsにて、itemの初期データを大量に一括登録した。
* `seed`と`seed-fu`を使ってデータ登録を行う場合の違い
* CSVファイルで初期ファイルを作って読み込ませる方法
* CSVファイルの日本語が文字化けした場合の対処法
* herokuでのデプロイ方法

も、まとめてメモしておく。

結論、seed-fuを使った方がおすすめ。

# 前提
* ADMINによる管理者ユーザー追加も可能であるが、今回は随時データ増えるものではない前提とする。
* 映画口コミサイト・レストラン口コミサイトなどは数が可変的なのでADMINが必要と思われる
* 初期データはソースコードにベタ打ちすることも可能だが、今回はCSVファイルで一括記載したものを読み込む手段を使う。その方が中身を変えることがあるときに簡単なため。

# seed.rbを使う場合の手順
* itemの初期データを記載したCSVファイルを、`db/items.csv`に配置(命名)する。 
* rowとレコードの関連付けはそれぞれ設定してください。
“`db/seeds.rb
re

元記事を表示

NameError uninitialized constant User・コンフリクトなどの一連のエラーへの対処

# エラー内容
・`NameError uninitialized constant User` というエラーが表示された。
この後も色々エラーに出くわしたので、解決までのメモを残しておきます。

![NameError uninitialized constant User.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/731c2b98-c242-83ac-5c61-a0e0508f8057.png)

1. 以下4行目の追加したら解決した(と思っていた)

![image35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/a2e6d444-f38a-52a4-6fa7-53dc30309ab3.png)

2. ちょっと作業していると、次なるエラー`NameError in Rooms#new`が発生。
      
![NameError in Rooms#new.png](http

元記事を表示

RailsアプリにDockerを導入した②【chromeコンテナ】

## やったこと
システムテストをコンテナ上で実行するために、chromeコンテナを起動できるように設定を行った。

## 手順
1. capybaraの設定
1. docker-compose.ymlの編集
1. 動作確認

### 1. capybaraの設定
#### spec/rails_helper.rb コメント外す。
“`rb
Dir[Rails.root.join(‘spec’, ‘support’, ‘**’, ‘*.rb’)].sort.each { |f| require f }
“`
#### spec/support/capybara.rbにcapybaraの設定を書く。
– Ajaxを使った部分でテスト失敗しないように、5秒待たせる
– pumaのログを出力しない
– chrome起動時のオプションの設定
– バックグラウンドでの起動。CLIで起動する場合必須。
– docker環境によっては、クラッシュする場合があるのでサンドボックスモード解除
– ウィンドウサイズの指定
– GPUハードウェアアクセラレーションを無効に

元記事を表示

[Rails]Indexを条件を指定して並び替える

## 行いたいこと
本の一覧を条件を指定して並び替える
今回の条件
– 投稿日の新しい順
– 投稿日の古い順
– 評価の高い順

![スクリーンショット 2022-12-08 16.48.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950107/9f685859-596a-70aa-923e-fa737ae7c708.png)

## 環境
– Ruby3.1.2
– Rails6.1.7
– Bookモデル作成済み
– 評価機能作成済み(並び替えで使用しているだけなので必須ではない)

# 1.並び替える方法
`order`を用いてデータを並び替える
“`
Book.order(条件: :並び順)
Book.order(created_at: :desc) created_at:は作成日時。 :descは降順
Book.order(created_at: :asc) created_at:は作成日時。 :ascは昇順
Book.order(rating: :desc) ratingは評価

元記事を表示

NESエミュレータを作る-準備編

[PONOS Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ponos) 8日目です。
昨日は[@e73ryo](https://qiita.com/e73ryo)さんの[記事](https://qiita.com/e73ryo/items/892d026cc009925bddeb)でした。
# はじめに
RubyでNESエミュレータを作ってみました(現在進行系)。
作ってみて理解できたところ・ハマったところなどを書いていこうと思います。
これからエミュレータ作りをしてみようと思っている方の助けになれたら幸いです。
今回は準備編です。

# 用意するもの
### 使い慣れたプログラミング言語(重要)
なるべく慣れた言語で書きましょう。
僕は最初まったく分からないエミュレータをまったく分からないRustで書き始めて全然進まない状態になってました。
結局ある程度まではRustで作れたのですが現在Rubyで書き直しています。
言語によってはfpsが出ない場合もありますが良しとします。
Rustは何もわからないです。

元記事を表示

Railsの自動読み込みにオリジナルの変換処理を追加する

この記事は [CAMPFIRE Advent Calendar 2022](https://qiita.com/advent-calendar/2022/campfire) 8日目の記事です。

アドベントカレンダー参加という良い機会に、ふと気になったRailsの自動読み込み(autoload)について調べてみました。

# 前提
以下の環境で検証しています
– OS: macOS
– Rubyバージョン: 2.7.6
– Railsバージョン: 7.0.4
– Railsオートローダ: Zeitwerk

また、[Railsガイド](https://railsguides.jp/autoloading_and_reloading_constants.html) の表現に基づき`autoload`を「自動読み込み」として称しています

# Railsの自動読み込み(オートロード)
Railsで利用されているオートローダはRails6以降のバージョンで変更され現在は[Zeitwerk](https://github.com/fxn/zeitwerk)というgemに任されています

Ra

元記事を表示

飲食店検索サイトの情報をとってきてみよう -Retty編-

## 概要
飲食店検索サイトの情報をとってきてみようシリーズ
続いてはRetty

## 言語/ライブラリ
– ruby
– nokogiri

HTML情報を取得する部分には今回は`open-uri`を採用している。

## コード
つべこべ言わずにまずはコードの紹介
“`rb
require ‘uri’
require ‘nokogiri’
require ‘kconv’
require ‘open-uri’
require ‘yaml’

area = URI.encode_www_form_component(“東京”)
keyword = URI.encode_www_form_component(“居酒屋”)
file = URI.open(“https://retty.me/restaurant-search/search-result/?latlng=35.466195%2C139.622704&free_word_area=#{area}&free_word_category=#{keyword}”)

doc = Nokogiri::HTML.parse(file

元記事を表示

Rails concern

## Rails concernとは
Railsでアプリケーションを作ると、“`controllers/concerns“`, “`models/concerns“`が自動的に生成されますがこのディレクトリを使ったことはありますか? 僕はないです。

調べてみたところ、主に
– “`共通ロジックを持つときにconcernに切り出す“`
– “`そのmodelやcontrollerとは異なるロジックである場合に切り出す“`

の2つの使い方があるのかなと思いました。

例として、メールの送信ロジックなどをあげることができます。

特定の条件(投稿数が100に達する、フォロワーが100人に達するなど)を満たした時に、メールを送信するというロジックは、複数のモデルに適用することができますし、モデルロジックとは少し異なるロジックであると考えることができます。
このような時にmoduleとしてconcernに切り出します。
切り出されたmoduleは必要とするmodelでincludeすることによって使うことができます。

## 使い方
concernの使い方としては2つあります

元記事を表示

OTHERカテゴリの最新記事