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

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

【Rails】deviseを用いた名前ログイン機能の実装

#目標

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/6387f46a-3013-7da2-c528-424d29c64530.gif)

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

# ログイン機能の実装

### 1. アプリケーションを作成

“`terminal:ターミナル
$ rails new devise_name
“`

### 2. トップ画面を作成

“`terminal:ターミナル
$ cd devise_name
“`

“`terminal:ターミナル
$ rails g controller homes top
“`

“`ruby:routes.rb
Rails.application.routes.draw do
root ‘homes#top’
end

元記事を表示

【SearchConsole】data-vocabulary.orgが非推奨に、パンくずgemのgretelを互換性のあるbuoysに乗り換え

# railsの超有名gemであるgretelからbuoysに乗り換えました。
railsの言わずと知れたパンくずのgemである、gretelですが現時点(2020/04/08)ではdata-vocabulary.orgを利用しているため
schema.orgを利用している buoys にライブラリを乗り換えました。

乗り換え方法はページ下部に記載。

## rails の gretel もそのうち対応されそうです。
現時点では対応されておりませんが。
グレーテルのFork先でPRが作られた、対応される見込みはあるとおもいます。

https://github.com/WilHall/gretel/pull/17

issueの方でも対応する予定はありますとコメントがありますね。
https://github.com/WilHall/gretel/issues/16

## 背景はGoogleの仕様変更
Google は2020年4月6日以降、data-vocabulary.org を検索結果のリッチリザルトの対象外にすることを決めた。

検索順位に影響がでるという情報は見たところ

元記事を表示

【Rails】CarrierWave+MiniMagickでユーザーアイコンを作る

CarrierWave + MiniMagickでユーザーアイコンを作ります。

### バージョン情報

* rails 5.2.3
* ruby 2.6.3

### ユーザーアイコンを作る

##### 元画像を切り抜く

width 100px, height 100pxで切り抜き、第三引数で切り抜きを行う際の中心点を指定します。

(app/uploaders/icon _uploader.rb)

“`ruby
process resize_to_fill: [100, 100, “Center”]
“`

#### サムネイルの設定

30×30のサムネイルを設定します。`.icon.thumb.url`で呼び出せます。
(app/uploaders/icon _uploader.rb)

“`ruby
version :thumb do
process resize_to_fit: [30, 30]
end
“`

#### 画像の表示

ヘッダーにはサムネイルを表示します。

(app/wiews/layouts/appliacation.html.erb

元記事を表示

【Rails】ポケモンのような「経験値に連動して、レベルアップする機能」を実装したい!

## 自己紹介
– 現在プログラミングの学習中の者です
– 言い回しや知識に関して、諸所間違い等あるかと思います
– その際は、ご指摘いただけますと幸いです

## やりたいこと
Railsでポケモンのように「経験値に連動して、レベルアップする機能」を実装すること。

## 問題点
どのようにテーブルを設計するのかわからない。

## 結論
では早速参ります。
###1.テーブル設計
– モデル名:User、カラム名:level, experience_point
– モデル名:LevelSetting、カラム名:level, thresold

以上、2つのモデルを作成してください。名称はお任せします。
但し、データ型は全てintegerでお願いします。

ちなみに、ここで**Userのlevelカラムのdefaultを1にして、experience_pointのdefaultを0にする**ことをお勧めします。(nilだと「加算」の時にエラーが起こりやすいため)
db:migrate前にマイグレーションファイルに追記するだけなので、是非調べてみてください。

“`
rails g

元記事を表示

rbenvを利用している場合、VSCodeで[Ruby Solargraph]をインストールするとエラーが出る

