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

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

LINE Messaging API・LINE Botを使ったKPT分析に特化したWEBアプリ(Rails)を作る

# TL;DR
この記事は、LINE ログインとLINE BotによりWebアプリと連携を行うことを目的としています。

このアプリはスクラム開発を行っている方が対象となっています。
主な機能として、スプリントごとにKPTを管理できたり、タスクの管理が行えます。
ログインはLINEアカウントにより可能です。

実際に作成したWebアプリはこちらになります。
ぜひ、使ってみてください!
[KPT分析・タスク管理アプリ DONE](https://tmrekk121-done.herokuapp.com)

# アプリ概要
![linebot-flow.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366133/c6a6a08e-1fdc-400e-98b4-ef5c8da20aa6.jpeg)

LINEBotは用途として現在はタスクを取得・登録することのみ可能です。

# 環境
– Ruby version 2.6.0
– Rails version 6.0.0
– MySQL 8.0.17

# 実

元記事を表示

【Rails】gemなしで検索機能を実装する

# 実装環境
Rails 5.1.7
Ruby 2.4.0
Slimで実装

#やりたいこと
実装済のuserを検索したい
検索条件はあとから追加できるようにしたい
今回は名前検索を行う

# 参考記事

【開発メモ】Railsアプリに検索機能を実装する方法をわかりやすくまとめてみた。

【Rails入門】where likeであいまい検索!複数条件やOR条件も解説


※ 個人的にわからないところがいっぱいだったので調べながら

“`ruby:models/user.rb
class User < ActiveRecord::Base def self.search(search) if search User.where(['name LIKE ?', "%#{search}%"]) else User.all end end end ``` ```slim:検索フォーム = form_tag users_path, method => ‘get’ do
p
= text_field_tag :search, params[:sea

元記事を表示

RailsをGCEにcapistranoを使ってdeployする (CentOS、Nginx、Puma)

– RailsをGCEにdeployして公開するまでの手順を記事にしたいと思い書きました。
– 今回の記事では単一のGCEインスタンスにdeployするまでです。
– GCP(GCE、VPC)
– ruby 2.6.5
– rails 6.0.0 (今回railsアプリはapiモードで作成し、DB接続しない前提です。)
– CentOS7
– Nginx
– puma
– capistrano

#### 必要であればVPCでカスタムネットワークと、ssh接続やhttp接続するなら、そのportを開けるファイアウォールを作ります。
– GCPは、カスタムネットワークを設定しない場合、デフォルトのネットワークが使われる。個人開発であればデフォルトネットワークでも構わないと思います。
– GCE立ち上げ時にhttp通信の許可にチェックするでもいいですが、自宅やオフィスなどアクセスするIPが決まっているなら、そのIPからのみアクセスできるファイアウォールを作成するなどして開発すると良いと思います。

## GCEにCentOS 7のインスタンスを作成します。
– USのリージョンで、1系の

元記事を表示

Rails Tutorial 9章の最後のテストでrememberが見つからない

# はじめに
個人的に[Rails Tutorial](https://railstutorial.jp)の第9章で書かれている通りにしてもうまく動かなかったので、つまづいた点を備忘録の意味も兼ねて書いておく。初めての記事なので、ミス等ある場合は教えていただけると大変ありがたいです。

開発環境
OS    :  Ubuntu 18.04
Ruby :  2.6.5
Rails  :  6.0.0

## 永続的セッションのテストでrememberが見つからない
[9.3.2](https://railstutorial.jp/chapters/advanced_login?version=5.1#sec-testing_the_remember_branch)の永続的セッションのテストを行うと、次のようなエラーが出た。

“`ruby
DRb::DRbRemoteError: undefined method `remember’ for #

元記事を表示

【知らずに損した】ActiveSupportの期間指定メソッドall_day, all_week, all_month, all_year

## はじめに
**期間を絞って**データをいじくりたいあなたに。

Railsアプリケーション作成時、**「もっと早く知っていれば!」**と後悔したメソッドたちの紹介です。

## この記事が役に立つ方
– ActiveSupportの存在をあまり認識せずに
– Ruby on Railsアプリケーションを作成している
– Rails初心者

## この記事のメリット
– 「きっと誰かがこの操作のメソッド作ってるよね!先に用意されていないか探そう。」という思考になることが出来る。
– 期間指定で工数の削減が出来るようになる。

## 環境
– OS: macOS Mojave version 10.14.6
* シェル: zsh
* Ruby 2.6.3
* Rails 6.0.1

## 背景
**投稿の背景**は以下の通りです。

自作の**学習時間記録アプリ**にて日、週、月それぞれで範囲指定をして計算したいシーンに遭遇。

DBに専用のカラムを設けたり、変数を沢山作ったりして実装。ムダが多い気がしてリファクタリング方法を探す。

実装後、**ActiveSupport*

元記事を表示

rails-erdで指定したテーブルのみでER図を描く方法

# 概要
* railsアプリでER図を自動生成する際に利用するrails-erd
* 一部のテーブルのみだけでER図を作りたい場合の解決方法を記載する

# 背景
* サービスが拡大してテーブル構成がかなり複雑になってしまい、ER図をそのまま出力すると何が何やらの状態になってしまった
* 一部のテーブルの関係性のみを可視化してわかりやすい形で出力したかったため、調査

# 方法
## .erdconfigを使う

* [Rails ERD – Configuration](https://github.com/voormedia/rails-erd#configuration)
* 抜粋
> Rails ERD has the ability to be configured via the command line or through the use of a YAML file with configuration options set. It will look for this file first at ~/.erdconfig and then ./.erd

元記事を表示

ツイッターAPIを使って#ITエンジニア流行語大賞を取得してみた

# はじめに
せっかくIT芸人会に入ったので、それっぽい事をしたい。
めちゃくちゃ不十分ですが、動きはしたのでとりあえず投稿します。
後で色々、修正します。(デバッグを消したコメントとか残ってるし・・・)

今の段階のものを作るのに大体40~50分という所。

# コード

“`ruby
require “twitter”

client = Twitter::REST::Client.new do |config|
config.consumer_key = ‘キーが入ってる’
config.consumer_secret = ‘キーが入ってる’
config.access_token = ‘キーが入ってる’
config.access_token_secret = ‘キーが入ってる’
end

tweets = []
def getTweet(client,word,num,array)
client.search(word).take(num).each do |tweet|
# puts tweet
print tweet.text
puts t

元記事を表示

Rubyでトランプの山札からカードを引くアプリを作った

トランプを使ったゲームがたくさんあるのでRubyで書けるよなと思ってます。
よくあるのはブラックジャックとかポーカーとかですかね?

そのベースを作ってみました。

##仕様要件
・ジョーカーを除いて、52枚のカードが重複しないようにする。
・一枚ずつ山札からカードを引く。
・手札の上限枚数までカードを引けるようにする。
・手札を捨てることができる。
・山札を使い切る、もしくはカードを引くことやめると終了する。

##実際に書いてみた
“`ruby:playing_card.rb
# カード判定メソッド
def card_judge(i)
# 記号判定
if i % 13 == 0
mark_no = (i / 13) – 1
else
mark_no = i / 13
end
# マーク番号:0スペード/1ハート/2ダイア/3クラブ
case mark_no
when 0
card_mark = “♠️” #SPADE
when 1
card_mark = “♥️” #HEART
when 2
card_m

元記事を表示

ローカル変数とインスタンス変数の違い

###ローカル変数とインスタンス変数の違い
`ローカル変数`
その場限りの一時的な変数。
メソッド内で定義したローカル変数は**そのメソッドの中でしか使えない。**

`インスタンス変数`
オブジェクトの保持する変数。
オブジェクトの**どのメソッド内でも使用できる**
##ローカル変数numberを使ってメソッドを呼び出す

“`ruby:myclass.rb
class Myclass
def method_1
number = 100
end

def method_2
number
end
end
“`

“`irb
>object = Myclass.new
>object.method_1
=> 100

>object.method_2
Traceback(most recente call last):
NameError (undifined…)
“`
method_2ではエラーが返ってきています。
つまりmethod_2ではmethod_1で使ったnumberは使えない状態だということです。

##インスタンス変数@numberを使う

元記事を表示

[Ruby] paiza初級 一行で複数の値入力をする

#目的 : 一行で複数の値入力をする

“`入力例.
1 3 5 7
“`
というように,一行で複数の値入力のケースについて解説します.

#使用メソッド
###gets :値入力をする
###split :引数で区切った文字列を配列に分割
###map :配列の各要素を変換

#方法

“`
nums = gets.split.map(&:to_i)
p nums #→[1, 3, 5, 7]
“`

###[解説]
1.getsメソッドで値入力を受け取り
2.splitメソッドで文字列として配列に格納
3.mapメソッドを用いて各要素を整数型に変換

#まとめ
paizaのようなプログラミング学習サイトでコードを書くにあたり,受け取った値を用いて後の処理はわかるが,適切な値入力が分からない場合があると思うので参考になればと思います.

##参考文献
[プロを目指すための人のRuby入門](https://r

元記事を表示

#Ruby の aasm gem で after_all_transitions の Callback が出来ない : AASM::UnknownStateMachineError のエラー

[aasm/aasm: AASM – State machines for Ruby classes (plain Ruby, ActiveRecord, Mongoid)](https://github.com/aasm/aasm#callbacks)

# 問題

“`
aasm do
end
“`

の場合と

“`
aasm(:some_name) do
end
“`

の場合で callback の書き方が違う

# 解決

“`rb

require ‘aasm’

class Job
include AASM

aasm(:runner) do
after_all_transitions :log_status_change

state :sleeping, initial: true
state :running, :cleaning

event :run do
transitions from: :sleeping, to: :running
end

event :clean do

元記事を表示

if…else…endの条件分岐文がどうして汚いんですか(怒)→すみませんでした!!!

#その日の流れ

test = if 日本人なら?
“和食”
else
“洋食”
end

こんな感じのコード書いて、この直下に式展開でtestを呼び出すようなコード書いてたら
先輩に「きたねー」と言われてしまった。。。

#Lv.5になって「でんこうせっか」覚えた気分だ

最初に「三項演算子」というものがあってだな…という説明を受けた時に
ちょっと自分の悪い癖が出てしまって、こんなことを思ってしまった。

![名称未設定ファイル (53).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453260/a7bf2a45-34cb-91a3-2063-0905faeb9f16.jpeg)

だが、俺は3ヶ月だしそもそも書き方これしか知らない奴が見やすいっていうのは
オレオレ表現のオンパレード何だろうな…と思いながら、くそ丁寧

元記事を表示

【Ruby】タブ区切りテキストファイル(tsv)をcsvに変換する

#概要
アウトプット用に、学習した内容を紹介していきます。
本日の内容はRubyでtsvをcsvに変換するお話です。

#環境
Mac OS Mojave 10.14.6
Ruby 2.5.3
エディタ VSCode

#tsvをcsvに変換
以下のタブ区切りテキストをcsvに変換します。

“`meibo.txt
john m 18
paul m 20
alice f 15
dabid m 17
jasmin f 17
“`
こちらは以下のコードでcsvファイルへの変換が出来ます。

“`Ruby:tsvtocsv.rb
require ‘csv’

File.open( ‘meibo.txt’, ‘r:UTF-8’ ) do |file|
CSV.open( ‘meibo.csv’, ‘w’, force_quotes: true ) do |csv|
#一行ずつCSVファイルへ書き込み
file.each_line do |line|
csv << line.chomp.split( "\t" ) end end end ```

元記事を表示

誕生日あて問題

#Rubyアルゴリズム問題
#誕生日あて問題を作ろう
今回作るプログラムは誕生日あてプログラムです
#仕様
①1〜31日のなかから、ランダムで誕生日を一つ自動的に決めます

②予想を入力し、結果により出力を以下5パターン変えます
・正解
・20日以上離れている
・10日以上離れている
・10日以内
・3日以内

③5回で正解しなければゲームオーバーにします
#回答
https://qiita.com/shintaro_yataki/items/6ae1947705c7e708b53c

元記事を表示

誕生日あて問題 解答

#誕生日あて問題回答
“`Ruby
#正解
def yes(num)
puts “正解!”
puts “#{num}回目であたったよ”
exit
end

#不正解
def no(num, input, birthday)
difference = (input – birthday)**2
if num == 5
puts “Game Over”
exit
elsif difference >= 400
puts “20日以上離れてる。見当違いだよ”
elsif difference >= 100
puts “10日以上離れてる。”
elsif difference >= 16
puts “10日以内だよ。少し近いよ”
else
puts “3日以内!惜しい!”
end
end

#誕生日をランダムで決める
birthday = rand(1..31)
puts “私の誕生日を5回以内に当ててね”
num = 1

while true do
puts “#{num}回目のチャレンジです”

元記事を表示

RubyonRails 速習実践ガイド セッターゲッターまとめ

#RubyonRails 速習実践ガイド 自分まとめ

####インスタンス変数
オブジェクトが抱えている変数のことをインスタンス変数と呼ぶ。
インスタンス変数に代入したデータは、そのオブジェクトが存在する限り存在し続ける。
頭に@をつける。

####セッターとゲッター

“`user.rb
class User
def name=(name) #セッターを定義
@name = name
end

def name #ゲッターを定義
@name
end
end
“`

上記の一つ目のdef内で「name=」というメソッドを追加している
これはインスタンス変数を代入するためのメソッドで**セッター**と呼ぶ。

“`
>user = User.new
>user.name = “吉田沙織”
=>”吉田沙織”
“`
これによりインスタンス変数に名前を代入することが可能になった。

また二つ目のdef内ではインスタンス変数の内容を参照するためのメソッドを作成している。
これを**ゲッター**と呼ぶ

“`
>user.name
=> “吉田沙織”
“`
これ

元記事を表示

Rails tutorial 第1章 デプロイエラー

Railsチュートリアルで初っ端から詰まったのでQiitaの投稿テストも兼ねて解決法をメモ。
最初のデプロイでエラーになるパターンはどうやら多いようで、原因も多岐に渡るよう。
その内のいくつかを試したが上手くいかなかったので、もう一度エラーメッセージを見直した。

“`
remote:
remote: !
remote: ! Could not detect rake tasks
remote: ! ensure you can run `$ bundle exec rake -P` against your app
remote: ! and using the production group of your Gemfile.
remote: ! rake aborted!
remote: ! LoadError: cannot load such file — bootsnap/setup
remote: ! /tmp/build_91342a9bef3f968c6ae2092e716225bc/config/b

元記事を表示

Rails groupでカラム別にcountする

countする時groupでカラム別にcountする

“`ruby
#Userモデル
User(id: integer, email: string, status: integer)

# User.statuses
{“init”=>0, “using”=>1}

User.all.count
(233.9ms) SELECT COUNT(*) FROM `users`
=> 10

User.all.group(:status).count
(135.6ms) SELECT COUNT(*) AS count_all, `users`.`status` AS users_status FROM `users` GROUP BY `users`.`status`
=> {“init”=>4 “using”=>6}

“`

元記事を表示

Railsのautoloadについて(初心者向け)

# Railsのautoloadについて(初心者向け)
通常のRubyでは自分で作成したRubyプログラム(クラスの定義など)を読み込む場合もrequireを使います。

例)

