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

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

[py2rb] set pop

# はじめに
移植やってます。
# pop (Python)
“`python
kwa = kw_given.pop()
“`
この`kw_given`は`set`っぽいのです。

https://docs.python.org/ja/3.7/library/stdtypes.html#frozenset.pop

> s から任意の要素を取り除き、それを返します。集合が空の場合、 KeyError を送出します

# どうする? (Ruby)
“`ruby
require ‘set’

kw_given = (1..5).to_set

kwa = kw_given.first; kw_given.delete(kwa)
“`
`Set`から任意の要素を取り出すメソッドってあまり無いようです。

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

`first`はEnumerableモジュールのメソッドです。
# メモ
+ Python の pop を学習した
+ 道のりは遠そう

元記事を表示

deviseの複数モデル使用でauthenticate_user!を使用したい

### 事象

オリジナルアプリを作成していて、アカウアントを分けるためにdeviseの複数モデルを使用している。
authenticate_user!を使用してログインしていない場合はログインページに遷移させる記述を
したかったが、複数モデルを使用しているためどちらかがログインしている場合でも片方の記述が
適用されてしまう。

“`application_controller.rb
before_action :authenticate_trainer!
before_action :authenticate_cliant!
“`

### 解決方法

“`posts_controller.rb
before_action :redirect_root, only: [:edit]

private

def redirect_root
redirect_to root_path unless cliant_signed_in? or trainer_signed_in?
end
“`
と言う記述に変更する。
ログインページに飛ばすような記述だと、複数モデルのためどちらの

元記事を表示

Rubyのattr_accessorとは何か

## 概要
Rubyでよく使用されるattr_accessorについてその必要性や使用方法などを備忘録として記載していきます。

## attr_accessorとは何か
結論から言うと`attr_accessor`(読み方: アトリビュートアクセサー)とは、
外部からクラス内の__変数を参照するためのゲッターメソッド__とその__変数を変更するためのセッターメソッド__を定義するものです。
ゲッターメソッドとセッターメソッドについては後ほど実際の例を記載します。

– 下記のようなUserクラスが定義されていたとします。

“`ruby
class User
def initialize(name, age)
@name = name
@age = age
end
end
“`

– 外部から直接変数を参照した場合

“`ruby
# Userインスタンスを作成
user = User.new(‘鈴木’, 33)
# 下記のように外部から直接参照しようとするとエラーになる
puts user.name
# もしくは
puts user.age
“`

元記事を表示

永久保存版!エンジニア向け情報収集サイトをまとめてみた【定期更新】

##この記事はなに?
普段、出勤時や仕事中に読んでいるエンジニア向けのサイトをまとめてみました。
※ この記事は定期的に更新する予定です。

## RSSリーダー
RSSリーダーとは、登録したWebサイトの情報を自動的に取得し、表示するツールです。
これから紹介する記事を毎日チェックするうえで便利です。ぜひ活用しましょう。

https://feedly.com

https://www.inoreader.com/language/japanese

ちなみに…
国内外の開発に関する大量の情報を独自のアルゴリズムで整理して配信してくれるサービスもあります。

https://techfeed.io/categories/all

## 知識共有サイトのトレンド
Qiitaなどのエンジニア向け知見共有サービスです。
トレンド入りした記事をウォッチするのがおすすめです。

https://qiita.com/Qiita/items/b5c1550c969776b65b9b

https://qiita.com/Qiita/items/616e8f6d4f69bd582ab5

htt

元記事を表示

ちょっとした羅列を手で作るのはやめようって話

# 概要
例えば特定のIDをもったデータを参照したいとかで

“`ruby
[1725,1726,1727]
“`

みたいなものが入ったスクリプトやSQLなどを書いたりすることがあると思います。

自分は1回これを

“`ruby
[1725.1726,1727]
“`

みたいな感じでタイポし、盛大にバグを出しました。
そこで再発防止でこういうものはすべてプログラムで出力してコピペするようにしています。

自分はirbでワンライナーを書いて出力をコピペしています。ターミナルに3文字打つだけで起動してくれますし、多少数が増えるとプログラムを書く方が早く、また応用も効くのでおすすめです。

# 例
## 配列の中身
“`ruby
(1725..1727).to_a.join(‘,’)
=> “1725,1726,1727”
“`

## 長い配列の中身
“`ruby
(1725..1735).to_a.join(‘,’)
=> “1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735”
“`

## 間が抜けた数字の

元記事を表示

プログラミングを勉強してる?ならNotionなんてどうですか?

## はじめに
こんにちは!DMM WEBCAMP Advent Calendar 2021 23日目を担当させていただきます?
DMMWEBCAMPメンターの@matchan1201です!

