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

Ruby関連のことを調べてみた2022年11月22日
目次

Rakeタスクのdescに実行例を書いてちゃんと活用する

仕事でRuby on Railsを使っていて、Rakeタスクもよく使っている中で、
実行例もコマンドで確認できるようにした話です。

## Rakeタスクとは
Rubyで書かれたコードをタスクとして作成しておき、必要に応じて呼び出し実行できる機能です。

https://opiyotan.hatenablog.com/entry/rails-rake-task

## 実行コマンド忘れる問題
Rakeタスクの種類が増えてくると、Rakeコマンドで実行する際に、正しいコマンド名や引数の渡し方などを毎回忘れてしまうという問題が出てきました。
“`ruby
namespace :hoge do
# 実行例: bundle exec rake ‘hoge:fuga[1, 10, 20, 30]’
desc ‘ほげほげする’
task :fuga, %i[hoge_id] => :environment do |_, args|
# 処理
end
end
“`
こんな感じでコード内にコメントで実行例が記述されていたりはしたのですが、毎回Rakeファイルのコードを探すのが

元記事を表示

mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e)) の解決策

## 実行環境
– M1 mac
– Rails 7.0.4
– ruby 3.1.0

## エラー内容

`rails s`を実行しようとすると次のようなエラーが出てきた。

“`bash
$ rails s
/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require’: dlopen(/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/ffi-1.15.5/lib/ffi_c.bundle, 0x0009): tried: ‘/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/ffi-1.15.5/lib/ffi_c.bundle’ (mach-o file, but is an incompatible archit

元記事を表示

railsにActionTextを導入したら、showページで投稿が変になっちゃったので対処

プログラミング学習2か月ちょいのクソ雑魚初心者です。
現在ポートフォリオでActionTextを導入した際に起こったエラーについて忘れないためにメモ書きと同時に、こちらへ初投稿しようと思い立ちました。

# 発生した問題
Ruby on Railsで投稿サイトを作っていて、下の画像みたいな感じに投稿画面にActionTextを導入しました。
![222222222222.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885423/6438cce8-4a4e-5d75-fccc-fc89e6f5d2df.jpeg)

# で、投稿フォームは問題なかったけど投稿後のshowページが…
試しにテストで投稿します。
![222222222222.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885423/19c7312e-aea3-d702-84a3-a76d45a19134.jpeg)
すると、、、
![333333333

元記事を表示

Ruby Gold 3.1の対策と出題傾向について(2022年11月)

# 最初に

Ruby技術者認定試験がversion 2.1 -> 3.1に改訂されました。
Gold 2.1は受けたことがないので3.1で初めてのGold受験でしたが無事合格することができました。
2023年1月20日までに受ければ落ちても2回目無料キャンペーン中だったのでメンタル的にもちょうど良かったです!

https://www.ruby.or.jp/ja/certification/examination/version3.html

私の場合は昨年シルバー2.1を取得済みだったので、今回ゴールド3.1を取得したことで認定ver3プログラマGoldを名乗れるようです。

https://www.ruby.or.jp/ja/news/20220712

新しいバージョンってどうなの??とまだ様子見している方もいらっしゃると思います。
私も試験前にGold 3.1の情報が少なく対策に不安があったので、少しでも参考になればと思い記憶が新しいうちに情報を残そうと思います!

# 経歴
私の経歴としてはこんな感じです。レベル感の目安になれば。

2021年2月 初めてプログラミング学習

元記事を表示

【Rails】accepts_nested_attributes_forを使って子モデルも保存

## まえがき
推奨されてないaccepts_nested_attributes_forを使わずに、親モデルに紐づくレコードの一括保存をしようとしたが結局うまくいかずaccepts_nested_attributes_forを使ったときの備忘録。

以下の記事を参考にしましたが、私はうまくいきませんでした。

https://zenn.dev/murakamiiii/articles/5ecefb7a58d1ef

## accepts_nested_attributes_forを使ってみる
親クラスに“`accepts_nested_attributes_for :テーブル名“`を追加

“`ruby :event.rb
class Event < ApplicationRecord has_many :possible_dates, dependent: :restrict_with_exception accepts_nested_attributes_for :possible_dates end ``` ```ruby :possible_dates.rb c

元記事を表示

任意の文字列を部分的に削除するプログラムの実装

missing_charメソッドを使った実装。

