Ruby関連のことを調べてみた2021年10月02日

Ruby関連のことを調べてみた2021年10月02日

ハッシュ アウトプット

ハッシュとは中身の値 バリュー をそれに対応する名前 キー で管理することができます。配列と同じように複数の値を持つことができる。

“`ruby
変数 = {}
“`

で生成でき

“`ruby
変数 = {キー1 => バリュー1,キー2 => バリュー2}
“`

シンボルを使用すると

“`ruby
変数 = {キー1 :バリュー1,キー2 :バリュー2}
“`

となり、上記も下記も出力すると同じものが出力される。

ハッシュに値を追加するには

“`ruby
変数 = {}
変数[追加したいキー] = バリュー
“`

で追加できる。

例えば

“`ruby
men = {name :Taro,age :28}
“`

に身長(キー) 179(バリュー)を追加したければ

“`ruby
men[height] = 179
“`

となる。

ハッシュを取得したい場合は
ハッシュ[取得したいキー]で取得できる。配列では添字だったがハッシュはキー(名前)でバリュー(値)を管理しているのでキーを指定する。
menのageを取得したい場合は

“`ru

元記事を表示

配列 アウトプット

配列とは一つの変数で複数の値を持つことができる値で、中のデータは要素と呼ぶ。要素は順番をもっていて配列に入ると自動的に与えられる。
変数 = [値] で定義できる。
後から要素を追加することもでき
変数 << 値 で追加できる。 << これを配列演算子という。 要素には添字という番号が割り振られており、 ```ruby animals = [“サル”,”イヌ”,”キジ”] ``` では、サルが0、イヌが1、キジが2、というふうになっている。 配列の要素を取得した場合は ```ruby 配列[添字] ``` で取得できる。animalsでイヌを取得したい場合は ```ruby animals[1] ``` となる。 ```ruby 変数 = 配列[添字] ``` で配列の要素を取得し変数に代入することができる。 配列の値を変えたい場合は ```ruby 配列[添字] = 値 ``` で変更できる。animalsのキジをハトに変えたい場合は ```ruby animals[2] = “ハト” ``` となる。 lengthメソッドを使うと配列の要素の数を数え

元記事を表示

【Ruby】奇数か偶数かを判断するメソッド

– Inetger#odd?は奇数であればtrue、そうでなければfalseを返します。
– Inetger#even?は偶数であればtrue、そうでなければfalseを返します。

### 奇数かどうか
“`
5.odd? => true
10.odd? => false
“`

### 偶数かどうか
“`
10.even? => true
5.even? => false
“`

元記事を表示

クラスとインスタンスの概念

今回はRubyの問題です!

これを解いて理解して行こうと思います!

下記が問題です!

“`php
class Article

def initialize(author, title, content)
@author = author
@title = title
@content = content
end

end
“`

上記のコードに追加を行い、以下の出力結果を得られるようにしてください!

ただし、クラスとインスタンスを使用するものとします!

“`
著者: 佐々木
タイトル: HTMLの素晴らしさについて
本文: Awesome HTML!
“`

#①.解答

“`php
class Article

def initialize(author, title, content)
@author = author
@title = title
@content = content
end

def author
@author
end

def title

元記事を表示

deviseのメールアドレスのバリデーションを変更する

## はじめに
開発ですぐに忘れそうなことを、簡単に再度調べられるようにするための備忘録です。

## やりたいこと
ログイン認証関連のgem、[devise](https://github.com/heartcombo/devise)の
メールアドレスのバリデーションを強化したい。

## 背景
deviseには、メールアドレスとパスワードのバリデーションが簡単に設定できる「validatable」モジュールが実装されているが、メールアドレスのバリデーションがゆるい。

例)
– exam$$ple@gmail.com のような記号が含まれていても通ってしまう
– example@aaaaa のような不正なドメインでも通ってしまう

しかし、パスワードの確認やメールアドレスの一意性は、便利なので、そのままにしたかった。

