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

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

Railsでカラムにnull制約を後から設定する

# 目的
Postテーブルにある既存のtitleカラムに“`null:false“`を追加すること

# 設定方法
### migartionファイルの作成
“`ruby
$ rails g migration ChangePresenseTitleOfPosts

create db/migrate/20221008061033_change_presense_title_of_posts.rb
“`

### migrationファイル追記
“`20221008061033_change_presense_title_of_posts.rb
class ChangePresenseTitleOfPosts < ActiveRecord::Migration[7.0] def change change_column :posts, :title, :string, null: false end end ``` ### データベース反映 ```Ruby rails db:migrate ``` # まとめ 書き方としては ```ruby chang

元記事を表示

【Ruby】ArrayとHashの便利メソッドまとめ

# はじめに
RubyのArrayとHashの便利メソッドをまとめてあります。
ぜひ辞書としてご活用ください。

# Array
### 取得
– n番目の要素を取得
要素数を超えるとnilが返る
“`ruby
array = [‘red’, ‘blue’, ‘green’]
p array[1]
# => ‘blue’
p array[5]
# => nil
“`
– 後ろからn番目を取得
要素数を超えるとnilが返る
“`ruby
array = [‘red’, ‘blue’, ‘green’]
p array[-1]
# => ‘green’
p array[-5]
# => nil
“`
– 先頭・末尾を取得
“`ruby
array = [‘red’, ‘blue’, ‘green’]
p array.first
# => ‘red’
p array.last
# => ‘green’
“`
– indexを取得
要素が存在しないとnilを返す
“`ruby
array = [‘red’, ‘blue’, ‘green’]
p array.index(‘blue

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlの自動試験(ユニットテスト)の比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,Perlの自動試験(ユニットテスト)の比較

# Python

https://qiita.com/_dakc_/items/e663359c81645bc4e65e

# Ruby

https://qiita.com/jnchito/items/ff4f7a23addbd8dbc460

# PHP

https://qiita.com/yamato1491038/items/7aa0168a6145749db78c

# Java

https://qiita.com/ryuutamaehara/items/c8efb304b73cc0542e6f

# JavaScript

https://qiita.com/jintz/items/61af86a12b53b24ef121

# Perl

https://perlzemi.

元記事を表示

【個人開発】テクノロジーをピラミッド構造で整理するアプリ「Technology Pyramid」を作りました

>どうもaono1234と申します。記事がいいなと思ったら是非twitterフォローもよろしくお願い致します❗❗

初めてのオリジナルアプリ【Technology Pyramid】(以下、TechP)ver 0.1をリリースすることができました。???
感無量です?
url: https://technology-pyramid.herokuapp.com/
github: https://github.com/TakeshiAono/technology_pyramid

今回の記事はTechPの概要説明です。良ければプロトタイプですが使用してみて下さい。

:::note warn
次の記事で
– 企画過程
– 設計思想
– 要件定義
– バックエンドの実装について
– フロントエンドについて
について詳しく書きたいと思っています。おたのしみに?
:::

## 1. TechP概要説明
### 1-1. Why?
皆さんは何か新しい技術を学ぶ際、このような事を感じたことはないでしょうか?
– 何が書いてあるの

元記事を表示

takeメソッドについて

### takeメソッド
先頭から任意の数の要素を取得
使い方は下記の通り。

(%w使用し、配列の要素をスペースで区切り配列を作成する)
“`
irb(main):040:0> %w(Ruby Python Java C Smalltalk Brainfuck)
=> [“Ruby”, “Python”, “Java”, “C”, “Smalltalk”, “Brainfuck”]
“`

(takeメソッドで先頭から3つの要素を取得)
“`
irb(main):041:0> %w(Ruby Python Java C Smalltalk Brainfuck).take(3)
=> [“Ruby”, “Python”, “Java”]
“`

元記事を表示

enumで実装したラジオボタンのRspec

# 概要
次のようなラジオボタンのどちらかを選択して、
スクリーンショット 2022-10-09 17 04 34
「宣言する」を押すというところまでのRspecを作成しました。
スクリーンショット 2022-10-10 21 45 38
ラジオボタンの作成につきましては、私の前回の記事を参照いただけますと幸いです。

https://qiita.com/gogoserver578/items/2b5d13f62843b2158dc9

こちらのcapybaraの

元記事を表示

【Ruby】ファイルのタイムスタンプを参照したい時

# 概要 
内容が更新されていた場合のみファイルを処理したいなど、
タイムスタンプ情報を元にしてファイルを処理したい場合などがあります。
その場合は、
`File.mtime`メソッド,`File.atime`メソッド,`File.ctime`メソッド
を使って取得することができます。

## 使用例

| 定義 | 動作 |
| —– | —- |
| File.mtime | 最終更新時刻を返す。 |
| File.atime | 最終アクセス時刻を返す。 |
| File.ctime | 状態が最後に変更された時刻を返す。状態の変更とは chmod などによるもの |

### File.mtime
“`ruby
File.mtime(__FILE__) # => 2017-12-03 03:16:22 +0900
“`

### File.atime
“`ruby
File.atime(__FILE__) # => 2017-11-28 22:38:44 +0900
“`

### File.ctime
“`ruby
IO.write(“testfi

元記事を表示

【Ruby】ファイル名がパターンにマッチするか調べたい時

# 概要 
File.fnmatchメソッドを使用すると、与えられたファイル名がパターンにマッチするか確認できます。
特定のファイル名のみ受け付けるなどの処理に有効です。(特定の文字から始まるファイル名しか受けつけないなど)

## 記載方法
* fnmatch(pattern, path, flags = 0) -> bool
* fnmatch?(pattern, path, flags = 0) -> bool


“`ruby
%w(foo foobar bar).each {|f|
p File.fnmatch(“foo*”, f)
}
# => true
# true
# false

p File.fnmatch(“ruby*”, “rubytest.txt”) # => true
p File.fnmatch(“ruby*”, “javatest.txt”) # => false
“`

## 注意事項
パターンで使用できるワイルドカードの一覧は以下の通りです。
正規表現ではないため注意が必要。

| 指定方法 | 動作 |
| —–

元記事を表示

`a ||= 10` は `a = a || 10` じゃないよ

## はじめに
Rubyを触り始めて結構長いのですが、今更ながら`||=`についての理解を間違えていることに気がついたため、この記事で理解を深めようと思います。

## `||=` とは
自己代入の一種です。
例えば、`a ||= 10`という式は `a || (a = 10)`と解釈され、`aが偽もしくは未定義であれば10を代入する`という意味になります。
変数を初期化する際のイディオムの一種です。

## 何を間違えていたのか
`a = a || 10`と解釈されると勘違いしていました。
`a += 10`や`a -= 10`などは`a = a + 10`、`a = a – 10`と解釈されるため、それと同じと思い込んでいました。

## どう違うのか
再代入されるかどうかが違ってきます。
`a || (a = 10)`の場合、`a`が真であれば再代入されませんが、`a = a || 10`の場合、`a`が真であっても再代入が行われます。

そのため、例えば以下のような、ある属性に代入した数を数えるようなコードがあったとすると、結果が違ってきます。

#### コード
“`rub

元記事を表示

Scoop で Ruby をインストールしてみる

# はじめに
`Windows`で`Ruby`のインストールと言えば`RubyInstaller`ですが、

https://rubyinstaller.org/

`Scoop`でインストールする方法もある様ですので、試してみました。

https://scoop.sh/

ここでは、次の記事を参照しています。

https://qiita.com/mainy/items/c51fc3bc4ab01da27c6f
# Scoop のインストール
“`powershell:powershell
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
iwr -useb get.scoop.sh | iex
scoop -v
# v0.2.4 – Released as 2022-08-08

scoop install git
scoop bucket add extras
scoop bucket add versions
“`
コマンドラインのみでサクサクと進められます。
# Ruby のインストール
“`powe

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlのライブラリ作成方法の比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,Perlのライブラリ作成方法の比較

# Python

https://qiita.com/mofumoffy223/items/a461efba5c80acafdbf0

# Ruby

https://qiita.com/suketa/items/ab6b88093de4a54b3b06

# PHP

https://qiita.com/nuuuuume/items/fd2e0d69fb5430c26bd0

# Java

https://qiita.com/haruto167/items/162551100449ea5c7e6d

# JavaScript

https://www.sejuku.net/blog/65313

# Perl

https://perlzemi.com/blog/20161130148051.h

元記事を表示

【Ruby】ファイルのパスからファイル名とディレクトリを分割したい

# 概要 
ファイルのパスからファイル名とディレクトリを分割する方法をメモ。

## ファイル名のみ取得する場合

パスから一番後ろのスラッシュに続く要素を取得するには、File.basenameメソッドを使用します。
第1引数でファイル名を表す文字列を指定します。
第2引数でサフィックスを文字列で与えます。’.*’ という文字列を与えた場合、’*’ はワイルドカードとして働き ‘.’ を含まない任意の文字列にマッチします。


“`ruby
p File.basename(“ruby/ruby.c”) #=> “ruby.c”
p File.basename(“ruby/ruby.c”, “.c”) #=> “ruby”
p File.basename(“ruby/ruby.c”, “.*”) #=> “ruby”
p File.basename(“ruby/ruby.exe”, “.*”) #=> “ruby”
p File.basename(“ruby/y.tab.c”, “.*”) #=> “y.tab”
“`

## 対象が存在するデ

元記事を表示

【Ruby eachメソッド、ブロック編】美少女と学んだ気になれる講座

この講座は、Web業界未経験の**吉野 桜**と、その先輩である**堀切 あやめ**のかわいさをお楽しみいただくため、邪魔にならない程度の差し障りのないWeb技術の話を、お楽しみいただく番組です

## キャラクター

![20220920_resize.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208060/de425bd4-b556-4140-4e9f-52c22fdcd657.png)
吉野 桜: Web業界未経験

![20200920_resize.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208060/8e061b61-cc55-072c-118d-f5f86c2b61ed.png)
堀切 あやめ: Web業界三年目

## 本編

### すべてはオブジェクト

桜「Ruby何もわかんないですぅ」
あやめ「何もわからないってことは、チュートリアルをやって完全に理解して、いざ実践的な内容になると何

元記事を表示

Graphql(graphql-ruby)でネストした関連テーブルをincludesするとキャッシュがきかずN+1になってしまう件について

# Graphql(graphql-ruby)でネストした関連テーブルをincludesするとキャッシュが効かずN+1になってしまう件について

## 結論
railsのincludesを使ってネストした関連をキャッシュしていても、has_many through関連を使用して関連テーブルを取得しようとするとクエリを発行してしまう。
例: `User.includes(user_tags: :tag).where(user_tags: {tag_id: tag_id})`

userから直接has_many through関連先を取得せず、中間テーブルを経由して取得するようにする
例:
“`ruby
user.tags ❌
user.user_tags.map(&:tag) ⭕️
“`

## テーブル構成

このようなテーブルがあったとします。
・usersテーブル
| id | name |
| —- | —- |
| 1 | 太郎 |
| 2 | 花子 |

・user_tagsテーブル(中間テーブル)
| id | user_id |

元記事を表示

absメソッドを使用して特定の差がある場合にTureを出力するプログラムの備忘録

今日も学んだことを忘れないためにメモします。

## absメソッドとは
対象となる数値に対して「abs」メソッドを実行すると絶対値(ある数値Xにおいて符号を無視して得られる符号なしの数値のこと)を取得することができる。すなわち正の数の場合はそのままだが負の数の場合は符号を取って正の数にした数値が取得できる。
“`
num = 5.abs
#=> 5

num = (-5).abs
#=> 5
“`

## プログラム内容
メソッドに3つの整数a b cを与える
「aとbの差が1」または「aとcの差が1」であり、かつ「bとcとの数値の差が2以上」の場合はTrue、それ以外はFalseを出力する

## 記述内容
“`
def close_far(a,b,c)
x = (a-b).abs
y = (a-c).abs
z = (b-c).abs

if x == 1 && z >= 2
puts “True”
elsif y == 1 && z >= 2
puts “True”
else
puts “False”
end
end

元記事を表示

[Rails] 本番環境でrails db:dropする

AWS(EC2)へデプロイ後にデータベースを破棄しようとした際に発生
“`
ec2-user@ip-*** ~]$ docker exec -it ***** sh
# rails db:drop RAILS_ENV=production
rails aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your ‘production’ database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
/usr/local/bundle/gems/activerecord-6.1.5/lib/active_record/tasks/database_tasks.rb:63:in `check_protected_enviro

元記事を表示

redis-rb v5 での変更点

[redis | RubyGems.org](https://rubygems.org/gems/redis?locale=ja) が 2022/08/29 に[5\.0\.0](https://rubygems.org/gems/redis/versions/5.0.0) になった。
[4\.8\.0](https://github.com/redis/redis-rb/blob/master/CHANGELOG.md) から [5\.0\.0](https://github.com/redis/redis-rb/blob/master/CHANGELOG.md) にアップデートしようとしたらいろいろエラーが出たので自分が踏んだ変更点をメモ。

## Redis.new の引数

`Redis.new` の引数は Hash を取るが、v4 まではキーは文字列でも、シンボルでもどちらでも良かったが、V5 ではシンボルのみになった。

redis-rb V4 までは次の様に文字列キーのハッシュでも初期化できた。
もちろんシンボルキーも使えた。
“`ruby:redis-rb_V4
c

