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

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

RSpecの導入

# Gemのインストール

“`
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_mingw]

# —– 以下追加 —–
gem ‘factory_bot_rails’
gem ‘pry-byebug’
gem ‘rspec-rails’, ‘~> 4.0.0.beta’
end
“`

以下のコマンドでRailsアプリに、rspecを導入できる。

“`
bundle exec rails generate rspec:install
“`

導入しようとしたらそもそもアプリ作り立てなので「bundle install」をしてなかった。笑

“`
asatokensei@MacBook-Air tomalog % bundle exec rails generate rsp

元記事を表示

RAILS_ENVの数は増やさず、環境ごとの差異をymlでいい感じに管理する方法

本番環境とローカルの開発環境の他に、ステージング環境やQA環境などと言った環境が複数あるのが一般的です。
こういった環境ごとの異なる設定値(例えばデータベースの設定や、連携しているサービスのURLやIDなど)をどうやって管理するかというのはRailsアプリを運用する上で悩むポイントかと思います。
本記事では、RAILS_ENVを増やすことなく、Railsが用意するRails::Application.config_forを用いて、環境ごとの設定値をymlでいい感じに管理する方法を紹介します。


複数環境があるという前提で、その環境感の差異を無くして一致させようという話については、このスライドに綺麗にまとまっているので参考にしてください。

## Rails::Application.config_forのおさらい

“`rb
module MyApp
class Application < Rails::Application confi

元記事を表示

rails serverを終了させる方法

コマンドの紹介になりますが、以下の通りです

“`ruby
ps aux | grep puma
kill -9 “pumaのプロセスid”
“`
rails serverがpumaを用いて起動しているので、このような形になります。

元記事を表示

Rubyで作るLINEメッセージング機能の作り方

## はじめに

Rubyで書かれたシステムと一般ユーザのLINE間でメッセージのやり取りをする機能を開発する機会があったので、その時に得た知見を共有します。

