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

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

GroveBeginnerKit を、C++(Aruduino)とRuby(ラズパイ,Rboard) で使う I2C – OLED編

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

[Grove Beginner Kit for Arduino を使ってみる記事](https://qiita.com/HirohitoHigashi/items/dc43ea72d572b21a6823)の第7回、最後は I2C 接続の OLED ビットマップディスプレイを題材にします。

このレポートでは、今まで通り

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

を、方針とします。しかしながら、今までのセンサー類と違いディスプレイコントローラは桁違いに設定項目が多く扱いが難しいです。通常ですと既存ライブラリを使うのが当たり前になると思いますが、学習用の記事という性質上ライブラリは使わずにコントロールします。[^1]

ターゲットは、以下の通り。
* Arduino - 付属の Arduino Uno 互換機
* Ruby – Raspberry Pi + [Grove Base HAT for Raspb

元記事を表示

railsでのお作法について纏めてみた

## 対象読者
– railsを初めて触る人
– 簡単なCRUD、ルーティングまでを一つの記事で理解したい方
– apiとwebのエンドポイントを共存させるほう法を知りたい方

元記事を表示

Ruby Silverの勉強をして良かった点

転職活動中のRubyエンジニアです。
自分の経験を棚卸した際に、Ruby Silverの勉強をしておいて良かったなと思いました。
せっかくなので何が良かったかを紹介します。

## 「インスタンス変数のセッターメソッド呼び出しになぜレシーバの明示が必要か」がわかった

nameとageのカラムを持つusersテーブルと対応するクラスを以下のように実装したとします。

“`app/models/user.rb
class User < ActiveRecord::Base def set_attributes(name, age) # ↓レシーバを明示する self.name = name # ↓レシーバを明示しない age = age end end ``` set_attributesメソッドでnameとageに値をセットできるつもりですが、いざ実行すると以下のようになります。 ```rb u = User.new u.set_attributes('Taro', 25) u.name #=> ‘Taro’
u.age #=> nil
`

元記事を表示

ancestry gemで発生するN+1問題の解決法

# はじめに
Railsで階層構造を持つデータモデルを扱う際に使用する`ancestry` gem。便利なメソッドが準備されている反面、そのまま使用してしまうとN+1を起こしパフォーマンス的に良くない状態になってしまったので、どうやって解決したかを説明します。

## TL;DR
`ancestry` gemを使用して親子関係を扱う際に、メソッドを使わず自己参照のリレーションを利用することでN+1問題を解消できます。

# 環境
Ruby 3.3.0
Rails 7.1.3.2
ancestry 4.3.3

## 親子関係とN+1問題の例
`ancestry` gemを使うと、カテゴリーのような階層構造を持つモデルを簡単に作成できます。例えば、以下のようにCategoryモデル単体で階層化されたモデルを例に考えます。

“`ruby
# category.rb
class Category < ApplicationRecord has_ancestry end ``` N+1を起こす原因箇所 ```erb -# index.html.erb

【個人開発】VTuberの発見と布教が出来るWebアプリを作りました

# はじめに
初めてのWebアプリケーション開発をしてみました。
名前は`にゅーぶい!`です。

https://newvtuber.com/

どのようなものか書きます。

# どのようなアプリか
### 簡単な紹介
ファンは自分がまだ知らないVTuberの発見と布教、VTuberはファンの獲得が出来ることを目指したサービスです。

### 想い
VTuberという文化が生まれてから久しく、現在では数えきれないほどVTuberがいます。
そのため、自分のタイプや好みに合うまだ知らないVTuberがきっと多くいます。
そこで、VTuberのプロフィール閲覧/作成を行えるサービスがあれば、より楽しい推し活に繋がると思い、本アプリの開発をしました。

# 使い方
### 文字のみ
一部ユーザー登録の必要なものがありますが、登録やログイン等の記述は割愛します。
最低限の使い方は下記の2つです。
① 一覧から気になるVTuberを押す
② プロフィールを見る
上記に加えて、下記の使い方もすると少し豊かになります。
・ ご自身の好きなVTuberのプロフィールが無い場合は作成する

[Rails]タスク管理アプリ(Part.1)

## はじめに

Railsでタスク管理アプリを作成します。
利用する各ツールのバージョンは以下とします。
|ツール|バージョン|
|-|-|
|Ruby|3.2.4|
|Ruby on Rails|7.1.3.2|
|PostgreSQL|16.2|

## アプリケーションのひな型を作成する

アプリケーションのひな型を作成します。
実行には少し時間がかかります。
“`bash:
rails new taskapp -d postgresql
“`

実行が完了したらアプリケーションフォルダに移動します。
“`bash:
cd taskapp
“`

データベースを作成します。
“`bash:
bin/rails db:create
“`
2つのデータベースが作成されました。
>$ bin/rails db:create
Created database ‘taskapp_development’
Created database ‘taskapp_test’

サーバを起動します。
“`bash:
bin/rails s
“`

以下にアクセスします。

htt

【Rails】データベースに反映済みのマイグレーションファイルの修正方法

マイグレーションファイルを作成して, rails db:migrate し, あとからカラム名のタイポに気づきました

“`db/migrate/20240502121245_create_checkouts.rb
class CreateCheckouts < ActiveRecord::Migration[7.0] def change create_table :checkouts do |t| t.string :fisrt_name # first_name としたかった t.timestamps end end end ``` rails db:migrate していない場合は, そのままマイグレーションファイルを編集すればよいですが, すでにしている場合はデータベースに反映されているため, ロールバックをする必要があります。 反映されているかは rails db:migrate:status で確認できます。up になっていれば反映済み, down になっていれば未反映です。 今回は以下のように up

初心者がボウリングゲームをRubyのみで書いてみた

# はじめに

こんにちは。
一般事務からエンジニアへ転職するために基礎学習しています。
Ruby演習として、VSコード上でRubyのみにて
「Bowling Game ~本日のラッキーボーイ&ガールは一体誰だ!~」
を作成しました。
まだまだひよっこですが、初投稿やってみます。

# 何を書いたか
ボウリングゲーム の コード (Ruby)

<仕様>

– 実際の球を投げる行為は、毎回、ランダムな数字が生成および表示されて、それを入力(半角数字)することとした。
表示されたランダムな数字と入力した数字が異なる場合は、スコアは0となる。
(スコアを0とさせることで、入力した数字が10以下であるかどうかの判定用コードは作成していない。)
– ボウリングゲーム のプレイヤーは何人でも可能である。
– 毎回、ユーザーごとに1投目2投目(10ゲームは3投目がある場合もある)を入力してもらった後、そのゲームまでの表を表示する。
– 合計スコアが確定していない時は、”…”で表示される。
– ストライクとスペアの時は、”ナイスストライク!””ナイススペア!”と表示する。(※1)
– 最後、

[Rails]ユーザー管理機能

### 1. ユーザーに関するscaffoldを自動生成する。
“`bash:
bin/rails generate scaffold user name:string address:string age:integer
“`
>$ bin/rails generate scaffold user name:string address:string age:integer
invoke active_record
create db/migrate/20240504174055_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
invoke resource_route
route resources :users
invoke

[Ruby]環境構築(Windows11)

## 1. Ubuntuのインストール
Microsoft Storeにて、「Ubuntu」をダウンロードする。
https://apps.microsoft.com/detail/9pn20msr04dw?hl=ja-JP&gl=US

ダウンロードしたファイルは以下。(2024/05/04時点)
・Ubuntu 22.04.3 LTS Installer.exe

ユーザーとパスワードを設定する。

Ubuntuのパッケージファイルを最新化する。
“`bash:
sudo apt update
sudo apt update -y
“`

作業用フォルダとシンボリックリンクを作成しておく。
“`bash:
mkdir /mnt/c/Code
ln -s /mnt/c/Code ~/Code
“`

## 2. rbenvのインストール
rbenvをインストールする。
“`bash:
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
“`

パスを設定する。
“`bash:
echo ‘export PATH=”

立体ペントミノ・ソルバー

# はじめに
この記事

https://qiita.com/sense_n_react/items/0875e969626c1892b60a

で紹介したのは平面でのペントミノ・ソルバーでした。
ピースの要素を立方体にすることで、3x4x5 のような立体ペントミノが得られるので、本記事では立体ペントミノにも対応したソルバーを示します。

### ソースコード
https://github.com/sense-n-react/PentominoSolvers/blob/main/solver-3D.rb

Ruby です。

### 実行
“`shell-session
$ ruby solver-3D.rb –size 3x4x5
“`
3x4x5 だけでなく 5x6x2 や 3x10x2 も指定できます。
Wikipedia に示されているようにそれぞれ 3,940、260, 12通りの解を表示します。
サイズを指定しなければ2次元(6×10)の解を表示します。

### 立体の表示
キャラクターベースで3次元表示は難しいので、下図のように表示しています。画面垂直方向に

Railsで利用しているsitemap_generatorのテストを書く

Railsで `sitemap_generator` gemを利用してサイトマップを生成しています。
https://github.com/kjvarga/sitemap_generator

そのテストを書く方法を記載します。

# 結論

`SitemapGenerator::Interpreter` を使います。
https://www.rubydoc.info/gems/airblade-sitemap_generator/0.3.5/SitemapGenerator/Interpreter

`SitemapGenerator::Interpreter.run` でXMLファイルを生成します。
それを読み込み、期待するURLが含まれているか検証します。

# 検証用Repo

下記で検証をしていますので、詳細が気になる方はご参照ください。
https://github.com/yuya-yuzen/test-sitemap-generator-spec

# 1. sitemap_generatorを導入する

## 1-1. Gemfileに追加

“`:Gemfile

書籍「AWSではじめるインフラ構築入門」 サンプルアプリに関するメモ

## はじめに
[「AWSではじめるインフラ構築入門 第2版」(翔泳社)](https://www.amazon.co.jp/AWS%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E5%AE%89%E5%85%A8%E3%81%A7%E5%A0%85%E7%89%A2%E3%81%AA%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E6%96%B9-%E4%B8%AD%E5%9E%A3-%E5%81%A5%E5%BF%97/dp/4798178004)を購入して、AWSでのインフラ構築を実践的に学習した。
第1章から順に読み進めたが、第13章「サンプルアプリを動かしてみよう」でいくつか問題が発生したので記事にまとめる。
私は、インフラ、AWS、Webアプリ開発の技

ペントミノ・ソルバーのアルゴリズム

# はじめに
この記事

https://qiita.com/sense_n_react/items/0875e969626c1892b60a

で紹介したプログラムのアルゴリズムを説明します。
個人的にはいろんな言語の中で *Ruby* が一番シンプルだと感じていてるので、*Ruby* 版のソルバー([solver.rb](https://github.com/sense-n-react/PentominoSolvers/blob/main/solver.rb))を例示しながらアルゴリズムを説明して行きます。

# 戦略
0. 全ての可能性を試す
**全てのピース**の**全ての姿勢**の組合せを再帰呼び出しによるバックトラッキングで試して行きます。

0. 左上から敷き詰める
左上を起点として、右方向に空きエリアを探します。空きがなければ1列下の左端から右端に向かって空きを探します。空きが見つかればそこに配置します。

0. 対称性の排除
6×10 のペントミノは2,339通りの解がありますが、盤面を左右反転や上下反転した場合の解を考慮せずに探索すると4倍の 9,356 通りが見

{{macro_list}}

hello_world
Sample macro.
macro_list
Displays a list of all available macros, including description if available.
child_pages
Displays a list of child pages. With no argument, it displays the child pages of the current wiki page. Examples:

{{child_pages}} -- can be used from a wiki page only
{{child_pages(depth=2)}} -- display 2 levels nesting only
{{child_pages(Foo)}} -- lists all

Ruby on Railsのyaml.h not found解決方法(Windows11)

# STEP 0
基本的なインストールは、こちらの記事を参考に

https://qiita.com/tks_00/items/711a022c6234fc495724

ただ、新規プロジェクト作成時にyaml.hが無いというような以下のようなエラーが出たので修正
~~~
C:/Ruby32-x64/lib/ruby/site_ruby/3.2.0/bundler/installer/parallel_installer.rb:123:in
`block in worker_pool'
C:/Ruby32-x64/lib/ruby/site_ruby/3.2.0/bundler/worker.rb:62:in `apply_func'
C:/Ruby32-x64/lib/ruby/site_ruby/3.2.0/bundler/worker.rb:57:in `block in
process_queue'
C:/Ruby32-x64/lib/ruby/site_ruby/3.2.0/bundler/worker.rb:54:in `loop'
C:/Ruby32-x64/

Rails 7.1 で render_to_string の仕様が変わった

Rails 7.1 で,render_to_string の仕様が変わったらしい。
そのために,自作アプリで〈rubyXL で Excel データを生成してダウンロード〉という機能がおかしくなって困ったが,最終的に直せた,という話。

なお,Rails のコードを調べたわけではなく,実験によって得た知見なので,少し間違っているかもしれない。誤りに気づかれた方はご指摘いただけると助かります。

各種バージョンは以下のとおり

* ruby 3.3.1 (2024-04-23 revision c56cd86388) [arm64-darwin23]
* Rails 7.1.3.2
* rubyXL 3.4.27
* stringio 3.1.0

(トラブルが起こらなかった Rails バージョンとしては,7.0.8.1 や 6.1.7.7 など)

# はじめに

Rails アプリで,CSV だの Excel だの PDF だのを動的に生成して返す(ダウンロードさせる),ということはよくある。
コントローラーでは `send_data` メソッドにそういったデータを渡してやればいい。

バージョン指定して特定のマイグレーションファイルを削除する、ついでにNO FILEのマイグレーションファイルも消す

# はじめに
あんまりつかうことがないので忘れがちなマイグレーションファイルの削除について....

## statusでみる

```
& bundle exec rails db:migrate:status
```

```
up 202312250xxxx Delete hoge
up 202401091xxxxx Add hoges
up 20240207xxxxxx Change hoge body
up 2024030xxxxxxx Add hoge messsage
```

## 消す
```
up 202312250xxxx Delete hoge
up 202401091xxxxx Add hoges // これを消す
up 20240207xxxxxx Change hoge body
up 2024030xxxxxxx Add hoge messsage
```

downする
```
$ bundle exec rails db:down VERSION=202401091xxxxx

GraphQL Rubyでfieldを共通利用したい

graphql-rubyを利用する際、複数のObjectで同一のfieldを共通利用したくなりました。
下記手順で、Interfaceを利用して実現できました。

1. BaseInterfaceを定義する
2. 共通利用したいfieldをまとめたInterfaceを定義する
3. fieldを定義するObjectでInterfaceをimplementsする

なお公式ドキュメントは下記です。詳細はこちらをご参照ください。
https://graphql-ruby.org/type_definitions/interfaces

# 0. Interfaceとは

> Interfaces are lists of fields which may be implemented by object types.

Interfaceとは、Objectによって実装することができるfieldのリストです。

# 1. BaseInterfaceを定義する

これから定義するInterfaceにおいて、その基底となるBaseInterfaceを定義します。

```ruby:types/b

ruby-install failed :error: use of undeclared identifier 'RSA_SSLV23_PADDING'

### ruby-install failed :error: use of undeclared identifier 'RSA_SSLV23_PADDING'

```
$ ruby-install 2.7.4
(省略)
ossl_pkey_rsa.c:942:5: error: use of undeclared identifier 'RSA_SSLV23_PADDING'
DefRSAConst(SSLV23_PADDING);
^
ossl_pkey_rsa.c:877:58: note: expanded from macro 'DefRSAConst'
#define DefRSAConst(x) rb_define_const(cRSA, #x, INT2NUM(RSA_##x))
^
:160:1: note: expanded from here
RSA_SSLV23_PADDING
^
115 warn