– 対象となる文字列からn番目の文字を削除すること
– 削除された文字以外の文字列を出力すること
“`
def missing_char(str, n)
# 処理を記述
end

# 呼び出し例(1つ目の引数には対象となる文字列を、2つ目の引数には対象となる文字列から何番目の文字を削除するのかを指定しましょう)
missing_char(‘kitten’, 1)
“`

slice!メソッドの説明
配列や文字列から、指定した要素を削除し、削除したあとの要素を返すメソッド。
「 ! 」がつくメソッドを破壊的メソッドという。
“`ruby:例
string = “abcdefg”
string.slice!(2)

puts string
#=> “abdefg”
# 2番目の要素のcが取り除かれている
“`

“`ruby:回答
def missing_char(str, n)
str.slice!(n – 1)
puts str
end

# 呼び出し例
missing_char(‘kitten’, 1

元記事を表示

デプロイをした後の運用方法

## デプロイの運用方法
今後も使う事があると思うのでメモとして残しておきます。

#### EC2へSSHでログインする
“`
username:~/environment $ ssh -i ~/.ssh/practice-aws.pem ec2-user@xx.xx.xx.xx
“`

@xx.xx.xx.xxはEC2のパブリックIPアドレス

## アプリケーションへ移動
“`
[ec2-user@ip-xx-xx-xx-xx ~]$ cd アプリケーション名
“`
## GitHubからpull
最新のコードをGitHubからpullして持ってくる
“`
[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$git pull origin main
“`

## 変更したフォルダーによる運用方法
Gemfileを変更した場合
1. ローカルからリモートリポジトリへpush
2. SSHでEC2へ接続
3. EC2上でアプリケーションへ移動
4. git pullする
5. 以下コマンドを実行
“`
[ec2-user@ip-xx-xx-xx-

元記事を表示

deviseのサインアップ時に名前を登録できるようにする

deviseにてログイン機能を実装すると、
サインアップ時に登録できる情報はデフォルトとして 「メールアドレス」「パスワード」が用意される。

今回は「メールアドレス」「パスワード」に加えて「名前」を登録できるようにする。

# テーブルにカラムを追加

現状、カラムは「メールアドレス」と「パスワード」のみであるが、ここに「名前」を追加する。

:::note warn
データベースは表形式のテーブルで管理される。
この表形式の行をレコード、列をカラムという。
:::

ターミナルにて下記を実行することで、「追加先テーブル」に「追加するカラム」を追加することができる。

“`ruby:ターミナル
% rails g migration Add カラム名 To 追加先テーブル名 追加するカラム名:カラムの型
“`

名前を登録できるようにしたいため、「カラム名」を`Nickname`とする。
*「追加先テーブル名」は`User`、カラムの型は`string`とする。

“`ruby:ターミナル
% rails g migration AddNicknameToUsers nickn

元記事を表示

deviseを用いた「ユーザー管理機能」の実装フロー

Gemのひとつである「devise」を使用することで、「ユーザー管理機能」を実装することができる。

# deviseの実装フロー

1. Gemのインストール
2. 設定ファイルを作成
3. モデルを作成
4. テーブルを作成
5. ビューを作成

## 1. Gemのインストール
-Gemfileを編集する
“`ruby:gemfile
# 中略
gem ‘devise’
“`
-コマンドを実行
“`ruby:ターミナル
% bundle install
“`
:::note info
Gemfileに追加したいGemの名前やバージョンを記述してbundle installを実行することで、
指定したGemをアプリケーションにインストールができる
:::
-サーバーを再起動
“`ruby:ターミナル
% rails s
“`
:::note warn
下記を変更した際は、ローカルサーバーを再起動する
■Rubyバージョン
■テーブル・カラム情報
■Gemの導入状況
:::

## 2.設定ファイルの作成
“`ruby:ターミナル
% rails g insta

元記事を表示

【Ruby】Adobe Acrobat Reader DC印刷コマンド実行の注意点

## Rubyで印刷する
RubyではKernelモジュールのお陰でRubyファイル上からでもコマンドプロンプトが叩けるようになっている。
“`ruby
# プロセス完了まで待つコマンド実行
process1 = system “dir”
# プロセス実行が完了したらRubyのプロセスに戻る
process2 = spawn “dir”
“`
印刷する場合はAdobe Acrobat Reader DCのシステムコールを使用して実行すれば良い
“`batchfile
“(exeまでのパス)\AcroRd32.exe” /s /l /h /t “(PDFファイルのフルパス)” “(プリンタ名)”
“`
※64bit版はAcrobat.exe
※オプションの意味は本題とずれるのでググってくれ!

## 本題
上記方法を使用すれば印刷はできるが、`system`と`spawn`のどちらを使用すべきかと言われたら迷わず`spawn`をお勧めする。

印刷の自動化が要求される場面は、昔ながらの書類管理をしている業務の自動化くらいだろう。
そういう現場でよくあるのが、印刷プロセスのスタッ

元記事を表示

Herokuの代替先をいくつか試してはみた

自分は初心者に毛が生えた程度の知識しかないので一般的な基準ではない前提で見て欲しい。そもそもこの「Herokuの無料期間は終わるので代替先を探してみた!」って記事はさんざん書かれてるだろうから、今更ではある。

結論から書けば、**無料Herokuの代替先は現状存在しない**となる。それも「これ一つ足りない!」ではなく、どれもこれも二つも三つも足りないという印象。当然のことだが、広く使われていたとという意味で「情報量がまったく違う」というのもだいぶ大きい。

以下、とくに断りがなければ全て無料プラン前提の話をする。

# 自分に必要な要件

自分がHerokuで展開していたrailsのwebアプリに必要な要件は次のものがある

1. RailsとPostgresqlが必要
1. cronかスケジューラーとなるものが必要
1. webアプリとは別にスクリプトを回せるWorkerが必要
1. seleniumが動かせる環境が必要
1. 24時間でなくてもいいが、せめて月700時間程度は動かせてほしい

単純なアプリではあるのだが、botやスクレイピングなども行うので意外と必要な項目が多いの

元記事を表示

【ubuntu】bundle install > ruby: 誤ったインタプリタです: そのようなファイルやディレクトリはありません

# jekyllをインストールするためにbundle installを実行した際、実行できず困った
その際に出た表示↓
“`
-bash: /mnt/c/Ruby31-x64/bin/bundle: ruby: 誤ったインタプリタです: そのようなファイルやディレクトリはありません
“`
### 環境
端末:windows
OS : windows 11 pro education
実行環境 : ubuntu 22.04.1 LTS

### やったこと
仮想環境だからかな?
下記をそれぞれ試していった
* rubyのインストールを確認
* Gemfileの場所を確認
* Gemfileの改行コードを変更
* bundleを実行時にオプションでパスをつけたのがいけなかった?
* bundleがインストールされているか
* bundleの再インストール

## [結論]私はbundleの再インストールで解決できた
`bundle -v`を実行しても同じように出力されたので
①bundleの場所を確認
“`bash
which bundle
“`
②bundleを削除
“`bas

元記事を表示

AlmaLinux OS 9にRuby 3.1をインストール(AppStream)

# はじめに

Application Stream(AppStream)を利用してAlmaLinux OS 9にRuby3.1をインストール

## サポート

本手法で導入した場合、[Red Hat Enterprise Linux Application Streams Life Cycle \- Red Hat Customer Portal](https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle)より、2025-03がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

9.0系で出たプロダクトはモジュールではなかったが、9.1系で出たプロダクトはモジュールの模様

“`shell-session
# cat /etc/redhat-release
AlmaLinux release 9.1 (Lime Lynx)

# yum module list ruby
Last metadata ex

元記事を表示

AlmaLinux OS 9にNodejs 18をインストール(AppStream)

# はじめに

Application Stream(AppStream)を利用してAlmaLinux OS 9にNodejs 18をインストール

## サポート

本手法で導入した場合、[Red Hat Enterprise Linux Application Streams Life Cycle \- Red Hat Customer Portal](https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle)より、2025-04がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

9.0系で出たプロダクトはモジュールではなかったが、9.1系で出たプロダクトはモジュールの模様

“`shell-session
# cat /etc/redhat-release
AlmaLinux release 9.1 (Lime Lynx)

# yum module list nodejs
Last metadat

元記事を表示

AlmaLinux OS 8にRuby 3.1をインストール(AppStream)

# はじめに

Application Stream(AppStream)を利用してAlmaLinux OS 8にRuby 3.1をインストール

## サポート

本手法で導入した場合、[Red Hat Enterprise Linux Application Streams Life Cycle \- Red Hat Customer Portal](https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle)より、2025-03がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

“`shell-session
# cat /etc/redhat-release
AlmaLinux release 8.7 (Stone Smilodon)

# yum module install -y ruby:3.1
… 略
“`

### 各種確認

“`shell-session
# which rub

元記事を表示

文字列や配列等のオブジェクト内が空かどうか確かめるためのメソッド

# はじめに
文字列や配列を格納している変数の中に、要素が存在しているか確認するケースがあります。
それをまとめたいと思います。

## メソッド名とそれぞれの機能
nil?メソッド
変数の値がnilまたは、値なしの場合、真となります。

empty?メソッド
変数の値が””(文字列の場合)や値が空白の場合、真となります。

nil?との違いは、empty?は変数の値はあることはあるが、その値が空を示している、という点です。

blank?メソッド
nil?が真となる場合、または、empty?が真となる場合に、blank?は真となります。
簡単に言えば、blank?は値といえるものがない場合、真となります。

present?メソッド
blank?とは全く逆の動作をします。present?は、値といえるものがある場合、真となります。

元記事を表示

DockerでRailsの開発環境構築するときに、今のところ安定している設定(M1 Mac)

最近、RailsのDocker開発環境をチューニングしたので、備忘録です。

# 構成
## 基本
– M1 Mac
– Ruby 3.1.2
– Rails 7.0.4
– Node 16系
– Postgresql

## その他
– webpacker(Rails7から引退したみたいなので、そのうち剥がしたい)
– solargraphもdocker
– rubocopもdockerにしたいけどしてない。

## 説明
こちらの記事を見て、volume に gem をインストールするよう bundler に設定しました。
https://zenn.dev/aldagram_tech/articles/110bc79925d41b

bundle install前に設定
`bundle config set –local path /usr/local/bundle`

docker-compose.yml
`bundle:/usr/local/bundle`

## ファイル

### Dockerfile

“`dockerfile: Dockerfile
FROM r

元記事を表示

【Rails】RspecのFormオブジェクトモデル単体テストコードのエラー

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

# 前提
Formオブジェクトクラスを作成して、モデル単体のテストコードの実装を行なっていました。具体的のスクールの課題でメルカリのコピーアプリのようなものを作成していた中で、今回のテストコードの実装がありました。

# 概要
商品購入機能を実装し、購入するにあたって、
「クレジットカード情報」
カード情報、有効期限、セキュリティコード
「配送先情報」
“`create_addresses.rb
class CreateAddresses < ActiveRecord::Migration[6.0] def change create_table :addresses do |t| t.string :post_code, null:fals

元記事を表示

【RUBY】if,elseを用いたプログラム

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

# 指定された2つの真偽値によって処理が異なるプログラムを実装していきます。
平日と休日によって、「その日が遅くまで寝ていられるかどうか」を判断する、sleep_inメソッドとして、真偽値によって処理が異なることを実装します。

# 第一引数の値では「平日かどうか」、第二引数の値では「休暇かどうか」をtrueまたはfalseを用いて以下のように表します。
第一引数がtrue(平日である)または、第二引数がtrue(休暇である)の場合はtrueと出力。
第一引数がfalse(平日でない)または、第二引数がtrue(休暇である)の場合はtrueと出力。
第一引数がtrue(平日である)または、第二引数がfalse(休暇でない)の場合はfalseと出力。
第一引数がfalse(平日でない)または、第二引数がf

元記事を表示

【Rails】バリデーションのカスタムコンテキストon:を複数同時に指定したい場合の方法と仕組み

Railsでは、`on:`を使うことで、バリデーション実行タイミングを指定できたり、カスタムコンテキストとして実行するかしないかを調整できます。

https://railsguides.jp/active_record_validations.html#on

`on:`で定義したカスタムコンテキストを`valid?`等の引数に渡すことでバリデーションのチェックができます。
Railsガイドでは`valid?(:xxx)`の使い方が載っていますが、一度にカスタムコンテキストを複数指定する方法を書いておきたいと思います。

## 結論

結論としては、配列で指定してあげれば良いです。

“`ruby:controller
def create
book.valid?([:xxx, :yyy])

end
“`

“`ruby:book.rb
with_options on: :xxx do
validates :title, presence: true
…略
end

with_options on: :yyy do
validates :cont

元記事を表示

OTHERカテゴリの最新記事