皆さん、プログラミングを勉強する中でこんな状況になったことはありませんか?

– エラー解決した記事をもう一度閲覧したいけどどうやって検索したか忘れてしまった。
– Twiiterで有益そうな記事を見かけたけど更新したらどこかにいってしまった。
– とりあえずブックマークしたけど量が多すぎて整理できない。
– プログラミングの教材を1つにまとめてしまいたい。
– ~~いちいちrails new ○○するのめんどくさい~~

私のような面倒くさがりにとってこの問題に非常に悩まされることが多いです。
そこで、年末の時間を使って私の激推しサービス「Notion」というサービスを導入していただくために
この記事を書かせていただきました。

他の方のアドベントカレンダーは非常にtech系の記事が多いので
ちょっと一休み程度の気持ちでこの記事を見ていただけると嬉しいです!
ぜひ、これを機にNotionの沼に

元記事を表示

点字メーカープログラムに挑戦! | 行列でシンプルに実装

この記事は、[Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念- Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ruby-challenge) の22日目の記事です。

(20日の担当でしたが枠が埋まってしまったので空いていたこちらに、入れさせてもらいます? 連絡頂いたら交代します。)

## 1. ルールとか ?
ルールや、他の方の回答はこちらにあります。

https://qiita.com/advent-calendar/2021/ruby-challenge

## 2. 成果物 ?
https://github.com/JunichiIto/tenji-maker-challenge/pull/27

ソースコード ? ( クリックで開きます )

“`ruby:lib/tenji_maker.rb
require ‘matrix’

# 180度回転
def rotate180(matrix)
Matr

元記事を表示

Rubyで配列処理

## each

単純な繰り返し処理

“`sample.rb
numbers = [1,2,3,4]
sum = 0
numbers.each do |num|
sum += num
end
p sum # => 10
“`

## delete_if
配列を回し、各要素を評価。評価した結果、Trueだった要素を配列から削除する

“`sample.rb
# delete_if : 真を返すものを配列から削除する
numbers.delete_if do |num|
num.odd? # 奇数の場合、真
end
p numbers # => [2, 4]
“`

## map
配列を回し各要素に対してブロック内の処理を実行。**新しい配列**を返す。
※Javaのstreamに似ている。
※元の配列には何の影響も与えない

“`sample.rb
new_numbers = numbers.map { |num| num * 10 } # 各要素にブロック内の処理を行い、新しい配列を生成する
p new_numbers # => [20, 40]
p numbers

元記事を表示

【Ruby のまずいコード】文字列連結

# お題

何かのデータファイルから情報を抜き出してテキストファイルに書き出すというお仕事です。
データファイルはテキストファイルで,どの行も先頭が `A` から `Z` までのいずれかの文字になっています。
こんなふうに:

“`txt:data.txt
H 9032,4232
G PXPP
A 123:A-G3
L FO,WE
C 1..9X
G LOPX
“`

この中から,A の行だけを(順序を変えずに)抽出して結合し,また B の行だけを同様に抽出して結合し,この二つを A→B の順に結合したものを result.txt に書き出してください。

データファイル data.txt は何百万行もあるので,`File.read` で読み込まず,`File.foreach` で 1 行ずつ読み込んで処理するようにしましょう。

なお,データファイルの末尾には改行が入っているものとします。よって,`File.foreach` で取り出した「行」は,最終行まですべて改行が入っていると仮定できます。

# コード

“`rb
text_a = “”
text_b = “”

Fi

元記事を表示

パターンマッチでデフォルト値を設定したかった話

## はじめに

この記事は[「Ruby Advent Calendar 2021」](https://qiita.com/advent-calendar/2021/ruby)の22日目の記事です。
Ruby2.7から入ったパターンマッチ、皆さん使ってますか?
便利ですよね。
自分はここ数年仕事では JavaScript(TypeScript) を触るのがメインだったんですが、よく使われる構文として分割代入があります。
分割代入もパターンマッチも使い勝手が似ている部分が多いので分割代入に慣れているとパターンマッチが非常に手に馴染みます。(個人的所感)
ただ分割代入でできてパターンマッチでできないことがあります。
デフォルト値(既定値)の設定です。
この記事ではパターンマッチでデフォルト値を設定したい場合はどうするかを考えていきます。

## 分割代入の場合

まず JavaScript の分割代入の場合ですが、以下のようにしてデフォルト値の設定ができます。

“`javascript
const obj = { a: 1 }
const { a, b = 2 } = obj // o

元記事を表示

他業種からプログラミング講座に挑戦してみて見えたこと(課題)