# 問題
VSCodeでRubyの拡張機能である[Ruby Solargraph](https://github.com/castwide/vscode-solargraph)をインストールしたところ、以下のエラーが出て利用できませんでした。
スクリーンショット 2020-04-07 23.09.46.png

インストール失敗したかと思いましたが、ターミナルからSolargraphを見に行くことはできています。

“`zsh:
$ solargraph -v
0.38.6
“`
調査した結果、解決できましたので、その方法を記載します。

### 参考にさせていただいた記事
– https://qiita.com/tequila0725/items/8e93dc894e0ab67d322f
– https://

元記事を表示

秒を60進法表示に変更する方法

##やりたいこと

“`
8時間30分+10時間+10時間
=> 28時間30分
“`

↓↓↓ 秒数計算

“`
30600+36000+36000 / 60 / 60
=> 28.5
“`

**↑この数値を→「28:30」に直したい**

##合計値が24時間以内の場合

“`
Time.at(seconds).utc.strftime(‘%R’)

Time.at(30600).utc.strftime(‘%R’)
=> “08:30”
“`

これは問題なく動く!

しかし、、、

##合計値が24時間超えるとき(今回の問題)

“`
Time.at(102600).utc.strftime(‘%R’)
=> “04:30” ← 一周回った値しか返してくれない(Time.atを使用しているので当たり前だが。。。)
“`

#本題
##「28:30」のように表示させたい

“`
seconds = 102600
days = seconds / 86400
# days = 1
“`

↑ まずは何日分かを取得する

“`
time_at = Ti

元記事を表示

文字列に変数を埋め込む【Ruby/PHP/Swift】

## 概要
RubyとPHPをざっくり学び、現在Swift学習中の筆者の備忘録です。
よくある「文字列に変数を埋め込む(変数展開)」ことについて
言語間で微妙な違いがあり、すぐ分からなくなるのでまとめました。

## 記述する内容

変数「name」に文字列「田中」を代入する。
この変数を埋め込む形で「こんにちは、田中さん」という文字列を出力する。

## Ruby

“`ruby
“#{変数}”

name = “田中”
puts “こんにちは、#{name}さん” 
“`

## PHP
“`php
“${変数}”


“`

## Swift
“`swift

“\(変数)”

var name: String = “田中”
print(“こんにちは、\(name)さん”)
“`

## 最後に
以上、簡単ですが変数展開についてでした。
こういう細々した違いは、新しい言語に挑戦していると
すぐにこんがらがってしまいます。。。
まとめておくと安心ですね。

元記事を表示

Rails コマンドが急に使えなくなった

久しぶりにrailsを起動しようとしたらrails sが通りませでした。
同じくrails -vやrails newをしても同じ様な状態になります。

色々調べたのですが、どうしても解決できずにこちらで質問させていただきます、、、
(初心者です、質問の仕方が間違っていたらすみません)

` dlopen(/Users/ユーザー名/.rbenv/versions/2.5.1/lib/ruby/2.5.0/x86_64-darwin18/digest/md5.bundle, 9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (LoadError)
Referenced from: /Users/ユーザー名/.rbenv/versions/2.5.1/lib/ruby/2.5.0/x86_64-darwin18/digest/md5.bundle
Reason: image not found – /Users/ユーザー名/.rbenv/versions/2.5.1/lib/ruby/2.5.

元記事を表示

開発環境、テスト環境、本番環境って何?雑にメモ

3つの環境が用意されているよ

例えば、herokuにpushする場合は、本番環境を使用しているみたい

こいつらは、RAILS_ENVという環境変数を用いて動作モードを切り替えられる

例えば、コマンドプロンプトで普通に指令を送る場合は、開発環境に送っている。

じゃあ「本番環境」を指定して実行したい時は、、、

このコードを記述すればおk

RAILS_ENV=production

元記事を表示

Kinx ライブラリ – Integer

# Integer

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。言語はライブラリが命。ということでライブラリの使い方編。

> [リポジトリ(https://github.com/Kray-G/kinx)](https://github.com/Kray-G/kinx) のほうの説明を “Looks like JavaScript, feels like Ruby, and it is the script language fitting in C programmers.” に変えてみた。意味的には例の名探偵のオマージュですが、英語の表現は違っていてオリジナルです。

今回は Integer です。

* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)

元記事を表示

配列とハッシュに関して

# 対象読者
プログラミング初学者

# 配列に関して
配列(array)は複数の値をまとめて管理したいときに使用する。
配列内で管理されるものは”要素(element)”と呼ばれる。

##配列の定義のしかた

“`ruby
#例1
array = Array.new

#例2
fruits = [“apple”, “banana”]
“`

##配列に要素を追加する方法

型は以下の通り。

“`ruby
配列.push(追加する要素)
“`

例えば

“`ruby
#空の配列を用意して
array = Array.new

#”A”を追加するには
array.push(“A”)
puts array # 出力結果 [“A”]
“`

また、一度に複数の要素を追加したい時は

“`ruby
#先ほどの配列をそのまま適用すると
array.push(“B”, “C”)
puts array # 出力結果 [“A”, “B”, “C”]
“`

## 要素の間に要素を追加(挿入)する方法

型は以下の通り。

“`ruby
配列.insert(挿入位置, 挿入

元記事を表示

クロスサイトリクエストフォージェリ(CSRF)の対策

##クロスサイトリクエストフォージェリ(CSRF)
Webサイトにスクリプトや自動転送(HTTPリダイレクト)を仕込むことによって、利用者に意図せず別のWebサイト上で何らかの操作(掲示板への書き込みや銀行口座への送金など)を行わせる攻撃手法のことをいいます。
CSRFの脆弱性が存在すると以下のような被害を被る可能性があります。
①利用者のアカウントによる物品の購入
②利用者の退会処理
③利用者のアカウントによる掲示板への書き込み
④利用者のパスワードやメールアドレスが変更
CSRF脆弱性の影響は「重要な処理」の悪用に限られるため、CSRFの脆弱性を個人情報の取得等に用いることはできません。
###CSRFの攻撃例
例えば、利用者が罠サイトを閲覧することによってパスワードが変更されてしまう場合
①利用者がexample.jpにログインしている
②攻撃者は罠を作成
③利用者が罠を閲覧する
④罠のJavaScriptによる、被害者のブラウザ上で攻撃対象サイトに対し、新しいパスワードabcdefがPOSTメソッドにより送信される
⑤パスワードが変更される
##CSRFの対策
CSRF攻撃を防

元記事を表示

gRPC: prototoolからbufへの道 ~ vol. 1 ~

# gRPC: prototoolからbufへの道 ~ vol. 1 ~

## Bufとは
Protobufが技術的なメリットの良い選択になるだけでなく、非常に使いやすく決定が簡単になることです

## 機能
– 自動ファイル検出
– prototoolとは違い、任意に指定も可能
– 正確なlintとbreaking checkersの構成が選択可能になる
– lint: 40 breaking checkers: 50
– エラー出力はどのエディターでも簡単に解析可能
– コンパイルの高速化
– protoc: 4.3sに対して 4コアでbuf: 0.8s
– protocのプロトコルプラグインとして使用

## Buf CLIツール

### サポートされている機能
– 優れたAPI設計の選択と構造を強制するリンター
– ソースコードまたはワイヤレベルでの互換性を強制する重大な変更検出器
– FileDescriptorSetsの拡張機能であるイメージを生成する構成可能なファイルビルダー

### インストール方法

“`
brew tap bufbuild/bu

元記事を表示

ユーザーの役割を分ける際はSQLアンチパターンを意識する

#●はじめに
Railsチュートリアルを参考にしポートフォリオを作成すると、Userモデルにadmin属性を追加しSTIで管理ユーザーを作成する事になるかと思います。
しかし、SQL的にはアンチパターンであるため注意が必要です。

#●結論
Userモデルと別に、adminモデルを作成する事が良い。

#●STI(Single Table Inheritance:単一テーブル継承)
STIは、単一の継承階層に所属するクラス群を、ひとつのテーブルを使って永続化する手法です。

![スクリーンショット 2020-04-07 20.20.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553621/809d4e17-6a2f-bb9a-d885-3e640fb5777f.png)

このように実装する方法ですね。しかしこの方法はSQL的にアンチパターンだという事です。
なぜこの方法が良くないかという点は、下記URLを参考にしました。
https://qiita.com/yebihara/items/9ec

元記事を表示

クロスサイトスクリプティング(XXS)対策

##クロスサイトスクリプティング(XXS)
Webアプリケーションでは、外部からの入力などに応じて表示が変化するページを実装したいことがしばしばあります。
しかし、この部分のHTML生成の実装に問題があると、外部よりスクリプトを埋め込まれクッキーを盗まれたり、JavaScriptによる攻撃を受けてしまうおそれがあります。
こういった攻撃手法をクロスサイトスクリプティングと言います。
###XSSの攻撃例
では、実際にXSSの脆弱性を用いた攻撃例です。
ここでは登場人物を用いて説明します。
ユウスケ・・・ 一般ユーザ
タカシ ・・・攻撃を仕掛ける悪意のある者
1. タカシはXSSの脆弱性があるサイトに悪意のあるスクリプトを埋め込む
2. タカシは1.でスクリプトを埋め込んだサイトをリンクに指定する罠サイトを用意する
3. タカシはユウスケに罠サイトへ誘導するようなメールを送信する
4. ユウスケは罠サイトにアクセスし、タカシがスクリプトを埋め込んだサイトにアクセス
5. ユウスケのブラウザ上でタカシが埋め込んだスクリプトが実行される
※ここで出てくる罠サイトとは、スクリプトを埋め込んだX

元記事を表示

each文の基本

##環境,前提
Ruby 2.5.1
MacOS Mojave Ver.10.14.6

本記事はRubyがインストールされた前提の記事です。
Rubyをインストールしたあと、とにかくRubyをいろいろ触ってみて慣れていくための記事です。お役に立てば幸いです。

# eachメソッド

eachメソッドは配列や範囲オブジェクトで使用できるメソッドで、オブジェクトに含まれる要素を順番に取得することができます。基本的な書き方は以下のようになります。

“`sample.rb

配列オブジェクト.each do |変数|
#処理
end

“`

具体例で書きますと

“`sample.rb
fruites = [“オレンジ”, “イチゴ”, “リンゴ”]
fruites.each do |fruite|
puts fruite
end

“`

出力結果は以下のようになります。

“`:Tarminai
オレンジ
イチゴ
リンゴ
“`

#解説
まずソースコードの1行目でfruitesという配列オブジェクトを用意しています。

そして配列オブジェクトfr

元記事を表示

情報セキュリティとは

##情報セキュリティ
Webサービスにおいてのセキュリティ(安全保障)です。情報セキュリティにおける理想は、「不正なアクセスや情報の漏洩を防ぎつつ、権限がある人は便利に利用できる」状態を維持することです。「機密性」「完全性」「可用性」の3つの要素を維持することを目標にします。
①機密性 権限を持たない人が情報資産を見たり使用できないようにすること
②完全性 権限を持たない人が情報を書き換えたり消したりできないようにすること
③可用性 権限を持つ人がいつでも利用したいときに利用できるようにすること
##脆弱性(ぜいじゃくせい)について
コンピュータやネットワーク、アプリケーション全体のセキュリティに弱点を作り出すコンピュータソフトウェアの欠陥や仕様上の問題点のことを脆弱性と言います。Webアプリケーションに脆弱性があると、開発者側だけでなく、利用者側も被害を被る可能性があり、様々な被害が生じる可能性があります。脆弱性は、バグや、開発者のセキュリティチェック不足により生まれます。
###脆弱性によってもたらされる被害
脆弱性がアプリケーション内に存在することによって、以下のような被害が想定

元記事を表示

環境構築から始めるテスト駆動開発 ~Ruby開発環境を構築する(WSL版)~

# 環境構築から始めるテスト駆動開発 ~Ruby開発環境を構築する(WSL版)~

## はじめに

これは [環境構築から始めるテスト駆動開発 ~プログラミング環境の共通基盤を構築する~](https://qiita.com/k2works/items/19d037814875b3a03eb3) の開発言語セットアップ記事です。Windows 10 Home で共通基盤が構築されていることを前提としています。

## インストール

Ruby開発環境の自動構築をするため以下のレポジトリを自分のレポジトリにフォークします。

[テスト駆動開発から始めるRuby入門](https://github.com/hiroshima-arc/tdd_rb)

`Fork` を押します。

![provision 001](https://github.com/hiroshima-arc/tdd_rb/blob/feature/episode-0/docs/images/article/episode_0/provision-001.png?raw=true)

`Fork` が完了して自分のレポ

元記事を表示

環境構築から始めるテスト駆動開発 ~Ruby開発環境を構築する~

# 環境構築から始めるテスト駆動開発 ~Ruby開発環境を構築する~

## はじめに

これは [環境構築から始めるテスト駆動開発 ~プログラミング環境の共通基盤を構築する~](https://qiita.com/k2works/items/19d037814875b3a03eb3) の開発言語セットアップ記事です。Windows 10 Home で共通基盤が構築されていることを前提としています。

## インストール

[RubyInstaller](https://rubyinstaller.org/downloads/)からWITH DEVKITをインストールします。

![ruby win install 001](https://github.com/hiroshima-arc/tdd_rb/blob/feature/episode-0/docs/images/article/episode_0/ruby-win-install-001.png?raw=true)

インストラーの指示に従います。

![ruby win install 002](https://githu

元記事を表示

【Rails】Ajaxを用いた非同期投稿の実装

#目標

![ezgif.com-video-to-gif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/f73c1bf0-8892-b3d8-67f4-0bb2d1a9ba3f.gif)

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

# 前提

ログイン機能を実装済み。

ログイン機能 ➡︎ https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d

# 投稿機能の実装

### テーブル

“`ruby:schema.rb
ActiveRecord::Schema.define(version: 2020_04_05_115005) do

create_table “books”, force: :cascade do |t|
t.string “title”

元記事を表示

OTHERカテゴリの最新記事