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

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

Ruby表示メソッド p、pp、puts、print

#Rubyの表示メソッドの違いについて

##1.printメソッド
引数を出力するメソッド
引数の型が揃ってないとエラー

##2.putsメソッド
引数を出力するメソッド
引数の型が揃ってないとエラー
printと違い、引数の最後に改行が自動で入る

##3.pメソッド
引数を表示をしたうえで、引数のオブジェクトが分かりやすいように表示させる
デバック用

##4.ppメソッド
引数を表示をしたうえで、引数のオブジェクトが分かりやすいように表示させる
pと違い、適切なインデント、適切な改行が特徴であり、配列を扱うときに効果大
デバック用

##5.参考文献

【Ruby入門】print puts p printf 出力メソッドを極める!

https://qiita.com/naoge/items/f5d84581d3a301a9c22f

元記事を表示

Ruby 2.7で発生する「プロを目指す人のためのRuby入門」との差異について

## はじめに

2019年12月25日に、Rubyの新しいバージョンであるRuby 2.7がリリースされました。
一方、2017年11月に出版した書籍「[プロを目指す人のためのRuby入門](https://gihyo.jp/book/2017/978-4-7741-9397-7)」(通称・チェリー本。以下、本書)は執筆当時最新だったRuby 2.4.1を対象にしています。

本書は紙の本であるため、簡単に内容をアップデートすることができません。しかし、何もしないとどんどん内容が古くなってしまい、「本の通りやってみたけど、今使っているRubyとなんか動きが違う」ということになってしまいます。

そこで新しいRubyのバージョンがリリースされて、本書の説明と異なる部分が出てきたときは、毎回ネット上でその差異を説明するようにしています。その説明を読めば、動きが違う部分があってもきっと落ち着いて対処できるはず、という算段です。

というわけで、この記事ではRuby 2.7で発生する「プロを目指す人のためのRuby入門」との差異について説明します。

なお、本文に出てくる章番号や項番号は、書

元記事を表示

rails+froala+s3 froalaのエディタ内に画像をアップロードしてそれを、S3に保存するのにつまずいた

froalaの設定

https://www.froala.com/wysiwyg-editor/v2.0/docs/framework-plugins/rails

https://www.froala.com/wysiwyg-editor/docs/sdks/ruby

上のようにgemをいれて設定する。

つまずいたところ

froala-editor-s3の設定を終えた後に、いざ画像をアップロードしようとしたときに、consoleで
403(forbidden)がでてずっと止まっていた。

解決策

s3側の設定で、バケットのアクセス権限で
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508016/23b83cc4-ce62-73da-f407-d3d5c2d0eb9d.png)
のように設定する。

froalaの公式にはs3側の設定について書いていなかった。

元記事を表示

RailsでDBの構築をしてMySQLの日本語検索を使う

備忘録的な感じです。本来は優しそうな敬語で書きたいのですが、分量を減らしたいし疲れるのでとっても無愛想な書き方です。キレテナイッスヨッ!!(長州力)