#はじめに
7月から県のIT人材育成講座(プログラミング)を受講して見えた自身の課題について記事にしてみようと思います。
仕事を継続したまま、パソコンスキル0で全くの他業種から挑戦して何が大変だったか、何が見えたか、何が見えなかったのか・・・ご助言もいただけると嬉しいです。
また初めて記事を書くので足らない部分もあると思いますがご了承ください。

#受講中に出会った壁
・パソコン操作がわからない(Macの使い方がわからない)
・環境構築・・・なんのことかわからず言われたままに操作
・時間の確保(仕事と学習のバランスが難しい)
・**分からないことが分からない**。これが一番辛かったです。

#受講中に出会った壁の乗り越え方
・習うより慣れろ。とにかく触りまくる。初歩の初歩ですがブラインドタッチの練習も行う。
・分からないことは割り切って先に進む勇気を持つ。
・時間はあるのではなく作るもの。・・・でも睡眠時間は削らないよう工夫。
・調べる調べる調べる。とりあえず調べることで乗り越えられたことも多々。

#乗り越えたと思って実はできていなかったこと(見えていなかった部分)
・調べることで、

元記事を表示

has_one関連付けのbuild_associationメソッドは暗黙的にレコードを削除する

# 環境

– Rails 7.0.0
– Ruby 2.7.5
– MySQL 5.7

# 前提

– user.rb

“`ruby
class User < ApplicationRecord has_one :item, dependent: :destroy end ``` - item.rb ```ruby class Item < ApplicationRecord belongs_to :user end ``` # 解説 ActiveRecordでhas_one関連付けを利用すると、以下のメソッドが追加される。 - `build_association(attributes = {})` このメソッドはオブジェクトを作成するだけでレコードを保存・更新・削除しないように見えるが、特定の状況ではレコードが削除される。 ## 準備 userとそれに紐づくitemを作成する。 ```ruby $ irb(main):001:0> user = User.create!
TRANSACTION (0.3ms) BEGIN
User Cr

元記事を表示

【Ruby】複数の配列を同時にループさせたいときはzipメソッドを使う

##zipメソッド
複数の配列を同時にループされられる。

“`ruby
# 各配列の要素がインデックス0から取り出されて配列になる
array1 = [1, 2, 3]
array2 = [4, 5, 6]

p array1.zip(array2)
# => [[1, 4], [2, 5], [3, 6]]
“`

“`ruby
@articles = [‘article1’, ‘article2’, ‘article3’]
@authors = [‘kato’, ‘yamada’, ‘suzuki’]

@articles.zip(@authors).each do |article, author|
puts article
puts author
end

# => [[“article1”, “kato”], [“article2”, “yamada”], [“article3”, “suzuki”]]
“`

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

元記事を表示

Rubyのclass

## はじめに
rubyのclassについてまとめてみた
JavaScriptと似てる。

## clsss
@ nameはインスタンス変数
アクセサーの設定なしだとインスタンス変数は内部でしか参照できない

“`rb
class Menu

#initializeメソットで引数を受け取る
def initialize(name, price)
@name = name   # 属性(メンバ変数)
@price = price # 属性(メンバ変数)
end

# インスタンスメソットを作成
def cal_tax
p @price * 1.08
end

def cal_sum(item1, item2)
p item1 + item2
end

# アクセサーを記述(外部から参照したい場合)
attr_accessor :name, :price

end
“`
## インスタンス化
“`rb
# インスタンス生成時にインスタンス変数を設定
menu1 = Menu.new(‘高級寿司’, 1

元記事を表示

Rubyの基礎を知ろう

## はじめに
今までJavaScriptを中心に学んできたが、Rubyを学習し初めた。
かなり基礎的

学習するバックエンドにRubyを選んだ理由: 圧倒的独学のしやすさ。

## 変数

“`rb
sample = 1
sample2 = ‘あああ’
“`

## 配列
“`rb
languages = [“日本語”, “英語”, “スペイン語”]
“`

## ハッシュ(オブジェクト)
“`rb
# 文字列での書き方
{“name” => 値1, “age” => 値2}

# 「シンボル」の書き方
{:name => 値1, :age => 値2}

# 省略したシンボルの書き方 一般的
{ name: “Suzuki”, age: 21 }

puts sample[:name] # ハッシュはこの参照方法
“`

## ハッシュのループ
変数が1つではなく2つになる

“`rb
arr = {key1: “Ruby”, key2: “PHP”}
arr.each do |key, val|
p “#{key}は#{val}です”
end
# key1は

元記事を表示

[py2rb] Iterable

