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

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

Ruby1.9のハッシュロケット記法{ :key => value } を{ key: value } に修正する方法(erubis, hamlも含む)

## Rubyファイル

Rubyファイルの場合、rubocopのコマンドで一気になおせます
(rubocop のインストールは `gem install rubocop`)

`rubocop –only Style/HashSyntax -a`

`-a` オプションが自動適用なので、これを外すとどのように修正されるかを確認することができます

## erubis ファイル

erubisファイルの場合、[erb-lint](https://github.com/Shopify/erb-lint)を使う必要があります。
(インストールは `gem install erb_lint`)

以下のような yaml を `~/.erb-lint_only_hash_syntax.yml` として定義し

“`yaml

glob: “**/*.{html,text,js}{+*,}.{erb,erubis}”
EnableDefaultLinters: false
linters:
Rubocop:
enabled: true
only:
– S

元記事を表示

Model.model_name.humanなどについて

## いつ使うのか
Model.model_name.humanはいつ使われるのかというとI18nと呼ばれる国際化をする際に使われます。
実際にこのように書かれています。
config/locals/ja.yml
“`
ja:
activerecord:
errors:
models:
user:
attributes:
name:
blank: “が空になっています。入力してください。”
email:
blank: “が空になっています。入力してください。”
models:
user: “会員”
attributes:
user:
name: “名前”
email: “Eメール”
“`
このようにすることで、エラーメッセージ等の文言を日本語化することができるんです。
models階層の文字列を取得するには、
“`
User.model_name

元記事を表示

【Rails】has_manyにデフォルトでorderを設定する

## 実装方法

UserモデルにPostモデルが紐づくとします。
並び替えは作成日時の降順(新しい順)です。

“`ruby
class User
has_many :posts, -> { order(created_at: :desc) }, dependent: :destroy
end
“`

注意いただきたいのは、`dependent: :destroy`はorderの後ろに書くということです。

元記事を表示

Basic認証を実装する

目的

閲覧できるユーザーを制限するために、Basic認証を導入する。

Basic認証とは、HTTP通信の規格に備え付けられている、ユーザー認証の仕組み。
ユーザー名とパスワードを知っているユーザーのみが、アプリケーションを使えるように、制限をかけるために実装する。

1. Basic認証を導入する

① Basic認証の記述を、application_controller.rbに書く

Basic認証によるログインの要求は、全てのコントローラーで行いたい。
そのため、一まとめで命令できるよう、application_controller.rbに処理を記述する。

“`
class ApplicationController < ActionController::Base before_action :basic_auth private def basic_auth authenticate_or_request_with_http_basic do |username, password| username == ENV["BASI

元記事を表示

Rails6系+Vue3系で”Hello, Vue3!”

###はじめに
当方初記事となりますが、今回は私が一週間くらいハマりにハマってしまったRail6でのVueの導入、そしてブラウザに”Hello,Vue3!”を表示するところまでの手順を記したいと思います。

Rails6+Vue3に関する記事はQiitaをはじめとする各Q&Aサイトで多くの方が取り扱っていらっしゃいますが、私はどうにも要領が悪いのか、うまくいきませんでした。なぜかって?こっちが聞きたいです。

Vue.jsを初めて触るという方は、先にVue.js公式にてVue.jsについて確認しておくことを推奨致します。
https://v3.ja.vuejs.org/

##本記事のゴール
表題の通り、ブラウザ上で”Hello, Vue3!”です。
![スクリーンショット 2022-02-16 21.52.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2494809/913305ad-7b41-f899-441a-7a8381307435.png)
ね、簡単そうでしょ?

##環境(コマンド:バ

元記事を表示

画像ファイルが JPEG 2000 形式かどうかを簡易的に判別する

# やりたいこと

画像ファイルが JPEG 2000 形式かどうかを判別したい。本来は JPEG 2000 形式の画像ファイルは拡張子が .jp2 である。しかし、拡張子が .jpg だったり MIME タイプが image/jpeg だったりしても、実際は JPEG 2000 形式である場合がある。そこで、バイナリデータを確認して判断する。

# 方法

[マジックナンバー (フォーマット識別子)](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%83%8A%E3%83%B3%E3%83%90%E3%83%BC_%28%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E8%AD%98%E5%88%A5%E5%AD%90%29) で判断する。[RFC 3745 – MIME Type Registrations for JPEG 2000 (ISO/IEC 15444)](https://datatracker.ietf.org/do

元記事を表示

[Ruby]インスタンス生成していないクラスが実行?

Ruby環境設定後、スクリプトファイルを試験動作させて素朴な疑問がわいたので記録しておく。
内容がほぼ個人的備忘録であり、疑問レベルも恐らく初歩も良いところと思う。
しかし、同じ疑問で躓く人が他に居るかもしれず、何かの役に立てれば幸いだと思う。

#疑問に思ったこと
インスタンス生成していないクラスが、なぜ実行されているのか?

#用意した環境

* Windows 10 Pro / 21H2
* RubyInstaller 3.1.0-1 released

#用意したファイル
標準出力へ文字列を出力クラスを定義しただけのスクリプトファイル。
メソッドもなし。

“`test1.rb
class Foo
p “PUT TEST”
end
“`

#想定していた実行結果
「p “PUT TEST”」は、クラス「Foo」内にメソッドも実装せず記述しただけなので、
Rubyインタプリタから実行しても、標準出力に”PUT TEST”は出てこないはずと思っていた。

……正直言うと上のスクリプト「test1.rb」は、単にメソッドを記述忘れで出来たミス産物なので、
本当は「p “PUT

元記事を表示

Ruby on Rails チュートリアル第9章をやってみて

#発展的なログイン機構
■第9章
`remember me`というブラウザを再起動した後でもすぐにログインできる機能を備えていることが一般的になってきた。
永続クッキー (permanent cookies) を使ってこの機能を実現していく。

##9.1 Remember me 機能
本節では、ユーザーのログイン状態をブラウザを閉じた後でも有効にする [remember me] 機能を実装していく。この機能を使えば、ログアウトを実行しない限りログイン状態を維持できる。
YahooとかTwitterみたいな感じなのかな?

###9.1.1 記憶トークンと暗号化
セッションの永続化の第一歩として記憶トークン (remember token) を生成し、`cookies`メソッドによる永続的cookiesの作成や、安全性の高い記憶ダイジェスト (remember digest) によるトークン認証にこの記憶トークンを活用。

`cookies`メソッドに保存する情報は自動的に安全に保たれるようになっていない。cookiesを永続化するとセッションハイジャックという攻撃を受ける可能性があ

元記事を表示

blastengineを使ってRubyでメールを送信する

[blastengine](https://blastengine.jp/)はシンプルに使える開発者向けメールサービスを提供しています。何かと面倒なメール配信をシンプルに、かつ確実に送信先に届くようになります。

今回はblastengineを使ってRubyでメール送信を行うまでの流れを解説します。

## ユーザ登録する

blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします(ユーザIDは後で使います)。

![getting-started-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/f9e553b4-6322-4219-db91-a28f2a88e280.jpeg)

## 送信元ドメインのSPFを設定する

送信元として利用するドメイン(自分で持っているもの)の設定をします。これは任意のドメイン管理サービスで設定できますが、TXTレコードに以下のSPFを追加します。

“`
txt @ v=spf1 inclu

元記事を表示

rails consoleでActiveRecordの検索メソッドを実行するときに注意するべきこと

前提知識

ActiveRecordの検索メソッドは、`DBアクセスへの有無`という点で大きく分けると以下の2種類がある。

– DBアクセスを行うメソッド
– `ActiveRecord::FinderMethods`のメソッド
– `find, find_by, take, first, last` など
– すぐにクエリを発行し、データベースにアクセスし、レコード(Modelのインスタンス or インスタンスの配列)を返す。
– DBアクセスを行わず`ActiveRecord::Relation`のオブジェクトを返すメソッド
– `all, where, limit, eager_load, preload, joins`など

問題

上記の通り`all`や`where`はそれ単体ではDBへのアクセスは発生しない。
そこで実際に`rails console`で`where`を実行してみる。

“`ruby
pry(main)> User.where(id: 1)
User Load (3.6ms) SELECT “users”.

元記事を表示

Dockerのlocalhostが突然、接続されなくなる問題を解決しました。

# 起きていた問題
突然ブラウザ上にて、localhostが接続されなくなる。
![スクリーンショット 2022-02-11 11.10.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525372/37a5b636-d34b-954e-96a0-f4e14b78f381.png)

“` c
keitaromasuda@KeitaronoMacBook-Pro WebApp % ./vendor/bin/sail up -d
[+] Running 0/1
⠿ laravel.test Error 31.2s
[+] Building 28.1s (3/3) FINISHED

元記事を表示

rubyにおける::(ダブルコロン、コロンコロン)スコープ演算子

rubyではスコープ演算子というのがあります。::っていうやつです。
これを使うと、クラスやモジュールで定義されている定数を外部から参照することができます

“`
module Test
HOGE=20
FUGA=30
end

class Hogehoge
hoge = Test::HOGE
p hoge
end
=> 20
“`
こうすることによってmoduleで定義されている定数を参照することができるんです。

今回はメモ書き程度に終わらせようとおもいます
以上です。何か間違いがございましたら、ご教示いただけますと幸いです。

元記事を表示

テストコードを書く

なぜテストコードを書くのか

アプリケーションが、想定通り正しく動くのか、確認するため。

Ruby on Railsでは、アプリケーションのテストコードを記述する機能を、RSpecというGemを使うことで便利に実装できる。

1. RSpecを導入する

① まず、RSpecのGemを導入する

Gemfile

“`
group :development, :test do
    (  ~省略~ )
gem ‘rspec-rails’, ‘~> 4.0.0’
end
“`

Gemfileを変更したので、

“`
~ frima-app % bundle install
“`

② RSpecをアプリ内にインストールする

“`
~ frima-app % rails g rspec:install
“`
③ .rspecファイルに、記述する
テストコードの結果を、ターミナル上で表示するため。

“`.rspec
( ~省略~ )
–format documentation
“`

2. FactoryBotを導入する

FactoryBot: 

元記事を表示

ログインができません<初心者>

ログインが出来ないだって?

Railsでアプリを作成中。
deviseを使用してユーザー管理機能を実装していました。
サインアップ、ログアウト、編集機能まで順調に進めていたところ、最後に確認としてもう一度正常に動くか確認したところ、、、

ロ、ログインができない・・・

ここまできてなんてこった。
どこが原因なのか・・・

「Devise::SessionController#new」を経由しているし
サーバーは反応しててパラメーターにもちゃんとメールアドレスとパスワードが入っている。
SequelProを見ながら間違いなく入力しているのに何度やってもログインに失敗し、

“`
Invalid Email or password.
(メールアドレスまたはパスワードが無効です。)
“`
↑ これの嵐。

初心者の自分にはパニックで一時フリーズ。
いったん冷静になって、また考えました。

MVCの流れに沿って進んでいる。
メールアドレスかパスワードが無効ということは、

「空」なのか「間違っている」かのどちらか。

でもどちらも間違っ

元記事を表示

dbのインデックス備忘録

インデックスについて学んだので、備忘録です。

## インデックスとは
**索引。dbの検索性能を上げる**

なぜ検索性能が上がるのかというと、インデックスをつけたカラムでは、レコードが作成される際にソートが行われ、検索したい文字列や数字を全レコード確認することなく、発見することができるから。

### メリットとデメリット
#### メリット
– レコードの検索やソートの速度が上がる

#### デメリット
– レコード作成時にソートしないといけない関係で、書き込みの時間が増える

### 例
ブログなどの何かしらの記事を投稿するpostsテーブルについて考える。レコードは以下の感じ。

*postsテーブル*

| id | body | created_at |
| :— | :— | —: |
| 1 | 本文です。 | 2022-01-01 12:00:00 |
| 2 | 本文です。 | 2022-01-01 12:01:00 |
| 3 | 本文です。 | 2022-01-01 12:02:00 |
| 4 | 本文です。 | 2022-01-01 12:

元記事を表示

rails 自動整形ツールRubocopの導入

# はじめに
rubyの自動整形ツールであるrubocopの導入方法をまとめる。

# 環境
– rails 6.0.4.4
– ruby 2.6.5
– rubocop 1.25.1

# Rubocopとは
Rubyのコード解析ツール。
自身で決めた規定通りにコードを書けているか解析、かつ、自動で修正してくれるツール。
インデントを揃えたり、余分な改行・スペースを削除したりできる。
[RubyStyleGuide](https://github.com/fortissimo1997/ruby-style-guide/blob/japanese/README.ja.md)に基づいて指摘を行う。

公式 https://rubocop.org/

# Rubocopの導入方法
Gemファイルに記載

“`Gemfile.
groupdevelopment do
gem ‘rubocop’, require: false
end
“`

インストール

“`ターミナル.
bundle install
“`

Rubocopの設定ファイルを新規作成

“`ターミナル.
to

元記事を表示

【Ruby】名前空間とは

# はじめに
Rubyでモジュールについて学習していたら「名前空間」なる不思議な名前のやつが出てきたのでまとめてみました。
調べてみるとRailsでよく見かける「ActiveRecord::Migration」も名前空間のようです。

# 名前空間とは
名前空間(namespace)とは、なんらかの理由でクラス名が重複するときに、それぞれを区別するために定義するモジュールです。

## 使い方

“`ruby
class Greet
def hello
‘hello world’
end
end

class Greet
def konnichiwa
‘konnichiwa sekai’
end
end
“`

このように同名のクラスを区別するために、それぞれをモジュールで括ります。
モジュールに属するクラスを参照する際は「モジュール名::クラス名」と書きます。
つまり「A::B」は「A」というモジュールに属する「B」というクラスということです。

“`ruby
module English
class Greet
def hello

元記事を表示

更に Ruby の Matrix と Numo::NArray で pagepank をやってみた

# はじめに
https://qiita.com/superrino130/items/42ac760b0f202cefe6bc

前回の記事を投稿後、Rubyの元標準ライブラリの`Matrix`と外部ライブラリの`Numo::NArray`があったので、更にやってみた。
# 問題の整理[再掲]
ノード数`N`の有向グラフがある。
高橋くんはノード1からスタートして100回ランダムな遷移を行います。
遷移後、高橋くんがどのノードにいるかを答えてください。

“`
入力
N M
A1 B1
.
.
.
Am Bm
“`
“`
入力例
5 7
1 2
1 3
2 4
3 4
3 5
4 5
5 1
“`
# Ruby Matrix版
“`ruby:matrix.rb
require ‘matrix’

n, x = gets.split.map(&:to_i)
m = Matrix.zero(n)
x.times do
a, b = gets.split.map(&:to_i)
m[b – 1, a – 1] += 1
end
s = m.column_vectors.m

元記事を表示

Rails チュートリアルのrails serverでエラーが出た

前提

railsチュートリアルの「1.3.2 rails server」でサイトを表示したい。

開発環境 -> Cloud9
rubyおよびrailsバージョンは以下の通り。

“`terminal
ruby -v -> ‘6.0.3’
rails -v -> ‘5.1.0’
“`

チュートリアルの1.3.1までの環境構築は終わった状態で以下を実行。

“`terminal
Cloud9User:~/environment/hello_app (master) $ rails server

#省略

Use Ctrl-C to stop

“`

ここでpreviewすると以下のメッセージ

![ecc24368fac55bcbb0887b02bedc8076.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1106470/c3d3aef3-741d-23f1-8a01-7de51cb31f91.png)

エラーメッセージ↓
config.hosts << "de3360

元記事を表示

Ruby で XML を rexml で パースする

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 概要
バイオインフォマティクスには色々な書式の元データがあります。
それを同じ形式にパースすれば、その後の処理が楽になります。
`activesupport`や`nokogiri`を使用する方法もありますが、ひとまず標準ライブラリの`rexml`でやりたいと思います。
# どうすRuby
“`test.xml


test
MS2


“`
“`ruby:main.rb
require ‘rexml/document’

doc = REXML::Document.new(File.open(“test.xml”))
puts doc.elements[‘a/b/title’].text
puts doc.elements[‘a/b/value’].attribute(‘count’).value

# output
test

元記事を表示

OTHERカテゴリの最新記事