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

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

【チェリー本】steep checkで”Ruby::UnknownConstant”というエラーが発生する場合の対処法

## 発生する問題
拙著「[プロを目指す人のためのRuby入門 改訂2版](https://gihyo.jp/book/2021/978-4-297-12437-3)(通称 チェリー本)」の13.10節の内容に従ってコードを書いていくと、”No type error detected.?”と表示されるはずの部分で、エラー(warning)が出力される場合があります。

### 書籍の記述

“`
$ steep check
# Type checking files:

…………………………………………………..

No type error detected.?
“`

### 発生するエラー

“`
$ steep check
# Type checking files:

……………………………………………………………………..F..

test/fizz_buzz

元記事を表示

Rubyのオブジェクト・メソッド・インスタンス・変数についてまとめてみた

## オブジェクトについて

### オブジェクトとは
Rubyにおいてはクラスから生成されたもののこと。

### クラスについて
Hogeクラス、のようなクラスを定義したとする。RubyではこのクラスもClassクラスに所属しているオブジェクトである、というのが大きなスタート。
これはどういうことかと言うと、HogeクラスというものがあったとするとこのHogeクラスも実際は`Class.new`して作られている、オブジェクトである、ということ。
下記の意味は`Hoge=Class.new`と同意義である。
“`ruby
class Hoge
end
“`

### インスタンスオブジェクト(インスタンス)
クラスから生成されるのがインスタンスオブジェクト(インスタンス)。
`クラス名.new`で生成することができる。
RailsにおけるモデルはClassクラスからインスタンスを生成し、定数を与えていると言える。
コントローラーも同様。

### レシーバーとは
メソッドの戻り値を受ける対象
下記の場合、Personがレシーバー。オブジェクトの世界ではオブジェクトにメッセージを送

元記事を表示

変更に強いコードを設計する(DIパターン)

# 初めに
適切に設計されたオブジェクトは単一責任になっているので実際のアプリケーションでは複数のオブジェクトを組み合わせて仕事をしています。あるクラスから他のクラスを呼び出したり、モジュールをインクルードしたり。そうすることで相互に依存が発生します。依存が発生すること自体は避けられませんが、依存の方法を管理することで変更に強いコードにすることが可能です。

管理しやすいコード、変更に強いコードを書けるようになりたくてオブジェクト指向について学習しています。
学んだことをまとめます。

## 依存関係があるとはどんな状態か

オブジェクトが以下について知っているときは依存関係がある状態です。
1. **他のクラスの名前**
1. **self以外に送ろうとしているメッセージ(メソッド)の名前**
1. **メッセージが要求する引数**
1. **そのメッセージが要求する引数の順番**

コード例
“`ruby
class Gear
def initialize
end

def gear_inches
ratio * Wheel.new(rim, tire).d

元記事を表示

Python,Ruby,PHP,Java,JavaScript,PerlのSQLiteの比較

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

Python,Ruby,PHP,Java,JavaScript,PerlのSQLiteの比較

# Python

https://qiita.com/flcn-x/items/69481d31211421e21f21

# Ruby

https://qiita.com/akito_tameto/items/868e3805dc01c7bef6ef

# PHP

https://qiita.com/39_isao/items/a5b4940138bced936de0

# Java

https://qiita.com/tsweblabo/items/39bdd73a910417a9a8df

# JavaScript

https://qiita.com/zaburo/items/a155cbc02832b501a8dd

# Perl

https://perlzemi.com/blog/20

元記事を表示

MYSYS2のインストールできないとき

# MYSYS2のインストールで困った話
rubyの環境構築中にMYSYS2をインストールしようとした際に以下のエラーが発生しました

“`
_____ _ _____ _ _ _ ___
| __ \ | | |_ _| | | | | | |__ \
| |__) | _| |__ _ _ | | _ __ ___| |_ __ _| | | ___ _ __ ) |
| _ / | | | ‘_ \| | | | | | | ‘_ \/ __| __/ _` | | |/ _ \ ‘__/ /
| | \ \ |_| | |_) | |_| |_| |_| | | \__ \ || (_| | | | __/ | / /_
|_| \_\__,_|_.__/ \__, |_____|_| |_|___/\__\__,_|_|_|\___|_||____|
__/

元記事を表示

ActiveRecordのトランザクションを理解する

Railsのトランザクションについて理解が曖昧だったため調べてみました。トランザクションって何?という方から、トランザクションについて知ってるつもりな方まで読んでいただけると幸いです。

## この記事の目的
– トランザクションを理解する
– Ruby on RailsのActive Recordでのトランザクションの使い方を理解する

## トランザクションとは?
トランザクションとは、複数のSQL文によるデータの更新を「1つの処理」とし、全てのSQLの実行が成功した時にデータベースに更新分を反映させることです。データベースの整合性を保つ目的があります。

基本的に、複数のSQLを同時に実行する際はトランザクションを使う必要があります。

### トランザクションの使用例
代表的なトランザクションの使用例は、銀行での取引です。

カエル?さんがクマ?さんに2万円送金するとします。?さんは日本におり、?さんはロンドンにいます。その際のデータベースの処理は下記のようになります。

1. ?さんの銀行口座に2万円の残高があるか確認する
1. ?さんの銀行口座から2万円を引き落とす
1.

元記事を表示

一覧ページの読み込みが重たい問題について

初めに

ポートフォリオテーマとして業者のレビューサイトを作成しています。
以下の画像のようなレビューサイトを作っていこうと思います。

![top画面1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822721/75cffe6d-1714-fc3c-9ad8-068addf06205.png)

※自分用でまとめてますので、分かり辛かったらすいません。
また理解不足・誤りがあったらコメント頂けますと幸いです。m(__)m<ヨロシクオネガイシマス ### 発生している問題・エラー ・先程の画像のように、`一覧ページ(画像を扱っているページ限定)`を開こうとしたとき読み込みが重たくなる現象が発生  ※問題なく表示されるパターンもあれば、タイムアウトや以下のエラーが発生する時もありました。 イメージ画像 ![activerecode-errore.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2

元記事を表示

Rustでmrubyを呼んで見るライブラリminutus

# 目的
Rustでプログラム実行中に後から渡されるプログラムを実行したいです。プラグインみたいな感じです。
Rustだけで実現するのは難しいので(wasmあたりを使うとできるという噂もありますが)、他のプログラム言語を利用します。
ここではRubyを使います。

Rubyを使うものは当然Rubyがインストールされている必要があり、シングルバイナリで実行できないのが難点です。
そこでmrubyを使うことになるんですが、以前からあったものは古いmrubyしか対応していなくて微妙でした。
今回利用するminutusというライブラリは最新のmrubyをサポートしていて、mrubyの知識があまりなくてもサクッと利用できるのがよかったです。
開発の意図などは作者のブログを参考にしてください。[Minutus という mruby の Rust バインディングを作った](https://dawn.hateblo.jp/entry/2022/08/14/202458)

## コードの目的
Rubyのコードでは以下の2点を確認しました。

* 引数を渡せる
* HTTP通信ができる

# コード

元記事を表示

Ruby + Google Vision API で画像の色合い(RGB)を得る

# コード

“`rb
require “google/cloud/vision”

IMAGE_ANNOTATOR = Google::Cloud::Vision.image_annotator

image_path = “https://cloud.google.com/static/vision/docs/images/bali_small.jpeg?hl=ja”

response = IMAGE_ANNOTATOR.image_properties_detection(
image: image_path,
max_results: 100
)

response.responses.each do |res|
res.image_properties_annotation.dominant_colors.colors.each do |color|
red = color.color.red.round
blue = color.color.blue.round
green = color.color.green.round

元記事を表示

フォームに名前を入力するとPDF化された印鑑を出力するアプリを作ろう②(PrawnによるPDFファイルのカスタム)

# 初めに
この記事は`フォームに名前を入力するとPDF化された印鑑を出力するアプリを作ろう`の後半です。
[フォームに名前を入力するとPDF化された印鑑を出力するアプリを作ろう①(Ruby on RailsでPDFファイルを作成)](https://qiita.com/eityamo/items/ff327fec918d882e25f6)

前回まででPDFファイルを出力するところまで実装できました。今回はPrawnのGemによる基本的なカスタム方法について説明していきます。

# PrawnによるPDFのカスタム
Prawnの基本機能は`Text`、`Graphics`、`Bounding Box`の3つです。
それぞれについて説明しながら印鑑を実装していきます。

実装する準備としてPDFに座標を表示します。

“`ruby:stamp_pdf.rb
class StampPdf < Prawn::Document def initialize(user) super(page_size: 'A4') # 座標を表示 stroke_axis

元記事を表示

フォームに名前を入力するとPDF化された印鑑を出力するアプリを作ろう①(Ruby on RailsでPDFファイルを作成)

# はじめに
こんにちは!えいちゃもと申します。
今回、Ruby on RailsでPDF化を実装した際にPrawnというgemを使ったのでまとめました。
この記事を読むことで`フォームに名前を入力するとPDF化された印鑑を出力するアプリ`を作成することができます。
初学者の私でもできたので実装方法は簡単です。
仕事でよく使う?技術だと思うので、参考になれば嬉しいです。

PDF化の技術を使うと下のようなアプリを作成することもできます
[反抗期届](https://www.hankouki-todoke.com/)
[Github](https://github.com/eityamo/hankouki)
反抗期を宣言する届出を簡単にPDF化することができるアプリです。
使っていただけると嬉しいです。

記事は2部構成です。前半ではPDF出力を行い、後半でPrawnというGemの使い方を説明しています。

[フォームに名前を入力するとPDF化された印鑑を出力するアプリを作ろう②(PrawnによるPDFファイルのカスタム)](https://qiita.com/eityamo/items

元記事を表示

to_iの挙動を確認する

## 環境
Ruby2.6

## はじめに
to_iは文字列を数値型(Integer)に変換するメソッドです。to_iの変数にイレギュラーな値がセットされた場合、どのような挙動を示すのか、動作確認してみました。

## 動作確認
– 元々数値である変数にto_iしても、元の木阿弥です。
– プラマイ符号がある場合は、プラマイ符号が取れます。
– float型の文字列に対してto_iした場合は、小数点以下が取れます。

“`test.rb
puts “123”.to_i # => 123
puts 123.to_i # => 123
puts “-123”.to_i # => -123
puts “-0”.to_i # => 0
puts “+123”.to_i # => 123
puts “123.0”.to_i # => 123
puts “123.9”.to_i # => 123
puts “0.5”.to_i # => 0
“`

– このような変数は0

元記事を表示

Python,Ruby,PHP,Java,JavaScript,PerlのC言語拡張の比較

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

Python,Ruby,PHP,Java,JavaScript,PerlのC言語拡張の比較

# Python

https://qiita.com/pocokhc/items/836a3596df5facd00824https://qiita.com/nabion/items/594fb3316583130a636e

# Ruby

https://qiita.com/suketa/items/ab6b88093de4a54b3b06

# PHP

https://qiita.com/takeyoshi-k/items/2a993eefbe06be047eff

# Java

https://qiita.com/tobita_yoshiki/items/0400f7e393fc0ba2d0cb

# JavaScript

https://qiita.com/mokomium/items/57

元記事を表示

Ruby 2.6、Rails 5.2 からの Ruby 3、Rails 7 へのバージョンアップ

Herokuで稼働させていたRailsアプリケーションが `Heroku-18` のEOLを間近に控えてバージョンアップを余儀なくされたので対応内容を後世のために記しておきます。

## アプリケーションの構成概要
“`
Ruby: 2.6.3
Rails: 5.1.7

DB: PostgreSQL
開発環境: Mac、Windows
本番環境: Heroku (Heroku-18)
“`

なお、Railsは **APIモード** で実行しています。

“`
[config/application.rb]
config.api_only = true
“`

## 経緯
Herokuのstackの `Heroku-18` が来年の2023年5月1日でデプロイが行えなくなります。
当初は1つ上の `Heroku-20` への対応を検討していたのですが2年後にまた `Heroku-22` 対応するのはしんどいので一気に `Heroku-22` に上げることを検討しました。

## Heroku-22 に必要なもの
“`
Ruby: 3系 (デフォルトは3.1.x)
“`

元記事を表示

Rails コメント+星機能

皆さんこんにちわ!!

今日もプログラミングしていますか?:point_up:

今回は詳細ページにコメント星機能をつけていく機能を紹介します!!

注意:大前提としていいね機能を実装していないと実装できません!!:sunny:

![スクリーンショット (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738887/35e479f8-8aed-90ec-d256-c50979d5b2ae.png)

Step1:星機能(詳細ページ用)の中間テーブルとアソシエーションを組む!!!

“`ruby:.ターミナル
rails g model Review eve:integer content:string user:references tweet:references

rails db:migrate
“`

Step2:userとtweetのモデルにアソシエーションの情報を打ち込む!!!

“`ruby:app/models/user.

元記事を表示

ZabbixとOxidizedを連携させてみた

# はじめに
ネットワーク機器のコンフィグ管理ツール[Oxidized](https://github.com/ytti/oxidized)を使っていますが、管理対象となる機器の情報は[予め用意](https://github.com/ytti/oxidized/blob/master/docs/Sources.md)される、CSV・HTTP・SQLの何れかで定義しておく必要があります。
機器の情報を多重管理するのに嫌気が差してきたので、機器の情報をZabbixに登録して、OxidizedからZabbixに機器の情報を問い合わせることができれば幸せになれそうなのでやってみました。

# 環境

– Zabbix 6.2.3 on Docker
– Oxidized v0.28.0 on Docker

# やること

![g3285.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580974/66da07ba-3868-b0cd-8462-c1ed4b1c6702.png)

+ Zabbixのマクロ

元記事を表示

LoadError (cannot load such file — sassc)

Railsでscssを適用しようとしたらLoadError (cannot load such file — sassc)

“`ruby:application.html.erb
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
“`

上記記載後、ブラウザで

cannot load such file — sassc

のエラーとなった。

原因

gemfile 中の gem “sassc-rails” がRails Ver7からはコメントアウトされており、インストール時に適用されないとのこと。

コメントアウト解除後、bundle install により無事解決

元記事を表示

【Rails】I18n#lで日付のフォーマットを定義しよう

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## 日付のフォーマットを定義

“`config/locales/ja.yml
ja:
date:
formats:
default: “%Y.%m.%d”
long: “%Y年%m月%d日”
short: “%m月%d日”
time:
formats:
default: “%Y/%m/%d %H:%M:%S”
long: “%Y年%m月%d日(%a) %H時%M分%S秒 %z”
short: “%y/%m/%d %H:%M”
date_long: “%Y年%m月%d日”
date_short: “%m月%d日”
datetime: “%Y.%m.%d %H時%M分”
only_time: “%H:%M”
“`
デフォルトの形は引数の指定なし、それ以外は第2引数を指定するとデフォルト以外のフォーマットに変換できる。

“`ruby
I18n.l

元記事を表示

Ruby + GCP Vision API で画像の種類(ラベル)を取得する

# 準備

“`
gem install google/cloud/vision
“`

# コード

“`rb

require “google/cloud/vision”

image_path = ‘gs://cloud-samples-data/vision/label/setagaya.jpeg’

image_annotator = Google::Cloud::Vision.image_annotator

response = image_annotator.label_detection(
image: image_path,
max_results: 10 # optional, defaults to 10
)

response.responses.each do |res|
res.label_annotations.each do |label|
puts label.description
end
end
“`

# 画像

imageincludeとextendの違いについて

## 環境
Ruby 2.6

## はじめに
includeとextendの使い方については、Rubyの文法書を読めばたいてい書いてありますが、簡単に言えば次のようになります。

モジュールに記述したメソッドをクラスに取り込む際に、

– クラスメソッドとして取り込む場合(つまり、取り込むクラスがクラスメソッドとして定義している場合)は、extendを使って取り込みます。

– インスタンスメソッドとして取り込みたい場合(つまり、取り込むクラスがインスタンスメソッドとして定義している場合)は、includeを使って取り込みます。

文法書を読めば、「なるほど、それだけの話か」だけで終わってしまいますが、一応、手を動かして動作を確認してみないと、本当に理解したことにはなっていないものです。プログラミングは頭だけで理解するのでなく、手を動かして体で理解することが何よりも大事だと思っています。ということで、includeとextendの違いを実際に動かして確認してみましょう。

## 動作確認(その1)

つぎのようなモジュールを作成します。
“`test.rb
module Test_

元記事を表示

OTHERカテゴリの最新記事