# はじめに
移植やってます。
# Iterable (Python)
“`python
pH_list = pH if isinstance(pH, Iterable) else [pH,]
“`
> __iter__() メソッドを提供するクラスの ABC です。

まず`ABC`クラスが分かっていないのですが、

> (反復可能オブジェクト) 要素を一度に 1 つずつ返せるオブジェクトです。 反復可能オブジェクトの例には、(list, str, tuple といった) 全てのシーケンス型や、 dict や ファイルオブジェクト といった幾つかの非シーケンス型、 あるいは Sequence 意味論を実装した __iter__() メソッドか __getitem__() メソッドを持つ任意のクラスのインスタンスが含まれます。

~~ますます分かりませんが、~~ここでは`pH`がFloat型もしくはFloat型を要素に持つリストですので、それで行きたいと思います。

https://docs.python.org/ja/3.7/library/collections.abc.htm

元記事を表示

[py2rb] isupper isalpha

# はじめに
移植やってます
# isupper isalpha (Python)
“`python
if sequence.isupper() and sequence.isalpha():
“`
この場合、文字列`sequence`が英字で大文字ですね。

https://docs.python.org/ja/3.7/library/stdtypes.html#str.isalpha

https://docs.python.org/ja/3.7/library/stdtypes.html#str.isupper

**[追記]**
コメント欄に、興味深い話があります。
# Regexp (Ruby)
“`ruby
sequence = ‘ABCDEF’
puts sequence =~ /^[A-Z]+$/
sequence = ‘abcdef’
puts sequence =~ /^[A-Z]+$/
sequence = ‘ABC123’
puts sequence =~ /^[A-Z]+$/
sequence = ‘ABCdef’
puts sequence =~ /^

元記事を表示

英語が苦手なエンジニアが、克服するためにやったこと

# 自己紹介
株式会社じげんの山本です。
賃貸情報サービス「賃貸スモッカ」をはじめとした不動産サービスを展開する住まいDiv.でサーバーサイドエンジニアを担当しています。
# 英語への苦手意識
エンジニアの皆さんは、言語や、フレームワークのドキュメントを英語で読んだり、GitHub の**全て英語**で記載された議論を読むことに苦手意識はあるでしょうか?
僕は以前まで苦手意識がありました。これを読んでいるみなさんも、もしかしたら多かれ少なかれあるのではないでしょうか?
普通は第二言語で技術を勉強するなんて辛いと思います。「ただでさえ技術がわからなくてググっているわけで、なんでさらに苦労をしないといけないんだ」と思う方もいるでしょう。ただそれでも「英語で技術について読めるようになった方が得ですよ!」という話をします。
「なんで英語で読むと良いのか?」「どうやったら読めるようになるのか?」ということについて書きます。

# なんで英語で読むと良いの?
この質問には①量と、②質という方向から回答したいと思います。

## ①量
単純な計算で、インターネットにある言語別の情報量を考えてみましょ

元記事を表示

JavaScriptにおける、同期・非同期通信の違い

# 同期・非同期通信の違い
**・3行で要約します**

“`
同期通信では、受け取ったHTMLを表示させるため、ブラウザではページ全体を再読み込みします。
Ajaxを用いた非同期通信のレスポンスでは、JSON形式のデータそのものを返しています。
データそのものを受け取って、ページの一部分のみを更新するため、ブラウザでページ全体を再読み込みしなくてよい
“`

## レスポンスで返される内容が違う

同期通信のレスポンスでは、ビューファイル(index.html.erb)をもとに生成されたHTMLを返していました。
受け取ったHTMLを表示させるため、ブラウザではページ全体を再読み込みします。

非同期通信のレスポンスでは、JSON形式のデータ(ページの一部分)を返しています。

## 操作性が違う
非同期通信を実装することでよりよい応答性、操作性を実現できる
データの読み込みなどの待ち時間の短縮

元記事を表示

【Rails】references型について

##references型とは
references型は新しく作成するテーブルのカラムに、作成済みのテーブルを指定する場合に使う。
>既存のテーブルを参照するので、reference(参照という意味)。

##references使用法
referencesは“rails g model“で、モデルとマイグレーションファイルを生成する時のカラムの型を指定するときに使う。“モデル名(小文字):references“の形で指定。

“`
コマンド例: (userテーブルと紐付けたい、postテーブルを作成)
rails g model post name:string body:string user:references
“`

上記のコマンドを実行すると、
**①** reference型を指定したカラム名は テーブル名_id となる。
(user:reference であれば、 user_id というカラムが生成される)

**②** referencesを指定したことで、生成されたモデルファイルに“belongs_to :user“が追加される。

“`
clas

元記事を表示

OTHERカテゴリの最新記事