また実際に動くアプリケーションのデモをRails使って作ったので、詳しい実装の詳細は [こちら](https://github.com/tkm-kj/line-api-sample/tree/v1.0) を見て頂くと、スムーズに記事の内容が入ってくると思います。

## 作るもの

システム管理者(以下「管理者」)と一般ユーザ(以下「ユーザ」)でLINEを媒介としたテキストメッセージのやり取り機能を作ります。
実際にやり取りをするためにユーザのLINEの情報をシステムが知っている必要があるので、ブラウザ上でのLINEログインも実装します。

ユーザのLINEの情報を紐付けた後は、ユーザが管理者に紐づくLINE公式アカウントにメッセージを送ると、そのメッセージがWebhookでシステムに飛んでいき、そこからデータベースに保存されます。ざっくり以下の図のようなイメージです。
![Untitled Diagram (1).png](

元記事を表示

jQueryの考え方

# はじめに

この記事では、jQueryを初めて扱う人向けに作成したものです。
もし、ご興味ある方は是非読んでみてください。

# jsファイルの注意点

jQueryは、js(javascript)ファイルに記載するものなのですが、ファイルを読み込む際は注意が必要です。例として、htmlファイルにjsファイル(sample.js)を読み込む場合は

“`html





jsファイルに読み込ませる文章

元記事を表示

RubyOnRailsでlograge/lograge-sqlを使ってJson形式のログ出力

# lograge/lograge-sqlについて
lograge/lograge-sqlを使うとRailsのログや実行SQLなどの複数行のログをJsonなどの形式でログを簡単に見やすくして出力可能

## lograge
logrageはRailsの基本Logggerの複数ラインのログを必要な情報だけにして1行のLog(例:json)を出力できるGemです。
https://github.com/roidrage/lograge

“`json:lograge
{“method”:”GET”,”path”:”/xxxxx”,”format”:”html”,”controller”:”Test::TestController”,”action”:”index”,”status”:200,”duration”:109.04,”view”:80.24,”db”:0.0,”params”:{},”headers”:”#“,”view_runtime”:80.24499999919499,”d

元記事を表示

ウェブアプリケーション開発がしたい!

皆さん初めまして。tkseと申します。
2020年5月末からウェブアプリケーションを開発することを目標にRuby,Railsを勉強中です。

ここにはメモ書きのような形で日々の勉強の中で気づいたことや疑問を残していこうと思います。
訳のわからないことを言い出すかもしれません。その時はご指摘いただけると嬉しいです。

元記事を表示

クラスとインスタンスについて

プログラミングを勉強していると基本的な概念を学ぶ必要があります。
Rubyでは、「オブジェクト」や「変数」などたくさん用語が出てきて大変なので、少しずつでも理解を早めるために自分なりにアウトプットしていきたいと思います。もし「ここが違うよ!」ってところがあったらご指摘いただけたら嬉しいです。
# クラスとインスタンスとは?
そもそもクラスとインスタンスを理解するためには「オブジェクト」と「メソッド」という言葉を理解する必要があります。
ざっくりとした説明は以下から。
###オブジェクト
「Rubyにおける全てのデータ」のことです。例えば「おはよう」といったような文字は「文字列オブジェクト」、「139」といった数字は「数値オブジェクト」と呼ばれています。
###メソッド
オブジェクトが持つ**「処理」**のことをメソッドと言います。
Rubyのオブジェクトは全て「メソッド」を持っています。
例えばこんな感じで、
・文字列オブジェクト → Lengthメソッド → 文字数を数える
・数値オブジェクト → to_sメソッド → 値を表示する
といったように**オブジェクトの種類ごとに持ってい

元記事を表示

RailsのN+1問題対策includes、preload、eager_loadについて

先日は久しぶりに面談受けました。相手からActiveRecordのN+1問題の対策を聞かれました。
緊張してincludesのみ答えました、その後相手からpreload、eager_loadとかご存知ですかと聞かれました。
緊急して慌てて「忘れました」と答えました。ここでincludes,preload, eager_loadについて改めて調べてまとめてみることにしました。
# N+1問題
 ActiveRecordのみでけじゃなくて、他のORMも使うなら共同問題です。
# preload、eager_loadとincludes
 簡単に言うと、preloadは指定したアソシエーションを別クエリで取得してキャッシュし、eager_loadは指定したアソシエーションをleft joinで取得しキャッシュします。includesは使い方により変わります。

# preload

“`
Order.preload(:cards).where(sex: “male”)
発行されるクエリ
SELECT `orders`.* FROM `orders` WHERE `orders`.`sex`

元記事を表示

rails db:migrationが通らなかった時に確認すべきこと

いつものようにマイグレーションファイルを作成し、rails db:migrateをしようとしたところ以下のエラーがでた。
Column `user_id` on table `entries` does not match column `id` on `users`, which has type `bigint(20)`. To resolve this issue, change the type of the `user_id` column on `entries` to be :bigint. (For example `t.bigint :user_id`).

指示通り以下のようにbigintを指定して再度マイグレーションを実施した。
“`class CreateEntries < ActiveRecord::Migration[5.1] def change create_table :entries do |t| t.references :user, foreign_key: true, type: :bigint //integerから

元記事を表示

【Ruby】アルゴリズムを組んで有識者に評価してもらう:day1

アルゴリズムについて学ぶために自分の持ち合わせた知識を用いてコーディングします。
続くかわからない1日目

# ユークリッドの互除法とは
最も有名といっても過言ではないアルゴリズムの1つ。もはや説明不要だろう。
2つの自然数aとbについて最大公約数を求めるもの。
方法はaとbの剰余を求める。
次にbと剰余の剰余を求める。
そして剰余の剰余と、剰余の剰余の剰余を求める。
剰余が0になるまで繰り返した時の除数がaとbの公約数となる。

仕組みがわかったら、早速コーディング

# Euclid.rb
“`ruby
def euclid(a, b)
while b != 0
mod = a % b
a = b
b = mod
end
a
end

print “aの値:”
a = gets.to_i
print “bの値:”
b = gets.to_i

puts “aとbの最小公約数は#{euclid(a,b)}です”
“`
aとbを入力しメソッドの引数とする。

mod

元記事を表示

【悪用厳禁】自分のQiita記事のview数を取得する

前々回にグラフ系の取り組みをしてみたのですが、データ自体がちょっと微妙だったのでそのリベンジも兼ねてQiitaに投稿した記事のview数の遷移をグラフ化するといったことをしようと思います!

### 今日の目標/成果物

今日はQiitaに自分が投稿した記事のview数を取得するコードを書く

### コードと資料

#### 1. スクレイピングのベースコードを準備

https://qiita.com/itaya/items/262eec85e36763497664

Qiitaのスクレイピングについては↑の記事にて一回書いているので基本的にはこちらを流用します。

“`crawler.rb
require ‘nokogiri’
require ‘mechanize’
require ‘selenium-webdriver’

def selemium_init
ua = ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.35

元記事を表示

Rails Tutorial 第6版 学習まとめ 第8章

###概要
この記事は私の知識をより確実なものにするためにRailsチュートリアル解説記事を書くことで理解を深め
勉強の一環としています。稀にとんでもない内容や間違えた内容が書いてあるかもしれませんので
ご了承ください。
できればそれとなく教えてくれますと幸いです・・・

出典
[Railsチュートリアル第6章](https://railstutorial.jp/)

###この章でやること
前章でユーザーを作成できるようにしたので作成したユーザーでログインする機構を作る。

###セッション
HTTPはステートレス(状態がない)ため以前のリクエスト情報などを利用することができない。
別のページなどに移動した際、データを保持しておく手段がHTTPには存在しない。
代わりに「セッション」を用いることでユーザーの情報を保持しておく。

Railsでこのセッションを実装するためによく使われるのがcookies
cookiesはブラウザに保存されるテキストデータでページを移動しても消えないのでユーザー情報を保持することができる。

####Sessionsコントローラ
SessionもREST

元記事を表示

Kinx アルゴリズム – エイト・クイーン

# Kinx アルゴリズム – エイト・クイーン

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。「プログラム=アルゴリズム+データ構造」。アルゴリズムの実装例をご紹介。

元ネタは「C言語による(30年経っても)最新アルゴリズム事典」。今回はエイト・クイーン(一般的には N Queens)です。

* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* 個別記事へのリンクは全てここに集約してあります。
* リポジトリ … [https://github.com/Kray-G/kinx](https://github.com/Kray-G/kinx)
* Pull Request 等お待ちしております。

最新アルゴリズム事典には

元記事を表示

【rails】通知機能

# 開発環境
* ruby 2.6.3  
* rails 6.0.2

# あらすじ
* 【オプション課題1: 終了間近や期限の過ぎたタスクがあった場合、アラートを出したいという課題】を通して。
* 終了期限が切れたり、期限間際で通知するような仕組みを導入します。

# 通知モデルを作成
“`ruby:ターミナル
rails g model notification user:references task:references action:integer checked:boolean
“`

“`ruby:db/migrate
class CreateNotifications < ActiveRecord::Migration[6.0] def change create_table :notifications do |t| t.references :task, null: false, foreign_key: true t.references :user, null: false, foreign_key: true

元記事を表示

【Rails】refileとrefile-s3を用いて、画像をAWS S3へアップロードする方法

# 目標

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/a8fb4365-df4c-9164-63e7-75b12f12dfd3.gif)

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

下記記事の`AWSの設定`と`実装`の「キーを環境変数化」までを行う。

[Carrierwaveとfog-awsを用いて、画像をAWS S3へアップロードする方法](https://qiita.com/matsubishi5/items/96721426cff2b1d67cdd)

# 実装

###`refile.rb`を作成・編集

“`terminal:ターミナル
$ touch config/initializers/refile.rb
“`

“`ruby:refile.rb
require ‘r

元記事を表示

100日後に一人前になるエンジニア28日目

#100日後に一人前になるエンジニア28日目

この記事は[アカウントBAN を実装する](https://qiita.com/akilax/items/8b449b0003aba476b9e8)の続きです。
よかったらこちらからどうぞ。

#セッションタイムアウトを実装する

ユーザーが一定時間アクセスをしなかったら
自動的にログイン状態を解除する仕組みを今回は実装してみます。
まずはsession_controllerからです。
今回の肝となるのは、
session[:last_access_time] = Time.currentの部分です。
ログイン時にsessionに現在時刻を保存しておきます。
あとは普通のログイン処理です。

“`sessions_controller.rb
class User::SessionsController < User::Base #省略... if User::Authenticator.new(user_member).authenticate(@form.password) if user_member.

元記事を表示

mapメソッドについて

# mapメソッドについて
mapメソッドとは、各要素に対してブロックを評価した結果を新しい配列にして返します。
エイリアスメソッドは、collectメソッドです。

(例)配列の各要素を3倍にした新しい配列を作るコード

“`ruby
numbers = [1,2,3]
new_numbers = []
numbers.each { |n| new_numbers << n * 3 } new_numbers #=> [3, 6, 9]
“`

mapメソッドを使用すると、ブロックの戻り値が配列の要素となる新しい配列が作成されるため、mapメソッドの戻り値をそのまま新しい変数に入れることができます。

“`ruby
numbers = [1,2,3]
# ブロックの戻り値が新しい配列の各要素になる
new_numbers = numbers.map { |n| n * 3 }
new_numbers #=> [3, 6, 9]
“`

このように、mapメソッドを使用することで、空の配列を用意して他の配列をループ処理した結果を空の配列に詰め込んでいくような処理の大半を置き換え

元記事を表示

LINE Messaging APIとRailsによるLINEBotを作ってみた

# 概要
この記事では、FlexMessageを使ったLINE Botを作成する方法について自分が作ったLINE Botを参考に解説します。

[LINE Messaging API](https://developers.line.biz/en/services/messaging-api/)

# 作ったもの
月日の経過と期限を教えてくれるBotを作りました。
例えば、生まれてから何日経ったのか、誕生日や試験まであと何日かなどを教えてくれるBotです

![1723 1_iphonexspacegrey_portrait.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366133/97f0921b-676b-da65-805d-040b236e7a5d.png)

# この記事で説明すること
– RailsとLINE Messaging APIによるボット作成
– LINE Messaging APIの使い方(Ruby使用)
– ユーザーの送信内容によって返信内容を切り替える
– Fl

元記事を表示

Rails で使える Ruby 配列メソッド (each以外)

# この記事で扱うRuby配列メソッド
1.selectメソッド
2.rejectメソッド
3.keep_ifメソッド
4.delete_ifメソッド
5.findメソッド
6.mapメソッド

Rubyバージョン: 2.5.1 で動作確認

# 書いたきっかけ
今まで配列メソッドといえば`each メソッド`くらいしか使ったことありませんでした。(筆者はプログラミングを本格的に学習し始めて2ヶ月程度の初心者です。)
Rails で個人アプリを開発中、「DBテーブルから取得した配列データをうまい具合に加工して必要な要素だけ表示したいけど、うまくできない」っていうことが多々。
解決のために色々と調べる中で「こんなに便利なメソッドがあったのか!」と非常に勉強になったので、 知識の定着兼、備忘録として書こうと思います。

どなたかの参考になれば幸いです。

※`eachメソッド`は使いこなせている、というくらいのレベル感の方を対象として書いています。

# 参考にしたもの
伊藤淳一さんの [「プロを目指す人のためのRuby入門」](https://gihyo.jp/book/2017/9

元記事を表示

OTHERカテゴリの最新記事