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

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

エンジニア向け生産性Tips【定期更新】

この記事は[モチベーションクラウドシリーズアドベントカレンダー2021](https://qiita.com/advent-calendar/2021/mcs)の記事です。

# この記事はなに?
一日中PCと共に過ごすエンジニアにとって、Tipsほど知りたいことはないと思います。
この記事では、社内エンジニアに「生産性をあげるTips」をテーマにアンケート調査したものをまとめました。
特に新人エンジニアの方や手っ取り早くTipsを知りたい方におすすめの記事です。
まとめたアンケートからつらつら書いてるので、順番にまとまりはありません。あらかじめご了承くださいmm

※ この記事は定期的に更新されます。

# Chrome Tips
皆さんよく使うGoogle Chromeに関するTipsです。

#### ショートカット
まずは王道。ショートカットから!

https://support.google.com/chrome/answer/157179?hl=ja&co=GENIE.Platform%3DDesktop

#### Chrome Tab Group
こんなタブになるこ

元記事を表示

ActiveRecordのNullリレーションが便利そう

# はじめに

Railsガイドを読み返していたら便利そうなものを見つけたので備忘録代わりに残しておきます。

# Nullリレーション

> noneメソッドは、チェーン (chain) 可能なリレーションを返します (レコードは返しません)。このメソッドから返されたリレーションにどのような条件をチェーンさせても、常に空のリレーションが生成されます。これは、メソッドまたはスコープへのチェーン可能な応答が必要で、しかも結果を一切返したくない場合に便利です。

https://railsguides.jp/active_record_querying.html#null%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3

“`ruby
irb(main):001:0> User.none
=> []
irb(main):002:0> User.none.class
=> User::ActiveRecord_Relation
“`

こんな感じで、空のリレーション(Nullリレーション)を返してくれる。

“`ruby
ir

元記事を表示

Rust で API を作成して Rails の便利さを改めて実感した話

# 目次

– [はじめに](#はじめに)
– [想定読者](#想定読者)
– [作成した API について](#作成した-api-について)
– [概要](#概要)
– [開発環境](#開発環境)
– [フォルダー構成](#フォルダー構成)
– [本題](#本題)
– [Rocket & diesel と Rails それぞれの実装に対する比較](#rocketdiesel-と-rails-それぞれの実装に対する比較)
– [目的 1. API として使用できるために、Json や Status を設定できるようにする](#目的-1-api-として使用できるためにjson-や-status-を設定できるようにする)
– [目的 2. User 作成時に、 Validation からエラーメッセージを取得し、Json で返却する](#目的-2-user-作成時に-validation-からエラーメッセージを取得しjson-で返却する)
– [目的 3. Request Header の Token を用いて、ユーザー認証を

元記事を表示

IPアドレスと対峙することになった2年目エンジニアの記録

# はじめに
初めまして、私は現在リンクアンドモチベーションにてバックエンドエンジニアをしている中﨑です。
先日、私はIPアドレス制限機能の実装を任されましたが、お恥ずかしながらIPアドレスについてほとんど知りませんでした、、、
そんな私がリリース完了するまでに学んだことを記載していきたいなと思っています。
私と同じように「IPアドレスについてあんまり分かっていないな」という方や、「IPアドレス制限の実装をするよ」という方の参考になれば幸いです。

# 目次
– [基本知識](#基本知識)
– [IPアドレスに関わるライブラリ](#ipアドレスに関わるライブラリ)
– [IPアドレス制限を実装した時のこと](#ipアドレス制限を実装した時のこと)
– [前提](#前提)
– [IPアドレスの入力チェック(バリデーション)](#ipアドレスの入力チェックバリデーション)
– [IP制限検証時の性能について](#ip制限検証時の性能について)
– [ドキュメント用に記載するIPアドレスについて](#ドキュメント用に記載するipアドレスについて)

#基本知識
I

元記事を表示

「〇〇でハマった。。」を避けるコーディング

## はじめに

**書いたコードが思い通りの挙動をしないが、なかなか原因が分からず困り果てる**

俗に言う、「ハマってしまった」状態。

– 予約語を知らないうちに使っていた
– 全角空白や制御文字が混入していた
– ポインタや参照を経由して値が変更されていた
– 演算子の優先順位を誤解していた
– 囲むやつ(カッコ、do-end、if-fi)の数は合っているが場所がずれていた
– 言語仕様上、必要な空白が抜けていた
– **原因わからないけど、いろいろ弄ってたら直った!!!**

などなど^^;

仕事で「ハマる」と、予実が大きく乖離していき**プロジェクトに迷惑がかかります**。
プライベートで「ハマる」と、楽しかった作業が一気につまらなくなり**モチベーションだだ下がり**です。

挙げたリストの中には、「知らないと分からないよね〜」というものもありますが
**コーディングの手順を工夫すれば、より短い時間で解決できる**ものも多いです。

今回はそんな「ハマる」を避ける為の工夫をまとめたので、紹介します。

## この記事で伝えたいこと

– ハマらない為の心構え
– ハ

元記事を表示

Rubyをつかってローマ字を点字に変換する

この記事は[ 改訂版・チェリー本発売記念 Advent Calendar 2021 ](https://qiita.com/advent-calendar/2021/ruby-challenge)の24日目向けに書いたものです。

# 参加した動機
はじめまして、都内でエンジニアをしているむらかみです。

毎年行われているQiitaのアドヴェントカレンダー企画、ときどきQiitaの記事を読み漁る中で見かける赤ラベルのついたあの記事はなんだろう?とは思ってはいたものの特に気にしていなかったのですが、伊藤さん企画のアドヴェントカレンダーがあるということを知り、これに参加すれば自分も赤ラベルのついた記事を投稿できるのではないか?
というちょっとしたプレミア感を演出した記事を投稿できる喜びを感じたためカレンダー登録しました。

それに加えて、自身がRubyからプログラミングをはじめたことや、伊藤さんが執筆されているチェリー本で学習をしてきたので、自分がやってきたことのアウトプットをする良い機会だと思ったことも大きな動機の一つです。

# どのようなプログラムを書いたのか
タイトルにもありますが

元記事を表示

【Rails】form_withについて

##form_withとは
railsで情報を送信するためのヘルパーメソッド。 form_withを使うことにより、簡単に入力フォームに必要なHTMLを作成することができる。

##form_withの使い方

“`
<%= form_with(モデル or URL(パス),[スコープ],[オプション]) do |f| %>
フォームの中身
<% end %>
“`
“モデル“
@userや@postなどモデルオブジェクトを入れる場合に使う。

“URL“
URLを指定する場合に使う。

“スコープ“
formのフィールド名にスコープを追加する場合に使う。

“オプション“
送信先のurlやタグの設定(クラスをつけたり、MIMEタイプを指定したり)

**モデルとurlの使い分け**
・モデル: データベースに保存する時(登録フォームなど)
・URL: 入力された情報をデータベースに保存しない時(ログインフォームなど)

##form_withメソッドの便利な機能
form_withには、モデル(:model)で記述した場合の便利な機能がある。

引数として渡さ

元記事を表示

N+1問題

##N+1問題とは
N + 1問題とは、必要以上にSQLが発行されてしまい、動作が悪くなってしまう問題のこと。
必要以上にSQLが発行されると時間が掛かり、これが数回なら特に動作に影響はないが、何万回と回数が増えると動作が重くなってしまう。

##N+1問題を実際に見てみる
※ここではテーブルのアソシエーションについての説明は省く。

ネコの飼い主のテーブルがownersテーブル、ネコの名前を扱うテーブルがcatsテーブルの2つのテーブルを例にN +1 問題を確認していく。

「全ての飼い主の猫の一覧」をviewで表示したい場合、controller側で全ての飼い主をallメソッドで取得し、view側で飼い主の持つcatsをアソシエーションによって下記の様に記述。

“`
# controller
@owners = Owner.all

# view
@owners.each do |owner|
owner.cats.each do |cat|
cat.name
end
end

結果:
# controller
SELECT `owners`.* FROM `o

元記事を表示

【Ruby のまずいコード】文字列を文字種で分割

# お題

文字列を文字種で分割するメソッドを書いてください。
つまり,

“`rb
p divide_by_script(“Rubyは楽しい”) # => [“Ruby”, “は”, “楽”, “しい”]
“`

となるような。
漠然と「文字種」と書きましたが,Unicode の仕様でいう「スクリプト(script)」のことであるとしましょう。
script という単語は多義語ですが,ここでは「漢字」「平仮名」「片仮名」「ラテン文字」「アラビア文字」「チベット文字」といったもののことです[^script]。
Unicode では,各文字に script プロパティーという値が割り当てられていて,たとえば以下のようになっています:

[^script]: この意味の script には「用字系」とか「文字体系」という訳語もあります。

* 「亜」などの漢字:`Han`[^han]
* 「あ」などの平仮名:`Hiragana`
* 「ア」などの片仮名:`Katakana`
* 「a」などのラテン文字:`Latin`
* 「α」などのギリシャ文字:`Greek`

[^han]: `K

元記事を表示

未経験者が実務案件に挑戦し、エンジニアとしての心構えを学ぶ

# はじめに
エンジニアを目指した未経験者が、実務案件に挑戦し、もがき奮闘しながらもやり抜いた結果、エンジニアとしての心構えを身につけることができた話をしていきます。

実務案件は3セクションに分かれており、課題、考え、行ったことをそれぞれのセクションでお伝えできればと思います。長いですがお付き合いくださいませ。

# 筆者について
工場生産ラインの管理業務に携わりながら、エンジニアへの転向を目指している29歳です。
管理業務を効率化するためExcel VBAを独学で始め、プログラミングにのめり込んでいきました。

21年6月より本気でエンジニアを目指して学習を始め、縁あって10月より実務案件に参画させて頂くことになりました。

– 実務案件までに学習してきた内容
– CS => Linux => Progate => Railsチュートリアル => Docker => AWS

# 実務案件って…?
現役エンジニアであるY氏経由で、とあるクライアントから医院紹介サイト(Rails)のSEOを改善させたいという案件を頂きました。
本案件にはY氏の伴走付きで、私含め3名の未経験者が

元記事を表示

現役ミュージシャンが実務未経験から実務案件に挑戦。コードを書く事だけがエンジニアの仕事ではないと気付かされる!

# 自己紹介

初めまして!現在音楽講師をしているhirokiと申します。
未経験からエンジニアへの転職を目指し日々学習をしております。
楽器歴はもう17年と日々演奏技術を磨きながら最新の音楽情報をキャッチアップしております。

そんな私がプログラミングを始めたのは、別のミュージシャンの方が自分のホームページを持っていたので「僕も作ってみたいな」という気持ちからでした。
そこからプログラミングについて調べみるとそのページにはログイン機能などがあり、これはなんだと?と思い調べてみました。

調べていくと、Webアプリケーションが作れ、雛形が揃っていて尚且つ学びやすいというフレームワークがあるという記事を見つけました。そこで出会ったのがRuby on Railsでした。まずは始めないと正解・不正解も分からないので、何事も触れてみようと思い学習をスタートしました。
独学で勉強し少しずつ理解が深まるごとにどんどんプログラミングにハマっていきました。

ある出来事で転職したいと思うようになりました。それは、目の前でWebサービスを使っている生徒さんの困っている姿でした。
生徒さんから『バンドを組

元記事を表示

mysql2をインストールする際のエラー解決!

AWSにデプロイするに伴い、DBをSQLite3からmysql2へ変更することにしました。
まずgemfileをSQLite3からmysql2へ書き換えて`bundle install`してみると下記のエラーが起こってしまいました!

“`
current directory: /Users/fujiwaratakumi/Desktop/WorkShare/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/ext/mysql2
/Users/fujiwaratakumi/.rbenv/versions/2.7.5/bin/ruby -I /Users/fujiwaratakumi/.rbenv/versions/2.7.5/lib/ruby/site_ruby/2.7.0 -r ./siteconf20211223-8259-uwu9op.rb extconf.rb
–with-ldflags\=-L/usr/local/opt/openssl/lib
checking for rb_absint_size()… yes
checking

元記事を表示

改訂版・チェリー本発売記念のRubyプログラミング問題にチャレンジしました

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

## プルリクエストのリンク
https://github.com/JunichiIto/tenji-maker-challenge/pull/29

## 方針
– [KISSの原則](https://ja.wikipedia.org/wiki/KISS%E3%81%AE%E5%8E%9F%E5%89%87) に則り、問題のテストが通れば十分とする(変に拡張性を考えない)
– 点字の業務知識に沿ったコードを心がける

## 作戦
[問題のREADME](https://github.com/JunichiIto/tenji-maker-challenge/blob/main/README.md) を眺めてみます。
点字1字について

– 母音と子音の組み合わせで表現できる
– や行、わ、んは例外

元記事を表示

JavaのSEがRubyを書くためのまとめ(編集中)

#目的
・Rubyの基本を理解し、他人のコードを読めるレベルに到達する。
・基本を整理しつつ、Javaとの違いを関連付けをしたい。
(・Qiitaデビュー)

#動確環境
**OS**: Mac
**Version**: 2.6.8p205

#基礎知識
##全てがオブジェクト
文字列、配列はJava同様にオブジェクト。
さらには、数値、真偽値、nil(Javaではnull)、正規表現等もオブジェクト。

なので以下のように、それぞれに対してto_sメソッドでオブジェクトから文字列化することも可能。

“`
true.to_s
nil.to_s
“`
##分の区切り
基本的に文の区切りにセミコロン不要、改行でよい。
1行に複数の文を記述したい場合に明示的に;で区切ることは可能。

##コメント
◯1行コメント
Java: //
Ruby: #

◯複数行コメント

“`Java
/*
Javaコメント
*/
“`

“`ruby
=begin
Rubyコメント
=end
“`
##変数
###型定義
動的型付け言語なので、宣言時のデータ型記述は不要。
(慣れないうちはコーデ

元記事を表示

Sorceryでよく使うメソッド

##current_user
現在ログイン中のuserを返す。コントローラ、ビューで利用可能。

##require_login
ログインをしていないユーザーをアクション単位で弾く。
アクセスしようとしたURLをセッションに格納し、not_authenticatedを実行するメソッド。“before_action“で指定する。
アクションごとに変える場合は、“only: :action“を付ける。

“`
#controller
before_action :require_login
“`

##not_authenticated
require_login内で、このメソッドが実行される。
“デフォルトではredirect_to root_path(自動的にルートに飛ばされる)と定義されている“が、カスタマイズしたい場合はapplication_controllerで上書きをする。

“`
class ApplicationController < ActionController::Base protected def not_authenticated

元記事を表示

[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/616e8f6d4f69bd58

元記事を表示

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

# 概要
例えば特定の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”
“`

## 間が抜けた数字の

元記事を表示

OTHERカテゴリの最新記事