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

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

KibanaのAPIにrubyからアクセスする

# 概要
Kibanaに対してRubyからVisualizeやDashboardを作ったりしたかったので書いた

# コード

“` ruby
class KibanaClient
def self.call method, path, data
endpoint = “http://localhost:5602#{path}”

authorization = ‘Basic ‘ + Base64.encode64(“elastic:changeme”).chomp
headers = {
authorization: authorization,
“kbn-xsrf”: “kibana”,
content_type: :json,
accept: :json
}

response = nil
begin
response = RestClient.send(method.to_s, endpoint, data.to_json, headers)
rescue

元記事を表示

form_forで任意のcontrollerとactionを指定する方法

#form_forで任意のcontrollerとactionを指定する

##今回実現したいこと
topクラスのindex.html.erbからform_forを用いて、usersコントローラーまで入力データを送りたい。

###エラーの出る書き方

“`ruby:app/views/top/index.html.erb
<%= form_for @user,:url => { action: “new”} do |f| %>

Submit

<%= f.label :name, 'Username' %>
<%= f.text_field :name, class: 'form-control' %>
<%= f.label :password, 'password' %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :confirm, 'password_confirmation' %>
<%= f.passwo

元記事を表示

堂々とお気に入り風俗嬢の出勤情報を確認できるステルスサービス「Cyber Office クラウド」

スクリーンショット 2019-12-05 10.03.07.png
スクリーンショット 2019-12-05 10.00.42.png

#1 解決すべき課題

ぼく「私はオキニ嬢が決まっている。その出勤を確認したいだけなんだ・・・・。」
でも電車では風俗サイトなんて見れない、自宅でも家族がいるし、嫁は相手にしてくれない、でも独りの時間にそんなサイトばっかり見て時間が過ぎ去るのは嫌だ!

私が必要とするサービスを自分のために作

元記事を表示

SlackBotにGIFを検索して流す機能を実装したら治安が崩壊した話

Qiitaご利用の諸君はおそらく社内でのコミュニケーションにSlackを利用していることだろう。

+ 特に開発しなくても便利に使える便利なアプリが山程ある
+ GitHubやGitLabの更新をメッセージとして流したりIssueなどをその場で発行できる
+ Emoji無限(?)に増やせるたのしい!!!

これだけの利点があるのだから今更強烈な事情がない限りChatOps基盤にSlackを導入するのはほぼ必然と言い切ってもいいだろう。

そしてSlackではもっとコアな機能を持ったボットなどを開発する人たち向けにAPIを用意している。

今回はSlackのAPIの一つ、RealTimeMessageAPIを用いて開発していたSlackのBotにとある機能を実装したこと、リリースをした話をしようと思う。

# 新機能の概要

Botがinviteされているチャンネルで

> 特定の書式(今回は `put_gif ` )+検索文字列

と飛ばすとBotがそれを識別して適当なAPIからGIF画像のリンクを引っ張り、それを投げるというような機能を実装しようという話がチャンネル内で上がった。

元記事を表示

RailsエンジニアがReactNativeエンジニアになるにあたって苦しんだところワースト3

![top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227429/b61cebb7-f2a4-79c0-a694-f48e993cfb1f.png)

# はじめに

