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

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

[Ruby]any?を||の代わりに使わない

Rubyの配列(Array)には`any?`という便利メソッドがあります。

https://docs.ruby-lang.org/ja/latest/method/Array/i/any=3f.html

> すべての要素が偽である場合に false を返します。真である要素があれば、ただちに true を返します。
ブロックを伴う場合は、各要素に対してブロックを評価し、すべての結果が偽である場合に false を返します。ブロックが真を返した時点で、ただちに true を返します。

上記はドキュメントから転記しました。
any?を使うことで、配列内に特定の条件を満たした要素が1つ以上あること(または存在しないこと)を確認することができます。
また、真の要素が見つかったら以降の判定は行われないと記載されているため計算効率も良いです。

簡単に動作確認をしてみます。
配列`[5, 3, 4]`の中に3以下の数値があるかをチェックしています。
何が判定されたか可視化できるように判定ごとに`p _1`で判定した要素を出力するようにしています。

“`irb
irb(main):005:

元記事を表示

devise ストロングパラメータの仕組みを調べてみた。

##はじめに
サインアップページにdeviseのデフォルトで許可されている要素ではない、”username”を追加することになり、deviseでのストロングパラメータの設定方法を調べた時のことを備忘録として投稿します。

##ストロングパラメータとは
**特定のパラメーターのみを許可することで、モデルへの不正なパラメータの流入を防ぐ仕組みのこと。**MassAssingment脆弱性というセキュリティ上の問題に対処するための仕組みとしてRails4系から導入されましたものです。

deviseにおいては、モデルにパラメータを送ることのできるアクションは、3つに限定されており、パラーメータも以下のように限定されています。

|action| allowed params|
|:-:|:-:|
|sign_in | authentication keys |
|sign_up | authentication keys, password,password_confirmation |
|account_update| authentication keys,password, pa

元記事を表示

exists? メソッドを使った簡単な条件分岐

初めてexistsメソッドを使ったのでメモ

existsメソッドとは

exists?メソッドとは指定した条件のレコードがデータベースに存在するかどうかを真偽値で返すメソッドです。存在すればtrueを存在しなければfalseを返します。
書き方は、

“`
オブジェクト.exists?(条件)
    モデル名や、モデルクラスのインスタンスなどを指定できます。
“`

何故使おうと思ったか

結論から言うとコメントの表示で気になることがあったため。

写真投稿サイトをつくっており、投稿に対するコメントを追加できるようにしています。
コメントが多くなることを想定しているのでページネーションを用いています(gem ‘kaminari’)
コメントは

“`
@comments = Commnet.all
“`

で取得してそれをviewで対応するidだけを表示するようにしています。

ページネーションを作っていなければ、今回の問題に当たっていなかったので作っていてよかったと思いました。

問題としましては投稿にコメントが追加されていないのにペ

元記事を表示

rbenvと環境構築

rbenvの個人的な疑問点を纏めたり、環境構築で引っ掛かったところをまとめた備忘録です。

# rbenvを使う理由

互換性の少ないrubyは、プロジェクトごとに色んなrubyのバージョンを使う。(常に最新版を使う訳ではないという事)

全部のrubyのバージョンをpcに入れて運用するのは大変。

そこでrbenvを使う。

# コマンド解説

“`jsx
rbenv local 3.0.2  #特定のディレクトリでこれを行うとそのディレクトリのみバージョンを指定できる
“`

逆にglobalはPC全体のRubyのバージョンを指定。

“`jsx
rbenv exec gem install bundler
“`

bundleコマンドはgemコマンドでインストールします。

“rbenv exec” は「システムrubyのgem」ではなく「rbenvで現在有効なrubyのgem」であることを明記する書き方。

つまり、rvenv execをつけると、rbenvのrubyバージョンに合わせたgemをインストールできる。

“`jsx
rbenv rehash # これで

元記事を表示

ある日MySQLが急に動かなくなった時のデバッグ( The server quit without updating PID file )

#はじめに
ある日突然、rails s でエラーが発生したので解決した方法を記録します。
誰かの参考になることを祈ります。

#開発環境
– macOS BigSur 11.6
– zsh: 5.8 (x86_64-apple-darwin20.0)
– Ruby: 2.6.3
– Rails: 6.1.4.1

