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

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

Rails超絶初学者のためのデバッグ

# Railsでのデバッグ
Railsを学習しはじめて2ヶ月くらいですがデバッグで困った点やありがちな点とその対象法をまとめます。
デバッグとはバグを見つけて解決することです。
# よく起こるエラー
* Syntax error
* 書き方が間違っている時に起こるエラーです。
* よくある原因
* かっこを閉じていない
* 英語のスペルミス
* end を書いていない

* No method error
* そんなメソッドは存在しないというエラーです。
* よくある原因 (eachのやつ自分でもめっちゃありました。)
* 英語のスペルミス
* eachを使っている時にeachで回したい内容が一つの情報しか入っていない (複数情報が前提のため)
* argument error
* 引数の数が違うというエラーです。
* よくある原因
* 4つの引数を取り扱うメソッドで引数の数が5つ以上だったり、3つ以下だったり数があって

元記事を表示

rails consoleでLibrary not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib (LoadError)ってエラーが出る件について

まずエラー載せますね。
参考になるかもしれないのでエラーログまるごと。

“`sh
YourName@YourName application_name % bundle exec rails c
Traceback (most recent call last):
42: from bin/rails:4:in `


41: from /Users/YourName/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:325:in `require’
40: from /Users/YourName/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:291:in `load_dependency’
39: from /Users/YourName/.rb

元記事を表示

Rails : turbolinksのせいでjQueryがリロードしないと動かない時の対処法

# turbolinksとは
ページ遷移をAjax(非同期通信)に置き換え処理を高速化するgemです。
(Rails4からはデフォルトで入っているとのこと)
# jQueryとは
JavaScriptライブラリの一種です。
アニメーションを作り出すものです。
# turbolinksのせいでjQueryに支障が出る場合の対処法
“`js:application.js

//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require jquery
//= require bootstrap-sprockets
//= require_tree .

$(document).on(‘turbolinks:load’, function() {
//= この中にjQueryでの処理を書く
}

“`
このように記述するとページを更新しなくても動くようになりました。
他にも同じような記事がいくつかあるかと思いますがシンプルにまとめました。

元記事を表示

【Ruby3】 型プロファイラを試してみる

## 型プロファイラとは?
> 型プロファイラは、
>
> 型注釈がない素の Ruby プログラムを入力して、
> 型エラーの可能性を警告したり(Testing)、
> 型シグネチャのプロトタイプを生成したり(Understanding)
> できるツールです

※開発者である遠藤さんのブログ記事から引用

