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

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

Rubotyがサーバーレスで動くようにした

この記事は [PONOS Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ponos) の25日目の記事です。
昨日は[@kerimeka](https://qiita.com/kerimeka)さんの[ゲームにおけるFirebase 活用例](https://qiita.com/kerimeka/items/9cee8a122d815b3186d2)でした。

??何とか全枠埋まりました!??
記事を書いて頂いたみなさん、ありがとうございました!

——

[Ruboty](https://github.com/r7kamura/ruboty)という、Rubyでチャットボットが作れるOSSがあります。
個人的に凄く好きなOSSで、何とか趣味なり仕事で使えないかと考えています。(趣味方面だと、[@gymtter](https://twitter.com/gymtter)で一応使ってる。)

## やりたかったこと

Rubotyはサーバー上に常駐して発言を待ち受け続けますが、これだと常に一定のリソースを

元記事を表示

undefined method `invoke_with_build_args’ for nil:NilClass への対策

## やりたかったこと

RailsアプリとS3を連携させるために、`aws-sdk` gemを入れようとした。

“`
bundle add aws-sdk –version ‘~>2.3’
“`

## 起こったこと

“`
Warning: the running version of Bundler (1.16.1) is older than the version that created the lockfile (1.17.1). We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.
“`

`gem install bundler` しろと怒られたので、その通りに実行。

“`
ERROR: Loading command: install (LoadError)
dlopen(/usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/x86_64-darwin16/openssl.bundle,

元記事を表示

BIP47 Payment Code を bitcoinrb (Ruby) で実装してみた

# Payment Code
Payment Code は BIP47 で定義されるている Bitcoin のアドレスの形態の一つです。
[bips/bip-0047.mediawiki at master · bitcoin/bips](https://github.com/bitcoin/bips/blob/master/bip-0047.mediawiki)
Bitcoin においてアドレスはプライバシーの観点から再利用することは推奨されていません。
しかし、アドレスを使い回さないということは、同じ人に送金するにもかかわらず毎回銀行口座が変わってしまう状況に近く不便です。
そこで BIP47 では Payment Code と呼ばれるアドレスの別形態を定義することで、同じ Payment Code への支払いをアドレスの再利用を行わずに実現しました。
つまり、UI上同じ Payment Code 宛に複数回の支払いを行っても、Bitcoin プロトコル上では毎回別のアドレスへの送金が行われているのです。
また受け取り側も、複数回の支払いを受けた場合でも送金元ユーザー(Paymen

元記事を表示

ヘルプデスクから人材コンサルタントになりました

#自己紹介
僭越ながら、ランスタッドアドベントカレンダー最終日に出稿をさせて頂くことになりました。昨年のアドベントカレンダーから拝読してくださった方は大変ご無沙汰しております。
昨年の記事をレビューしたい方は、こちらからお願いします!
・[IT未経験者がサーバーOSの違いを調べたお話](https://qiita.com/Okachan-Honpo/items/1e92c16299a0ce7ff3df “IT未経験者がサーバーOSの違いを調べたお話”)
・[IT未経験なのに2万のキーボードを買ってイシキがタカイタカイになった話](https://qiita.com/Okachan-Honpo/items/1d52a338bad35657baf0)

#ヘルプデスクで学んだ1年
社内のN/W周りの整備から社内のPC周りのトラブルシューティングを中心にヘルプデスク業務に携わりました。緊急性の高いN/W不調やPCの故障など多くの課題を迅速に対応するSkillとコミュニケーション能力のレベルがあがりましたね。(自画自賛)

~~だから俺だってなにかしなくちゃあな・・・かっこ悪くてコンサルタント

元記事を表示

クリスマスなのでRubyの22年に渡るコミットの歴史を可視化してみた

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

本日はクリスマスということで、例年ならRubyの新バージョンがリリースされる日になります。
新バージョンのRuby 2.7は[RC2](https://www.ruby-lang.org/ja/news/2019/12/21/ruby-2-7-0-rc2-released/)までやってきたので、リリースに向けて着実に進んでいるようです。
(本記事投稿時点ではまだリリースはされていません。)

そこでコミッターのみなさんのハードワークに感謝をしつつ、Rubyの22年に渡るコミットの歴史を可視化してみたいと思います。

# はじめに

一番最初の動機はコミッターのみなさんが日々どれだけのコミットを積み重ねているのかを過去から遡って見てみたいというものでした。しかしRubyの誕生は1993年と言われており、27年の開発の歴史の中で関わっているコミッターの数は200人を超えるので単純な棒グラフや線グラフでは可視

元記事を表示

【クソ記事】俺ガイルの玉縄くんがロジカルシンキングで論理的なアドバイスをしてくれるslackbotを作った。

## 初めに
今回は皆さんの悩みを解決するbotを作りました。
このslackbotがあれば生活水準が格段に上がること間違いないでしょう。
(この記事は作者の独断と偏見で作られていますのでご了承ください。)
## 解決しようと思った課題
皆さん、今日は暇で何をすればいいか分からない。逆に忙しすぎて何から手をつけていいのか分からない。そういった経験はありませんか。おそらくこのような経験をしている人は多いことでしょう。
特に忙しすぎて何から手をつけていいか分からくて、考えていたら1日が終わっていたなんて日常茶飯事でしょう。
ということで今回はそういった問題を解決することにしました。
## 解決方法
俺ガイルの玉縄くんがロジカルシンキングで論理的なアドバイスをしてくれるslackbotを作る。
ここはタイトル通りです。
玉縄くんが誰かという人は俺ガイルのアニメを見るか、下の記事を見ましょう。
https://matomame.jp/user/FrenchToast/b53120d3499f5abff7fd?page=1
要は僕たちと違ってロジカルシンキングで論理的な考え方をできる人です。

元記事を表示

Vagrant + VirtualBoxでつくるRails 6系の環境構築

ここ数年Rails触ってなかったので、以前の[こちら](https://qiita.com/GenTamura84/items/0f97c117df6b1b6e8c0f)で書いたRails5系の記事を6系に更新したいと思います。

バージョンは

“`
Vagrant 2.2.6
VirtualBox 6.0.14
“`

です。

## 1. VagrantとVirtualBoxをインストール

### Vagrant
以下のリンクより、利用されている端末のOSを選択して、インストーラーをダウンロードし、Vagrantをインストールしてください。
https://www.vagrantup.com/downloads.html

### VirtualBox
以下のリンクより、利用されている端末のOSを選択して、インストーラーをダウンロードし、VirtualBoxをインストールしてください。
https://www.virtualbox.org/wiki/Download_Old_Builds_6_0

※ 2019/12/24現在、VirtualBox 6.1だと、 `vagr

元記事を表示

N + 1問題, そしてincludesとは何なのか?

# はじめに
Ruby on Railsを学習中ですが、その中でも、分かったような分からないようなモヤモヤする…
と個人的に感じた内容について、記事化していこうと思います。

### 今回のお題

#### 「N + 1問題とは何?, そして、includesを使うことのメリットは?」

「データベースからデータを取り出す際にincludesを使用すると、 N+1問題を解消し、効率的である(?)」

???:frowning2:
N+1問題や、それを解決するためのincludesメソッドについて、もやっとした理解だったので、
個人的に整理をつけるべく、まとめてみました。

# N + 1問題とは何だろう?

下記のようなアプリを考えます。

### チャットアプリ
よくある掲示板サイトのような感じです

– 機能
– 複数人のユーザーがいる
– チャットグループがある(スレッドのようなもの)
– チャットグループには、チャットテーマがあり、複数人のメンバーが参加することができる
– そのチャットグループに所属しているメンバーは、メッセージを投稿できる
![

元記事を表示

Railsアプリ、EC2の本番環境でMySQLを直接いじる方法

自分の作ったアプリを本番環境で起動させた時に、エラーが出てしまうことはあると思います。
currentフォルダ内のlogを見て、エラーを発見したとしても、それがMySQLのエラーだと直接コマンド打たないと行けないので、修正が結構めんどくさいんですよね!

そこで、よく使うMySQLのコマンドをまとめました!

##ログイン

“`
$ mysql -u root -p
Enter password: パスワードを入力(実際に文字は見えません)
“`

##データベースの確認
“`
show databases;
“`
以下のように出てきます

“`
+———————————-+
| Database |
+———————————-+
| information_schema |
| xxxxxxxxxxxxxxxxxx|
| mysql |
| perform

元記事を表示

キーワード引数というコントリビュートチャンス

# Ruby2.7へ向けて

そろそろRuby2.7の季節がやってきましたね!
すでにアップデート準備はすませましたでしょうか?

Ruby3へ向けた移行パスの一環として、Ruby2.7からキーワード引数の仕様が変更されます。
これは多少の破壊的な変更があり、実際にRubyのアップデートを考えるときには悩みどころとなりそうです。

ここでは実際に手元のアプリケーションをRuby2.7.0-rc2に移行する際に遭遇したケースをヒントに、自分なりに想定できる対処方法などを記してみます。

※ なおキーワード引数の新仕様や、その具体的な挙動については、こちらに素晴らしくわかりやすい解説記事があるので参考にしてみてください。

https://qiita.com/jnchito/items/c15ac23791e0320e0fc2

なおこの移行に伴い、**たくさんのgemにおいてコントリビュートチャンス祭りが発生すると思われます**
Rubyエンジニアの皆様

元記事を表示

データベース–メモ

# DBでよく使う型

string 文字列型
text テキスト(不定長文字列)型
integer 整数型
float 浮動小数点数型
decimal 固定長整数型
datetime 日時型
timestamp タイムスタンプ型
time 時刻型
date 日付型
binary バイナリ文字列型
boolean 真偽値型
references 他のテーブルへの外部キーの定義、_id が付いた整数

## 電話番号の型を設定するとき

integer型だと10桁まで。電話番号は11桁の時もある。なのでDBに登録できないことがある。
また、09012345678の場合、最初の0が消えることがある。

なので string型をおすすめします。
string型の文字列だとハイフン(ー)もDBに保存ができる。
“`
def change
create_table :addresses do |t|
t.references :user, foreign_key: true, null: false
t.string :post_code,

元記事を表示

Ruby testコマンド じゃんけん

#じゃんけんのプログラムのテストを実行

##1.テストする、じゃんけんのプログラム

参照
https://qiita.com/ktpnobu/items/a8525f8cceddd486c219

~~~Ruby
#Rock-Paper-Scissors
#0-1-2

p ‘rock-paper-scissors’
player=gets

a=0

if player==”rock”
player_hand=0
a=1
elsif player==”paper”
player_hand=1
a=1
elsif player==”scissors”
player_hand=2
a=1
end

program_hand=rand(3)

if program_hand==0
program=”rock”
elsif program_hand==1
program=”paper”
elsif program_hand==2
program=”scissors”
end

if a==0
p ‘one more please’
if player_han

元記事を表示

世の中の1%の人の為になるかもしれないRails tips

# はじめに
本記事は[Zeals Advent Calendar 2019](https://qiita.com/advent-calendar/2019/zeals)の24日目です。メリークリスマスイブ!

本記事では僕が日々開発しているなかで、どうしてもなんとかしなければいけない…という時に活用したtipsをまとめたものです。
タイトルにある通り、エッジケースすぎるのでもし同じような状況で困っている人の為になれたら幸いです。

# 環境
Rails 5.2.3
Ruby 2.5.5

# tips
といっても今回紹介するのは2つです

– カラムにaliasをかける
– caller

## カラムにaliasをかける
Railsではcolumnに対してaliasを貼ることができます。

| モデル名 | カラム名 |
|:—————–:|:——————:|
| Button | name |
| Choice | label |

このようなモデルが2つあるとします。
カラム名はそれぞれ違いますが同じものとして扱いたい時があると思い

元記事を表示

Youtuber向けにサービス開発したが需要が無かった話

##はじめに
プログラミング始めて半年くらいで自分の好きなタイ在住日本人Youtuberに使ってもらいたくて開発した時の話です。結論から言うと上手くいかなかったです。その原因としてリサーチ不足と自己満の開発であったからです。今後サービス開発をする人にとって今回の自分の経験が役立てばいいなと思い、今回のことの経緯をまとめておきます。

##結論
・競合サービスのリサーチが大切
・ユーザーにしっかりとリサーチすることも大切
・自己満のサービスになっていないか

##何を作ったのか
私は1つのMAP上でYoutuberは撮影した場所にピンをさすことができ、そこをクリックすると詳細情報が見れて最終的にはYoutubeチャンネルに移動する。そして視聴者はYoutuberに撮影して欲しい場所に対してピンを挿してリクエストできる双方向コミュニケーションサービスを開発しました。

##難易度
サービス自体はRuby on Railsで開発を行いProgate卒業すれば作れるような簡単なものでした。
MapにはGoogle map APIを使用しました。
そして機能自体もシンプルだったので開発自体はそれ

元記事を表示

Railsチュートリアルを必要コマンドだけをまとめて記しました。第1章

|       |   Railsチュートリアル   |
|:——————:|:——————:|
| 対象者 | 中級者向け(最低でもRuby, HTML/CSS, Railsの基礎) |
| 何ができるか | 本格的なアプリを開発でき、最終的にWeb上に公開できる |
| 開発環境 | AWS Cloud9 or ローカル環境 |

#1.2.2 Railsをインストールする
| リスト 1.1: バージョンを指定してRailsをインストールする |
|:—————–|
| $ gem install rails -v 5.1.6 |

| リスト 1.3: rails newを実行する (バージョン番号を指定) |
|:—————–|
| $ cd ~/e

元記事を表示

ドロップダウン機能を有効にするため、Railsのapplication.jsファイルを通して、Bootstrapに同梱されているJavaScriptライブラリとjQueryを読み込むようアセットパイプラインに指示

railsチュートリアルで、Accountをクリックしてプルダウンメニュー出すために、少し手こずったのでメモ。

実装させたい機能⬇️
![fullsizeoutput_b8c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508248/3dbcf45c-8c8d-802a-0263-771a884bb949.jpeg)
application.jsに2つのライブラリを追加。

“`application.js
//= require rails-ujs
//= require jquery    ⇦追加
//= require bootstrap   ⇦追加
//= require turbolinks
//= require_tree .
“`
![fullsizeoutput_b8b.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508248/0551ebd6-ce14-558f-d626-69e1de0

元記事を表示

Railsで作成したアプリケーションにRspec(E2Eテスト)実装してみた

# はじめに

本記事は、Railsのテストフレームワーク(Rspec)の手順をまとめたものになります。
また、当記事は以前の投稿記事「[Railsでセルフパスワード変更ページを作ってみた](https://qiita.com/yuki68427913/items/6acfbdd8b03227dc5c51)」で作成した環境を前提に作成していますので、参考にされる方はご注意ください。

# 前提条件

* 開発環境はCloud9
* Linuxコマンドの使い方がわかる程度の力量
* Web開発は初学者クラスの力量(ruby on rails開発未経験/Progateのレッスンは修了済)
* Rspec初学者クラスの力量

# 参考記事

> [RSpecとCapybaraを使ってE2Eテストの土台を作ってみる](https://qiita.com/takayamag/items/8bde23a90ea4fc3c42a7)
> [RailsでRSpecの初期設定を行う際のテンプレートを作ってみる](https://qiita.com/yuta-ushijima/items/ffb34823

元記事を表示

rails 『アウトプット』

application.scssがおかしいと思い@importの順番を変えたが反映されず名前を変えてもエラーが出なかったためapplication.html.hamlを見たら配置ミスがあった。application.html.hamlはhaml,scss両方を統合しているため確かめる必要がある。

元記事を表示

Rubyでじゃんけん

#Rubyにてじゃんけん (Rock-Paper-Scissors)

##1.じゃんけんの構造化

そもそもじゃんけんとは??
グー、チョキ、パーのどれかを互いに選択し、勝敗を決めるものである。
今回はプレイヤーとプログラムで戦う。
グー Rock
チョキ Paper
パー Scissors
で対戦。
(プログラムでは、乱数を返す、randが活躍するが、それは後々)

##2.playerの手選択
入力による代入

~~~Ruby
p ‘rock-paper-scissors’
player=gets
~~~

↑rock、paper、scissorsのどれかを選んでもらう
プレイヤーがスペルミスしたときの対応も重要になる

##3.programの手選択
乱数で決定する。

~~~RUby
program_hand=rand(3)
~~~

↑program_handは0、1、2を乱数で返すことになる。

##4.整理
人間にとっては、Rock-Paper-Scissorsという文字表記が分かりやすいが、乱数を0、1、2でやったように、プログラム(機械)からすると、文字よりも数字

元記事を表示

railsにてcreated_at の曜日も日本語で表示する方法( lメソッド)

– 目標①:railsにて、DBからcreated_at の日時を表示(取得)したい。

“`変数.html.erb
<%= link_to(変数.created_at.strftime('%Y年/%m月/%d日(%a)%H:%M')," リンク先を記入") %>
“`
– まず試したコード
(今回は、更にlink_toを使いたい)

– 「 XXXX年 XX月XX日(mon) XX:XX 」とまで成功。
– <%= 変数.created_at.strftime('%Y/%m/%d(%a)%H:%M') %> を実行し、曜日が英語標記のままのため苦戦。
– #{%w(日 月 火 水 木 金 土… 系も試したが、上手くいかない。
– config/initiallzers/time_formats.rb等も作成し定義を試したが、上手くいかない。

ーーーーーーーーーーーーーーーーーーーーー

<備忘録>
***目標② (mon)ではなく、曜日も日本語で表示する簡単な方法***

①gem ‘i18n_generators’ をbundleインストール

②en.y

元記事を表示

OTHERカテゴリの最新記事