Ruby関連のことを調べてみた2023年07月23日

Ruby関連のことを調べてみた2023年07月23日

Runa: Ruby で中規模アプリケーションを書くためのフレームワーク

src: [ブログのおんがえし](https://ongaeshi.hatenablog.com/entry/2023/07/23/113420)

[Runa](https://github.com/ongaeshi/runa) という Ruby で Gem を使ったり複数ファイルで構成された中規模のアプリケーションを簡単に書くためのフレームワークを作っています。

# Runa を作った経緯
– Ruby は単独のスクリプトファイルとして実行するときは取り回しも簡単で大変使いやすい(小規模アプリケーション)
– が、特定の gem に依存したり複数ファイルで構成されるようなアプリケーションを作ろうとするとスタンダードな方法が用意されておらず(特に配布や共有のことを考えると)敷居が高くなってしまう(中規模アプリケーション)
– これが今まで余り問題にならなかったのは、Web アプリであれば Rails を使えばフレームワークがその辺りを内包してくれたり、コンソールアプリケーションなら gem で配布するみたいな方法でやりくりしてきた経緯がある。しかし gem で配布するには Ruby

元記事を表示

コードの原則をリスト化してみた(追記予定)

いいコード悪いコードを読んで、重要そうな項目を抜粋してみました。まだ数章読めていい無いので今後追記していきます。
“`
* 省略せずに意図が伝わる名前を設計しているか
* 変数を使い回していないか
* 目的ごとの変数を用意しているか
* 意味のあるまとまりでメソッド化しているか
* 関係しあうデータとロジックをクラスにまとめているか
* コンストラクタで確実に正常値を設定しているか
* 変更したい場合は新しいインスタンスを作成しているか
* 引数に渡せる型を限定しているか
* 再代入していないか
* デフォルトは不変にしているか
* 条件分岐を一箇所にまとめているか
* フラグ引数やinteger引数を使っていないか
* パッとみて、何をするメソッドが想像がつくか
* メソッドが単機能で分離されているか
* 標準ライブラリに同じような機能のメソッドはないか
* 早期nextで条件分岐のネストを解消できないか
* 早期breakで条件分岐のネストを解消できないか
* デッドコードは消えているか
* YAGNI原則に則っているか
* マジックナンバーは避けて、定数化しているか
* nul

元記事を表示

いいコード悪いコードまとめ7章 コレクション〜ネストを解消する構造化技法〜

# 標準ライブラリに同じような機能のメソッドはないか
実は便利なメソッドがあったのに存在を知らずに自分で書いてしまった!なんてことは誰しも経験したことがあるのではないでしょうか。そうならないためにも、一度調べてみてから、なければ自分で書く癖をつけたいですねー。

# 早期nextで条件分岐のネストを解消できないか
例えば、以下のように多重分岐している場合、これは早期nextで解消できるかもしれません。
“`
number = 5

if number == 1
puts “number is 1”
elsif number == 2
puts “number is 2”
elsif number == 3
puts “number is 3”
elsif number == 4
puts “number is 4”
elsif number == 5
puts “number is 5”
end
“`
以下のように書くとスッキリですね。
“`
number = 5

next if number == 1
next if number == 2
next if

元記事を表示

floatやらdecimalやら倍数不動小数点やら

# floatやらdecimalやらで沼にハマったので忘備録
なんかfloatって便利そうだから使ったらいいかなーという気楽な気持ちで使ったら面倒なことになりました。
もはや`float`の使い所がわからなくなった…

# floatだと精度が低い!
例えば、以下のような値をfloatした時に思っている挙動と違いました。

“`
1.111111111111111111222222222.floor(20)
=> 1.1111111111111112 #小数点以下が16桁しかない…
“`

他にも以下のような計算をしても誤差が出てしまいます。
“`
pry(main)> 1 – 0.9
=> 0.09999999999999998
pry(main)> 0.9.class
=> Float
“`

これらはfloat型であることに起因しています。

理由は以下の説明の通り。
“`
Rubyにおいて、浮動小数点数の精度は倍精度浮動小数点数(double-precision floating point)によって制御されます。この倍精度浮動小数点数は通常64ビットで表現さ

元記事を表示

Railチュートリアル4章まとめ

# 目的
3章までで扱ったRailsにおいて重要となる
Rubyのさまざまな要素について理解する。

# 4.1.1 組み込みヘルパー
“`
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
“`
上記のソースではRubyの概念が4つある。
Railsの組み込み関数、カッコを使わないメソッド呼び出し、シンボル、ハッシュ

# 4.1.2 カスタムヘルパー
新しく作った組み込み関数をカスタムヘルパーと呼ぶ

例として下記コードでは問題点がある
問題点:タイトルが空だと | Ruby on Rails Tutorial Sample Appと先頭に余計な|がつく。
このページタイトルが正しく表示されない問題を解決するためにヘルパーを作成する。

“`
<%= yield(:title) %> | Ruby on Rails Tutorial Sample App
<% provide(:title, "Home") %>

Sample App

元記事を表示

プログラミング学習に不安を感じている初学者さんへ

今回はたくさんの人に支えられながらプログラミングを半年やってきた僕が、初学者さんへ向けて、モチベーションなどを少しでも上げてもらえればいいなと思い記事を書かせていただくことにしました!
 
この記事はプログラミング学習等に不安を感じている方向けですので、不安なんて感じてないよって方は回れ右で大丈夫です。
 

果たしてどれだけの初学者さんがQiitaを読んでいるかは分かりませんが、少しでも多くの方に役に立っていただければと思います。
 

いくつか章があるので気になったところだけ読んでください。
 

## ここで簡単な自己紹介

* プログラミングをやりだして半年ほど経ちました。
* HTML, CSS, Ruby, Pythonをやっています。どれも好きです。
* 開発が大好きで、自分が欲しくなった機能などを作ったりしています。
* たくさんの方に支えられてここまで来ました。ありがとうございます。

では、そろそろ始めます。
 
めっっっちゃ緩いお話なのでリラックスしていきましょう!GOGO

## プログラミングはマジ余裕

もしこの円卓会議に参加している者の中に魔王

元記事を表示

mosaic: ベクトルタイルを再構築するための Rubyコマンド(構想)

## イントロダクション

モダンなウェブ地図における地理空間情報技術は、私たちの生活に欠かせないものとなりました。しかし、その背後には複雑なデータ構造や最適化が隠されており、地図の開発者にとっては取り扱いが難しい課題となっています。そこで、国連スマート地図グループの実践共同体である、私たちスマート地図道場は、ウェブ地図の地理空間情報技術のオープンな普及を目指し、新たな可能性を切り拓くツール「mosaic」を提案します。

### スマート地図道場の理念

スマート地図道場は、地理空間技術のオープンな発展を見据えています。共同体の成長を意識したうえで、従来の枠に囚われず、革新的なアイデアや手法を追求することを技術者に奨励します。また、地図の普及を通じて社会に貢献することを志し、地理空間情報技術を明確でわかりやすく情熱的に説明することで、他の参加者が共同体に参加し、共有されたビジョンに参画しやすくなることを目指します。

### mosaicの役割と目的

mosaicは、ベクトルタイルを再構築することに貢献することを目指したRubyコマンドラインツールです。ベクトルタイルは、地理情報を

元記事を表示

Tapioca の DSL compiler のしくみ

最近、Ruby の型チェッカーである [Sorbet](https://sorbet.org/) とその周辺ツールの [Tapioca](https://github.com/Shopify/tapioca) を色々試してみています。

Tapioca は型定義 (RBI) に関することを色々やってくれるツールで、[RBI 版 DefinitelyTyped](https://github.com/Shopify/rbi-central) から RBI を取得してくれる他、 Rails や他の DSL に対応した RBI を生成してくれたり、 gem から RBI を生成してくれるなど、 RBI に関することを本当に色々やってくれます。(他にも色々機能があります)

…ここで気になるのが、 Tapioca が DSL から RBI を生成する部分です。この記事では、 Tapioca のコードなどに目を通しながら、どのようにして RBI を生成しているのかを整理してみました。

## Tapioca の DSL compiler のしくみ

Tapioca が DSL から 型定義を生

元記事を表示

自作Brainf*ckインタプリタを使ってAtCoderをBrainf*ckで解く

この記事は [この記事誰得? 私しか得しないニッチな技術で記事投稿! – Qiita](https://qiita.com/official-events/5d4f04cf2ba0cdbc8821) の参加記事です。

https://qiita.com/official-events/5d4f04cf2ba0cdbc8821

## はじめに

記事のネタに困っており、ネタ探しをしていたら

https://qiita.com/OribeYasuna/items/430e8755040433c36a47

の記事を見つけ、

**自作のBrainf\*ckインタプリタを使ってAtcoderの問題をBrainf\*ckで解こう!**

と思ってしまいました。
ここまできたらやるしかない(?)と思い、実際にやってみたので紹介します。

## 作戦

AtCoderでは、

– Bashで問題を解くことができる
– 環境にRubyがインストールされている様

なので、

1. RubyでBrainf*ckインタプリタをつくる
2. Bashスクリプト内でRubyでつくったBrainf*ck

元記事を表示

顧客マイページ作成

### はじめに
bootstrap導入済 
namespases使用
devaice導入済
新規顧客登録機能実装済
_______
完成イメージ
![スクリーンショット 2023-07-21 23.31.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492906/26ea119d-dcb0-24fc-d089-ce29fff3f0c2.png)

### ルーティング
“`routes.rb
namespace :public do
resources :customers, only: [:show, :edit, :update]
end
“`
### コントローラー
public/customers_controller作成
“`
rails g controller public/customers show edit update
“`
“`public/costomers_contoroller.rb
class Public::CustomersControlle

元記事を表示

git clone でリポを複製して開発準備を整えた話

今回既存のリモートリポジトリをクローンして、

名前を変更して開発を進めるようになりました。

久々にcloneを行うので、忘れていた内容などもあり改めて初学者の自分向けにまとめてみようと思います。

# git clone でリモートリポジトリを複製

“`bash
$ git clone URL
“`

まず上記のコマンドでURLへ任意のリポジトリのリンクを貼ります。

ここで行われるのは、

リモートリポジトリの内容を一度ローカルへ保存する、というのが水面下で動いているイメージです。

早速、指定したURLのリモートリポジトリがローカルへ複製できるかチャレンジしてみます。

## リモートからローカルへの複製

今回はクローンしたいリポジトリのパスを、複製後は【rails_ec】というディレクトリ名で保存したいので、任意のディレクトリに移動してコマンドを実行します。

“`bash
$ git clone [URL] [ディレクトリ名]
“`

コマンドを実行し、ターミナルでlsコマンドで確認したところ

“`bash
$ ls
=> DB2 README.md

元記事を表示

RailsでECサイト作成の練習をするなり。その1

自分は、実務経験1年なので誤った箇所やアドバイスを優しく教えていただけるとありがたいです。また、業務では行政系やっていたので細かいところは勘弁してください。
(※Rails7系は、初触りなので他の情報があったらそっち参考にしてください!)

# 大まかな設計
## 画面
– トップページ
– 新規登録ページ
– ログインページ
– マスタページ(出品者画面)
– 商品一覧ページ
– 商品詳細ページ
## 機能
– 新規登録
– ログイン
– メール認証
– 商品登録
– 購入手続き

## データベース
– ユーザーの情報
– 商品情報
(細かいところは下で…)

ここらで終了。他は、新規機能追加みたいな感じで進めていきます!

# 環境
– Ruby 3.0.0
– Rails 7.0.6
– PostgreSQL 14.8
(自分はM1のMacBook使ってます。コマンドがうまく動かない時は、自分の環境に合わせたコマンドを叩いてください!)
Windowsの民は、WSLをおすすめします!Windows上でLinux使えます!(自分はUbuntu使っていました。)

# Rai

元記事を表示

管理者側 顧客情報編集ページ

:cherry_blossom:はじめに
bootstrap導入済 
namespases使用
devaice導入済
顧客一覧ページ作成済
顧客情報詳細ページ作成済
Admin::CustomersController作成済
_________
:tangerine: 完成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492906/a6b107f0-8c01-a60e-8eea-5c986c7f2742.png)

### :shamrock: ルーティング
**edit** と **updata** を追加する
“`routes.rb
resources:customers, only: [:index, :show, :edit, :update]
“`
### :shamrock: コントローラー
“`admin/costomers_controller.rb
class Admin::CustomersController < ApplicationContro

元記事を表示

Railsアプリケーションで利用しているMySQLのテーブル情報から、BigQueryのためのスキーマを作ってみる

Mysqlにあるデータの一部を分析のために、BigQueryなどのデータウェアハウスに移す、というのはよくあるケースだと思います。
その際、BigQueryだとテーブルを作る際に下記のようなテーブルのスキーマ定義が必要になります。

“`json
[
{
“name”: “id”,
“type”: “integer”,
“mode”: “required”
},
{
“name”: “title”,
“type”: “string”,
“mode”: “required”
}
]
“`

スキーマ定義は各カラムの名前(name)、データ型(type)、nullを許可するかなどのモード(mode)の3情報の集合で、MySQLからデータを移す場合は、対応する3つを入れてあげればよさそうです。
今回はRailsアプリケーションの場合簡単なスクリプトを書いて、あるテーブルの全カラムのスキーマを自動生成してみます。

## テーブル情報の取り出し方
まず、テーブルのカラムの情報が欲しい場合、下記の1行でまとめて取り出すことができ

元記事を表示

【html.erb】Emmetを使いコードを楽に書く方法

html.erbファイルの実装を入力補完のプラグインを使って楽に書きましょう!

Ruby on RailsでのWebアプリケーション開発を行う際のビューに関する設定を備忘録としてメモしておきます。

# htmlのコード実装で入力補完してくれるEmmet
htmlファイルのコードを記述する際、これまで入力補完による楽な記述ができていました。

ですが、Ruby on RailsでのWebアプリケーション開発を行う際、html.erbという拡張子のファイルを作成する際には、入力補完が機能しないことに気づきました。

そんな時はEmmetというプラグインの設定をいじることで解決できます。

# Emmetとは?
Emmetとは、HTMLやCSSを省略記法で入力できるプラグインのことを言います。

# 省略コードの書き方

箇条書きリストのタグを入力したい場合、このような感じで省略コードを書きます。

### 箇条書きリスト

“`ruby:html.erb
ul>li*10
“`
このように入力してEnterを押すと、以下のように補完して自動的に入力してくれます。

“`c:h

元記事を表示

【Rails Rspec 備忘録】Failure/Error: 〇〇 expected: 1 got: 2

### はじめに
※rails初心者向けです。

Rspecでテストコードを書いていた時に、 Failure/Error: 〇〇 expected: 1 got: 2 に直面しました。
備忘録として解決法を残しておこうと思います。

### やりたかったこと
レコードが存在しない場合に新しくid=1のレコードを作成して保存するようなテストを書こうと思いました。

### 間違ったコード
createを2回しているため、エラーが起きた。
expect(テーブル名).exists?(1).to be(false)でレコードの中身をnilにして新しくcreateできると思ったが 、id = 2のレコードが作られてしまった。

“`ruby:hoge_spec.rb
describe `PUT /hoge/fuga` do
before do
@hoge = create(:hoge, 1)
end

context 〇〇 do
      it ‘レコードが存在しない場合新しくid=1のレコードを作成する’ do
expect(テーブル名)

元記事を表示

管理者側 顧客情報詳細ページ

**はじめに**
bootstrap導入済 
namespases使用
devaice導入済
顧客一覧ページ作成済
Admin::CustomersController作成済
__________
完成イメージ
### ルーティング
costomersに**show**、
編集ページのための**edit**
注文履歴一覧を表示するために**resources :orders, only: [:index]** を追加
“`diff_ruby
namespace :admin do
resources :customers, only: [:show, :edit, :update] do
+ resources :, only: [:index] # ここを追加
end
“`
### モデル

顧客が多数の注文を持っているようにします
顧客の注文履歴一覧を見るためです
“`costomer.rb
class Customer < ApplicationRecord has_many :orders end ``` ```order.rb class Orde

元記事を表示

ruby エラー集

# エラーと解決策の記録

## rbenv install ができない

– **環境**
– **Windows 11**
– **WSL 2**
– **ubuntu 22.04**
– **rbenv 1.2.0**
– ## **zlib 1.2.13をインストール**

“`zsh
$ cd /usr/local/src
$ sudo wget https://github.com/madler/zlib/releases/download/v1.2.13/zlib-1.2.13.tar.gz
$ sudo tar xvzf zlib-1.2.13.tar.gz
$ cd zlib-1.2.13
$ sudo ./configure
$ sudo make -j 8
$ sudo make install
“`
– **公式サイト : https://www.zlib.net/**
– **参考 : https://qiita.com/shadowhat/items/867d9e06bc42cf862b9a**

– ## **OpenS

元記事を表示

掲示板の検索機能

最近掲示板の検索機能の実装方法を学んだのでこちらにアウトプットしておきます。
# 検索機能の実装
検索バーを`ransack`というgemを使って実装していきます。
Ransackはデータベースから特定の条件に一致するレコードを探すための検索クエリを生成する機能を提供します。

#### 手順
①`ransack`のインストール
②コントローラーの編集
③viewの編集
④国際化(任意)

# ①`ransack`のインストール
Gemfileに以下のコードを記入
“`ruby:Gemfile
gem ‘ransack’
“`
“`
$ bundle install
“`

# ②コントローラーの編集
“`ruby:boards_controller.rb
#編集前
def index
@boards = Board.all.includes(:user).order(created_at: :desc).page(params[:page])
end
↓↓
def index
@q = Board.ransack(params[:q])
@boards =

元記事を表示

管理者側 顧客一覧ページ

### :shamrock: migrageファイル追加
まず、モデルに退会ステータスのためのフィールドを追加します。今回は、**boolean型** の**is_deleted**というカラムを追加することにします。
“`diff_ruby
t.boolean “is_deleted”, default: false
“`
:star:**boolean型 のis_deletedがなければ**
ターミナルで以下のコマンドを実行します
“`
rails generate migration add_is_deleted_to_customers is_deleted:boolean
rails db:migrate
“`
### :shamrock:コントローラー
“` abmin/customers.html.rb
class Admin::CustomersController < ApplicationController def index @customers = Customer.all end end ``` ### :shamrock:vi

元記事を表示

OTHERカテゴリの最新記事