この機能は2020年にリリースが予定されている Ruby3 の新機能の中の静的解析の一要素となっています。
その他の静的解析の情報については [Ruby の型関連の情報まとめ](https://qiita.com/natsuokawai/items/6d652e3b72a79e019f22) にまとめてあるので良ければ見てください。

## 環境
– Ruby 2.7.0

## セットアップ
“`shell
$ mkdir ~/work
$ cd ~/work
$ git clone https://github.com/ruby/ruby-signature.git
$ git clone https://github.com/mame/ruby-type-profiler.

元記事を表示

Rails コーティング規約について 4

# はじめに
Ruby、Railsの基礎を学習中の方に向けて記載致します。
[Rubyのコーティング規約はコチラをクリック願います。](https://qiita.com/raigakun/items/9db169935baa654af90d)
[Railsのコーティング規約 2 はコチラをクリック願います。]
(https://qiita.com/raigakun/items/265046a9fe78debfbd42)
私自身これからチーム開発を行う上で大事にしたい。知っておきたいことをOutputします。

#Routing
####ActiveRecordのモデル間の関連を表現するには、入れ子型でルートを定義すると分かりやすい。

“`qiita.rb
# 実践してみます。
class Post < ActiveRecord::Base has_many :comments end class Comments < ActiveRecord::Base belongs_to :post end # routes.rb resources :posts do re

元記事を表示

「The name ‘Todo’ is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.」エラー対処法

“`sh

$ rails g model Todo item:text
Running via Spring preloader in process 83975
invoke active_record
The name ‘Todo’ is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.
“`

参考ページ
https://qiita.com/tu-kun/items/4fede82431e546abd941

原因:今回作ろうとしてるRailsアプリケーションのモジュール名とモデル名が重複していたためエラーになった

## 1.モジュール名の変更 Todo → RailsTodo

“`diff:config/application.rb
require_relative ‘boot’

require ‘rails/all’

# Require th

元記事を表示

使えるようになって(いて)欲しいプログラミング言語

# はじめに

私はすでに全く若手ではないのだが、個人的な意見として、また新たに入ってくる技術者に言っていることを書いてみる。勿論賛否あって良い。

何気に私はいわゆる組込み系の仕事をしているのだが、ソフトウェア・オリエンテッドであまり組込みっぽくない人種です。

# 使えるようになって(いて)欲しいプログラミング言語

概ね以下の3種類でそれぞれ1つずつ。

## システム記述系

こういう括りが正しいかは別として、C/C++、Java、C#など。

プログラムの動きとか、コンピューターの動きとか、きちんと知るにはCが最適。アセンブラとは言わない。アセンブラでもいいけど、プロセッサごとに違うしね。概念は知ってると良い。

ただ、Cを実務で使うのはどうしても必要でなければ避けたいのが本音。スキルの差がモロに品質に直結するので。

後、オブジェクト指向しづらいし。それができるというのとはまた別。C++は好きだが、仕様がカオスになりすぎて完全にマニアの世界。Javaはできると実務でも使えて、オブジェクト指向にも慣れるので良いかもしれない。

C#も簡単で分かりやすかった。Windowsでし

元記事を表示

ウィザード形式の新規登録を実装〜SMS認証を添えて〜

# はじめに
ウィザード形式は、登録フォームをいくつかのページに分けて実装するやり方です。入力項目がたくさんあるサービスの場合に有効です。
ウィザード形式でのフォーム実装は既に色々な方が記事にしており、実装方法も十人十色です。sessionで値を保持したり、ページ毎にDBに値を格納したり。。
やり方としては数多く存在しますが、今回の記事では、そんなウィザード形式の実装方法の一つをご紹介できればと思います。ウィザード形式の実装をするに当たって、参考になった記事は下記に掲載しています。細かな導入方法(deviseの導入方法やTwilioの登録方法など)については本記事では割愛いたしますので、リンク先の記事をご確認くださいませ。。

# 開発条件
– Ruby 2.5.1
– Rails 5.2.3
– Haml・Sass記法
– ‘devise’のgemを使用
– Twilioの登録(SMS認証実装のため)

# 実装概要
– 1ページ目でuserテーブルに格納する値を入力してもらう
– 2ページ目でuser_addressテーブルのtelephoneだけ入力してもらう(任意)
– 3ペー

元記事を表示

Rails モデルについて

モデルとはRailsの中でデータベースへのアクセスをはじめとする情報のやりとりに関する処理を行います。

モデルの作成

以下のコマンドで作成できる。

“`!!!
$ rails g model モデル名

#postモデルを作成する場合
$ rails g model post
“`
成功すれば以下のような表示が出る

“`!!!
Running via Spring preloader in process 49331
invoke active_record
create db/migrate/20XXXXXXXXXXXX_create_posts.rb
create app/models/post.rb
invoke test_unit
create test/models/post_test.rb
create test/fixtures/posts.yml
“`
app/models/post.rbが作成したpostモデルになる。また、マイグレーショ

元記事を表示

Rails ビュー

ビューはレスポンスとして見た目を返すものになります。
コントローラーの次にビューが実行される。
app/views/コントローラー名ディレクトリにアクション名.html.erbというファイル名で作成される。
![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576859/3e589c14-af7d-14d0-a068-b4db9cf3c40c.png)

コントローラにインスタンス変数を定義

“`!!!
#app/controllers/posts_controller.rbに定義する場合

class PostsController < ApplicationController def index @post = "これはコントローラーで定義したインスタンス変数を確認するための文字列です" end end ``` ```!!! #ビューファイル(app/views/posts/index.html.erb)にインスタンス変数を定義

トップページ

元記事を表示

Rails コントローラーついて

ルーティングを設定したらコントローラーを設定します。
コントローラーはルーティングで振り分けられたリクエストを実際に処理する役割を持っています。
![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576859/20a7dde6-de6f-47a4-3f42-f626f39565e7.png)

コントローラーの作成

$ rails g controller コントローラー名

postsコントローラーを作成する場合

“`!!!
$ rails g controller posts

#app/controllers/posts_controller.rbが作成されているか確認
“`

コントローラー内にアクションを記載する

“`!!!
class PostsController < ApplicationController end #作ったばっかりでは何も記載はない ``` indexアクションを定義する場合↓ ```!!! class

元記事を表示

Rails ルーティング設定について

ルーティングとはどの要求を受けたら、どのコントローラを呼び出すかを決めている場所。
ルーティングの記載

【例】config/routes.rbに記載
以下はHTTPメソッドとリクエスト、そして行き先のコントローラーとアクションが明示されている形です。

HTTPメソッド

クライアントから送られたリクエスト(GET[ページを表示する操作]、POST[データを登録する操作]、PUT[データを変更する操作]、DELETE[データを削除する操作])のこと。

URIパターン

URLのようなもの。例えば、http://localhost:3000/posts
にアクセスする際はpostsのみを記載。

コントローラー

ルーティングの次にやってくる処理のこと。

アクション

コントローラー内における、処理のカテゴリの事。
ルーティングは「どのようなリクエスト」=>「どのようなコントローラー・アクション」をイメージ。

“`!!!
Rails.application.routes.draw do
[HTTPメソッド] ‘[

元記事を表示

Rails アプリ作成に向けての準備

実際にアプリケーションを作成するにあたっての説明です。

rails new コマンド

Railsで新規アプリケションを作成する際に使用します。

“`!!!
$ rails new アプリケーション名 -オプション名
# オプションを付けてアプリケーションを作成
“`

例:sample_appleを作成する場合

“`!!!
# Railsのバージョン5.2.3を用いて、「sample_apple」を「-d」オプションでMySQLを指定して作成。
$ rails _5.2.3_ new sample_apple -d mysql

# 「sample_apple」ディレクトリに移動
$ cd sample_apple

# 現在のディレクトリのパスを表示
$ pwd
“`

データベースを作成

![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576859/b0b138f3-b68c-c8ec-ce92-a256d844803f.png)

rails db:creat

元記事を表示

rubocopをbundlerでインストールするときにrequire: falseにする理由

## 本記事の対象者
「rubocopを導入するときにrequire: falseにしてたけど、理由がよく分からない」

そんな方に向けてこの記事を書いています。

## rubocopの導入方法
rubocopの公式ドキュメントでは、以下のコマンドを実行する

“`
$ gem install rubocop`
“`
もしくは、Gemfileに以下を記載して、bundlerで導入してくださいと書いてあります。

“`
$ gem ‘rubocop’, require: false`
“`
この記事では、後者について記載していきます。

## bundlerの特徴
rubocopを導入するうえで、覚えておきたいbundlerの特徴は、
「bundlerでは、Gemfileに書いたgemをまとめて自動でrequireする仕組みになっている」ということです。

## rubocopはどこで使うの?
rubocopは、ソースコードが規約に沿っているか確認するために、ターミナル等でコマンドを実行します。

## 結論
rubocopは、ターミナル等で使用するため、bundlerによって

元記事を表示

Gemfileでインストールするgemを間違えた時の取り消し方

# 本記事の対象者
「インストールしようと思っていたgemを間違えてしまった」
「Gemfileでインストールしたgemを削除したい」
そんな方に向けてこの記事を書いています。

### ステップ1:間違ってインストールしたgemを削除する
まずは、以下のコマンドを実行して、間違ってインストールしたgemを削除しましょう。このとき削除するgemによっては、他のgemやコードに影響を及ぼす可能性があるので、注意してください。

“`
$ bundle exec gem uninstall
“`

### ステップ2:Gemfileから削除する
続いて、Gemfileから間違ってインストールしたgemの記載を削除します。

### ステップ3:Gemfile.lockから削除する
最後に、Gemfile.lockの記載を更新します。Gemfile.lockは手動で修正せずに、以下のコマンドを実行して、自動で修正するようにしてください。

“`
$ bundle install
“`

もしくは

“`
$ bundle install –path vendor/b

元記事を表示

DXRuby:「当たり判定」を自分で作ってみよう A. 四角形の四隅の座標で判定する

# 概要
この記事は中学高校生向けプログラミング教室の教材として作ったものを一部改変したものです。

今回の記事は、
・[DXRuby:「当たり判定」を自分で作ってみよう – Qiita](https://qiita.com/noanoa07/items/b7d647bba20116c41a77)

● 当たり(衝突)判定の方法
A. 四角形の四隅の座標で判定する
B. 円の中心からの距離で判定する
C. 色で判定する

の内の
`A. 四角形の四隅の座標で判定する`
になります。

# 技術解説
– 使用ライブラリ
– 参考サイト
については、上記記事を参照してください。

## ライセンス
ソースコード、本解説ともにパブリックドメイン

# プログラム解説
## A. 四角形の四隅の座標で判定する
→ 「ブロック崩し」追加課題 1a);衝突判定の自作(四角) – noanoa 日々の日記
http://blog.livedoor.jp/noanoa07/archives/2046179.html

### A-1a. `===`を使った準備:判定相手が単独(atari_1.r

元記事を表示

SIerの僕、プログラミング始めてみた(10月スタート・初投稿)

#簡単な自己紹介
SIerに2年間在籍しております、かなたです。
誰も興味がない趣味とか仕事とか、本記事のきかっけを初めに。

– 好き①:服(Margielaとか)
– 好き②:映画(おすすめは Into the Wild)
– 業務①:DataSpiderを用いたデータ連携基盤を構築
– 業務②:C#デスクトップ系業務アプリ

10月からWEBアプリケーションの勉強を独学で始めまして、よくよくエラー等ひっかかります。
昨日の自分自身に対して、教えるならどのように伝えるかを、ここに表現できればと思っています。
(あとモチベーションアップに繋がれば…という思いです)

#作っているもの
SIer(以外もそうだと思うんですが)は基本的に、実績ベースで予定・工数を積み上げ、スケジューリングします。
ですが、実績を記録しているPJ/チームを僕は見たことがありません。
そのため、予実データ化し改善までつながるアプリケーションを開発しよう!と始めてみました。

#成果
さてさて、10月からおよそ4ヶ月の成果はざっくり以下の通りです。

## プログラミング基本
– HTML/CSS/JavaSc

元記事を表示

DXRuby:「当たり判定」を自分で作ってみよう

# 概要
この記事は中学高校生向けプログラミング教室の教材として作ったものを一部改変したものです。

ゲームで大変よく使う「当たり判定」(衝突判定)について、DXRubyでは`===`や`check`などの便利な機能が付いています。しかし、いつもこのような機能が使えるとは限りません。

では、自分で作るとしたらどうしたらよいでしょうか?実は、いろいろな判定方法が考えられます。

前の記事
・[プログラミング初心者向け:DXRubyで 1ステップずつ作っていく「ブロック崩し」 – Qiita](https://qiita.com/noanoa07/items/9ebc059550c620ab223c)

# 当たり(衝突)判定の方法
いろいろなやり方が考えられるでしょうが、まずは以下の3通りのやり方が思いつきます。

[A. 四角形の四隅の座標で判定する](https://qiita.com/noanoa07/items/0d62604c769b9810c905)
B. 円の中心からの距離で判定する
C. 色で判定する

それぞれ、別記事になっています。

# 技術解説
## 使用ラ

元記事を表示

メソッド内にループがある場合の戻り値(返り値)について

皆さんこんにちは! プログラマーを目指して学習している、久保雄貴と申します。

今回は「メソッド内にループがある場合の戻り値(返り値)について」自分が疑問に思ったこと、考えたこと、知ったことについて書いてみようと思います。

あるときrubyの勉強中にエラーが起きました。メソッドの戻り値を使って演算をしようとした時です。
「undefined method ‘+’ for nil:nilclass」 のような表示がされました。
空のオブジェクトと足し算はできません。ということのようです。
頭の中に「?」がたくさん出てきて、自分が戻り値についてよく理解できていないことがわかりました。
そこでいろいろ考え、実験して、調べてみたわけです。

皆さんのお役に立てる内容であれば嬉しいです。

なお、間違っている点や「こういう風に書いたらいいよ」などアドバイスがありましたら、コメントをください。

では始めましょう!
#1. 戻り値とは

戻り値とは、オブジェクトやメソッドが処理された後の最終的な値のことです。返り値とも言います。
Rubyのオブジェクト自体、またはメソッドを利用した「式」には、全

元記事を表示

Spreeで使われているfactorybot

spreeで使われているfactorybot。
勉強のために切り抜きました。参考までに。

“`product_factory.rb
FactoryBot.define do
factory :base_product, class: Spree::Product do
sequence(:name) { |n| “Product ##{n} – #{Kernel.rand(9999)}” }
description { generate(:random_description) }
price { 19.99 }
cost_price { 17.00 }
sku { generate(:sku) }
available_on { 1.year.ago }
deleted_at { nil }
shipping_category { |r| Spree::ShippingCategory.first || r.a

元記事を表示

OTHERカテゴリの最新記事