Ruby関連のことを調べてみた2021年12月25日

Ruby関連のことを調べてみた2021年12月25日

rails7からhelperを使って生成されるtypeがhiddenのinputタグでautocomplete属性にoffが指定される様になった

# 概要

* `hidden_field_tag`
* hidden_field_for_checkbox

などの``を生成するヘルパーがあるのですが、これらを生成する時に強制的にautocomplete属性にoffが指定される様になりました。

“`ruby
# Before
$ hidden_field_tag ‘tags_list’
=> “

# After
$ hidden_field_tag ‘tags_list’
=> “
“`

# 詳細
Firefoxのバグでhidden fieldのautocompleteに意図しないランダムな値が入力される可能性があるとのこと。
例えばCSRF保護などrailsはたくさんhidden fieldを

元記事を表示

関数のまとめ

`puts`のように、関数のように見えるものもメソッドであるRubyに関数はないと思われると思いますが、Rubyには様々な関数があります。

## メソッド

### 定義

#### 定義

“`rb
def method(argument, &block)
end
“`

仮引数の直前に`&`があると、このメソッドに渡されているブロックがProcのオブジェクトとしてこの引数に格納されます。

“`rb
def block_class(&block)
block.class
end
“`

“`irb
irb> block_class {}
=> Proc
“`

Ruby 3.1では、`&`を渡すことで、ブロックを他のメソッドに渡せます。

“`rb
def method(&)
def another(&)
end
end
“`

#### 一行メソッド定義

Ruby 3から使えます。

“`rb
def square(x) = x * x
“`

#### 動的な定義

以下をメソッドにします。

* Method
* UnboundMethod

元記事を表示

RubyとRuby on Railsの違い[3行で要約]

#結論

“`
・Rubyはプログラム言語の一つ。(他にはJava,PHPなど)
・Ruby on Railsはフレームワークの一つであり、言語ではない
・プログラミング言語Rubyで作成されているので、Ruby on Railsという名前になっている。
“`

#Ruby on Railsとは
Webアプリケーションフレームワークの1つです。Railsとも呼ばれています。

###Webアプリケーションとは
ブラウザを介してクライアントにサービスを提供する

##Ruby on Rails 特徴

“`
・MVCアーキテクチャ
・DRY(Don’t Repeat Yourself)
・CoC(Convention over Configuration)
“`

###MVCアーキテクチャ
Model,View,Controller設計法に基づいて開発を行います。

###DRY(Don’t Repeat Yourself)
DRY原則とは、同じこと(ソースコード)を繰り返し記述するのは避けよ

###CoC(Convention over Configuration)
設定よ

元記事を表示

RedisのSorted Setsを使って同点の場合先勝ちにする

# 目的
RedisのSorted Setsを使うと点数を競うゲームなどでランキングを作ることができます。同点を同順位にするのは簡単に実装できるのですが、同点の人を先着順に点数をつけるとなると、一筋縄ではいきません。

ここでは
id : 人にそれぞれつくID
count : ゲームの点数
ustm : ゲームで点数を取った時のUnixTimestampのミリ秒
ranking : ランキングを保存するRedisのSortedSets
games : ユーザーの参加情報を保存するRedisのHash
とします。言語はRubyで書いてみます。

何度でも参加可能で参加したデータはRedisのHashに保存します。fieldはidでvalueは以下のようにします。参加するたびに配列の後に保存していきます。

“`json
{
count: [100, 200],
utsm: [1639001950000, 1639001951000],
}
“`

## SortedSets
RedisのSortedSetsはキーに対してscoreとmemberを登録します。memberは一

元記事を表示

点字翻訳機を作ってみたよ

# はじめに
初記事です。お手柔らかにヨロです。