[参考](https://github.com/heartcombo/devise/blob/master/lib/devise/models/validatable.rb)

## 試した方法

modelに、メールアドレスのフォーマットを指定した。

“`r

元記事を表示

[Ruby] AtCoder過去問 B – Picture Frame

##はじめに
AtCoder過去問をRubyで解いてみました。
よろしくお願いします。

問題はこちらから確認してください↓

https://atcoder.jp/contests/abc062/tasks/abc062_b

##B – Picture Frame
まずは入力を受け取ります。

“`ruby
h, w = gets.split.map(&:to_i)
pics = readlines.map(&:chomp)
“`

2行目以降は文字列を配列として受け取っています。
入力例1で言うと、picsは“`[“abc”, “arc”]“`となっているはずです。

続いてフレームの一番上(1行目)と一番下を作ります。
つまり“`#“`だけの行を作ります。

これはw+2の“`#“`の数を用意します。
私は配列を用意してtimesをw+2回、回して配列に#を入れていきます。

“`ruby
h, w = gets.split.map(&:to_i)
pics = readlines.map(&:chomp)

top_bottom = []
(w+2).tim

元記事を表示

【Rails】リーダブルなroute.rb

リーダブルなroute.rbの書き方

CRUDなbookコントローラと、photoコントローラ
独自アクションがそれぞれ一つづつある場合。

以下のように、コントローラ毎に分けることで、
開発者にとって読みやすくする。

“` routes.rb
Rails.application.routes.draw do
controller :books do
resources :books
scope path: “hoge”
get “subscribe”, action: :subscribe
end
end
controller :photos do
resources :photos
scope path: “hoge”
get “unsubscribe”, action: :unsubscribe
end
end
end
“`

元記事を表示

ストロングパラメーターアウトプット

ストロングパラメーターとはデータベースが全てのパラメーターを受け取ることができる状態にしておくと、意図しないデーターベースの読み書きが起こってしまうことがありそれを防ぐためのもの。悪意あるパラメーターからによるデータの改竄などのセキュリティの欠陥を防ぎ、ユーザーを守ることにつながる。
ストロングパラメーターを使って保存するパラメーターに制限をかけることは重要。
ストロングパラメーターにはrequireメソッドとpermitメソッドがある。

requireメソッドは送信されたパラメーターを持つparamsが使用できるメソッド。

“`ruby
params.require(:対応したモデル名)
“`

で定義できる。ストロングパラメーターとして使用する場合は主にモデル名を指定する。
これにより意図しないパラメーターをparamsが受け取った場合。エラーを返すことができ、原因特定のためにユーザーにエラーを示すことができる。
requireメソッドで必要なパラメーターを取得できるようになったが、さらにパラメーターを絞り込み、カラムに保存したい情報を指定することがpermitメソッドで

元記事を表示

Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate.

## このページについて
passenger-ruby のdocker imageが突然ビルドに失敗するようになったので調査した。
エラーの原因と解決方法についてまとめる。

## 事象
Dockerのビルド時に `apt-get update && apt-get install` で以下エラーが発生する

“`
Err:5 https://oss-binaries.phusionpassenger.com/apt/passenger bionic Release
Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate. Could not handshake: Error in the certificate verification.

E: The repository ‘https://oss-binaries.phusionpassenger.com/apt/passenger bionic Rel

元記事を表示

メソッドにおいての引数と返り値

◾︎ メソッドにおいて引数と返り値は非常に重要な役割をしている。
 
まず初めにメソッド内と外で領域が展開させれいるルールを頭に入れてもらいたい。その中でこの領域に値を打ち込む際に必要になってくるのが、引数と返り値である事。引数と返り値を定義する時、名前に関して好きな名前をつけて良い。

今回は短いが大事な要素なので書かせていただきました。

wagaでした。
 

元記事を表示

logger.debugの使い方

##環境
Rails 6.1.3.2
ruby 2.7.1

##使い方
1. Controllerなどオブジェクトの中身を見たい箇所に下記を書く
(1行目と3行目はログを出力したときの見やすさのために書いた)
配列やハッシュを扱うときはinspectメソッドを使うとより中身が見やすい

“`rails
logger.debug ‘——————-‘
logger.debug (中身を見たいオブジェクト).inspect
logger.debug ‘——————-‘
“`

2. ターミナルなどで下記コマンドを叩く

“`ターミナル
$ tail -f development.log
“`

##参考

https://railsguides.jp/debugging_rails_applications.html#inspect

元記事を表示

【Ruby】filter / detect / mapの違い

##filter
要素に対して{}内が真であった要素を全て含む**配列**を返す
真になる要素がひとつもなかった場合は空の配列を返す

“`ruby
[1, 2, 3, 4, 5].filter { |num| num.even? }
# => [2, 4]

[1, 3, 5].filter { |num| num.even? }
# => []
“`

https://docs.ruby-lang.org/ja/latest/method/Array/i/filter.html

##detect
要素に対してブロックを評価した値が真になった**最初**の要素を返す
真になる要素が見つからない場合はnilを返す

“`ruby
[1, 2, 3, 4, 5].detect { |num| num.even? }
# => 2

[1, 3, 5].detect { |num| num.even? }
# => nil
“`

https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/detect.html

##ma

元記事を表示

「notion API」の ruby ライブラリ比較してみた(gem)

notion APIのBeta版が公開されてから5ヶ月ほど経ちましたね!
リリース当初は各言語でAPIのマッパーライブラリが多く乱立しており、比較も難しかったですね。。。
今回は **2021/07/01以降に更新があった ruby の gem 3つ** を比較し、どのライブラリを使用すべきかまとめていこうと思います!

https://rubygems.org/search?query=name%3A+notion++++updated%3A+%3E2021-08-01

notionAPIの導入を検討している方の参考になれば幸いです。

# 1. notion-ruby-client
https://github.com/orbit-love/notion-ruby-client

https://rubygems.org/gems/notion-ruby-client

累計ダウンロード: 4205
GitHubスター数: 22
最終更新日: 2021/08/29

## 特徴
Notionを利用したソフトウェアを開発している会社でOSS開発されているライブラリ。
そのため継続的

元記事を表示

#0.5 アプリ作成→GitHubへのPush

#はじめに
前回の[開発環境の準備](https://qiita.com/snow100/items/eabcee3d7aa7beeb0f98)に引き続き、
アプリ作成からGitHubへのPushの流れを記事にして行きたいと思います。

#目次
1.アプリ作成
2.リモートリポジトリ作成
3.リモートリポジトリへPush

#1.アプリ作成
“`
username:~/environment $ rails new snow-review
“`
rails new アプリ名でアプリケーションのひな形を作成する事ができます。

“`
username:~/environment $ cd snow-review
“`
3.リモートリポジトリへのPushの為にcdでアプリ上に移動しときます。

#2.リモートリポジトリの作成
– Your repositriesから[NEW]ボタンを押し、Create New Repositriesへ。
– Repository Nameを書き、その他お好みの設定をし、[Create New]ボタンで新規リポジトリ作成。
– 新しく作ったリポ

元記事を表示

ruby-ffi や Fiddle で、環境依存でサイズが変わる構造体に対処する

## はじめに

FFIで環境依存で対処する構造体に対処することは難しい。Win, Mac, Linuxなど大雑把に場合分けすることも考えられるが、ここでは別の方法として、`sizeof(piyo)` の結果を定数に保存する小さなC拡張を作成することを考える。

## カレンダー日時を保存するtm構造体

ここでは、例として、日時を保存するtm構造体を扱う。tm構造体は、`time.h` をincludeすると使うことができる。
Rubyでは、ffiを扱うライブラリは`fiddle`と`FFI(Ruby-FFI)`の2種類があるが、下記はFiddleを使った例である。

“`ruby
TM = struct [
‘int tm_sec’,
‘int tm_min’,
‘int tm_hour’,
‘int tm_mday’,
‘int tm_mon’,
‘int tm_year’,
‘int tm_wday’,
‘int tm_yday’,
‘int tm_isdst’

元記事を表示

Rubyの特異メソッド、クラスメソッドを理解する

Rubyのリファレンスを見るとよく特異メソッドという言葉が出てくるので調べました。
クラスメソッドとも関連があるため併せて記載します。

動作確認環境 ruby 3.0.0p0

## 特異メソッド

まずはリファレンスから。

https://docs.ruby-lang.org/ja/latest/doc/spec=2fdef.html#singleton_method

>特異メソッドとはクラスではなくある特定のオブジェクトに固有のメソッドです。特異メソッドの定義はネストできます。

>クラスの特異メソッドはそのサブクラスにも継承されます。言い替えればクラスの特異メソッドは他のオブジェクト指向システムに>おけるクラスメソッドの働きをすることになります。

>特異メソッド定義式は、メソッド名を Symbol にしたオブジェクトを返します。

Rubyはオブジェクトに対して固有のメソッドを定義できるみたいですね。
犬のしつけに例えてサンプルコードを試してみました。

“`ruby
class Dog
def bark
‘わんわん’
end
end

pochi =

元記事を表示

[リファクタリング] ポートフォリオの検索機能 クラスメソッド

初めに

現役エンジニアの方からPFのフィードバックをいただきましたので、
リファクタリングを進めていきます。

実装している検索機能は以下の通りです。

![スクリーンショット 2021-10-01 10.08.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/e6268f8f-0d96-3c8a-dd44-e7ce53cfadef.png)

元々のコード

“`ruby:models/post.rb
def self.search(search)
return Post.all unless search
Post.where(‘title LIKE(?)’, “%#{search}%”).or(Post.where(‘content LIKE(?)’, “%#{search}%”))
end
“`

修正後

“`ruby:models/post.rb
def self.search(search)
retu

元記事を表示

#0 開発環境の準備

#はじめに
これから学習の復習&マークダウン記法の学習の為に記事を投稿していきます。
誰かの助けれになれば幸いです。
今回はアプリ作成前の準備段階について記事にしていきたいと思います。

#目次
1.AWS Cloud9で新しくIDE(開発環境)を立ち上げる
2.AWS Cloud9での設定
3.GitHubとの連携方法

##1.AWS Cloud9で新しくIDE(開発環境)を立ち上げる
(1).Your environmentsにて[create environments]ボタンをクリック
(2).(Name),(Description)をそれぞれ記述し、[NEXT STEP]のボタンをクリック
(3).Configure settingsにてPlat form 「・Amazon Linux 2」を選択
(4).[NEXT STEP]からの[create environments]ボタンで作成

これでAWS Cloud9にて新しく開発環境を立ち上げる事ができました。
次は、AWS Cloud9での設定を行なっていきたいと思います。

##2.AWS Cloud9での設定
– P

元記事を表示

「SQLだけで済むので…」?先輩のコメントからany?とexists?の違いを学ぶ(Ruby,Rails)

先輩からちょいと指摘された行ったリファクタリングが、ちょいと深くておもしろかったのでメモ。

## 背景とやりたいこと
ゲームのコースのデータを管理するgameモデルがあるとします。
ゲームにはstage1, 2があり、各コースにはnormal, specialの2つの種類(kind)があります。

“`ruby:app/models/game.rb
# == Schema Information
#
# Table name: games
#
# id :bigint not null, primary key
# name :text not null
# stage :integer not null
# kind :integer default(“first_normal”), not null

class Game < ApplicationRecord exnum

元記事を表示

Progate Ruby 個人的ざっくりまとめ

# 変数名が2語以上の場合は、アンダーバー(_)を挟む

例)your_name

# 変数展開は(#{変数})の形式

“`ruby:例
hello = “Hello”
puts “#{hello} World!” # Hello World!
“`

※javascriptの場合

“`javascript:例
var hello = “Hello”;
var text = hello + ” World!”;
console.log(text); // Hello World!

// または

var text = `${price} World!`;
console.log(text); // Hello World!
“`

※phpの場合

“`php:例
$text = “Hello”;
echo “{$text} World!”; // Hello World!
“`

# 繰り返し処理

each文

“`:形式
配列.each do |変数名|
実行したい処理
end
“`

“`ruby:例
languages = [“English”

元記事を表示

OTHERカテゴリの最新記事