元記事を表示

enumを使用してラジオボタンを実装する[Rails]

# はじめに
enumを使用して、以下のようなラジオボタンを実装しました。実装するまで理解に時間を要してしまった部分もありましたので、備忘録として投稿させていただきます。
スクリーンショット 2022-10-09 17 04 34
# 開発環境
– OS:Amazon Linux2
– Rails 6.1.6.1
# enumについて
 enumは、数値に意味を持たせることができます。
例えば、enumを導入せずに、integer型のフィールドで次のようにフォームを作成するとします。
“`:
<%= f.radio_button :achieve_status, 0 %> 未達成
<%= f.radio_button :achieve_status, 1 %> 達成
“`
すると、modelやviewファイル等で`ach

元記事を表示

【Ruby】Loggerライブラリを使用して一定サイズごとにログファイルを記録したい

# 概要
一定のサイズごとにログファイルをローテートする場合には、
引数でローテーションするファイル数とサイズを指定する。
例えば5つのファイルを使い、1000バイトごとにローテーションさせる場合は以下のように指定する。

“`ruby
logger = Logger.new(‘test.log’, 5, 1000) #5つのファイルを使い、1000バイトごとにローテーション
“`

第2引数がローテートするファイル数、第3引数が1ファイルごとのサイズを指定できます。
上記の指定ですとログファイルが最新のものを除いて新しいものから順に番号が割り振られます。

* 作られるログ
“`log
test.log
test.log.0
test.log.1
test.log.2
test.log.3
“`

# 参考

https://docs.ruby-lang.org/ja/latest/library/logger.html

元記事を表示

Dockerを利用してDXOpalアプリケーションを手軽に事前コンパイルする

使いたくなったときにサッと使えるようにメモ。Docker イメージを用意しておいて docker run すればコンパイルできる、という形にしたい。

プログラムが小さいうちはわざわざ事前コンパイルしなくても問題ないのですが、大きくなってくると事前コンパイルすることによる時間短縮が効いてきますし、source map ありでデバッガが使えて捗ります :thumbsup:

まずは Dockerfile。Opal と DXOpal を含んだイメージを作ります。素の DXOpal ではなく、フォークして修正を加えたブランチを使っているのがポイント(後述)。

“`dockerfile
# Dockerfile

FROM ubuntu:22.04

RUN apt-get update \
&& apt-get install -y –no-install-recommends \
git \
ruby \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

RUN echo ‘gem: –no-

元記事を表示

OTHERカテゴリの最新記事