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

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

GroveBeginnerKit を、C++(Aruduino)とRuby(ラズパイ,Rboard) で使う I2C – 加速度センサー編

[しまねソフト研究開発センター](https://www.s-itoc.jp)(略称 ITOC)にいます、東です。

[Grove Beginner Kit for Arduino](https://wiki.seeedstudio.com/Grove-Beginner-Kit-For-Arduino/) を使ってみる記事の第4回、今回から I2C 接続のセンサーを題材にします。
このキットに付属している I2C 接続のセンサーは、以下の3種類です。

* 3軸加速度センサー
* 気圧センサー
* 温湿度センサー

その中でも今回は、3軸加速度センサーを題材にします。

このレポートでは、

「メーカーのデータシートを見て、センサICを直接コントロールをすること」

を、方針とします。
もちろん、プログラムを書く上で既存のライブラリ等の実装を参考にすることは良い事です。しかしながらこのレポートは、I2C バスやセンサ IC の扱い方、データシートの読み方を示す事も目的としているため、できるだけ低レイヤーでの説明を行います。

元記事を表示

Ruby – バイナリと16進数のHEXを相互変換する

# コード例

“`rb
def bin_to_hex(str)
str.each_byte.map { |b| b.to_s(16).rjust(2, ‘0’) }.join
end

def hex_to_bin(hex)
[hex].pack(‘H*’)
end

bin_to_hex(binary_string)

hex_to_bin(hex_string)
“`

# チャットメンバー募集

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

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

# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura

元記事を表示

MySQL 8.3環境でmysql2 gemをインストールする方法

## はじめに
MySQL 8.3の環境でmysql2 gemをインストールするのにちょっと苦労したので、対処法を書いておきます。

### 実行環境

本記事は以下の環境で検証しました。

– MySQL 8.3.0 (Homebrewでインストール)
– macOS 14.4.1
– MacBook Air M3
– Ruby 3.3.0

### 注意事項
この記事を書いている時点ではmysql2の最新バージョンは0.5.6です。
よって、mysql2 0.5.6を使う前提で記事を書きますが、さらに新しいバージョンがリリースされたときは対処法が異なる可能性があります。

https://github.com/brianmario/mysql2/releases

### 念のため用語の整理
本記事ではMySQLとmysql2というよく似た用語が出てきます。
プログラミング初心者の方はこれらをしっかり区別しながら読み進めてください。

– **MySQL** = RDBMS(DBサーバー)。執筆時点の最新バージョンは8.3.0(2024/1/16リリース)
– **mysql2**

元記事を表示

空の区間はすべて等しいか

## 経緯

社内で勉強会を開いていて、こんな話をしました。

> $l \leq x \lt r$ のような片側の端点だけを含む区間を**半開区間**といい、$[l,r)$ のように表記します。
> 配列のスライス(連続する部分列)を表すときは、半開区間を使って「$l$ 番目から $r$ 番目まで($l$ 番目を**含み**、$r$ 番目を**含まない**)」とすると便利です。この方法のいいところは、 $l = r$ とすれば空の区間を表すことができ、それを要素と要素の間を表すのにも使えるという点です。たとえば $[0, 0)$ は最初の要素の直前、$[1, 1)$ は最初の要素と $2$ 番目の要素の間、$[N, N)$ は最後の要素の直後、といった具合です。[^1]

ここまで説明したところで、聴衆の数学ガチ勢からツッコミが入りました。「それはおかしい、まるで $[1, 1)$ と $[3, 3)$ が異なるものだと言っているように聞こえる。」

……なぬ?空の区間で要素と要素の間を表すと言ったからには、確かに $[1, 1)$ と $[3, 3)$ が異なるものだと言っ

元記事を表示

Ruby Rails そのCSVどんな文字コードだろうと取り込んでやるよ

# 文字コード…
…日本で開発をしている皆さん。こんにちは。文字コードです😈

# もう嫌なんだ
– CSVが取り込めない?
– 文字コード?
– UTF-8?
– SHIFT-JIS?
– BOM?
– BOM付?え?
– ローカルではいける?
– あの人は取り込めないらしい?
– Macならいける?
– Windowsならいけない?
– エクセルで開いた?
– メモ帳で保存して?
– スプレッドシートから出力?
– 取り込めないんですけど😡?
– こっちでは取り込めるんだよなあ?
– ああああああああああああああああああ

# どんなものでも取り込めるそんな魔法のような実装はないのかね
あるかもしれない、ないかもしれない。
僕が辿り着いたところはここまでだ。
効率がいいか?そんなことはしらん。
いいから魔改造だ!

“`rb
require ‘csv’
require ‘nkf’

def import_csv(file_param)
# どんなものでも取り込めるように魔改造
file_encoding = NKF.guess File.read(file_par

元記事を表示

Gemfileに追記せずに、自分だけ使うgemを追加

Railsのプロジェクトで、
peformance測定とか、debugのgemを入れたいとか…
チームの方針で`irb`になっているが、自分はpryを使いたいときとか…

## 方法1. `.pryrc`からinlineで呼び出す

“`~/.pryrc
require ‘bundler/inline’

gemfile do
source ‘https://rubygems.org’
gem ‘awesome_print’
gem ‘pry-doc’
end

AwesomePrint.pry!
“`

## 方法2. `Gemfile.local`を作成する方法
1の方法だと、rails serverを立ち上げたときなどは、gemが呼び出されません:cry:
なので方法2を紹介しますが、ちょっと複雑なので、基本的に方法1をおすすめします

### 1. プロジェクトのルートディレクトリに`Gemfile.local`を作成
“`Gemfile.local
gem ‘awesome_print’
gem ‘pry-doc’

eval_gemfile ‘G

元記事を表示

rails consoleのsandboxオプション、使ってる?

:::note info
1分で読めます
:::

## sandboxオプションの嬉しい点

sandboxオプションのメリットは、コンソール終了時に自動でデータベースへの変更をロールバックできる点です。

「手元で更新とか色々試したいけどデータベース変更したくないよ〜」という場合に便利。

そうでなくても誤って操作する可能性もあるので、とりあえずこのオプションで触っておけば
ローカル環境のデータに影響が出ることはないので嬉しいですね。

## 使用方法

いつものコンソールを起動するコマンドに`–sandbox`でオプションをつけるだけ。

“`
rails console –sandbox
“`

※`rails c -s`でも可能

## 注意点

ただし本番環境で使う場合は注意をしましょう。
大規模な障害につながる危険性があります。

https://zenn.dev/shuhei_takada/articles/18ba8524049a04

元記事を表示

【Ruby on Rails】paramsを使ってURLとDBを紐づけてデータを表示させる

## 今回の目標
URLが`localhost:3000/tests/1`の時は`testsDBのid:1`のデータを表示
URLが`localhost:3000/tests/2`の時は`testsDBのid:2`のデータを表示

といった形にする。

**基本条件**
・rutes.rb
・tests_controller.rb
・show.html.erb
・Testモデルtestsテーブル
それらが存在している

### やること
:::note info
①ルーティングの設定を追加
②コントローラーを作成
 params変数を学ぶ
③確認
:::

## ①ルーティングの設定
1つずつルーティングを設定していくとした場合
“`routes.rb
get “tests/1” => “tests#show”
get “tetss/2” => “tests#show”
get “tests/3” => “tests#show”

#それぞれのURLに対してtestsコントローラーのshowアクションを実行する
“`
これでも問題ないが、DBに対応という部分を考え

元記事を表示

Flutter環境構築のためのCocoaPods・Rubyのダウンロード

Flutterでアプリを実際に動かしたいが、runしてもchromeアプリさえ表示されない。そのためにCocoaPodsというモジュールのインストールが必要だったのだが、2時間ほど手こずったのでメモを残しておく。

# cocoapodsのインストール、でもできない
公式サイトを参考に、CocoaPodsのダウンロードを試みる。

https://guides.cocoapods.org/using/getting-started.html

“`sh
sudo gem install cocoapods
“`

しかし、cocoapodsがインストールできない。
Rubyがダウンロードできていないとダメなようです。

## Rubyのインストール

[ruby install](https://gorails.com/setup/macos/14-sonoma)のサイトを参考にしながらRubyをインストール。

“`sh
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/H

元記事を表示

Ruby で解く AtCoder ABC 044 A – 高橋君とホテル (ARC 044 A)

# はじめに
– [AtCoder Problems](https://kenkoooo.com/atcoder/#/table) の ABC042 以降の問題を解いています
– 勉強のために Ruby で解いています
– 速度的な面で他の言語には劣りますが、あくまで勉強のためです

# お題
– 今回のお題は、 [ABC 044 A 高橋君とホテル](https://atcoder.jp/contests/abc044/tasks/abc044_a) という問題です
– K+1 日目から宿泊費が安くなるホテルに N 泊した際の合計宿泊費を求めます

# 考えたこと
– ホテルの値段が安くなる前に宿泊を終える場合がある
– 条件を使えば簡単にできるが、出力処理は1行でコンパクトにしたい

# コード
“`ruby
n = gets.to_i
k = gets.to_i
x = gets.to_i
y = gets.to_i

puts [n, k].min*x + [n-k, 0].max*y
“`

元記事を表示

【Rails】link_toとPrefixと引数と【初心者】

# link_toでprefixで繋ぐ時、引数を何を渡せばいいのか
link_to自体のやり方はこちら

https://qiita.com/junyawatanabe/items/327019369352c73d8ad1

どういうものを作っているかによって変わると思うのだが
link_toでindexとnewに行く時は引数を基本使わない。
indexとかから、edit、show、destroyに行く時は基本使う。
editに行くとしてproductモデルで@products.each do |product|で回してるなら、
edit_product_path(product)とかedit_product_path(product.id)とかで、
editに引数を使ってproduct.idを渡して、editのコントローラーの方で
@product = Product.find(params[:id])で情報を全て拾う。
destroyの時だけmethod: :deleteをlin_toに入れる。
<%= link_to '削除' , product_path(product), m

元記事を表示

Ruby On RailsにおけるjQuery初期設定

# Ruby On RailsにおけるjQuery初期設定
## 背景説明
現在のrailsに即したjQuery導入説明です。
私のような初学者にも伝わる日本語での説明を見つけられませんでした。英語での説明はあったのでこちらにメモしておきます。
ムダな記述が多いです。記述を省ける箇所や訂正箇所をコメントで教えてください。[^1]

[^1]:[参考文献](https://stackoverflow.com/questions/70921378/how-to-install-jquery-and-bootstrap-in-rails-7-app-using-esbuild-without-webpac)

## 初期設定
### アプリを作成します。
“`sh
rails new useJquery
“`
### 作成したフォルダーへ移動
“`sh
cd useJquery
“`
### コントローラーとビューを作成
“`sh
rails g controller tests index
“`
### ルーティング設定
“`ruby
Rails.applicatio

元記事を表示

【Ruby】<< をそのままメソッドの戻り値にするより、[*array, element] を使おう

## はじめに: `<<`をそのままメソッドの戻り値にする? コードレビューをしていると、ときどき以下のようなコードを見かけます。 ```ruby def do_something foo = [] # 処理があれこれ続く # ... # ... foo << 123 end bar = do_something puts bar ``` 注目してほしいのは `foo << 123` の行です。 ここは配列 `foo` に123を追加し、なおかつそのときの戻り値をこのメソッド(`do_something`メソッド)の戻り値にしています。 ```ruby def do_something foo = [] # 以下の1行は2つの意味を持つ # - fooに123を追加する # - 123を追加したfooをこのメソッドの戻り値とする foo << 123 end ``` たしかに配列に要素を追加する `<<` は戻り値としてその配列自身を返しますが、ふだん `<<` を使うときはあくまで要素を追加するだけで、`<<` の戻り値を利用すること

元記事を表示

ローカル環境で「rails assets:precompile」・「bin/importmap」・「rails s」をしないとCSSが読み込まれない件

## 前提条件
・ アプリケーション:Rails7
・ ローカル環境:MySQL
・ 本番環境:Render

## 現状
ローカル環境において、下記コマンドを実行した上でサーバー再起動をしないとCSSが反映しない状況。
“`shell
% rails assets:precompile
% bin/importmap
% rails s
“`

下記は、有識者の方にこの状況に問題があるか確認してみた結果の記録です。

## 結論 本番環境が問題なく動いていればいい
#### ローカル環境でCSSが反映されない原因
可能性の一つとして、`Rails7とJavaScriptの相性`が関係して起こっている事象
かもしれない。
ローカル環境で`「rails assets:precompile」・「bin/importmap」・「rails s」`を実行してCSSの変更内容が適用され、本番環境も反映できているなら、(問題がある可能性もあるけれど)問題はない。

#### 本番環境でデプロイ後にCSSが反映できている理由
そもそも本番環境では`bin/render-build.sh`に

元記事を表示

Ruby で解く AtCoder ABC 043 D – アンバランス (ARC 059 D)

# はじめに
– [AtCoder Problems](https://kenkoooo.com/atcoder/#/table) の ABC042 以降の問題を解いています
– 勉強のために Ruby で解いています
– 速度的な面で他の言語には劣りますが、あくまで勉強のためです
# お題
– 今回のお題は、 [ABC 043 Dのアンバランス](https://atcoder.jp/contests/abc043/tasks/arc059_b) という問題です
– 入力文字列の部分文字列がアンバランスかどうかを判定し、アンバランスなら具体的な区間を答えるというもの

# 考えたこと
– 何も考えずに作ろうとすると、時間計算量は$O(n^3)$になる
– 部分文字列の列挙で$O(n^2)$
– 判定で$O(n)$
– 位置を1つ示せば良い
– 答えは複数あるのだが、少なくとも1つのアンバランスな区間を示せれば良い
– アンバランスな文字列は以下のパターンのどちらかを含む
– 長さ2の”XX”というパターン
– 長さ3の”XYX”というパ

元記事を表示

RailsにおけるRSpecテストコードで生成されたデータがデータベースに保存されない仕組み

### RailsでRSpecなどのテストコードを実行すると、テストコード内で生成されたデータは通常、データベースに保存されません。これは、テストコードと本番環境を分離し、テストデータが本番データに混入することを防ぐためです。

# 仕組み

RSpecなどのテストフレームワークは、テストコードを実行する前に、以下の2つの重要な処理を行います。

1\. トランザクションの開始: テストコードの実行前に、データベースへのトランザクションを開始します。
2\. トランザクションのロールバック: テストコードの実行後に、トランザクションをロールバックします。

トランザクションのロールバックにより、テストコード内で生成されたすべてのデータ変更はデータベースにコミットされず、本番環境に影響を与えることはありません。

# 例外

一部のテストシナリオでは、テストデータをデータベースに保存する必要がある場合があります。そのような場合は、以下の方法で実現できます。

save! メソッドを使用する: モデルオブジェクトを保存する際に save! メソッドを使用すると、トランザクションのロールバッ

元記事を表示

[Rails]個人アプリでN+1問題を見つけて解消してみた

バックエンドエンジニアの実務では、N+1問題を見つけ、解決する場面がある、ということを聞きました。

そこで、クエリの適化を行う練習のためにも、自分のアプリを使って、N+1問題について勉強したことをまとめてみます!

# N+1問題は何が問題(悪影響)なのか?

N+1問題の何が問題かというと、
– 何度も(N回)テーブルにデータを取りに行くと、当然、処理が重くなる
– これが例えば、N=20回程度なら問題はないかもしれないが、N=50,000など大量のデータを処理する際には、負荷がかかる
– 結果、サービスの利便性が悪くなる。ビジネスに影響が出る

という認識です。

つまり、そこまで多くのデータを処理しないケースなら、あまり問題にはならないはずです。

私のアプリケーションもそれに該当するのかなと思います。

しかし、大量の処理を想定して、設計したらどうなるか、ということを実際にやって見ることは勉強になるので、試してみました。

# N+1問題の特定

私は以下の方法で、N+1問題が発生しているところを特定しようと思いました。

– gem’bullet’の活用
– 複数テーブル

元記事を表示

「あの赤い丸 ⛔️」を消せ!RubyMine (およびJetBrains系IDE、VS Code、Vim) でファイルの末尾に改行文字を自動的に付与する設定

## はじめに
GitHubでプルリクエストのコードレビューをしたりすると、たまにこんな赤い丸⛔️を見かけませんか?

![Screenshot 2024-04-13 at 11.23.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/7f5553c3-1fe6-67f7-a6b8-9ea61e058228.png)

これはファイルの末尾が改行文字で終わっていないことを示す警告マークです。

改行文字を `\n` で可視化するなら、本来は

“`
end\n
end\n
“`

こうなっているべきなのに、実際は

“`
end\n
end
“`

こうなって保存されている、ということです。

実際問題、ファイル末尾が改行文字で終わっていないからといってプログラムがおかしな動きをするということは滅多にありません。
ですが、[POSIX](https://ja.wikipedia.org/wiki/POSIX)[^1]の規格では「テキストファイルの末尾は改行文字で終わらないとい

元記事を表示

【Rails】レコードの中から、ある項目ごとの最新データを取得する方法

株式会社学びと成長しくみデザイン研究所の藤澤です。

## 前提
データベースに蓄積されたログから、特定の項目ごとの最新のデータを取得したいことがあるかと思います。

例えば、各タスクの実行状況を記録する TaskLog テーブルがあるとします。このテーブルには、タスクの識別コード(タスクコード)、ステータス、作成日時、更新日時が記録されています。
“`rb
TaskLog(id, task_code, status, created_at, updated_at)
“`

そして、テーブルには以下のようなデータが存在するとします。
“`sh
id | task_code | status | created_at | updated_at |
1 | “taskA” | “ok” | 2022/04/01 12:30:00 | 2022/04/01 12:30:00 |
2 | “taskB” | “ok” | 2022/04/02 12:30:00 | 2022/04/02 12:30:00 |
3 | “taskA

元記事を表示

【Rails】スキーマ情報が一目でわかるannotate_models

## はじめに

ファットコントローラーよりファットモデルの方が良い、という教えを守った結果、テーブル情報の確認しづらさを感じ調べてみました。

前回の記事でもアノテーションというものを取り上げた気がしているため、もう注釈おじさんと呼んでください🙇

:::note warn
ご覧いただきありがとうございます!
この記事の投稿者は主にRuby on Railsを学習している初学者です。
理解不足な点や内容に誤りがございましたらご指摘いただけますと幸いです。
:::

## 問題
テーブル・ルーティングの情報をできたら一目で確認したい。
ファイルを開いたときに毎回下までスクロールしないと全容がわからない・・・

## 解決方法
gemがありました🥹

https://github.com/ctran/annotate_models

Gemfileの`development`グループへ

“`ruby:Gemfile
gem ‘annotate’
“`
“`
bundle install
“`
ここからは固有のコマンドです.
実行すると`lib/tasks/auto_annota

元記事を表示

OTHERカテゴリの最新記事