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

Ruby関連のことを調べてみた2019年12月11日
目次

警察官二人の取り調べ定義

あなたは警官です。aとb二人の容疑者の取り調べをしています。
どちらも証言がTrue、またはFalseであればその証言はTrueです。
しかしどちらかがFalseでTrueであればその証言はFalse、と出力するメソッドを作りましょう。

呼び出し方:
police_trouble(a, b)

出力例:
police_trouble(true, false) → False
police_trouble(false, false) → True
police_trouble(true, true) → True

“`
def police_trouble(a, b)

if a && b || !a && !b
puts “True”
else
puts “False”
end

end
“`
アルゴリズムの組み立て方

まず、aとbの両者の証言がTrueの条件を考える。

“`
【a && b】 # a かつ b がtrueの時の条件式
“`

次に、aとbの両者の証言がFalseの条件を考える。

“`
【!a && !b】 # a

元記事を表示

エラーを乗り越えろ!! くじけないRuby初心者のRuby On Rails + Vue.js 環境構築(Ruby 2.6.4, Rails 6.0.1)

# Ruby On Rails + Vue.js で何かを作りたいと思って環境構築し始めたところ、次々とエラーが出てきました。環境を構築したいだけなのにエラーで前に進めないのはとても辛いです。構築手順についてはわかりやすい先輩型のQiitaがあったので、今回はそれに沿って構築した際に、詰まった箇所とその対応策を備忘録としてまとめます。

## 参考文献に沿って構築 + 詰まった箇所

#### 1. まずはこの記事に沿って実行

 [Ruby初学者のRuby On Rails 環境構築【Mac】](https://qiita.com/TAByasu/items/47c6cfbeeafad39eda07)

 ❶Homebrewはインストール済みだったので、アップデート
 ❷rbenvもインストール済みだったので、Homebrewでアップデート
 ❸一応`cat ~/.bash_profile`でrbenvのパスが通っているか確認
 ❹せっかくなので今回は[本家サイト](https://www.ruby-lang.org/ja/downloads/)で安定版と書かれていたRuby2.6.

元記事を表示

Windows10 Ruby2.6でRubyOnRailsインストールメモ

Windows10だと良く失敗するので。
なんかWebpacker必須になったため面倒くさくなった。

#(1)Rubyをインストール

安定版の2.6あたりをWindows用のInstallerでいれる。
https://rubyinstaller.org/
なんか途中で立ち上がる黒い画面のRubyInstaller2と書いてあるやつに対しては、「1」と入力後Enter

終わるともう一回出るのでEnterで終える。
#(2)NodeJSをインストール

https://nodejs.org/ja/
LTS版を入れておけばよい
#(3)Yarnをインストール
https://yarnpkg.com/lang/ja/docs/install/#windows-stable
入れる。
#(4)Railsをインストール
コマンドプロンプトを立ち上げて

“`
gem install rails
“`

多分うまくいく。

#(5)Railsのプロジェクトを作る
プロジェクトを作りたいフォルダに移動します。そしてコマンドプロンプトで

“`
rails new プロジェクト名
“`

元記事を表示

まるで魔法だな(パーシャルをrenderし繰り返し処理をする)

#魔法かな??

これは**ユーザーの一覧**を取得したい!!(単一のユーザーを表す部分をパーシャルとして分けたい)って時に知って驚いたこと

###とりあえずeachを使ってみる
一覧表示ということでeachかな?ってことでこう書いた

“`ruby
<% @users.each do |user| %>
<%= render user %>
<% end %>
“`
実はこれ良くなくてパーシャルをrenderする際はeachを使うべきではないみたい
**@usersという変数がコントローラーにあることが前提になってしまう**ので、再利用性が低くなってしまい、せっかくパーシャルに分けたメリットが薄くなってしまうため。

###collectionを使ってみる
“`ruby
<%= render partial: 'users/user', collection: @users %>
“`
eachがダメなのはわかったのでcollectionで書いてみた これはキタかな?

しかし**残念☆**    良いんだけど冗長!!!
どうすればいいんだ、、、

###たどり着いた良

元記事を表示

はじめての自作Gem – シンプルなGemを作成して公開する

# はじめに
社内勉強会でRuby Gemについて勉強しました。その復習を兼ねて自身でGemを作りながら、Gemの作り方について書いていこうと思います。かなりシンプルな実装になるので、だいたい30分ぐらいで作れると思います。※事前準備に必要な時間は入れていないです。

ちなみに私の環境です。

“`sh
Ruby version 2.6.3
Bundler version 2.0.2
“`

# Gemの作り方
### 事前準備

事前に以下の準備が必要です。

– Githubに今回作るGemのソースコードを置くための新しいリポジトリを作成
– RubyGemsのアカウント登録
– Bundler
– bundle -v をして`Bundler version 1.9.0`未満の場合、`gem update bundler`してください。

### Gemのベースを作成する

Bundlerを使って作成します。Bndler無しでもGemの作成はできますが、現在はBundlerを使うのがスタンダードのような雰囲気があります。

`bundle gem gem_name`で簡

元記事を表示

書籍Java言語で学ぶデザインパターン入門」をRubyで書いてみて分かったこと

# はじめに
この記事は [Ruby Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ruby) の11日目の記事です。

現在、エンジニアになって9ヶ月が経ったのですが、最近は、オブジェクト指向やデザインパターンのような基礎的な部分を理解しようと努めており、ここ1~2ヶ月で下記5冊の本を読みました。

– [オブジェクト指向実践ガイド](https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E8%A8%AD%E8%A8%88%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-Ruby%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B-%E9%80%B2%E5%8C%96%E3%81%97%E3%81%A4%E3%81%A5%E3%81%91%E3%82%8B%E6%9F%94%E8%BB%9F%E3%81%AA

元記事を表示

サマーウォーズで「けんじ君」は「なつき先輩」の誕生日の曜日をどうやって特定したのか??

みなさんご存知サマーウォーズで、けんじ君となつき先輩が曽祖母の誕生会のための電車で移動中、けんじ君がなつき先輩の誕生日から曜日を当てるシーンがある。

僕が初めてサマーウォーズを見たのが、中学生(おそらく)の時で「え?なんでわかるん?すごくない?」となったのを今でも覚えている。さらに、けんじ君が「モジュロ演算ってのを使って!」と言っており、「あ、この人やばいわ。」となったのも覚えている。

なぜか今更になって、「あれどうやったんやろ?」と思ったので、調べて実装した。

## ツェラーの公式
「日付」「曜日」「特定」などでググると簡単に公式が出て来た。ツェラーの公式というもので、年・月・日から曜日がわかるらしい。

[ツェラーの公式 wikipwdia](https://ja.wikipedia.org/wiki/%E3%83%84%E3%82%A7%E3%83%A9%E3%83%BC%E3%81%AE%E5%85%AC%E5%BC%8F)

## 実装
数式ははmarkdownでうまく書けなかったので、Rubyで実装した。色々な形があるが、その中の一例。

“`ruby

