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

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

TimeWithZoneクラスについて

## 環境
Ruby2.6
Rails5.2

## はじめに
Railsでシステム日付を取得する場合は、Ruby標準のTimeメソッド、Dateメソッドは使わずに、Railsで用意されている、TimeWithZoneクラスを使うことになります。

TimeWithZoneクラスはActive Supportの拡張メソッドです。Ruby標準のTimeメソッド、Dateメソッドを使ってシステム日付を取得すると、OSが持っている日付がそのまま取得されるのに対し、TimeWithZoneクラスを使うと、OSのシステム日付がどうであれ、config/application.rbで設定しているタイムゾーンに該当する日付に変換して取得してくれます。

例えば、OSのタイムゾーンがUTC(協定世界時)である場合、Ruby標準のメソッドを使うと、UTCの日付がそのまま取得されます。しかし、TimeWithZoneクラスを利用すると、OSのタイムゾーンがUTCであっても、Railsで下記の設定をしている場合、JST(日本標準時間)に変換して取得してくれます。
“`config/application.

元記事を表示

rubyzipを用いて、一時退避させたファイルをzipに圧縮し送信する

# やりたいこと
rubyxlで編集したエクセルファイルを数十個出力し、それらをzipファイルで圧縮しsend_dataで送信したい。

# 使用するgem
https://github.com/rubyzip/rubyzip

Gemfileに以下を記入し、bundle installを実行します。
“`
# zipファイル作成
gem ‘rubyzip’

“`

# 使用例
複数箇所で使用したかったので、moduleにしました。
“`
# zipファイルを作成

require ‘rubygems’
require ‘zip’
# windows文字化け対策
require ‘nkf’

module CompressFilesToZipService
module_function

def call(filenames, folder, zipfile_name)
Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
filenames.each do |filename|

元記事を表示

LambdaからDynamoDBへデータを登録する(Ruby)

# はじめに
LambdaとDynamoDBを使用すればIOT用のグラフページを作成できるのではと思ったのでその備忘録。
この記事では図中上の「IOTデータ保存」部分を実施。

![Lambda-DB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195542/82933046-6bbe-6525-d7a2-d8d23116a3ec.png)

# DynamoDBの設定
パーテーションキーとソートキーがある
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195542/dcdf7d30-7cf0-90cc-c534-582bb2e6db46.png)
上記例ではパーテーションキーがidでソートキーがtime
パーテーションキーのみ、またはパーテーションキーとソートキーの2つを指定する事が可能。

今回のIOT機器の場合、idが機器固有の番号、timeがデータを計測した際の時間としています。
理由としてと

元記事を表示

エンティティの洗い出し

 最近フリマアプリを実装するにあたってエンティティの洗い出しとER図、readmeを書くのにめっちゃ時間かかったので復習。
 結論からいうとER図はこんな感じになった。
![スクリーンショット 2022-10-26 9.39.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884270/3c3285f3-f061-b9a2-ee60-6c9bba870c92.png)

 フリマアプリのER図を書く時に一番困ったのは、中間テーブルの存在。
自分の浅い認識では中間テーブルというのは多対多のテーブルの関係の間にはさまってるイメージだったけど、今回は出品情報を一旦まとめるテーブルと、受け取り先をまとめるテーブルを作って、その間を取り持つような形になった。
 ユーザー情報はdeviseをつかって。あとでバリデーションとか設けるときにメールアドレスとパスワードはdeviseの使用で勝手に記述されるので、二重記述にならないように注意。
 で、テーブルの設計はこうなった。