こんにちは、株式会社OKANで「おかんPay」というプロダクトのPdMをしながらも、自らバリバリReact Nativeで実装している [かなすぎ](https://twitter.com/OKanasugi) と申します。
元々は、RailsでOKANの社内システムを構築していたサーバーサイドエンジニアだったのですが、志願してReact Nativeを使うアプリエンジニアになってから約半年が立ちました。
そこで、RailsエンジニアがReact Nativeを扱うアプリエンジニアになる時に苦しんだ箇所をまとめることで、自分と同じようにReact Nativeを新たに勉強する人の助けになればと思いながら記事を書きました。

# 想定読者

– Railsエンジニアだが、これからReactNativeアプリもつくってみたいなって思って

元記事を表示

【Rails】bundle installをしたら大量のファイルを作る問題

# 初めに
bundle installをした際にgithubDesktopに新しいファイル生成10000ファイルのようにたくさんのファイルを生成したことはあるでしょうか。この問題に時間を使ってしまったので書き残します。

# 結論
bundle installをした際に大量にファイルが生成されるのは問題ではないです。正常な挙動です。本来、railsのgemのシステムは大量のファイルの上で成り立っておりそのファイルの数を普段見ることはないですがgithubDesktopでその大量の変更を見ることができるのが問題と言えるでしょう。

# 原因
私は普段はgem fileにgemを追加した後に`bundle install`とターミナルに打つことでinstallをしているのですが、qiitaの記事を真似していて`bundle install –path vendor/bundle`と入力しました。この後に続く表記はbundle installしたファイルをどこに保存するのかということを指定しているもので本来は毎回このように打つことが正しいようです。ただしこのように打ったことでgithub

元記事を表示

あ!こんな引数とれたんだっていう Ruby のメソッド 8選

ENECHANGE で勤務している cuzic です。

これは Ruby Advent Calendar 2019 の 5日目の記事です。

今日は Ruby のメソッドの中で、「あ、こんな引数とることができたんだ」と
個人的に感じたメソッドをいくつか紹介します。

## `self.class::CONSTANT`

実は `::`演算子の左辺には式を指定できます。

下記のようなコードがあったとします。

“`rb
class A
NUMBER = 1
def initialize
@number = A::NUMBER
end
end
“`

これは下記のように書くことができます。

“`rb
class A
NUMBER = 1
def initialize
@number = self.class::NUMBER
end
end
“`

このように `::` 演算子の左辺として self.class のように式を指定することができます。

上記の例であれば

“`rb
a = A.new
p a.class::NUMBER

元記事を表示

ActiveSupport 無しで beginning_of_day

# お題

時刻(日時)を表すデータがあって,その時刻を含む日の開始の瞬間(0 時)をどうやって得るか。

Rails なら ActiveSupport の `beginning_of_day` を使えばよい。

たとえば今日の始まりであれば

“`rb
require “active_support/time”

t = Time.now

p t.beginning_of_day # => 2019-12-04 00:00:00 +0900
“`

といった具合。
この例のように,Rails じゃなくても `active_support/time` を `require` すれば使える。

素の Ruby ではどうする?

# 答え

“`rb
require “date”

t = Time.now

p t.to_date.to_time # => 2019-12-04 00:00:00 +0900

“`

Date 化すると時・分・秒の情報が消え,それを Time 化すると,0 時 0 分 0 秒ということになるみたい。

なお,上の例は Time オブジェクトが

元記事を表示

【Rails】 N+1問題の解消 & tips

[Atrae Advent Calendar 2019](https://qiita.com/advent-calendar/2019/atrae) 5日目を担当する新卒1年目の土屋です。
普段は、ビジネス版マッチングアプリ [yenta](https://yenta.talentbase.io/yenta) でサーバサイドエンジニアとしてRailsで開発をしています。

アトラエに入社してから半年間、度々立ち向かってきたN+1問題について書きます。
対象読者は、Ruby on Railsを使って開発をしている初級者〜中級者です、ご容赦ください。

# N+1問題とは
> ループ処理(each, mapなど)を用いてデータを取得してくる際に、
> 必要以上にSQL文(クエリ)が発行され、レスポンスが遅くなる(パフォーマンスが低下する)

ことです。例えば、
AさんというUserのPosts(投稿)を5件取得して、Aさんの投稿一覧のページを表示したいといった時には、

– AさんのUserデータを取得するために1回
– 5件のPostsデータを取得するために5回

の合計6回のクエリを発

元記事を表示

C – Buy an Integer

#問題
https://atcoder.jp/contests/abc146/tasks/abc146_c
スクリーンショット 2019-12-04 23.08.14.png

#回答
“`ruby
A,B,X = gets.chomp.split.map(&:to_i)
result = 0
max = 1000000000
if A + B > X
elsif X >= A * max + B * ( max.to_s.length )
result = max
else
N = X.to_s.length
N.step( 1, -1 ) do |n|
p = A * ( 10 ** ( n – 1 ) ) + B * n
if p <= X result = (

元記事を表示

railsのDigest::UUIDを試す

# Digest::UUID見てみたのでメモ
## 公式ドキュメント
https://api.rubyonrails.org/classes/Digest/UUID.html

## 概要
定義されているメソッドは以下の3つでそれぞれハッシュ関数が違います。

* self.uuid_v3
-> `Digest::MD5`を使用
* self.uuid_v4
-> `SecureRandom.uuid`の簡易メソッド。
* self.uuid_v5
-> `Digest::SHA1`を使用

“`ruby
$ Digest::UUID.uuid_v4
=> “4ad2a6a9-0135-4158-94d3-a33e41bbe048”

$ Digest::UUID.uuid_v3(“name_space”, “sample”)
=> “3b0ead59-ca8d-350b-a392-e656db58b0fc”

$ Digest::UUID.uuid_v5(“name_space”, “sample”)
=> “d7a9ae1a-b099-5318-8828-340cc10a1550

元記事を表示

rubyのバージョンアップのときのエラー対処

rubyをバージョンアップをして、*budnle install*を叩いたら、

“`
Fetching: mysql2-0.3.18.gem (100%)
Building native extensions. This could take a while…
p
ERROR: Error installing mysql2:
ERROR: Failed to build gem native extension.

/Users/my_username/.rvm/rubies/ruby-2.1.2/bin/ruby -r ./siteconf20150614-72129-orqsb7.rb extconf.rb
checking for ruby/thread.h… yes
checking for rb_thread_call_without_gvl() in ruby/thread.h… yes
checking for rb_thread_blocking_region()… yes
checking for rb_wait

元記事を表示

Rails:ajax通信の流れとデバッグの解説[超初心者編]

##まずはじめに
ajaxを勉強中に簡易なrailsアプリを作りました。
その時大枠の処理の流れが大切だと感じたので今回復習も兼ねて解説してみようと思います。

大枠の流れを理解していると**エラーが起きた際にどこでデバッグしてどの変数の中身を見たら良いか、どこまでは処理がうまく書けているか。**という原因特定をする際に非常に便利です。

むしろ流れを理解していないとエラー解決は手探りでの作業となってしまい非効率です。

##作ったアプリ内容

検索フォームからDBに保存してあるユーザー情報を表示する

アプリGIF
https://gyazo.com/ac90a773abec869ddb72d59037f62f46

[したいこと]
検索フォームにキーワードを入力された毎にユーザー検索して該当するユーザー名を表示する

[必要な手段]
検索フォームに入力されたら反応
フォームに入力されたキーワードを取得
コントローラでキーワードを元にユーザーテーブルを検索
検索結果をビューで表示する

#対象者
この記事では、ajax通信とは、
**どのようにして送信先を決めているのか**、
**

元記事を表示

Windows で Textbringer-presentation を使いたい

## 概要
Ruby で作られたテキストエディタ Textbringer ()にはプレゼンテーションモード()があります。これを Windowsで使いたいと思います。

## 環境

Windows と言っても Windows10 で WSL を使うのであれば簡単です。以下の環境で行います。

* Windows 10 Home 64bit バージョン 1903
* WSL(Windows Subsystem for Linux)を利用
* Ubuntu 18.04 LTS
* WSLtty
* rbenv
* ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]

## Textbringer のインストール

の記事に書いていますので

元記事を表示

railsでのテーブルの作り方、カラム追加、カラムの型替えの方法

#はじめに
railsでのDBテーブルの作成方法、カラムの追加など一連のデータベース操作についてまとめます。

#railsでのテーブルの生成方法

テーブルを生成しましょう。
①テーブルのmigrationファイルを作成します。具体的な作成コマンドとしては以下になります。

“`
$ rails g model モデル名 フィールド:型

※例えばpostモデルでnameカラム(string型)とuser_idカラム(integer型)を作成したい場合は以下になります。
$ rails g model Post name:string user_id:integer
“`

②コマンドを打ち込むとmigrationファイルが新規で出来上がっているはずなのでそれを以下のコマンドで実行します。
実行後はdbサーバー上にpostsテーブルが出来上がります。

“`
$ rails db:migrate
“`

#カラム追加方法
既に作成したテーブルにカラムを追加したい場合は下記の手順で追加します。

①追加したい項目を下記のようにコマンド入力する。

“`
rails g

元記事を表示

【Rails】コーディング時に気をつけるべきこと

Webエンジニア2年目の@gggkです。

これまで、コードレビューで色々と指摘を受けてきたのですが、コードを書く上で大切なことなので、コーディング時に気をつけるべきことをまとめてみました。
特に、Rails慣れたての人の参考になればいいなと思います!

#バグを生み出さない
エンジニアやってて怖いのは、リリース後にバグが出ることですね。普段から意識してコーディングすることで、バグを発生させないようにしましょう。

## nilチェックをする

大体のバグは、nilが原因となることが多いんじゃないかなと思います。
レシーバーがnilになってしまい、メソッドを呼び出そうとして「NoMethodError」になる。

変数に値が入っていないときは、returnして次の処理をしないようにして対応することができます。ifで分岐してもいいですね。

“`ruby
# restaurantがnilになってしまってもエラーにはならない
restaurant = Restaurant.find_by(id: 1)
return unless restaurant
restaurant.name

元記事を表示

gemを使わずに異なるモデルで検索を行う方法

# Railsの検索機能
Railsにはransackというgemがあり、とても簡単に検索が行えます。

gemを使えば超簡単ですが、どのように実装されているかを知ることはとても大切です。

本記事では、gemを使わずに検索機能を実施する方法をまとめておきます。

これに加えて、2つ以上のモデルに対して何かしらの検索する方法を解説していきます。

また、こちらの記事は1つのモデルに対して検索を行う機能です。とても分かり易かったです。ぜひぜひ。

 [railsで検索フォームを作ろう!!](https://qiita.com/yusuko/items/cff4e46aeafbc3beecf2)

## 環境
RubyonRails 5.2.3
(6.0でも動いたのでどちらでも可です)

Ruby 2.5.5
## 1.実装〜!!

今回はユーザーと投稿の検索を行う機能を作成します。

ユーザーか投稿かどちらかをプルダウンメニューで選び、フォームに検索したい名前やタイトルを入力して検索を行います。

## 2.初期設定
まずは、rails new します。

そして、死ぬほど便利なsc

元記事を表示

Your Ruby version is OOO, but your Gemfile specified OOOと怒られた時の対処法

#やろうとしたこと

githubからアプリケーションをpullして、bundle installをしようとした時にエラーが出ました。

すぐ解決したのですが備忘録として残しておきます。

rbenvについて知りたい方はQiitaや[公式ドキュメント](https://github.com/rbenv/rbenv)をお読みください!

#今回起きたエラー

bundle installの後に以下エラーが起きました。

“`
Your Ruby version is 2.6.3, but your Gemfile specified 2.5.5
“`

rbenvを使ってrubyのバージョンを管理していますが、バージョンが違うと怒られました。

#原因

エラーを翻訳すると、「pullしたアプリケーションのGemfileに記述されているRubyは2.5.5だけど、あなたのRubyは2.6.3だよ!!!」

原因はエラーが言ってくれている通りですね。

バージョンを合わせてあげれば即解決です。

#解決方法

**「rbenv versions」**を実行して、rbenvにインストー

元記事を表示

Ruby on Railsで時間が溶けた凡ミス集

# はじめに
「Ruby on Rails 速習実践ガイド」をひととおり終え、自分でToDoアプリを作ってみたいと思い、下記の記事を参考に「Ruby on Rails 速習実践ガイド」で作成した Taskleafに機能を追加してみた。
https://qiita.com/sasasoni/items/fb0bc1644ece888ae1d4

#上手くいかなかった点

### ①イベントがカレンダーに表示されない
今回参考にしていたWebサイトのようにEventという名前でモデル・コントローラーを作成したのではなく、Taskをそのまま使っていたので、JSON形式で情報をカレンダーに渡す際、変数名に気をつけなければいけなかった。

### ②Datetimepickerを使ってカレンダーで選んだ日時が表示されない
slimの書き方が分かっておらず、Datetimepickerの実装の仕方に苦労した。
slim形式でHTMLを書く際、動的クラスの書き方には注意すべき。

### ③週表示・1日表示の際に時間が軸に表示されない
こちらはcssに書いていた.fc-time { display:

元記事を表示

Rubyで書いたバックアップツールの紹介

# 目的
社内で色々なバックアップをしていましたが、個別にbashを書いていてメンテナンスしにくいと思ったので、Rubyでまとめてみました。

# 仕様
1. バックアップしたい対象はそれぞれのサーバーで事前に準備(pg_dump等)
2. バックアップを集約するサーバーで今回のプログラムを実行
3. scpかrsyncのコピーコマンドとバックアップサーバー内の古いバックアップの削除コマンドをサポート
4. コマンドの実行に失敗した場合はslackに通知
5. バックアップの設定はyamlファイルで管理
6. yamlファイルはERBを通して実行する

# プログラム
“`ruby:Gemfile
# frozen_string_literal: true

source “https://rubygems.org”

git_source(:github) {|repo_name| “https://github.com/#{repo_name}” }

gem ‘slack-ruby-client’
gem ‘systemu’
gem ‘hashie’
“`

“`ruby:

元記事を表示

OTHERカテゴリの最新記事