year

元記事を表示

Rails6.0.1 + MySQL8.0.18をDockerで動かす(メモ)

**Rails6.0.1** + **MySQL8.0.18**を**Docker**で起動できたので、メモを残したいと思います。
本当に起動しただけなので、問題があるかもしれません。

* 開発環境
– macOS Catalina 10.15.1
– Docker Version 2.1.0.5(40693)

# プロジェクトディレクトリの下にファイルを用意する
myapp/
 ├ .env
 ├ docker-compose.yml
 ├ Dockerfile
 ├ Gemfile
 └ Gemfile.lock

“`:.env
MYSQL_PASSWORD=password
“`

“`yml:docker-compose.yml
version: ‘3’
services:
db:
image: mysql:8.0.18
command: “–default-authentication-plugin=mysql_native_password”
environment:
– MYSQL_ROOT_PASSWORD=p

元記事を表示

管理者画面の作り方 admin Rails

##アプリの管理者と一般ユーザーで使える画面を分けたい!!
*なぜこんなことがしたいか?*
例:不適切なユーザーなどがいたら、管理者のみそのユーザーを削除したい。このようなケースを想定して管理者画面と一般ユーザー画面を作る必要があります。

***もともとあったController(例:postscontroller)とは別に /admin のURLにアクセスすると、
postsの一覧が出るようにしましょう(こちらは管理者がpostを管理するための画面。一般ユーザーはアクセスできない)***

1 . コントローラーを作成 [参考](https://kurose.me/namespace-admin/)

“`
bundle exec rails g controller admin::posts
“`

2 . routingを作成(indexも作成しといてください)

“`rb
get “/admin” => “admin/posts#index”
namespace :admin do
resources :posts
end
“`

3 .

元記事を表示

RubyのArrayクラスのメソッドをたくさん使ってみた

part1に引き続きRubyのArrayクラスのメソッドを使っていきます。

[part1はこちら](https://qiita.com/Takatoshi_Hiki/items/24acdfb331213df96acf)
## 29.repeated_permutation
配列の要素から引数n個を選んだときの重複順列(順序あり、重複を許す組合せ)を数え上げる。

“`
array = [1,2,3]