#発生したエラー
localhost:3000: ![Access denied for user ‘root’@’localhost’ (using password: NO)](https://kitsune.blog/wp-content/uploads/access-denied.png “”)

“`zsh:
$ mysql.server start

#出力
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.local.pid).
“`
その後、brew doctor、アクセス権限の再付与、エラーログのファイルを覗いて対

元記事を表示

N+1問題を回避してRubyでマスキング処理を実装

ある案件でRubyでマスキング処理を実装しました。本記事はその記録となります。

今回実装したのは、usersテーブルのusernameカラムとemailカラムの各フィールドをダミーデータに置き換えるというものです。イメージとしては、下の図のような感じです。

| id | username | email|
|:———–|————:|:————:|
|1 | fukuzawa yukichi| fukuzawa@gmail.com |
|2 | kimura takuya| kimura@icloud.com |
|3 |kitano takeshi | kitano@gmail.com |
|4 | suzuki ichiro | suzuki@live.com |
|5 | kataoka tsurutaro | kataoka@yahoo.co.jp |
           

元記事を表示

BIツール導入案件で個人情報閲覧防止のためマスキング処理を実装

#本稿の目的

BIツール導入の実務案件を担当しました。

今回のBIツール導入案件では、「本サービス運用に影響が出ないよう、本サービス用データベースからデータを分析用に取ってくること」「分析ように取ってきたデータにマスキング処理を施し、BIツールのユーザーが閲覧できないようにすること」の2点を担保する方法を考えて実装するのが一番の山場でした。

そこで本稿では、「要件」「課題」「解決策」に分けて上記2点についての詳細かつ正確な説明を試みます。また、最後に実装したコードも掲載しております。ぜひご覧ください。

#要件
BIツールを導入するに当たって、下記の要件(クライアントの要望)を満たす必要がありました

要件1. 本サービス運用に影響が出ないよう、本サービスのデータベース以外のところにBIツールが参照するようにしてほしい

要件2. BIツールの利用者(従業員)に個人情報が見えないようにusernameとemailにはマスキング処理を施してほしい

要件3. 以上をできるだけコストをかけないで実現してほしい

#課題

課題1. 要件1を満たすために、本番データベースを何らかの

元記事を表示

実務未経験が実務案件にトライ! その顛末やいかに?

実務未経験者である私ですが、この度なんと実務案件に挑戦する機会をいただきました。その時の経験や学び、成果をここに記しておこうと思います。私と同じような境遇の人のみならず、さまざまな方にご覧いただけると非常にうれしいです。

#自己紹介
Over30の方のアラサー。未経験からエンジニアへの転職を目指しています。Techacademyでバックエンドとフロントエンド、ウェブデザインを学んだ後、Rails Tutorialやその他書籍を通じて勉強していました。

今回の実務案件に参加する前は、AWS等のインフラの知見は一切ありませんでした。しかし、「30歳を過ぎている場合、最低レベルでも実務レベルじゃないとエンジニア転職できないだろう」との思いで日々学習に励んでいたところ、本案件の募集があったため即応募。熱意が認められたのか、本案件を受注することができました。

#案件の概要
運営中のWEBサービス「独学エンジニア」のKPIモニタリング体制の整備が今回の案件となります。

状況を説明しますと、運用中のWebサービスであるにもかかわらずデータ分析アプリ・ツールが全く導入されておらず、新規登録者数

元記事を表示

比較演算子と論理演算子について!

#①.比較演算子(>, >=, <, <=, ==) 比較演算子は、値同士を比較したいときに使用します! 書き方はシンプルで、値と値の間に演算子を記述するだけです! 以下のようになっています! ```php 比較演算子 使い方 説明 > A > B AはBより大きいか
>= A >= B AはB以上か
< A < B AはBより小さいか <= A <= B AはB以下か == A == B AとBは等しいか ``` 比較演算子を使った場合、その条件が正しいかどうかによって、 trueもしくはfalseと呼ばれる値になります! 下記が例となっています! ```php # 1は20より小さいか? irb(main):001:0> 1 < 20 => true

# 5は5以下か?
irb(main):002:0>

元記事を表示

docker環境でvscodeのrubocop拡張が反応しない時の対処法

# はじめに
vscode の rubocop 拡張 [ruby-rubocop](https://marketplace.visualstudio.com/items?itemName=misogi.ruby-rubocop) を Docker 環境で使用したところかなり詰まったのでその備忘録です。

ホストに rubocop をインストールすれば良いという記事が散見されましたが、根本的な解決になっていません。ここではホストを汚さずコンテナ内の rubocop を参照するような解決方法をあげます。

一人でも多くの方の参考になれば幸いです。

# 何も設定していない時のエラー ( rubocop 拡張入れただけ)
“`
command /Users/horisho/.rbenv/shims/rubocop returns empty output! please check configuration.
“`
ホストに rubocop は存在しないので、 docker コンテナに実行先を向けないといけません。

# 初期設定
https://github.com/misogi/v

元記事を表示

Rails の finder 系メソッドをちゃんと理解する

# はじめに
普段空気のように finder 系メソッドを使っているけれど、改めて finder 系メソッドは何があったっけ?というのと内部実装について見ていき、何となくしか理解していない部分をちゃんと理解したいと思います。

# finder 系メソッドの整理
今回は 2001/10/09 時点の最新の安定バージョン `v6.1.4.1` のソースを元に書いていこうと思います。

finder 系メソッドは

– https://github.com/rails/rails/blob/v6.1.4.1/activerecord/lib/active_record/core.rb
– https://github.com/rails/rails/blob/v6.1.4.1/activerecord/lib/active_record/relation/finder_methods.rb

あたりに詰まっています。

`core.rb` の方は `Person.find(1)` のようにモデルのクラスメソッドとして呼び出す場合で、 `finder_methods.rb` の方は `Pe

元記事を表示

Ruby(Open-URI)とNokogiriでスクレイピングした際に出会ったエラー対応(404エラーのハンドリング)

## はじめに

Ruby(Rails)でWebスクレイピングをしたとき

URLが404 Not Foundになり指定したURLのリソースが見つからず、以下のエラーを出力して止まってしまって困りました。

“`
OpenURI::HTTPError
“`

今回はこのエラーハンドリングの話をします。

ちなみに、Webスクレイピングで用いたライブラリやGemは、`OpenURI`と`Nokogiri`です。

### 用語の説明

**OpenURI**

– httpやftpを通じてネットワーク上のリソースを取得することができます。こちらはRuby標準のライブラリです
– こちらだけでもスクレイピングは行えます

https://docs.ruby-lang.org/ja/2.7.0/library/open=2duri.html

**Nokogiri**

– こちらも、Webスクレイピングをサポートしてくれるやつです。こちらは、HTMLの情報を全て取得したい場合に楽に扱えます
– 特定のDOMを取得する際の 僕はよく使う`search` など、スクレイピングをする上でひつ

元記事を表示

動的と静的を学ぶ!

Webで様々なページを見たり、サービスを利用したりすることがあります!

そこには、静的と動的という分類があります!

それぞれの特徴を書いて行こうと思います!

#①.動的

動的とは、Twitterのように、常に最新のツイートを取得し表示する仕組みや、ユーザーごとで表示されるものが変わるような仕組みです!

そのような仕組みのサービスは、動的サイトや動的コンテンツと呼ばれます!

Webアプリケーションは、動的コンテンツであることがほとんどです!

#②.静的

静的とは、誰がいつ見ても、常に同じ内容が表示されるような仕組みです!

そのような仕組みのサービスは、静的サイトや静的コンテンツと呼ばれます!

HTMLとCSSで作成したWebページは、静的コンテンツです!

#③.まとめ

どちらも簡単に言うと、

動的コンテンツとは、ユーザーごとで表示されるものが切り替わるような仕組みのこと!

静的コンテンツとは、誰がいつ見ても、常に同じ内容が表示されるような仕組みのこと!

こんな感じですね!

基本的な事なので、これはしっかり把握しておこうと思います!

なにか説明が間違って

元記事を表示

WSL2(Ubuntu)環境下でのDockerを使ったRailsの開発環境構築するshellを作った

# 概要

初投稿です。
WSL2(Ubuntu)の環境下でDockerを使ったRailsの開発環境の記事が無くて、構築が面倒だったのでshellを作りました。

## 作成する開発環境
– Ruby 3.0.2
– Rails 6.1.4
– MySQL 8.0

## ソースコード
ソースコードは下記のとおりです。
[docker-rails.sh](https://github.com/sasami-pro/public_tools/tree/master/docker-rails)

# 使い方

## 前提条件
– WSL2(Ubuntu)
– Docker version 20.10.8以降
– Docker Compose v2.0.0-rc.1以降

## shellの実行

ディレクトリを作成しdocker-rails.shを配置します。

~~~sh
mkdir sample_app
mv docker-rails.sh ./sample_app/
~~~

作成したディレクトリへ移動し、docker-rails.shを実行します。

~~~sh
cd sam

元記事を表示

バリデーションメモ

初めてユニークネスを使ったのでメモ

uniqueness

必ず一意であること。
など、同じ情報を保存しないようにする
例)メールアドレスや電話番号など

今回使った状況としては、Userは投稿を追加することができ、さらにその中で投稿に紐づく商品の情報を追加することができるようにしてるが同じ商品は追加できないようにしていた。
Postに関連する商品としていたのでPostProductモデルとする
モデルでバリデーションを仕込む

“`
class PostProduct < ApplicationRecord belongs_to :user belongs_to :post validates :title, presence: true, uniqueness: true validates :image, presence: true, uniqueness: true validates :product_url, presence: true, uniqueness: true end ``` 今かけているバリデーションは、 tit

元記事を表示

仕事で使うREDMINEに関する考察(6)

Redmineの事である。

仕事で使うということで、3か月余り検討してきたのであるが、
一つ課題があることが分かった

#wiki

現状のRedmineでは、Wikiはすべてプロジェクトに依存している。

しかしながら、Wikiは共有知識であって、そもそもプロジェクトに従属するものではない。
(今のところ、PJTに従属する方が、アクセスしやすいという考えはあるが)

そもそも、PJT自体が永続するものでもないし、やがて終了してしまったあとの扱いが困難である。

#やりたいこと

とりあえずWikiペディアは入り口は一つで十分であり、入り口は出来れば独立させたい。

現状の機能としては、HTML,PDFへの書き出しはあるが、別の場所にコンテンツサイトを構築するまでもない。

できればRedmineの中で、簡単にWIKIペディアを編集したい。

基本的には、階層構造を作って、全体像が見えるようにしたい。

またRedmineを会社、自宅で分けている場合には、やはりファイル形式でインポート、エクスポートしたい。

#今後の方針

現在は個人レベルでredmimeを使っているが、そのうち関

元記事を表示

カラム数に制限を設ける

モデルに独自のバリデーションを書かずにコントローラー内で処理をする方法を考えてみました。

環境

ruby 2.6.5
rails 5.2
Mac OS

必要な gem 無し

テーブルは
Post : comment が 1対多になってます。

実装したいこと

userの投稿にたとえばコメントがあったとして、そのコメント数を制限する。
みたいな感じの機能です。

大雑把な流れとして
userが投稿詳細ページからコメントを追加

createアクションが動く

投稿に対するコメント数が条件より少ない場合、そのまま作成され
条件を超えた場合はflashと共に元のページにリダイレクトさせる

何を使うか

コメントのカラムには自身が持つ”id”の他に外部キーとして”post_id”を持たせています。
これによって「post_idがn番のコメント」と表現することができます。
今回数えたいのはまさにこのpost_idです。

情報を取得するメソッドはたくさんあるのでそのなかから最適なものを探します。

  • all
  • <

元記事を表示

【Rails4.2】Postgresqlの配列リテラルを配列に変換

## 背景

– 少々古いプロジェクトでPostgresqlの配列型が使われていた。
– ActiveRecord経由であれば取得カラムは自動で配列に変換されるが個別に変換したい場合があった

## 概要

– Rails側で以下の変換を行いたい
– 半角スペースや改行などの要エスケープ文字がある要素だけダブルクォート囲みされたりしている
– アポストロフィーエス `’s` なども少々変換が必要らしい

input | output
— + —
`{}` | `[]`
`{1,2,3}` | `[1,2,3]`
`{赤,青,緑}` | `[“赤”,”青”,”緑”]`
`{“徳川 家康”,豊臣秀吉,”織田 信長”}` | `[“徳川 家康”,”豊臣秀吉”,”織田 信長”]`

## 実装

モデルのconcernを追加する形にしてみた

“` ruby:app/models/concerns/varying_array_parsable.rb
module VaryingArrayParsable
extend ActiveSupport::Concern

class

元記事を表示

RubyでArrayを使う方法

RubyでArrayを使う方法です。

“`Ruby
#数字を入力します
m = gets.to_i
#Array配列を定義します
c = Array.new(m)
m.times { |i| c[i] = gets.chomp }
#数字を入力します
n = gets.to_i
#文字列を入力します
s = Array.new(n)
n.times { |i| s[i] = gets.chomp }

c.each do |d|
s.each do |t|
  #文字列が含まれているかチェックします
if t.include? d
puts ‘YES’
else
puts ‘NO’
end
end
end
“`

元記事を表示

Raccでかんたんな自作言語のパーサを書いた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234055/9ebeab7b-e274-4b72-4c9a-1a69b3c3c2c9.png)

<自作言語処理系の説明用テンプレ>

自分がコンパイラ実装に入門するために作った素朴なトイ言語とその処理系です。簡単に概要を書くと下記のような感じ。

– 小規模: コンパイラ部分は 1,000 行程度
– pure Ruby / 標準ライブラリ以外への依存なし
– 独自VM向けにコンパイルする
– ライフゲームのために必要な機能だけ
– 変数宣言、代入、反復、条件分岐、関数呼び出し
– 演算子: `+`, `*`, `==`, `!=` の

元記事を表示

OTHERカテゴリの最新記事