本記事は、伊藤淳一氏主催の[アドベントカレンダー](https://qiita.com/advent-calendar/2021/ruby-challenge)に参加した記録です。

プログラムは[こちら](https://github.com/kyuki3rain/tenji-maker-challenge)

# 環境構築
面倒なので画像とか貼ってないけど、気が向けばおいおい貼る。
①VSCodeを起動すると、「gitリポジトリからのクローン」というメニューからcloneできる(初めて使った)

②左下の色がついた部分を押すと、「Reopen in Container」と出てくるので、ここからruby -> 3-bullseyeのように進めると、ruby3.0環境もゲットできる

③上の設定中にgitをインストールしておけば、そのコンテナのターミナルからgit pushするだけで更新も可能

VSCodeは便利だなあ。ということで本編行きます。

# 調査
せっかくなのでなるべくプログラミングらしい解決をしたい。

まずはサイトを

元記事を表示

rurubyのガベージコレクタとアロケータ

この記事は[言語実装AdventCalendar 2021](https://qiita.com/advent-calendar/2021/lang_dev)の24日目の記事です。

## rurubyって何

rurubyは、かれこれ2年ほどRustでチマチマ書いているRuby処理系です。一応CRuby[^1] 3.0互換を目指していて、構成としてはCRubyと同じ仮想マシン(VM)インタプリタです。現在の状況としては、Ruby2.7の文法はおおむねカバーしており基本的な組み込みクラスやメソッドも実装していますが、完全ではありません。Rubyで書かれたライブラリもある程度動きますが、rurubyはまだC拡張をサポートしていないため、全く動かないものもまだまだ多くあります。

[rurubyのGitHubレポジトリ](https://github.com/sisshiki1969/ruruby)

[^1]: Rubyの処理系は数多くあり、その中でまつもとゆきひろさんが作った最初のRuby処理系を(C言語で書かれているので)CRubyと呼ぶ。

### 1年の進捗

昨年のAdvent

元記事を表示

Dockerで実装しているテーブルの内容をターミナルで確認する方法(rails)

# 備忘録として
Dockerを使ってrailsのアプリケーション実装をしている時に、
テーブルの更新内容を確認したくなったので調べた内容を記録しています。

#方法
“`
% docker-compose run web rails db
“`
上記のコマンドを入力すると
ターミナルに下記内容が表示されます

“`
psql (13.5 (Debian 13.5-0+deb11u1), server 14.1 (Debian 14.1-1.pgdg110+1))
WARNING: psql major version 13, server major version 14.
Some psql features might not work.
Type “help” for help.

○○_development=#
“`
#の後に

“`
\d テーブル名;
“`
と打てばテーブル詳細が表示されます。
__ex:__ “\d users;“
と入力すれば

“`

元記事を表示

mruby でもリファインメントを使いたい!!!

Rubyist の皆さんはリファインメント機能が好きですよね?僕も大好きです。

ですが残念なことに mruby では実装されておらず使えません。

まあ、実装されていないだけならば実装してみようと思い立ち、作業を始めてすでに3年ほどが経ったと思います。その作業途中で行き詰まって数ヶ月停滞することが何度もありましたが、それなりに完成してきたこともあってどこまで出来ているのかをまとめてみようと思いました。

なおすでにその途中の成果の一部は本当の背景を明かさずにそれっぽい理由をつけてプルリクを送ったところ、だいたい取り込まれています?。

直近だと `OP_ASET` に関する「[Fixed a discrepancy in `OP_ASET` #5579](https://github.com/mruby/mruby/pull/5579)」がそれに当たります。これは `Symbol#to_proc` メソッドの再実装作業中に見つけたものです。キーワード引数が引き継がれないことがある問題に関しても、この作業途中で発見したことでした。

## 早速使ってみよう

使ってみようとは言っても

元記事を表示

RailsでDDDのバリューオブジェクトを実装してみる

## この記事は何
DDDを学んだ事がある方は「バリューオブジェクト」という名前を一度は聞いた事があるのではないでしょうか・
この記事ではRailsでバリューオブジェクトを実装するならどのような実装にすると良さそうかを紹介します。
なお、バリューオブジェクトの具体的な実装方針は千差万別だと思うので、この記事で紹介する実装はあくまで一例だと思っていただけるとありがたいです。

具体的なバリューオブジェクトの解説は↓の記事などが参考になると思います。

https://qiita.com/little_hand_s/items/f8c0d0858c895afed7e2

## バリューオブジェクトの条件
バリューオブジェクトは以下の条件を満たしている必要があります。
条件は以下の通りです。

– オブジェクトはイミュータブルである
– 値の変化はインスタンスの再生成で実現する
– オブジェクトの同一生はバリューオブジェクトが持つattributeの一致で定義される

Railsで実装する際も、これらの条件を満たす必要があります。
そしてバリューオブジェクトとして実装する以上、バリデ

元記事を表示

[py2rb] dict の for

# はじめに
移植やってます
# for (Python)
“`python
h = { 1: 2, 3: 4, 5: 6 }
for x in h:
print(x)

# 1
# 3
# 5
“`
https://docs.python.org/ja/3.7/library/stdtypes.html#dict

知っている人にとって当たり前かもしれませんが、`dict`の`for`で変数が1つの場合、キーのみを返します。

知らなかったため、人生初の`stack level too deep`を頂きました。
とんでもないクリスマスイブになるところでしたが、デバッグの甲斐あって普通のクリスマスになりそうです。
# each_key (Ruby)
“`ruby
h = { 1 => 2, 3 => 4, 5 => 6 }
h.each_key do |key|
puts key
end
h.keys.map{ puts _1 }
“`
`map`や`select`のときは、`keys`を使用することも可能です。
# メモ
+ Python の for を学習した

元記事を表示

MySQLが立ち上がらないときの解決策

“`
rake aborted!
ActiveRecord::ConnectionNotEstablished: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (38)
“`
というエラーが発生した。`/tmp`ディレクトリを確認しても`mysql.sock`はしっかりと存在する。
mysqlを起動してみると下記のエラーが起こっていることが判明した。

“`
$ sudo mysql.server start
Password:
Starting MySQL
.Logging to ‘/usr/local/var/mysql/fujiwaratakuminoMacBook-Pro.local.err’.
ERROR! The server quit without updating PID file (/usr/local/var/mysql/fujiwaratakuminoMacBook-Pro.local.pid).
“`
というエラーが起こっていることが判明した。
#pidファ

元記事を表示

OpenStructを見ながら感じる、ちゃんとしたRubyのクラスを実装するために必要なこと

## はじめに

Rubyは人間にやさしい言語なので、雰囲気でRubyを書いていても、それなりに動作してくれます。

雰囲気でコードを書いている自分のために、どうすれば今よりもちゃんとしたRubyのクラスを書けるのか考えてみます。
題材としてOpenStructというクラスをとりあげます。

## OpenStructとは?

https://github.com/ruby/ostruct

オープンストラクトとは、あとから自由にメンバを追加できる構造体です。Rubyの場合は、Hashがあるので、オープンストラクトを使う機会は少ないと思います。

けれどもOpenStructはすべてRubyで実装されていています。C拡張を使っていません。コード量も1ファイル472行で、そのほとんどはコメントです。OpenStructを読めば最低限「きちんとした」Rubyのクラスの書き方がわかるはずです。(19人もコントリビュータがいて、よく保守されています)

## OpenStructを読む

気になったポイントをコードのスニペットとともに挙げていきます。

### 1. 文字列は変更不可能にする

元記事を表示

Railsでエラーメッセージを表示させる方法

##手順
①バリデーションの定義
②エラーメッセージの記入
③エラーメッセージを日本語化

##①バリデーションの定義
エラーメッセージはエラーが発生すると、error.full_message内に格納される。

バリデーションはモデル内で定義。
以下のように書くと、nameかemailを空白で登録した際は登録できないようにするバリデーションを追加することができる。

“`
class User < ApplicationRecord validates :name, presence: true validates :email, presence: true end ``` ##②エラーメッセージの記入 エラーメッセージを記入する前に、前提として以下の3つを注意する。 ``・エラーメッセージ表示部分をformのテンプレートに記載せず、専用のパーシャルが作られていること。`` ``・特定のモデルに依存せず汎用的なつくりにする必要がある。格納場所はshared配下にすること。`` ``・エラーメッセージの表示方法はアプリケーションごとに異なるため、エラーメッセージを直

元記事を表示

エンジニア向け生産性Tips【定期更新】

この記事は[モチベーションクラウドシリーズアドベントカレンダー2021](https://qiita.com/advent-calendar/2021/mcs)の記事です。

# この記事はなに?
一日中PCと共に過ごすエンジニアにとって、Tipsほど知りたいことはないと思います。
この記事では、社内エンジニアに「生産性をあげるTips」をテーマにアンケート調査したものをまとめました。
特に新人エンジニアの方や手っ取り早くTipsを知りたい方におすすめの記事です。
まとめたアンケートからつらつら書いてるので、順番にまとまりはありません。あらかじめご了承くださいmm

※ この記事は定期的に更新されます。

# Chrome Tips
皆さんよく使うGoogle Chromeに関するTipsです。

#### ショートカット
まずは王道。ショートカットから!

https://support.google.com/chrome/answer/157179?hl=ja&co=GENIE.Platform%3DDesktop

#### Chrome Tab Group
こんなタブになるこ

元記事を表示

ActiveRecordのNullリレーションが便利そう

# はじめに

Railsガイドを読み返していたら便利そうなものを見つけたので備忘録代わりに残しておきます。

# Nullリレーション

> noneメソッドは、チェーン (chain) 可能なリレーションを返します (レコードは返しません)。このメソッドから返されたリレーションにどのような条件をチェーンさせても、常に空のリレーションが生成されます。これは、メソッドまたはスコープへのチェーン可能な応答が必要で、しかも結果を一切返したくない場合に便利です。

https://railsguides.jp/active_record_querying.html#null%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3

“`ruby
irb(main):001:0> User.none
=> []
irb(main):002:0> User.none.class
=> User::ActiveRecord_Relation
“`

こんな感じで、空のリレーション(Nullリレーション)を返してくれる。

“`ruby
ir

元記事を表示

Rust で API を作成して Rails の便利さを改めて実感した話

# 目次

– [はじめに](#はじめに)
– [想定読者](#想定読者)
– [作成した API について](#作成した-api-について)
– [概要](#概要)
– [開発環境](#開発環境)
– [フォルダー構成](#フォルダー構成)
– [本題](#本題)
– [Rocket & diesel と Rails それぞれの実装に対する比較](#rocketdiesel-と-rails-それぞれの実装に対する比較)
– [目的 1. API として使用できるために、Json や Status を設定できるようにする](#目的-1-api-として使用できるためにjson-や-status-を設定できるようにする)
– [目的 2. User 作成時に、 Validation からエラーメッセージを取得し、Json で返却する](#目的-2-user-作成時に-validation-からエラーメッセージを取得しjson-で返却する)
– [目的 3. Request Header の Token を用いて、ユーザー認証を

元記事を表示

IPアドレスと対峙することになった2年目エンジニアの記録

# はじめに
初めまして、私は現在リンクアンドモチベーションにてバックエンドエンジニアをしている中﨑です。
先日、私はIPアドレス制限機能の実装を任されましたが、お恥ずかしながらIPアドレスについてほとんど知りませんでした、、、
そんな私がリリース完了するまでに学んだことを記載していきたいなと思っています。
私と同じように「IPアドレスについてあんまり分かっていないな」という方や、「IPアドレス制限の実装をするよ」という方の参考になれば幸いです。

# 目次
– [基本知識](#基本知識)
– [IPアドレスに関わるライブラリ](#ipアドレスに関わるライブラリ)
– [IPアドレス制限を実装した時のこと](#ipアドレス制限を実装した時のこと)
– [前提](#前提)
– [IPアドレスの入力チェック(バリデーション)](#ipアドレスの入力チェックバリデーション)
– [IP制限検証時の性能について](#ip制限検証時の性能について)
– [ドキュメント用に記載するIPアドレスについて](#ドキュメント用に記載するipアドレスについて)

#基本知識
I

元記事を表示

「〇〇でハマった。。」を避けるコーディング

## はじめに

**書いたコードが思い通りの挙動をしないが、なかなか原因が分からず困り果てる**

俗に言う、「ハマってしまった」状態。

– 予約語を知らないうちに使っていた
– 全角空白や制御文字が混入していた
– ポインタや参照を経由して値が変更されていた
– 演算子の優先順位を誤解していた
– 囲むやつ(カッコ、do-end、if-fi)の数は合っているが場所がずれていた
– 言語仕様上、必要な空白が抜けていた
– **原因わからないけど、いろいろ弄ってたら直った!!!**

などなど^^;

仕事で「ハマる」と、予実が大きく乖離していき**プロジェクトに迷惑がかかります**。
プライベートで「ハマる」と、楽しかった作業が一気につまらなくなり**モチベーションだだ下がり**です。

挙げたリストの中には、「知らないと分からないよね〜」というものもありますが
**コーディングの手順を工夫すれば、より短い時間で解決できる**ものも多いです。

今回はそんな「ハマる」を避ける為の工夫をまとめたので、紹介します。

## この記事で伝えたいこと

– ハマらない為の心構え
– ハ

元記事を表示

Rubyをつかってローマ字を点字に変換する

この記事は[ 改訂版・チェリー本発売記念 Advent Calendar 2021 ](https://qiita.com/advent-calendar/2021/ruby-challenge)の24日目向けに書いたものです。

# 参加した動機
はじめまして、都内でエンジニアをしているむらかみです。

毎年行われているQiitaのアドヴェントカレンダー企画、ときどきQiitaの記事を読み漁る中で見かける赤ラベルのついたあの記事はなんだろう?とは思ってはいたものの特に気にしていなかったのですが、伊藤さん企画のアドヴェントカレンダーがあるということを知り、これに参加すれば自分も赤ラベルのついた記事を投稿できるのではないか?
というちょっとしたプレミア感を演出した記事を投稿できる喜びを感じたためカレンダー登録しました。

それに加えて、自身がRubyからプログラミングをはじめたことや、伊藤さんが執筆されているチェリー本で学習をしてきたので、自分がやってきたことのアウトプットをする良い機会だと思ったことも大きな動機の一つです。

# どのようなプログラムを書いたのか
タイトルにもありますが

元記事を表示

【Rails】form_withについて

##form_withとは
railsで情報を送信するためのヘルパーメソッド。 form_withを使うことにより、簡単に入力フォームに必要なHTMLを作成することができる。

##form_withの使い方

“`
<%= form_with(モデル or URL(パス),[スコープ],[オプション]) do |f| %>
フォームの中身
<% end %>
“`
“モデル“
@userや@postなどモデルオブジェクトを入れる場合に使う。

“URL“
URLを指定する場合に使う。

“スコープ“
formのフィールド名にスコープを追加する場合に使う。

“オプション“
送信先のurlやタグの設定(クラスをつけたり、MIMEタイプを指定したり)

**モデルとurlの使い分け**
・モデル: データベースに保存する時(登録フォームなど)
・URL: 入力された情報をデータベースに保存しない時(ログインフォームなど)

##form_withメソッドの便利な機能
form_withには、モデル(:model)で記述した場合の便利な機能がある。

引数として渡さ

元記事を表示

OTHERカテゴリの最新記事