array.repeated_permutation(2) do |first, second|
printf(“(%d, %d) “, first, second)
end
“`

“`
(1, 1) (1, 2) (1, 3) (2, 1) (2, 2) (2, 3) (3, 1) (3, 2) (3, 3)
“`

## 30.first
配列の最初の要素を返す。

“`
array = [1,2,3]
p array.first
“`

“`
1
“`

## 31.any?
ブロック引数itemに要素を入れながらブロックを繰り返し実行し、ブロックが真が返

元記事を表示

チーム開発事前準備

#書いてあること
– Githubリモートリポジトリ共有方法(アプリ作成〜SNSグループ作成と連携)

1.ローカルで作って共有する方法

– 新規アプリ作成
– gitの管理下に置く
– リモートリポジトリ作成

~~2.リモートリポジトリで作って共有する方法~~

こちらの方法、試しましたが上手くいかず。確認中です

– 新規アプリ作成
– リモートリポジトリ作成

3.Github共有方法

– 招待する側
– 招待される側

4.SNSでチーム作成(今回はSlack)

– チャンネル作成
– チャンネル共有

5.GitHubの通知がSlackに飛ぶようにする

– 参考ページ

– 終わりに

#Githubのリモートリポジトリ共有方法
##1.新規アプリ作成をし、誰か一人がリモートリポジトリを作成する
– 新規アプリ作成

“`rails:ターミナル
$rails new 作りたいディレクトリ名 -d mysql 
“`
[Rails 新規アプリケーションの作成①](https://qiita.com/i-to-to-to-mi/items/8a7105f1adb

元記事を表示

Javaエンジニアが今さらRubyの基礎文法を覚えるために対比した その1(基本、変数編)

# はじめに
別の思想の言語を覚えるなら差分で覚えるのが早いのではないかと思って、Rails始める前に基礎文法やり直そうチートシートみたいなのを作成すると覚えるやろ的な発想です。

色々と不足はあるとは思いますが、とりあえず今考えて必要かなと思ったところだけにしてるので、ご了承ください。
書くことが多いため記事は分割しまくります。

つっこみは大歓迎です。

# 環境
[paiza.io](https://paiza.io/)でこういう時は実行すると楽です

これを作った時のバージョンは以下です。バージョンは[ヘルプ](https://paiza.io/help?locale=ja-jp)から確認できます。

Ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
Java openjdk version “12” 2019-03-19

# コメント
コメントの書き方について

“`Java
// 1行の場合

/*
複数行の場合
*/
“`

“` Ruby
# 1行の場合

=begin
複数行の場合
=en

元記事を表示

【Rails】formで情報を登録する時、〇〇_idカラムから親要素の情報を取得して送信する方法

#環境
rails 5.2.4
ruby 2.5.7

#実装したい内容
子要素をformでデータベースに登録する際、selectでデータベースに既に登録されている、親要素を選択したい。

#具体的な状況
子要素→item
親要素→genre
itemsテーブルにgenre_idカラムを持つ。
form_withなどでgenre_idを登録したい。その時、genresテーブルに登録されたgenreのtitleを直接、選択できるようにしたい。

#書き方
[items/new]

“`
<%= form_with model:@item, url: admins_items_path, method: :post do |i| %>

name

<%= i.text_field :name %>

genre

<%= i.select :genre_id, Genre.all.map {|p| [p.title, p.id]}, :prompt => “選択してください” %>

<%= i.submit "submit!" %>
“`
selectを使うこと

元記事を表示

Ruby の Net::FTP で Net::FTP#close してもコネクションが残る話

事象
—-

`ensure` 節を使って `Net::FTP#close` しても、コネクションが残ってしまう事象に遭遇。

“`
$ ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin18]
“`

原因
—-

`Net::FTP#put` で確立するデータコネクションが `#write` などで例外が発生した時に切断されていない模様。

“`ruby
# https://github.com/ruby/ruby/blob/00f4c13e22967de1d7e42085b2fc32bf6718f580/lib/net/ftp.rb#L683-L707
def storbinary(cmd, file, blocksize, rest_offset = nil) # :yield: data
if rest_offset
file.seek(rest_offset, IO::SEEK_SET)
end
synchronize

元記事を表示

おれのYoutube学習サポートアプリになりゃあ 番外編 form_with

#form_with について

form_withの使い方ってあんまりネットに乗ってないので、自分の備忘録として書いておこう

“`
= form_with model: @note do |form| #この@noteはnewアクションで作ったインスタンス変数。今からこいつに対してcreateアクションするよ〜ってこと。
.header__form__titlebox
.header__form__titlebox__title
Title
= form.text_field :title, class: “header__form__titlebox__form” # どのカラムに入れる情報なのか教えてくれている。今回は、title
.header__form__contentbox
.header__form__contentbox__content
Content
= form.text_field :content, class: “heade

