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

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

eachメソッドの使い方

## `each`メソッドについて
[each](https://docs.ruby-lang.org/ja/latest/method/Hash/i/each.html)は繰り返しメソッドのひとつです。
ブロック内の処理をオブジェクトの要素分だけ繰り返すことができます。
オブジェクト内の要素の計算などもできます。
___
#### 使い方
“`
オブジェクト.each do |変数|
  実行したい処理内容
end
“`
doを省略することもできます。
“`
オブジェクト.each { |変数|
実行したい処理内容
}
“`
___
#### eachを使ってオブジェクト内の要素の計算をしてみよう!
“`
array = [1, 2, 3]

sum = 0
array.each { |x|
sum += x
end

puts sum
“`
“`
実行結果
6
“`
___
|変数|の縦棒`「|」`はバーティカルバーと呼ばれる記号です。

元記事を表示

Rubyのputs,print,pメソッドの違い

Rubyには出力の際によく使うメソッドがあります。
どれも結果を出力するメソッドではありますがそれぞれ出力結果に違いがあります。

## ◉putsメソッド
渡されたオブジェクトを文字列として出力します。

文字列の**末尾には改行が追加**されるため、表示される内容は1行ごとに改行されます。

“`
puts “Hello”
puts “Ruby”
puts “World”
“`

-結果-
“`
Hello
Ruby
World
“`
## ◉printメソッド
putsメソッドとは異なり、**改行を追加しません**。
そのため、printメソッドを使うと、出力される内容は1行にまとまります。

“`
print “Hello”
print “Ruby”
print “World”
“`

-結果-
“`
HelloRubyWorld
“`

## ◉pメソッド
渡されたオブジェクトを詳細に表示し、**戻り値としてそのオブジェクト自体(文字列や数値型など一緒に)を返します**。また、改行も含めて表示します。
“`
p “今日の最高気温は”
p 10
p “度です”

元記事を表示

Ruby で Thread.new してるコードを RSpec 実行時だけ同じスレッドで実行させる

“`ruby:some_klass.rb
class SomeKlass
def main
do_something

Thread.new do
do_something_heavy
end
end
end
“`

こんな風に `Thread.new` してるコードがある時、テストではスレッドを分けずに同じスレッドで処理をさせたくなることがある。そんなときは `Thread.new` を何もしないように `allow` してしまう。

“`ruby:some_klass_spec.rb
describe SomeKlass do
describe ‘#main’ do
subject { described_class.new.main }

# Thread.new をただブロック実行するだけにする
before { allow(Thread).to receive(:new) { |&block| block.call }

it { is_expected.to eq ‘somethi

元記事を表示

Ruby メモ

## Rubyについて
### Ruby
– 1993年に日本人のまつもとゆきひろさんに設計された言語です。
– Rubyが得意とするのは、ショッピングサイト、ブログサイト、アプリケーションサイト など、フレームワークを使い構築できるWebサイトです。
– マイグレーションは、直接SQLを使わずにデータベースのテーブルやカラムなどの構造 を変更できる仕組みのこと。
– [公式サイト](https://www.ruby-lang.org/ja/)
– [GitHub](https://github.com/ruby)

### SideKiq
– Rubyで記述されたオープンソースのバックグラウンドジョブフレームワークです。
– Ruby On Railsと緊密に統合し、バックグラウンド処理を非常にシンプルにします。
– [公式サイト](https://sidekiq.org/)

### RSpec
– Rubyの自動テストツールです。
– [公式サイト](https://rspec.info/)

### RubyGems
– RubyGems

元記事を表示

[Ruby]オブジェクト指向設計を使って変更に強いコードを書きたい ~クラスの責任とインターフェース編~

変更に強いコードを書きたい。
変更に強いコードを書くことで、後々修正が楽になるから。
これがオブジェクト指向設計を学ぶ目的の一つではないでしょうか?
でもオブジェクト指向設計って、色々と難しい言葉が出てきて理解しにくい…
そんな悩みを抱えている方もいらっしゃると思います。

そこで今回は、変更に弱いコードを少しずつ変更に強いコードに修正しながら、オブジェクト指向設計の考え方の一部を紹介していきたいと思います。

# 1.この記事の目的
変更に強いコードを書きたい。そのために、

①クラスが果たすべき責任について考えてみる
②クラス内のインターフェースを設計してみる
③クラス同士の依存関係を減らしてみる

# 2.クラス同士が強い依存関係にあると、コードは変更に弱くなる
ではまず変更に弱いコードから紹介していきます。

## 2-1.変更に弱いコード例
今回は、上司が新卒部下に会議の準備をするように指示するシチュエーションをコードとして表現してみました。

上司と新卒部下の仕事上でのやり取りって、現実でもよくありますよね。

現実でもよくあるシチュエーションをもとにオブジェク

元記事を表示

Ruby芸160チャレンジ(#1):複数行のテキストからサブセットを含む行の抽出

## この記事は何
[shellgei160を通じて言語習得 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/learning-via-shellgei160)に参加しています。

書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。

例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160

## 実行環境など
– Docker image: ruby:3.0.2
– 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下に`answer-ruby`ディレクトリを作り、その中に解答となるファイルを作成していきます。

## 今回のテーマ
https://github.com/shellgei/shellgei160/blob/master/answer/1.md

“`bash
$ grep ‘\.exe$’ files.txt
“`

上記相当の処理

元記事を表示

【Ruby】+ と<<で配列の要素を追加した時の話

https://qiita.com/advent-calendar/2023/infratop

シリーズ2の1日目です!卒業生とメンターさんがコラボして書いています📝

まずは、これを見てください。

“`rb:sample.rb
numbers = [1,2,3]
numbers += [4]

p numbers # [1, 2, 3, 4]
“`

“`rb:another_sample.rb
numbers = [1,2,3]
numbers << [4] p numbers # [1, 2, 3, 4] ``` 一見、配列に要素を追加しただけに見えます。 しかし、[Object#freeze](https://docs.ruby-lang.org/ja/latest/method/Object/i/freeze.html)を使ってみると以下のような違いが出てきます。 ```rb:freeze_sample.rb numbers = [1,2,3] numbers.freeze # numbers << [4] # can't modify frozen Ar

元記事を表示

Dockerイメージから作成したLambdaで画像リサイズ処理を行う

# やりたいこと
Lambda関数でlibvipsで画像をリサイズする
Lambda関数はRubyで動かす
画像はS3から取得する
ローカル環境で動作確認もしたい

# Dockerfileの用意
libvipsを使う場合そもそもlibvips本体をインストールしないといけません。
今回は、libvipsをインストールしたDockerイメージからLambdaを作成することにしてみました。

“`:Dockerfile
FROM amazon/aws-lambda-ruby:latest

# EPELリポジトリを追加
RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

# remiレポジトリを追加
RUN yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm

# libvipsとlibvipsを使うために必要なパッケージをインストール
RUN yum install

元記事を表示

大体0から始めるRuby入門その1 ~Ruby、動く~

この記事は[【完走したい】楽しくいろいろやる Advent Calendar 2023](https://qiita.com/advent-calendar/2023/notbeginner)の1日目です。
注意:学んだ内容に間違いがあることがあります。何か間違っていたら教えてください。勉強になります。

## 去年のカレンダーのこと
去年ミカンのプロジェクトは今年リベンジしようと10日間試行錯誤しましたが、うまくいかなかったのであきらめて次行きます。
ついでに復習もします。もちろん毎日新しい知識を学び、アウトプットします。

:::note info
目標:いろいろ新しいことにチャレンジする。
:::
↓以下本題

Rubyは6月ごろに一回触ったことがありましたが、その後全然触ってなかったので知識をつけていきたいと思います。
今回はとりあえず動かすことを目標にしておきます。
# Rubyとは
↓復習
Webアプリケーションとかを作るのに適しているようです。
ただし入門である今回は、そんなに知識がないのでとりあえず何か動けば良しということで。

# Rubyを動かすには

元記事を表示

【Rails】ミドルウェアでパスを見てDBを切り替える

# 概要
つい昨日パスでアクセスするDBを変更する方法をまとめて書きました

https://qiita.com/yothio/items/84daecd154624cdd059e

結果的にcocernに共通処理として本来ControllerやModelが持つべき処理を切り出して、各々で読み込む対応をしましたが中身のないModelやControllerが大量に作成されることになりました

DBへ接続しに行くときのミドルウェアで接続先DBを変更できればめちゃいいじゃんと思いちょっと試してみました

サンプルコードはこちらです

https://github.com/yothio/rails_multi_db_test/tree/modify_database_for_middleware

## 実際にミドルウェアを書いて読み込ませる
アクセスがあったときのDBの切り替えは下記のように定義します
– /hoge/contentsでアクセスがあった場合
– defaultの設定を利用する(db名はkanban_development)
– /fuga/contentsでアクセスが

元記事を表示

大規模 Rails で役立つテクニック: Iteratorパターン編

# はじめに

先日、LTイベント「Qiita Night~Rails~」にて登壇させていただきました。

https://increments.connpass.com/event/297116/

そこで、Railsで大規模Webアプリケーションを 開発するときに知っておきたいテクニックを Qiita の Rails を例にいくつか紹介しました。発表資料はこちらです。

アーカイブ動画もあります。