“` ruby
class Dog
class << self def bark p 'Wan' end end def run p 'buuun' end end ``` ``` ruby # requireが必要。理由はDogClassとmain文が別になっている為。 require './seperate_class' # 追加 Dog.bark dog.run dog = Dog.new() ``` ## Railsの場合は しかしRailsの場合はrequireを書く必要がない時があります。 例) Railsのコントローラクラス ``` ruby class HogeController < ApplicationController def index @hoges = Hoge.all end end ```

元記事を表示

RubyonRails 速習実践ガイド自分まとめ1-1

#RubyonRails 速習実践ガイド 自分まとめ
###chapter1-1

`クラスとインスタンス`
*例 
 クラス→人間
 インスタンス→吉岡里帆
  
 クラス→猫
 インスタンス→タマ*

吉岡里帆のクラスは人間
吉岡里帆は人間のインスタンス
タマは猫のインスタンス

`オブジェクトの機能はクラスで決まる`
“氏名”.length
=> 2

*Stringクラスのオブジェクトだからlengthが使える*

1.length    
=> Nomethod error

*Integerクラスにlengthを使っても答えてくれない*

Rubyでプログラムをつくるには
どのクラスのオブジェクトにどんな機能があるのか、
目的にあったクラスのオブジェクトを使うことが大切

`変数`
“氏名”.class
“氏名”.object_id →この2つの氏名は違うオブジェクトとして扱っている

label = “氏名”のように、何かのオブジェクトを指し示すために変数が必要
変数に代入することによって何度object_idを使っても同じ値が返ってくる

`メソッド`
オブジェク

元記事を表示

OTHERカテゴリの最新記事