元記事を表示

おれのYoutube学習サポートアプリになりゃあ#4

#YouTube API の実装
今回やりたかったのは、YouTubeの API を呼び出して、検索ワードから任意動画ノートと紐つけること。

まず、トップページから検索用のviewに飛ぶようにリンクを設定したい。
① ルーティングとコントローラを作成する

コントローラ生成

“`
$ rails g controller youtube
“`
ルーティングを新たに設定

“`
resources :youtube do
collection do #member do もあるが、今回は特にidを使用しないのでこれでいく
get ‘search_movie’ #search_movie アクションを新たに設定。HTTPメソッドはyoutube データベースから情報を取ってくるから、GET
end
end
“`

“`
.headecontent
.headecontent__leftcontent
= link_to notes_path do
.headecontent__leftcontent__bigtitle

元記事を表示

RUBYメソッドの定義

##なぜ定義するのか?
・ソースコードが複雑になるのを防ぎ、自らメソッドを定義することで管理がしやすくなり見やすく整理できる。

##書き方
***「def 〜 end」***を用い、以下のように表記される。
*「def」=「define(定義するの意味)」

“`css

「def 〜(メソッド名) end」
“`
***def***と***end***に挟まれた「〜」に書かれた部分が***メソッド名***になる。
名前は任意に付けることができますが、以下のルールがあります。
***1.小文字の英語から始める***
***2.単語を繋ぐ場合は_(アンダースコア)で繋ぐ。***
***3.数字から始めない。***

プログラム中でメソッド名を書くことで、***「def メソッド名 end」***の間に書かれた処理が実行される。

“`css
def メソッド名
# 実行する処理
end
“`

##メリット
1.複数回実行する処理を繰り返し記述しなくても済む
2.コードに変更が生じた際、修正する箇所が少なくて済む
3.処理の呼び出しに「メソッド名」だけで呼び出せる

##

元記事を表示

VBScriptを作ってみる(字句解析編)

では、VBScriptのインタープリターを作ってみましょう。
筆者がBASIC系言語に触れる経験がなかったため、VBScriptの言語構文が特殊に見え、そのため数々の罠にハマってきました。
言語を理解するためには、その言語のインタープリターを実装してみるのが良いと思ったので、試しにVBScriptのスモールセットのインタープリタを実装してみることにしました。

以下の機能が実装されていることを目標とします。

– 制御構文(If, While, For)
– 関数及びサブルーチン

逆に、以下の機能は間に合わなかったために、実装を見送りました。

– 配列
– オブジェクト指向

では、最初にVBScriptのソースコードを字句解析します。
字句解析はソースコードをトークン列に分解する操作で、多くの場合にインタープリターやコンパイラーの処理の最初に行われます。

例えば、(1)のVBScriptのコードを字句解析すると、(2)の結果が得られます。

“`vb:(1)
Dim hoge, fuga ‘ 変数宣言
hoge = 1
fuga = (hoge + 1) * 2
“`

`

元記事を表示

prop(‘disabled’, false)を使ってもdisabled属性が消えない問題

# やりたいこと
jQueryで、

“`js
e.preventDefault();
“`
を使った後にsubmitボタンにdisabled属性が付いてしまうので、これを

“`js
prop(‘disabled’, false)
“`
を使って削除したい。

# 上手くいかないコード

“`js
$(document).on(‘turbolinks:load’, function(){
$(‘#new_item’).on(‘submit’, function(e){
var child_category = $(“#child_category”).val();
var grandchild_category = $(“#grandchild_category”).val();
if(child_category == “—” || grandchild_category == “—“){
e.preventDefault();
alert(‘カテゴリを選択してください’);
$(‘input[nam

元記事を表示

dexidp/dexが発行したJWTをRubyで検証する

# はじめに

OpenID Connect Providerが発行するID TokenをRubyのJWTライブラリを利用して検証してみました。よくあるサンプルコードは自前のRSA鍵を利用して検証していたりするので、実際にdexidp/dexが発行したID TokenのJWTを検証するコードをRuby+JWTライブラリで実行してみました。

テストはDexを利用していますが(/.well-known/openid-configurationで情報を提供する)一般的なOpenID Connect Providerであれば同様に動くはずです。

# 環境

* Ubuntu 18.04 LTS 64bit版
* Packages
* ruby (2.5)
* ruby-bundler (1.16)
* dexidp/dep (server, https://example.com/dex) + example-app (client)

JWTはexample-appを利用して入手しています。Ubuntuパッケージのruby-jwtはバージョンが古く、サンプルがそのままでは実行でき

元記事を表示

OTHERカテゴリの最新記事