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

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

【CircleCI】GitHubへプッシュ時に自動デプロイする際の手順

今まで自動デプロイは「capistrano」を使用していましたが、毎回コードを修正するたびにローカルでmasterマージして、「bundle exec cap production deploy」を実行していました。

今回はcircleCIを使用し、masterマージされたら自動でサーバーへSSHしてコードをデプロイするように実装してみました。
以下、実装の際の流れや詰まった部分の解説をまとめていきます!

– 開発環境

– ruby : 2.5.1
– rails : 2.4.2.3
– circleCI : 2.1

※ dockerは今回使用していません。

# .circleci/config.ymlの設定
①最初にcircleCIで使うconfig.ymlの設定をローカルでしていきます。
circleCIの設定は、該当リポジトリのルート直下に.circleciと言うフォルダを作り、その中のconfig.ymlで行います。

– config.ymlに以下を追記。

“`config.yml
version: 2.1
orbs:
ruby: circleci/ru

元記事を表示

deviseを利用してRailsアプリケーションに認証機能を作る

# はじめに
– [devise](https://github.com/heartcombo/devise)はRailsアプリケーションに簡単に認証機能を追加することができるgemです。deviseは[warden](https://github.com/wardencommunity/warden)というRackミドルウェアのラッパーで、実際の認証はwardenが行っています(そのため、実装の詳細を知りたい場合はwardenの実装をまず見る必要があるみたいです)。
– Railsチュートリアルでは認証機能をスクラッチで作成していますが、実際のRailsアプリケーションではこのdeviseを利用して認証機能を作成することがデファクトスタンダードとなっているようです。

– 今回は自分の勉強のため、deviseを利用してRailsアプリケーションに認証機能を追加する方法を整理したいと思います。なお内容は[こちらの記事](https://qiita.com/cigalecigales/items/f4274088f20832252374)をほぼ踏襲しています。謝謝

– なお以下の実装は

元記事を表示

【初学者手順書1】Ruby on Rails :開発環境の構築

5月中旬からRuby on Rails(以下、rails)の学習を始めて、超標準的なチャットアプリ制作~デプロイまでを一通り経験したので、自身の備忘録も兼ねて手順を整理していきたいと思います。

私が行ったRailsでのチャットアプリ制作は以下のような流れです。
7回に分けてチュートリアル作成します。

1 Macでの開発環境構築(MacOS Catalina)
2 Railsでアプリの雛形作成
3 フロント画面の実装(hamlとsass)
4 ログイン機能実装
5 グループ機能実装
6 メッセージ機能実装
7 Ajax非同期通信の実装

# Ruby on Rails 開発環境の構築
初めにMac(MacOS Catalina)での環境構築手順を整理します。

## ◉Command Line Toolsの導入
Command Line Tools = ソフトウェアをコマンドライン(ターミナル)で動かすためのツールです。
ログインシェルをzshにするため、ターミナルで下記のようにコマンドを実行します。

“`ターミナル
# zshをデフォルトに設定
% chsh -s /bin/

元記事を表示

Rails delegateメソッド

#delegateメソッドを使う
この記事は[プレゼンターを導入する](https://qiita.com/akilax/items/dd7358f20c82c6fce2fd)の続きです。

前回作ったモデルプレゼンターです。
このプレゼンターにdelegateメソッドを加えていきたいと思います

“`model_presenter.rb
class ModelPresenter
attr_reader :object, :view_context

def initialize(object, view_context)
@object = object
@view_context = view_context
end
end
“`

クラスメソッドdelegateは引数に指定された名前のインスタンスメソッドを定義します。
そしてそのメソッドの働きは、toオプションに指定されたメソッドが返すオブジェクトに委託されます。

今回はrawというメソッドをview_contextが返すオブジェクトに委託します

“`model_presenter.rb

元記事を表示

[備忘録]railsでfullcalendar表示させてみた

#はじめに
現在個人アプリ制作をしており、予約機能を実装するためgem「fullcalendar」を使いました。
これから紹介する手順を踏んで行けば、とてつもなく簡単に実装できます。
そして自分が最強になったのかと感じてしまうはずです。。
自分の備忘録として掲載しますが、誰かの参考になれば嬉しいです。

ちなみに表示できたらこんな感じになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569660/b64a5b8a-bfb9-b62e-ccd2-2a3a61dd5e82.png)

##実装順序
 
 1. 表示用のアプリケーション作成

 2. DBの作成

 3. Gemfileの導入、fullcalendarの呼び出し

 4. gemを使うための記述をする。

 5. ビューファイルの編集

 6. CSSの編集   以上!!!

## 1.表示用のアプリケーション作成、 2.DBの作成
 1. まずはアプリを作成し、DBを作ります

“` ruby
$ rails _

元記事を表示

【Rails】Twitterシェアボタンの作成方法

# 目標
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/a56b59d8-7603-9cad-7fb1-b306b02b05d4.gif)

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

