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

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

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

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

元記事を表示

Rails 【where】日付・時間を範囲指定する際の注意点

## 行いたいこと
– where句を使用し、モデルのdeadline_onカラムから期日が近いデータを取り出したい。

## 完成形のコード
“`
model.where(deadline_on: Date.today..Time.now.end_of_day + (2.days))
“`

## 元々書いていたコード
“`
model.where(deadline_on: Time.now.end_of_day + (2.days)..Date.today)
“`
## 沼ったポイント
– 上記の元々書いていたコードでirb上でSQL文を確認していた際、BETWEEN節があったため問題ないと考えていた。
– 実際には、完成形のコードのように日時が早いものを先に後のものを後ろに記載しないと○日~○日までというような範囲指定はされないので注意が必要。

元記事を表示

【Ruby】Setクラス(集合)の扱い方

本記事ではSetクラスの性質や使い方について記述します。

## Setオブジェクトを作成

Setオブジェクトを作成するには、`Enumerable`モジュールの`#to_set`を呼ぶか`Set.new`を使用します。

`Set.new`で渡せる引数は`Enumerable`です。

### 空のSetオブジェクトを作成する
Setオブジェクトを生成するには、`Set.new()`を使用します。

“`ruby
> s = Set.new
=> #
“`

### 配列からSetオブジェクトを作成する
配列のような`Enumerable`なオブジェクトを `Set.new()`に渡してSetオブジェクトを生成することができます。 この際、重複した要素は削除されます。

“`ruby
> s2 = Set.new([1, 3, 5, 5])
=> #
> s2 = Set.new(1..3)
=> #
“`

`Enumerable`には `to_set()`メソッドが用意されているので、これ

元記事を表示

再帰関数を使って階乗を求めるメソッドを作成する(Ruby)

# 初めに

アルゴリズムを利用した方法で再帰関数がよく使われるので
階乗を求める再帰関数を作成して理解を深めます。

# そもそも再帰関数とは?

アルゴリズムなどを記述するときに、
自分自身を引用する形で定義することを**再帰的定義**といい
自分自身を呼び出す関数のことを**再帰関数**といいます。

# 再帰関数で注意すること

:::note info
1:自分自身の関数を用いて、問題を少し簡単にするための計算式をたてます
:::
:::note warn
2:無限ループにならないように**ベースケース**を作成します。
:::
階乗を求める関数factorialを作成してみましょう。
# 階乗(factorial)を求めるメソッド
“`ruby:ruby
def factorial(n)
if n <= 0 # 0! = 1 なので1を返します。(※ここがベースケース) return 1 else #※1:動作確認用 p n #※2:ここでfactorial自身を呼び出します return n * factorial(

元記事を表示

Basic認証

# ユーザー認証を導入

## 開発環境で環境変数を設定
※macOSがCatalina以降の場合

たとえば

「xxxx」というユーザー名と
「0000」というパスワードにて、設定をする場合。

##### ①ターミナルで以下を実行する
“`Terminal:ターミナル
vim ~/.zshrc
“`
すると、「~」が縦に大量に表示される。

##### ②「i」を押下し「インサートモード」にする
「– INSERT –」と最下部に表示される。

##### ③zshの内部に、以下の記述を追加
“`Terminal:ターミナル
export BASIC_AUTH_USER=’xxxx’
export BASIC_AUTH_PASSWORD=’0000′
~
~
~
~
— INSERT —
“`

##### ④インサートモードを終了
「escキー」→ 「:wq」→「Enterキー」を押して終了。

##### ⑤sourceコマンドを実行
“`Terminal:ターミナル
source ~/.bash_profile
“`

#

元記事を表示

【Ruby on Rails】デプロイ手順

#### Gemを追加

“`Ruby:Gemfile
group :production do
gem ‘pg’
end
“`
“`Terminal:ターミナル
bundle install
“`

#### デプロイ用の設定ファイルを追加
① binフォルダに、render-build.shという名称でファイルを新規作成する。
② 作成したファイルに、以下の記述を追加する。
“`Ruby:bin/render-build.sh
#!/usr/bin/env bash
# exit on error
set -o errexit

bundle install
bundle exec rake assets:precompile
bundle exec rake assets:clean
bundle exec rake db:migrate
“`
#### database.ymlの設定を変更
このように変更することで、開発環境およびテスト環境ではMySQLが、本番環境ではPostgreSQLが使用されるようになる。
“`Ruby:config/databa

元記事を表示

OTHERカテゴリの最新記事