# 目的
現在の[理工展ホームページ](https://rikoten.com/php/pages/events/event_list.php)では検索機能を実装している。ここら辺について、先輩からは「コピペすればいい」といわれたのだが、いつかフレームワークを理工展に導入する可能性を踏まえて、自分で現在のソースコードを研究することにした。

もともと先輩が「Mroongaはうまく導入できなかった」とか言っていたのを小耳にはさんでいたので、きっとMySQLの機能を使ったのだろうと思っていた。
実際その通りで、MATCH … AGAINST …を使っているとわかった。MySQL 5.7で対応した、とてもすごい機能とのことで、いろいろと研究してみる。

# 内容について
Railsを使わずMySQLクエリを実行した場合の[記事](https://pgmemo.tokyo/data/archives/1274.html)をもとにRail

元記事を表示

Rails + Cloudinaryでレスポンシブ対応した画像表示

Railsでアップロードした画像のレスポンシブ表示(スマホ向けに縮小した画像表示)の実装は何が主流でしょうか?私の経験では「RMagickでスマホ向けの縮小画像を生成して表示する」くらいしかありませんでした。ですが、この方法だと複数のディスプレイサイズに細かく対応するのが大変だったり、スマホ・PCで画像を使い分けるのが面倒でした。
ここでは、Cloudinary(CDN + 画像変換サービス)を使って複数のディスプレイサイズに対応したサイズの画像を表示する方法紹介します。

# ゴール

最終的に表示するHTMLとしては、imageタグにsrcsetを設定して画像を表示します。[srcsetとは](https://parashuto.com/rriver/responsive-web/picture-srcset-use-case)

Imageタグとsrcsetの例:

“`

元記事を表示

routes.rb内コード順でエラーが出る件

# こんなエラー出た。

写真を投稿するRails webアプリケーションを実装中のこと。
**新規ユーザー登録ボタンを押した際**に、こんなエラーが出ました。
![error1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548345/8d08b419-8639-1c37-9f21-e92e85256b59.jpeg)

# まずは、エラー文を解読。

#### NoMethodError in UsersController#show
アプリケーション実装段階で作成した、ユーザーの新規登録やログインを担当するUsersコントローラー(UsersController)のshowアクション(#show)定義の中(in)に、メソッド(Method)が無い(No)エラーが起きていますという意味です。下に続くエラー文にその詳細内容が書かれています。

#### undefined method’nickname’for nil:NilClass
何も無い(nil:NilClass)に対して(for)、ni

元記事を表示

【Mac】RubyでnattoでMeCabを使う

MeCabについての説明は公式サイトの記述を引用させて頂きます。

> MeCabは 京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース 形態素解析エンジンです。 言語, 辞書,コーパスに依存しない汎用的な設計を 基本方針としています。 パラメータの推定に Conditional Random Fields (CRF) を用 いており, ChaSenが採用している 隠れマルコフモデルに比べ性能が向上しています。また、平均的に ChaSen, Juman, KAKASIより高速に動作します。 ちなみに和布蕪(めかぶ)は, 作者の好物です。

引用:MeCab (和布蕪)とは – https://taku910.github.io/mecab/

ということで、今回の目的はRubyでMeCabを使用して形態素解析をを行うことです。
使用OSはMacです。

# MeCabインストール

MeCabのインストールにはHomebrewを使用します。
Homebrewの導入は割愛します。(参考:https://

元記事を表示

[rails] CSV非同期ダウンロードでやったこと

#大量データのCSVダウンロード
既存のやり方・問題

“`
respond_to do |format|
format.html
format.csv do
~~~~~~
end
end
“`

– ロードが長い
– タイムアウトエラーになる

この2つを解決しようとして色々検索して試してみましたが、どれもうまく行かず。
さらには、大量データダウンロードの非同期処理はあんまりやってなさそう(?)

ということで、実際に試したことを書いていきます

##解決策
**定時処理でファイル作成-> S3にアップロード**
**リンクでS3のファイルをダウンロード**

というやり方に行き着きました。

####それまでに試したこと
非同期処理
挫折ポイント -> job で `send_date` が使えなかった。(ActionController のメソッド(?))
使い方はありそうだったが、うまく行かず断念。

##実装

###定時処理

**CSVデータを作成する処理**

“`jobs/file_upload_job.rb
re

元記事を表示

Rubyのパフォーマンスと可読性のイディオム集

## Arrayからあるパターンのキーに一致するものだけフィルタしてそのキーを取りたい場合

|レポート名称|意味|
|:——–|:—|
| forEach | 繰り返しで索引した場合 |
| keep_if | keep_ifメソッドを使用した場合 |
| select | selectメソッドを使用した場合 |

“`ruby
images = []; 1000000.times {|row| images << "img#{row + 1}_url" } result_count = {:forEach=>0, :keep_if=>0, :select=>0}
Benchmark.bm 10 do |row|
row.report “forEach ” do
fin = 50000
1.upto(fin) do |row|
url_key = “img#{row}_url”
next if images[row – 1] != url_key
Struct.new(:url, :caption, :title

元記事を表示

Railでnot null制約をはずす

#今回やること
railsでnot null制約がついているカラムの制約を外します。

#not null制約をはずす
手順としてはまず下記のようにコンソールに入力、実行しマイグレーションファイルを作成します。

“`
rails g migration ChangeColumnToNull
“`

出来上がったマイグレーションファイルはdb/migrateに出来上がるので
以下のように、そのファイルに変更したいテーブル、カラム名を記載します。

“`
#postsテーブルのカラム名nameのnot null制約を外す例

class changeColumnToNull < ActiveRecord::Migration[5.1] def up # Not Null制約を外す場合 not nullを外したいカラム横にtrueを記載 change_column_null :posts, :name, true end def down change_column_null :posts, :name, false end end ```

元記事を表示

[“1”, “2”, “3”].map(&:to_i) とは何か。

色々読んで混乱したので、自分が理解するためにできるだけ一次ソースを拾いながらまとめてみました。
間違っている点等あれば、教えていただけますと助かりますm(_ _)m

## まとめ

**&をつけて渡したオブジェクト(:to_i)の`to_proc`メソッドが暗黙的に実行され、
Procオブジェクトを返し、最終的にはよく見る形になって実行されている。**

“`rb
[“1”, “2”, “3”].map{ |obj| obj.to_i }
“`

## 下記の結果は同じ。
なんでこうなるの?

“`rb
[“1”, “2”, “3”].map{|v| v.to_i}
=> [1, 2, 3]

[“1”, “2”, “3”].map(&:to_i)
=> [1, 2, 3]
“`

## &は何をしているか。

mapメソッドはブロック付きメソッド。

ブロック付きメソッドの引数には、ブロックを渡す必要(※1)があるが

to_procメソッドを持つオブジェクトの前に、&をつけることでmapメソッドの引数としても渡すことができる。

つまり、**&はto_procメソッド

元記事を表示

Pull Request がマージされたら author に Slack でメンションが飛ぶようにしたらリリースサイクルを短くできた話

# はじめに

この記事は [Opt Technologies Advent Calendar 2019](https://qiita.com/advent-calendar/2019/opt-technologies) 11日目の記事です。
10日目の記事は [@hogeta_](https://twitter.com/hogeta_) さんによる [Colaboratoryを使ったSQLレビューのすヽめ](https://qiita.com/hogeta_/items/0a8e1566be7d00d567aa) 、12日目の記事は [@gcchaan](https://twitter.com/gcchaan) さんによる [serverless-cloudform の紹介](https://qiita.com/gcchaan/items/2c92ea06c7e3cfae1d38) です。

今回は、リリースという作業に思いを馳せつつ、リリースサイクルを短くするための具体的なアプローチを紹介します。
なお、本記事では Web アプリの開発を前提に話を進めます。

# リリースのあるべ

元記事を表示

Rails6 のちょい足しな新機能を試す114(database_exists?編)

# はじめに

Rails 6 に追加された新機能を試す第114段。 今回は、`database_exists?` 編です。
Rails 6 では、データベースが存在するかどうかを確認する database_exists? メソッドが追加されました。

Ruby 2.6.5, Rails 6.0.2.1 で確認しました。 (Rails 6.0.0 でこの修正が入っています。)

“`shell
$ rails –version
Rails 6.0.2.1
“`

今回は、データベースが存在するかどうかを確認するスクリプトを作って確認してみます。

# Rails プロジェクトを作成する

“`shell
$ rails new rails_sandbox
$ cd rails_sandbox
“`

# スクリプトを作成する

`database.yml` から `development:` の設定を読み取ります。
`database.yml` の `adapter:` の情報から対応するデータベースの Adapter を決定し、 `database_exists?` メソッ

元記事を表示

[Rails]改行が2文字でカウントされてバリデーションが正しく動作しない件(カスタムバリデータ(validate_eachメソッド)で解決)

タイトルの通りです。

# 結論
– `ActiveModel::EachValidator`の派生クラスとして`○○Validator`を作る
– その中で改行の文字数カウントを修正してからバリデーション判定

早速ですが具体例を見てみましょう。

# 現象

とても簡略化したお問い合わせフォームを用意しました。
文字数制限は50文字とします。
(ちなみにその投稿画面には、javascriptで文字数をカウントして表示しているとします。)

“`ruby:view/contacts/new.html.erb
<%= form_with url: contacts_path, method: :post, local: true do |f| %>
<%= f.text_area :message %>
<%= f.submit "送信する" %>
<% end %>
“`

必須かつ50文字を超えたらエラーメッセージが表示されます。

“`ruby:model/contact.rb
class Contact < ApplicationRecord validate

元記事を表示

大草原ガチャ

## インストール

“`shell-session
$ gem install daisougen
“`

“`shell-session
$ daisougen
Commands:
daisougen gacha # 大草原ガチャ
daisougen help [COMMAND] # Describe available commands or one specific command
“`

## 基本的な使い方

“`shell-session
$ daisougen gacha
草草草
“`

## 応用的な使い方

“`shell-session
$ daisougen gacha –emoji
:dai::sou::sou:
“`

## 技術

### ソースコード

https://github.com/mktakuya/daisougen

### RubyによるCLIツール作成

– [erikhuda/thor](https://github.com/erikhuda/thor)

### 組み合わせ(重複を許す組

元記事を表示

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はサーバー上に常駐して発言を待ち受け続けますが、これだと常に一定のリソースを

元記事を表示

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とコミュニケーション能力のレベルがあがりましたね。(自画自賛)

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

元記事を表示

??祝Ruby2.7リリース?? クリスマスなので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/)までやってきたので、リリースに向けて着実に進んでいるようです。
?? そして無事に本日[リリースされました!!](https://www.ruby-lang.org/ja/news/2019/12/25/ruby-2-7-0-released/) おめでとうございます!!! ??
~~(本記事投稿時点ではまだリリースはされていません。)~~

そこでRuby2.7のリリースのお祝いとコミッターのみなさんのハードワークに感謝の気持ちを込めて、Rubyの22年に渡るコミットの歴史を可視化してみたいと思います。

# はじめに

一番最初

元記事を表示

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

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

元記事を表示

OTHERカテゴリの最新記事