# 前提

下記実装済み。

・[Slim導入](https://qiita.com/matsubishi5/items/b639ffddecc626856039)
・[Bootstrap3導入](https://qiita.com/matsubishi5/items/b117c95f4dd71340cc80)
・[Font Awesome導入](https://qiita.com/matsubishi5/items/a4c72f436e64ad106ee8)

# 実装

“`slim:books/show.html.sli

元記事を表示

【卒業生】DMMWEBCAMPに通おうか迷っている人に伝えたい事

# はじめに
自己紹介をさせてください。4月にプログラミングスクールDMMWEBCAMP(以下、**DWC**)を卒業し、7月より都内の自社サービスを展開している企業で勤務することになりました[yuki](https://twitter.com/yuki82511988)と申します。

元記事を表示

L.A studio app construction note 200622

L.A APP 構築 2020年6月22日

■学習教材
Code4Startup

■アプリ作成
ホーム画面の表示修正
サーチ機能の非表示
スタジオリストが3点表示を6点表示に変更
画像表示が各スタジオの詳細ページへの遷移

@変更前
![スクリーンショット 2020-06-19 16.57.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468139/50d9b710-9e99-8080-8d71-82684c4ef0d0.png)

@変更後![スクリーンショット 2020-06-22 18.50.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468139/9ca43ed2-782c-4f31-fdab-daaeba7d1129.png)

元記事を表示

Yay! I’m on Rails!

# はじめに
初`Ruby on Rails`記念です。
# on Rails!
![rails.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/242d3045-89b6-28ef-b0bc-7cd4af0ca941.png)
先輩諸氏からすれば見慣れた画面かもしれませんが、嬉しいです。
# 環境
“`raspberrypi.bash
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.4.45-v7+ #1321 SMP Wed Jun 10 17:33:27 BST 2020 armv7l GNU/Linux
“`
見ての通り、
`raspberry pi 3 B+`上の`raspberrypi`OS
# 嵌ったところ
例によって`sqlite`で嵌っております。
*[こちら -Qiita](https://qiita.com/___inon_/items/7566cc638d47ba99e23d)*を参考にして乗り切りました。

`Ge

元記事を表示

EC2デプロイ時、bundle installができずUndefined local variable or method `git_source’ for Gemfileのエラーが出る件

EC2デプロイ時に、サーバーにアプリをcloneするもbundle installでエラーが発生してハマりました。
忘備録として載せておきます。

##環境
Ruby 2.5.1
Rails 5.2.4.3

[こちら](https://qiita.com/Yuki_Nagaoka/items/dbb185feb6d4f051c2f2)の記事を参考にAWSにデプロイを進めている最中、bundle installを試みると以下のエラーが発生しました。

“`
$ bundle install
-bash: bundle: コマンドが見つかりません
“`
どうやら先にbundlerをインストールする必要があるみたいです。

“`
$ gem install bundler
Fetching: bundler-2.1.4.gem (100%)
Successfully installed bundler-2.1.4
Parsing documentation for bundler-2.1.4
Installing ri documentation for bundler-2.1.4

元記事を表示

ロジックを考えるということ Ruby

# コードでやりたいことを具現化する
 簡単に一言でいいますが、スンゲー難しい。使える表現を増やせど、むしろ学んだものの制約に縛られて、これはこんな感じでしか使えねーし、それならどうすればやりたいことをコードに起こせるのかで悩む方が多い・・・私はまだ未熟な身なので、こんな経験が多い。今回はそんな自分のコードにあった問題点から学んだことをケース毎に纏めて思考の整理するそんな記事です。

## 第一に表現が冗長

“`arr_year.rb
date = []

registerd_list.each do |data|
date.push data.createdAt
end

cnt = 0
date.each do |data|
if date.year == data.year
cnt += 1
end
end
cnt
“`

これはとあるEnumerableクラスを継承しているオブジェクトのデータをループで回し、データ内の作成された日付を配列に突っ

元記事を表示

ProgateのRuby on Railsコースで気になった所【エラーメッセージのeach文】

プログラミング未経験の初心者ですが、少し前にProgateのRuby on Railsコースを終わりました。

Railsチュートリアルをしながら復習してみると、Progateをやっていた時はあまりピンと来なかったけど、今なら少し理解できることが増えたので、気づいた点をまとめていきたいと思います。
この記事はその2です。
その1はこちら
https://qiita.com/HiMinmeg/items/1e29bf9252096d463f6b

Progateしているけど、ピンと来ていないな、ここ分からないなと思っている方のお役に立てば幸いです。

## エラーメッセージのeach文【コースⅤ】
バリデーションをかけて、投稿に対してエラーとなった時(制限文字数以上入力したとか…)投稿すると、エラーメッセージが表示されるようにします。

この時、each文を使う理由が分かっていませんでした。
考えてみると当たり前のことだったのですが、それでも理解できた時嬉しかったので、記録に残したいと思います。

エラーメッセージのeach文は例のような使い方になります。

<% @post

元記事を表示

【Ruby】何回もattr_reader,attr_writer,attr_accessorが何をやっているか忘れる

毎回調べた後に、ぼんやりとしたままになってしまうので忘備録的に書いておく。

# 概要

###  attr_reader

> インスタンス変数 name の読み取りメソッドを定義します。

引用元:https://docs.ruby-lang.org/ja/latest/method/Module/i/attr_reader.html

“`rb
class Human
#ここで定義
attr_reader :name

def initialize(name)
@name = name
end
end

# ここからインスタンス生成だよ

human1 = Human.new(sato)
p human1.name
# => sato

“`

###  attr_writer

> インスタンス変数 name への書き込みメソッド (name=) を定義します。

引用元:https://docs.ruby-lang.org/ja/latest/class/Module.html#I_ATTR_ACCESSOR

“`rb

class Human

元記事を表示

ActiveRecord の特定モデルを ReadOnly にしたい

ActiveRecord に用意されているものが一部の挙動にしか効果がない
漏れがないか不安になるが頑張って封じるモジュールを作るしかなさそう

`lib/autoload/active_record_read_only.rb` あたりに配置して

“`ruby
module ActiveRecordReadOnly
extend ActiveSupport::Concern

# ActiveRecord::ReadOnlyRecord エラーで rollback されるはずだが
# 無駄に動かす必要もないのでもないので封じる
included do
before_save { self.class.raise_readonly! }
before_create { self.class.raise_readonly! }
before_update { self.class.raise_readonly! }
before_destroy { self.class.raise_readonly! }
end

# 基本の R

元記事を表示

mysql2がbundle installエラーになるときの解決方法

#前提条件
mac OS
Rails 6.0.3.2
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin19]
#問題点
某オンラインスクールの教材を見ながらローカル環境でプロジェクトを作成していたところ、bundle installで以下のエラーが発生した。

“`
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory: /Users/ebinashohei/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/ext/mysql2
/Users/ebinashohei/.rbenv/versions/2.6.3/bin/ruby -I /Users/ebinashohei/.rbenv/versions/2.6.3/lib/ruby/2.6.0 -r ./siteconf20200622-74325-qvfli8.rb extco

元記事を表示

Active Record でよく使うメソッド

| メソッド | 役割 | 戻り値 | 記述例 |
|:–|:–|:–|:–|
| valid? | 対象のオブジェクトが有効かどうか確認 | true or false | user.valid? |
| save | データベースに対象のオブジェクトを保存させる | true or false | user.save |
| create | モデルの生成と保存を同時におこなう | 成功:オブジェクト自身
失敗:エラー | User.create(name: ‘hoge’, email: ‘fuga’) |
| destroy | 対象のオブジェクトの削除 | 成功:オブジェクト自身
失敗:エラー | user.destroy |
| find | 引数にidを入れてデータベースからレコードを取得 | 成功:対象のオブジェクト
失敗:エラー | User.find(1) |
| find_by | 引数にkeyとvalueを入れて、データベースからレコードを取得 | 成功:オブジェクト自身
失敗:nil | User.find_by(

元記事を表示

RailsのTips

*個人的な備忘録となります*
## 目次
– [データベースのインスタンスにアクセスするとき、.(ドット)+カラム名で値が取得できる理由](#データベースのインスタンスにアクセスするとき、.(ドット)+カラム名で値が取得できる理由)

#### データベースのインスタンスにアクセスするとき、.(ドット)+カラム名で値が取得できる理由
Active Record を継承したクラスで作られたインスタンス(オブジェクト)だから、.メソッドを使って値の取得が可能になっているから。
通常のRubyの記法ではないため、ハッシュオブジェクトに対して値を取得したいからドットで書いたらエラーになる。

###### Rubyにおけるハッシュの値の取得方法
“`ruby:example.rb
hash = {name: ‘hoge’, email: ‘fuga@example.com’}

hash[:name]
=> “hoge”

# .で取得しようとするとエラーになる
hash.name
NoMethodError (undefined method `name’ for {:name=>”hog

元記事を表示

Rubyで遭遇するはずのない算術オーバフローに遭遇した話

# はじめに
Rubyをメインに使用している筆者が算術オーバーフローに遭遇し教訓を得たので、発生した状況と対策について共有させて頂きます。
**※ 今回は数学問題はありません…**

そして多種多様なトリボナッチとコメントありがとうございました!
その中でも、Elixirバージョンでトリボナッチを解いてくれた@torifukukaiouさんの記事を紹介します。
[Elixirでトリボナッチ数列の問題を解いてみた(制限時間10分)]
(https://qiita.com/torifukukaiou/items/d5a6639edf541539ac3a?utm_campaign=email&utm_content=link&utm_medium=email&utm_source=public_mention)

# 何をしようとしていたのか?
前回のトリボナッチ数列との戦いから数日が経過し、今後さらに強烈な数学問題を解決するため、実装速度を早くする方法を探しておりました。そんな中gem ‘RubyInline’でC言語を使えると知り、C言語に少し触れてみようと実装したところ、算術オーバーフ

元記事を表示

Railsで電話番号(固定電話・携帯電話)を正規表現で表し、バリデーションとテストを書いてみた

## はじめに
電話番号のバリデーションをするために電話番号を正規表現で表してみた。

正規表現については下記を参考にしてください。
[初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」](https://qiita.com/jnchito/items/893c887fbf19e17d3ff9)
[Ruby | Rubular で ruby の正規表現を検証しながら作成 #ruby #正規表現](https://qiita.com/tbpgr/items/6fe1762cdbaccf26c571)
[Rubular](https://rubular.com/)(正規表現を検証しながら確認できます)
## 電話番号の前提条件
電話番号には様々な組み合わせ(桁数・ハイフン・括弧)があるが今回は下記を前提として表現する

・固定電話
 ・全部で10桁
 ・頭が0
 ・末尾は4桁
 ・ハイフンや括弧が入る可能性がある(なくても良い)

・携帯電話
 ・全部で11桁
 ・1,3桁目は0
 ・2桁目は5-9
 ・ハイフンや括弧が入る可能性がある(なく

元記事を表示

Railsでgroup_by

#グループIDをメンバーの多い順に並び替える

| group_id| user_id |
|——–:|——–:|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 2 |
| 3 | 1 |
| 3 | 3 |

“`ruby

groupsHash = groups.group(:group_id).order(‘count(user_id) desc’).count(:user_id)
#=> {1=>3, 3=>2, 2=>1}
“`

ここから人数が2人以上のグループidの配列を取得する

“`ruby

ids = groupsHash.filter_map{ |group| groupsHash[0].to_i if groupsHash[1] >= 2}

#=> [1, 3]
“`

元記事を表示

OTHERカテゴリの最新記事