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

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

NFCタグにスマホをかざして家電を操作できるようにしてみた

#はじめに
ここ最近、リモートで働くようになって家にいる時間が長くなってきました。少しでも面倒なことはなくしていきたいということで、NFCタグにスマホをかざすだけで家電を操作できるようにしました。ちょっと宣伝になってしまうのですが、少し前に[nature_remo_api](https://rubygems.org/gems/nature_remo_api)というgemを作ったので、そちらを使っていこうと思います。

#用意するもの
– iPhone
– NFCタグ(自分は[こちらのNFCタグ](https://www.amazon.co.jp/gp/product/B088HD9JQS/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1)を購入しました。ただ、ちょっと反応が悪い気がする・・)
– Raspberry Pi
– Nature Remo

#全体の流れ
ざっくりですが、最終的な全体の構成は以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.a

元記事を表示

Rubyのローカル変数定義について難しいという今日の気付き

## この記事で書くこと
Rubyの変数に対するundefinedの挙動についての気付き

## きっかけ
以下の記述は、リクエストされた動物の情報を返却するAPIを例としてあげているものです。

“`rb

animal = Cat.find_by(id: params[:cat_id]) if params[:cat_id].present?
animal = Dog.find_by(id: params[:dog_id]) if params[:dog_id].present?
return render json: [] if animal.blank?
〜以下省略〜
“`

`animal.blank?` が両方の `params[:cat_id] params[:dog_id]` がない場合に、
undefinedエラーが出るんじゃないかと思ったのですが、
(このように)

“`rb
[1] pry(main)> hoge.blank?
NameError: undefined local variable or method `hoge’ for main:

元記事を表示

Circle CI環境構築

# はじめに

本記事ではCircle CI初心者の僕が、Circle CIのクラウド環境での実行(gitでpushするたびにテストを実行する)方法についてまとめていきます。

# Circle CIの環境構築

## 1)GitHubとの連携

Circle CIではGitHubとBitbucketの2つのサービスと連携できますが、GitHubとの連携のほうが多いと思うので、こちらでのやり方を記載していきます。

やり方としては**GitHubにログインした状態**でCircleCIのサイトから連携ボタンを押して、手順に沿って作業を進めてください。

## 2)プロジェクトの追加

GitHubでの認証が完了したらGitHubのプロジェクト(リポジトリ)をCircleCIでも作成します。
個人リポジトリかOrganizationリポジトリか、プライベートリポジトリでプロジェクト追加のやり方が異なるようですが、ここでは、個人+Publicリポジトリでのやり方を記載します。

## 3)CircleCIの実行環境

最終的にはクラウド環境でのCircleCI実行をゴールとします。
その

元記事を表示

【Week 12-13】thor, robocop

# はじめに

マルチスケールシミュレーション特論の講義メモです.講義メモのインデックスは[コチラ]()

今回の参考資料は[チャート式ruby-appendix-VI(thor, rubocop)]()です.

# チャート式 Ruby

今回は Ruby 開発周辺情報のみです.

# Ruby 開発周辺情報

参照記事は[コチラ]()

## thor

`thor` ときいたら MARVELSTUDIO の『マイティ・ソー』をイメージしてしまう.トーアと呼ぶらしい.thor はコマンドラインツールを作る際に用いる gem で,rake と似たような立ち位置にいる.

まず

gem install thor

で th

元記事を表示

Refactoring Ruby

# はじめに

マルチスケールシミュレーション特論の講義メモです.講義メモのインデックスは[コチラ]()

# Refactoring Ruby

この記事はジェイ・フィールズ,シェーン・ハービー,マーティン・ファウラー 著 / 長尾高弘 訳 の 『リファクタリング:Rubyエディション』(アスキー・メディアワークス,2010年)に沿って refactoring を学んだ学習記録である.講義資料・コードは公開できないため,github の該当フォルダを参考にしていただきたい.

## refactoring

講義内でも度々紹介されていたが, **refactoring** とは何か.再度確認する.

factoring には因数分解という意味があるが,プログラムを class や method に分割していくこと自体がプログラミングにおける因数分解と言えるだろう.re- がつくと振り返りや戻るというイメージになる.refactoring を簡単にいうと出来上が

元記事を表示

Rubyのバージョンが切り替わらない

Rubyの参照先

“`
$ rbenv local 2.4.9
$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin20]
“`
切り替わってないので、どこを参照しているのかチェックします。

“`
$ which ruby
/usr/bin/ruby
“`

`/.rbenv/shims/ruby`ここを参照するように変更を加えていきます。

参照先の変更

まずは`~`に移動します。

“`
$ cd
~$ vi ~/.bash_profile
“`

`i`でInsertにする。(ファイルに変更を加えられる状態にする。)
下記の変更を加える。

“`ruby:vim
export PATH=”~/.rbenv/shims:/usr/local/bin:$PATH”
eval “$(rbenv init -)”
“`

`esc`でInsertを終了。
`Shift + ZZ`で保存して終了。

“`
~$ source ~/.

元記事を表示

scopeとwhere(“LOWER(message) LIKE ?”, “%#{term.downcase}%”)

#なんだこの記述は、、!?
RSpec学習には以下の有名教材があります。
[Everyday Rails – RSpec による Rails テスト入門 テスト駆動開発の習得に向けた実践的アプローチ](https://leanpub.com/everydayrailsrspec-jp)

Aaron Sumnerさんという方が書いた本を日本語訳されています。
翻訳した方々の中にはあの「[プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%B

元記事を表示

モンティホール問題の解が 50% にならないことを暗号論的擬似乱数を使って検証してみる

# モンティホール問題とは?
モンティホール問題とは、以下のような確率の問題です。

>
3 つの閉じたドアがあります。
>
そのうちの 1 つのドアの先には景品の新車があり、残り 2 つのドアの先にはハズレを意味するヤギがいます。プレイヤーは新車があるドアを開けると新車をもらうことができます。
>
プレイヤーがドアを 1 つ選ぶと、司会者のモンティホールは、残りの 2 つのドアのうちヤギがいるドアを 1 つ開けてヤギを見せます。
>
ここでプレイヤーは、最初に選んだドアから、まだ開けられていないもう 1 つのドアに変更することができます。
>
さて、プレイヤーはドアを変更するべきでしょうか? (どちらのほうが新車を当てられる確率が高いでしょうか?)

[モンティ・ホール問題 – Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%BB%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C)

「司会者がハズレのヤギのドアを開けたんだか

元記事を表示

【Week 11】class, ruby_sixth

# はじめに

マルチスケールシミュレーション特論の講義メモです.講義メモのインデックスは[コチラ]()

今回の参考資料は[チャート式ruby-VI(hello class)]()です.

# チャート式 Ruby

参照記事は[コチラ]()

## class

今回は class について学んでいく.オブジェクト思考の考え方の肝となるポイントととして

– capsulation(隠蔽)
– inheritance(継承)
– polymorphism(多形)

の 3 つが挙げられるが,method やclass は 1 つ目の隠蔽に属するらしい.

### hello class

以前作成した hello.r

元記事を表示

【Ruby On Rails】特定のユーザーだけが編集ページに遷移できるようにする記述

備忘録です。

# 前提
MacOS Catalina
ruby 2.6.5p114
Rails 6.0.3.4
deviseを導入済(authenticate_user!というヘルパーメソッドを使用)

# 特定ユーザーだけを編集ページへ遷移させる記述

“`ruby:hoges_controller.rb
class HogesController < ApplicationController before_action :authenticate_user!, only: [:edit] before_action :specified_hoge, only: [:edit, :update] before_action :specified_user, only: [:edit] (中略) def edit end def update if @hoge.update(hoge_params) redirect_to root_path else render :edit end end

元記事を表示

qiita_orgのインストール

\![macOS-11.1]() \![ruby-2.7.2p137]()

# Preface (はじめに)

Qiitaの記事を作成から投稿までターミナルで行おうとするツールそれが`qiita_org`です.
本記事では, [作成者さんのQiita記事](https://qiita.com/yamatoken/items/858692178d288c40714d)をもとにインストールから各種設定まで行い, 最後に簡単な例を作ります.

# qiita\_org

## インストール

“`
> gem install qiita_org
“`

ちゃんと入ったか確認

“`
> qiita
“`

“`
Commands:
qiita all [teams/public/private] [options] # post all or

元記事を表示

【Rails】redirect_to と render の違いについて調べてみた。

Rails コントローラーの create アクションと update アクションで並んでいる redirect と render ですが、どう違うのかいまいち分からなかったので調べました。学び始めたばかりの頃はあまり気にしていませんでしたが、先日2つの違いを質問されてうまく答えられなかったので。。。

####結論

【render】
controller から指定された view を直接呼び出す。
動き: controller → view
データなどの状態はそのままで画面だけ貼り替える

【redirect_to】
http リクエストを受けた場合と同じ処理
動き: controller → URL → route → controller → view
指定したURLに一からアクセスしてデータをすべて取得し直す

####実際にやってみた
①通常の controller ファイルの create アクションで動きを見てみる

“`tasks_controller.rb
def create
@task = Task.new(task_params)
if @ta

元記事を表示

docker-compose up 実行時エラーが出たときのDockerの停止、再起動方法 【Cannot start service database: driver failed programming external connectivity on endpoint 】

#【Dockerの停止、再起動方法について】

docker-compose upして

“`ruby
Cannot start service database: driver failed programming external connectivity on endpoint
“`

エラーが出た際などに使える、現在立ち上がっているDockerの確認と停止方法です。

##① Dockerの現状確認
“`ruby
docker ps
“`
を実行し現在立ち上がっているDockerの確認をします。

“`ruby
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4db7e2473829 mysql:latest “docker-entrypoint.s…” 8 days ago

元記事を表示

【Rails】N+1問題と対策

#N+1問題とは
たとえば、.eachメソッド等を使って、複数(N個)のデータを取り出そうとしたとき、N回SQLが発行されてしまい、パフォーマンスの低下につながる問題。

# 例
このような、1対多のUseとMessageモデルがあったとする。

“`app/model/user.rb
class Message < ApplicationRecord has_many :messages end ``` ```app/model/message.rb class User < ApplicationRecord belongs_to :user end ``` コントローラにて、ビューに渡す値を取得 ```app/controllers/message_controller.rb def index @messages = Message.all end ``` contentとそれに紐づくnameを表示 ```app/views/index.html.erb <% @messages.each do |m| %>
<%= m.content

元記事を表示

【Rails】bundle install vs bundle update

<はじめに>
Railsで自作アプリを作る過程でgemをインストールした時に、
ふと”bundle install”と”bundle update”の違いが気になりました。
調べてみたので備忘録として投稿します!

“bundle install”も”bundle update”も、
railsアプリにgemをインストールするという点では同じです。
しかし、インストールのされ方が異なるため、しっかり違いを理解したいところです。
※操作を間違えると、エラーが発生してアプリが動かなくなることもあります!

bundle install = bundlerを使ってGemfileからgemをインストールするコマンド

Point:①Gemfile.lockにないgemをGemfileから探し、見つけたgemをinstallする
    ②–pathオプションを使えば、どこにインストールするか指定できる(よくあるのはvendor/bundle)
③アプリの中にインストールすればgemはアプリの中に、もし指定がなければ
~/.rbenv/versions/proj

元記事を表示

Emacsのorg-modeでQiita記事を書いて上げよう!!

\![macOS-11.1]() \![ruby-2.7.2p137]()

# Preface (はじめに)

Qiitaの記事を作成する際にいちいちブラウザとターミナルを行ったり来たりするのは正直煩わしい…

そこで, ターミナル上でQiita記事を作成して上げれば万事解決という理念で[qiita\_org](https://github.com/yamatoken/qiita_org)というツールが作られました.

これさえあれば記事作成からアップロードまでよりスムーズに行うことができます.

# install (導入)

インストールから各種設定は下の記事に詳しく書いたのでそちらを参考に進めてください.

# Qiita記事作成してから上げるまで

## Qiita記事作成

まず, 記事を作成するためにテンプレートを用意します.

元記事を表示

eachの入れ子についておさらい

## 概要

「配列」 なら取り出しは簡単にできるけど、 「配列の中に配列」 の場合に

– 少し考えてしまう
– 思うように値がとれない

という方向けの記事です。少しでも参考になれば幸いです。

## 目次
– 実践
– 問題
– 解答(解説)
– プロセス

– まとめ
– 参考文献

## 実践

#### 問題

>次の配列からフルーツの名称と合計金額を出力してください。

“`ruby:問題
fruits_price = [[“apple”, [200, 300, 400]], [“banana”, [100, 200, 300]], [“grape”, [2000, 3000]]]
“`

#### 解答 (解説)

“`ruby:解答例
fruits_price.each do |fruit|
# fruits_price から配列を一つずつ取り出し fruit で取り出していく (each を使うことで配列の中の配列に対して処理を行うことができる。)

sum = fruit[1].sum
# fruit[1](金額の部分)のsum

元記事を表示

collection_check_boxesに表示する条件を設定したい

初学者の初投稿です。
自分が忘れないようにメモで投稿します。

form_withのヘルパーメソッドの
collection_check_boxesを使って、チェックボックスを作成しようとしています。

・実装したい事
ログインしているユーザーが登録したcustomerの名前だけを
チェックボックスにして表示したい
(current_user.id == user.id
のcustomerテーブルのnameをチェックボックスにしたい。)

通常の記載方法
こちらではcustomerテーブル全てのnameがチェックボックスになってしまう。

“`haml

= f.collection_check_boxes :customer_ids, Customer.all, :id, :name
“`

解決策
↓こちらで解決出来ました。

“`haml

= f.collection_check_boxes :customer_ids, Customer.where(user_id: current_user.id), :id, :name
“`

簡単な内容ですが、
ピンポイン

元記事を表示

Railsでフォロー機能を実装した(Ajax通信)

#概要
SNSなどユーザーを扱うアプリケーションではフォロー機能などはよく扱われる。Railsにてフォロー機能を実装する際は、多対多の関連付けをしてユーザー通しを関連付けます。
今回、ユーザー一覧画面(index)とユーザー詳細画面(show)にてフォロー機能を実装した。
また、ユーザビリティを考慮し、Ajax通信にてフォロー機能が使用できるようにした。

#前提
* Userモデルは作成済み
* JQueryはインストール済み

#1.Relationshipモデルの作成
ユーザー通しを多対多の関連付けを行うためRelationshipモデルを作成します。RelationshipモデルはUserモデルの中間テーブルとして作成し、Userモデルのidを扱います。

“`terminal:terminal
rails g model Relationship
“`

“`ruby:create_relationships.rb
class CreateRelationships < ActiveRecord::Migration[5.2] def change crea

元記事を表示

Unicorn の timeout (61s > 60s), killing で worker が死なない件

Sinatra + Unicorn + Nginx で、重たい処理があって、タイムアウトをしたのは良いのですが、何故か Unicorn が エラーを吐いただけでワーカーが死んでくれなくて、ついには稼働可能なワーカーがなくなってアクセスできない現象がおきました。

#ワーカーが死なないので、こんな感じで食い潰される。。。

“`
E, [2020-12-28T16:40:26.120353 #3627] ERROR — : worker=1 PID:3634 timeout (61s > 60s), killing
E, [2020-12-28T16:40:27.122323 #3627] ERROR — : worker=1 PID:3634 timeout (62s > 60s), killing
E, [2020-12-28T16:40:28.124271 #3627] ERROR — : worker=1 PID:3634 timeout (63s > 60s), killing
E, [2020-12-28T16:40:29.126276 #3627] ERROR —

元記事を表示

OTHERカテゴリの最新記事