![スクリーンショット 2022-10

元記事を表示

Ruby – no implicit conversion of Symbol into Integer

# TypeError: no implicit conversion of Symbol into Integer

配列に対してシンボルでハッシュを呼ぼうとするとエラー

“`rb
[][:a]
# TypeError: no implicit conversion of Symbol into Integer
“`

# TypeError: no implicit conversion of String into Integer

配列に対して文字列でハッシュを呼ぼうとするとエラー

“`rb
[][“a”]
# TypeError: no implicit conversion of String into Integer
“`

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# Twitter

元記事を表示

Rubyでクラシカルなアルペジオを作ってみた (Mac環境)

## これは何?
元ミュージシャンの私が、今現場で使っているRubyでなんとか作曲っぽいことができないか試みた記事です。
OSは、Montereyを使用しており、特に有料ツールなども使用しておりません。

## 用語の説明

– アルペジオ
– 和音を構成する音を一音ずつ順番に弾いていくことで、リズム感や深みを演出する演奏方法。
– MIDI (MIDIデータ)
– 音楽の演奏情報をデータ化し、電子楽器やパソコンで再生できるようにしたものです。
– MIDI音源 (ソフトウェア音源)
– MIDIの情報に従って演奏をする機器

## 下準備編

### MacのMIDI出力を準備する

1. Launchpad から MIDI で検索し、`Audio MIDI設定` を開きます。

2.

元記事を表示

RabbitMQ入門【チュートリアル触ってみた】

## はじめに
RabbitMQによるメッセージのやり取りを行うシステムに関わっているものの体系的な知識がなかったため、RabbitMQ公式のチュートリアルを触ってみました。
https://www.rabbitmq.com/getstarted.html

そこで得た知識と追加で調べた情報などを記載します。

### 想定読者
– RabbitMQをこれから使う人
– RabbitMQを使っているけどよくわかってない人
– 記憶を失った時の自分

## RabbitMQとは
RabbitMQはオープンソースのメッセージブローカー。
ブローカー(Broker)は直訳で「仲立ち人」。

複数のメッセージングプロトコルに対応しているがコアとなるのはAMQP。

### 登場する概念
| 名前 | 説明 |
|–|–|
| Producer | メッセージを送るプログラム(=Publisher) |
| Exchange | Producerのメッセージはここに送られる。後述のtypeに応じてQueueへ送信 |
| Queue | メッセージを格納する場所 |
| routing ke

元記事を表示

aggregate_failuresを使ってRspecのシステムテストを高速化した

Rspecのシステムテストで実行時間が30分以上かかるテストがありました。example数は約100件です。
何とかならないものかと考えた結果、`aggregate_failures`を導入することにしました。これによりテスト実行時間を約10分まで短縮することができました。

# aggregate_failuresとは?

it内であるexpectが失敗した時に、次のitに移行せず、it内の全てのexpectを実行してくれるメソッドです。通常であれば1つのexpectが失敗した時点で次のitに移行してしまいます。`aggregate_failures`は全てのexpectを実行して、失敗したexpectが複数件あればそれらの情報を全て出力してくれます。

# どんなテストだったか?

こんなテストでした。

beforeを使っていて、itごとにFactoryBotでuserをbuild→ログイン処理をしています。

“`ruby
describe ‘XXX’, type: :system, js: true do

before(:each) { @user = FactoryB

元記事を表示

ActiveSupport::Concernとは

## ActiveSupport::Concernとは
Modelやcontrollerで重複した処理をActiveSupport::Concernを使用することでよりDRYに記述できる機能

## 使用するには
1. `app/models/concerns/`or`app/controllers/concerns/`にファイルを作成
– ファイル名はmoduleと同じにする
2. `included do end` の中に処理を書く
– スコープだけでなく、メソッドを定義したりもできます
– `extend ActiveSupport::Concern`を忘れないように
3. 使用したいmodelファイルの中でincludedする
4. concernに追加したメソッドを使用する際はそのまま呼び出せます

#### 例
“`ruby:app/models/concerns/m.rb
module M
extend ActiveSupport::Concern

included do
scope :disabled, -> { where(

元記事を表示

【Rails】POST送信でCSVファイルをダウンロード

# やりたいこと
### CSVファイルダウンロード機能をPOST送信で実現したい。

CSVファイルはブラウザから取り出すことができるので、ブラウザのHTMLからアクションを起こし、ブラウザにCSVデータを返却する方法が良さそう。また、セキュリティ的な観点で、CSVファイル生成に必要なデータは、サーバー側(controller側)でDBから引くようにします。

**方法**
①`xxx.csvファイル`をgetアクセスで読み込んでダウンロード(CSV形式での返却ファイル指定する必要あり。)
  ↑はググってよく見る方法
②HTMLの`form`からPOST送信のレスポンスをブラウザで受けとって、ダウンロード

既存のコードに追加する際に、最も綺麗に実装できそうな②をチョイスしました。

# 全体の大まかな流れ
・CSVファイルを生成するための条件を`form`で送信
・`controller`側で受け取った条件をもとに、必要なデータを用意する
・CSVファイルを用意し、書込みを行う
・書込みが完了したCSVファイルをブラウザ側に返却する

# 実装内容
**view側**
`f

元記事を表示

Dateクラスを色々と使ってみる

## 環境
Ruby2.6

## はじめに
Rubyで日付を扱う場合、使うクラスはTimeクラスか、Dateクラスとなります。システム開発の現場で、よく使いそうなDateクラスについて動作確認を行いました。

## 動作確認
Timeクラスを使う場合は、require “time”を定義する必要はありませんが、Dateクラスを使う場合は、reguire “date”を定義する必要があります。
“`test.rb
require “date”
“`

システム日付はTimeクラスでも取得できますが、Dateクラスからも取得できます。
“`test.rb
puts Date.today # => 2022-10-24
“`

確認すると、確かにDate型になっています。
“`test.rb
puts Date.today.class # => Date
“`

Dateクラスで取得したシステム日付を年月の形式(YYYY-MM)の文字列にする場合です。Timeクラスを使うときと使

元記事を表示

楽天GORA  API導入について(Ruby)

# 概要
楽天GORAのAPIを用いた アプリを作成した時に起こったことを残しておく記事になります。
あまりGORAに関する記事がなかったためもし間違いに気がついてご指摘いただける様でしたら
なおありがたいです。
記述はrailsで作成したものになります。

# 要件
楽天GORAのAPIを導入する

# 手順一覧
## 1. まずは楽天に登録して、APIを利用するためのIDを発行してもらう
https://webservice.rakuten.co.jp/

これに登録して専用のIDを発行してもらい、それを用いてAPIとの通信を許諾してもらいます。

## 2. 発行してもらったIDを環境設定に配置する

config > initializer > rakuten.rb
[rakuten.rb]は既存ファイルではないので、自分で作成する(名称は何でも可)

・rakuten.rb
“`ruby
RakutenWebService.configure do |c|
# (必須) アプリケーションID
c.application_id = ‘発行してもらったID’

#

元記事を表示

Timeクラスを色々と使ってみる

## 環境
Ruby 2.6

## はじめに
システム開発をする上で、日付に関する操作は避けて通ることはできません。他言語(VBです)からRubyに移行した人からすれば、日付を扱うクラスに、Timeクラス、Dateクラス、DateTimeクラスの3種類もあることに驚いてしまいます。しかし、Ruby3.0からDateTimeクラスが非推奨となっているため、これからは、ほぼほぼ、TimeクラスとDateクラスさえ知っていればいいということになりそうです。まずは、Timeクラスの使い方について、システム開発でよく使いそうなメソッドをいくつか確認してみます。

## 確認
システム日付を取得する方法です。Time.nowを使っても、Time.newを使っても同じです。
“`test.rb
puts Time.now # => 2022-10-24 15:15:53 +0900
puts Time.new # => 2022-10-2

元記事を表示

ruby arrayの組み込みメソッドを層別してみた

>どうもaono1234と申します。記事がいいなと思ったらtwitterのフォローもお待ちしております‼

みなさんは組み込みメソッドという存在はご存じでしょうか?
組み込みメソッドとは自分で定義しなくてもデフォルトで使えるようになっているメソッドの集合です。
rubyの場合、stringクラス、arrayクラス、hashクラスなど、各クラスで使える組み込みメソッドが違います(共通のものもあります)

例えばarrayクラスだけでも以下↓の数だけあります。
https://docs.ruby-lang.org/ja/latest/class/Array.html

使えると便利なのかもしれませんが、覚えるのが大変そうですね…?

覚えるための一助となればと思い、arrayクラスの一部のメソッドだけではありますが私なりにmiroというアプリで層別してみましたので、
よかったらご覧下さい。

### miro URL

![ima

元記事を表示

Ruby: lambda, proc, アロー演算子, Proc.newの違い

[Kernel.#lambda](https://docs.ruby-lang.org/ja/latest/class/Kernel.html#M_LAMBDA) と [Kernel.#proc](https://docs.ruby-lang.org/ja/latest/class/Kernel.html#M_LAMBDA) はどちらもProcオブジェクトを生成する。どちらなのかは `Proc#lambda?` で判別できる。

– lambda
– メソッドに近い
– 引数の数が違っているとエラーになる
– returnでlambda自身を抜ける
– アロー演算子 [->](https://docs.ruby-lang.org/ja/latest/doc/symref.html) と同じ
– proc
– ブロックに近い
– 引数の数が違っていてもエラーにならない
– returnでprocを囲むメソッドを抜ける。proc自身を抜けるにはnextを使う
– `Proc.new` と同じ

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlの論理演算子の比較

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

Python,Ruby,PHP,Java,JavaScript,Perlの論理演算子の比較

# Python

https://qiita.com/dondondon/items/0b7de45078bee0ba2b13

# Ruby

https://qiita.com/yusuke_blog1026/items/ab33bdfa495597d04f0b

# PHP

https://qiita.com/tsukishimaao/items/b4a2f30c89ea16ef6eb1

# Java

https://qiita.com/takahirocook/items/748990882f2de7a630a1

# JavaScript

https://qiita.com/TakeshiNickOsanai/items/e180777619f1a49f30e5

# Perl

https

元記事を表示

タグ検索機能 select(プルダウン)で実装してみた

タグ検索機能をプルダウンで実装したいとの声があったので
実装してみました!
タグ機能自体の実装に関しては、以下の記事を参考に進めていますので
DB周りの実装は以下の記事を参考にしていただけると幸いです?

https://qiita.com/MandoNarin/items/5a5610a40c66f77d6c10

# 目次
本記事は以下の流れで進みます!
1. [form_tagの実装](#formtagでの見た目実装)
1. [検索機能の実装](#検索機能の実装)

# form_tagでの見た目実装
## タグ機能を1つ実装した場合の検索機能
“`erb:posts/index.html.erb
<%= form_tag({controller:"posts",action:"index"}, method: :get) do %>
<%= select_tag :tag_search, options_from_collection_for_select(@tag, "id","name") %>
<%= submit_tag "検索する"

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlの算術演算子の比較

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

Python,Ruby,PHP,Java,JavaScript,Perlの算術演算子の比較

# Python

https://qiita.com/G-Rape/items/cd3f2f284ba990164564

# Ruby

https://qiita.com/SUZUKI_Masaya/items/eeea6cd36cc265d2dbf0

# PHP

https://qiita.com/mzmz__02/items/8bfbcf2cd48d9e9f2806

# Java

https://qiita.com/morioheisei/items/63088c61e8234dc1f7f5

# JavaScript

https://qiita.com/uhyo/items/cc92a553059274d85403

# Perl

https://perlzemi.com/blog/2

元記事を表示

001~300の連番を持ったフォルダを作成する

(2022/10/23 22:06追記) ShellScript版も追記しました。

# Ruby

“`rb
1.upto(300) do |i|
`mkdir #{sprintf(‘%03i’, i)}`
end
“`

# ShellScript

“`sh
for i in $(seq -w 1 300); do
mkdir $i
done
“`

# 参考にした記事

## Ruby

– [Ruby 3.1 リファレンスマニュアル sprintf フォーマット](https://docs.ruby-lang.org/ja/latest/doc/print_format.html)

## ShellScript

– [創作メモ帳 シェルスクリプトで指定した範囲の数値 (range) を取得する](https://sousaku-memo.net/php-system/1213)
– [UNIX/Linuxの部屋 seqコマンドの使い方](http://x68000.q-e-d.net/~68user/unix/pickup?seq)

元記事を表示

rubizipでzipファイル中のzipファイルにアクセスしてみた

## はじめに

rubyで、zipファイル中のzipファイルにアクセスする必要があり、いろいろ悩んでアクセスできたので、記録しておきます。
zipファイル中のzipのデータをioとして処理できずに悩みましたが、StringIOを使って解決することができました。

## やりたい事例

* `hoge_hoge.zip`の中に`hoge.zip`ファイルがアーカイブされている。
* `hoge.zip`の中に`hoge1.txt`と`hoge2.txt`がアーカイブされている。
* `hoge_hoge.zip`から`hoge1.txt`と`hoge2.txt`にアクセスしたい。

“`
hoge_hoge.zip
+– hoge.zip
+– hoge1.txt
+– hoge2.txt
“`

“`hoge1.txt
hoge1 contents
“`

“`hoge2.txt
hoge2 contents
“`

## コード

“`ruby:zip_in_zip.rb
require ‘zip’

Zip::InputStrea

元記事を表示

OTHERカテゴリの最新記事