Ruby関連のことを調べてみた2023年01月20日

Ruby関連のことを調べてみた2023年01月20日
目次

【プログラミングに役立つ数学】ド・モルガンの法則を使って条件分岐の可読性をあげよう

### はじめに

プログラムを書く上で可読性は非常に重要です。

「リーダブルコード」が多くのエンジニアに支持されているように、他者と開発する上では「いかに理解しやすいコードを書くか」が求められています。

そこで、プログラミングの基本である条件分岐について高校数学で学習する「ド・モルガンの法則」を使った可読性を向上させるテクニックを紹介します。

可読性の高いプログラムを書きたい方はもちろん、「大人になってから数学なんて役に立たない」と思っている方にもぜひ一読いただけたら幸いです。

### ド・モルガンの法則とは

本題に入る前にド・モルガンの法則を初めて聞く人や忘れてしまった人のために簡単におさらいします。

ド・モルガンの法則とは、2つの集合A,Bに対して以下が成り立つことを言います。イギリスの数学者オーガスタス・ド・モルガンさんが発案したことからその名が付けられています。

“`math
\overline{A \cup B} = \overline{A} \cap \overline{B}
“`

“`math
\overline{A \cap B} = \over

元記事を表示

【Ruby】オブジェクトが空か確認する方法

メソッド 説明
nil? 変数の値がnilまたは値なしの場合に真
empty? 変数の値が空文字や値が空白の場合に真
blank?

Rubyの処理系とJIT

# はじめに

Ruby3.2 で YJIT がついに実用段階になりました!

https://www.ruby-lang.org/ja/news/2022/12/25/ruby-3-2-0-released/

なので YJIT について理解するために、JIT 導入前の Ruby、MJIT、そして YJIT についてそれぞれどんな特徴があるのか簡単に調べてみました。

# Rubyの処理系

最初に Ruby の処理系についてです。**処理系**、特に **言語処理系** と呼ばれるものは、何らかのプログラミング言語を処理して実行可能にするためのソフトウェアです。Rubyの代表的な処理系は **MRI** (Matz’s Ruby Interpreter) です。C言語で書かれた Ruby なので **CRuby** とも呼ばれます。

MRI 以外にも Ruby 処理系はたくさんあります。Ruby Association の以下のページに様々な処理系が紹介されています。

https://www.ruby.or.jp/ja/tech/install/ruby/implementat

ChatGPTに適当に指示してRubyプログラムを書いてもらう

## はじめに

[ChatGPT](https://openai.com/blog/chatgpt/)というAIチャットが昨年暮れから話題ですね。
なにか質問すると、まるで人間のように的確な受け答えをしてくれる有能なAIです。

最近だとGoogle社内で、ChatGPTの台頭にCodeRedを宣言したという記事も出てましたね。

記事: [ChatGPTのリリースでGoogleは「コードレッド」を宣言、AIチャットボットが検索ビジネスにもたらす脅威に対応するためにチームを再割り当て](https://gigazine.net/news/20221223-google-code-red-against-chatgpt/)

一方でChatGPTはプログラムコードも書けるということなので、適当に指示を出してどのていど良い感じのコードを書いてくれるのか、Rubyで試してみました。

## 手始めに簡単なプログラムを
とりあえず簡単なプログラムを書いてみてもらいました。

![スクリーンショット 2023-01-19 10.16.28.png](https://qiita-image-st

【Ruby】Safe Navigation Operator &.

## Safe Navigation Operator &.

`&.`という演算子を使用してメソッドを呼び出すと、レシーバーがnilだった場合でもエラーが発生しなくなります。

“`ruby
class Hoge
def hoge
“hoge”
end
end
“`

“`ruby
> hoge = Hoge.new
=> #
> hoge.hoge
=> “hoge”

> fuga = nil
=> nil
> fuga.hoge
NoMethodError (undefined method ‘hoge’ for nil:NilClass)

irb(main):010:0> fuga&.hoge
=> nil
“`

## if文や条件分岐の書き換え

– if

“`ruby
hoge = if fuga
fuga.hoge
else
nil
end

=> nil
“`

– 三項演算子

“`ruby
hoge = fuga ? fuga.hoge : nil

=> nil
`

RubyonRailsにスクレイピング機能を持たせてみる。

## はじめに
今回は連載企画第2回目ということで、スクレイピングについて書いていこうと思います。
### これまでに書いた記事はこちら
– [【個人開発】日用品を自動で購入してくれるアプリを作りました。](https://qiita.com/prg_mt/items/decb7912e82e6384fafb)
– [Ruby on RailsのアプリにLINEを組み込む。](https://qiita.com/prg_mt/items/b3238ebfae1a3df67cab)

## gemの導入
まずはじめに、gemを導入します。
以下の記述をgemfileに追加してください。
また、seleniumはRSpecで通常使用するものになりますので、`group :test do ~ end`のブロックの中にすでに記載がある場合はブロック外に記載を移すようにしてください。

“`ruby:Gemfile
# selenium
gem ‘selenium-webdriver’
“`

上記を記載しましたら`bundle install`を実行してください。

## ChromeDr

【AWS】自動デプロイ後にアクセスしたら502 Bad Gateway

## 結論
deploy.rbに記載ミスがあった。
なんとこれだけです。

## 経緯
AWSへのデプロイに初挑戦。
手動でのデプロイ時点では上手く行っていたのに自動デプロイを試みると502 Bad Gatewayとエラー。
なんじゃこりゃ、、、?

## 502 Bad Gateway とは
とりあえずググってみた。

“`
502 Bad Gatewayとは、ウェブサイトのサーバーの通信状態に問題があることを示すエラーメッセージです。
以下のようなエラー画像が表示されます。
“`
参考:https://blog.hubspot.jp/502-bad-gateway

通信状態? 
AWS側の不具合やらこっちのWifiが原因ってことかな?
、、、ってそんなわけあるかーーー!

## 原因
以下の記事を参考に原因究明。
https://qiita.com/kana_web/items/638a5d605870558879a4

こちらの記事から、ファイルとディレクトリの位置関係を洗い出すことに。

### currentディレクトリに移動できるか確認してみる
“` :ターミ

[Ruby]利益計算アプリケーション

# 問題
以下の仕様を満たすアプリケーションを作成してください。また、必ず注意書きを読んでから作成に取り掛かってください。

# 仕様
プログラムを実行すると、以下の3つの選択肢が表示され、直後にユーザーに対して値の入力を求めること。
[1] : 商品を登録する
[2] : 商品の一覧を確認する
[3] : アプリを終了する
[1]を選択した場合は、商品名、販売価格、仕入れ値を入力させ、保存する。
[2]を選択した場合は、保存された全ての商品情報(商品名・販売価格・仕入れ値)を商品ごとに一覧表示する。
[3]を選択した場合は、アプリケーションを終了する。
アプリケーションを終了するまで、処理を繰り返すこと。

# 注意
雛形を使用すること
引数は雛形で考慮していないため、必要に応じて引数を設定すること
正しく動作している箇所までが採点対象となるため、必ず動作確認しながら進めること
エラーはインターネットで調べるなどして解決すること
エラーが出たままその先の実装をしないこと

# ヒント
必要な知識
ハッシュオブジェクト
式展開
配列オブジェクト
引数
each文
条件分岐

“`ru

【Ruby】例外処理の基礎について

例外についてあまり使う機会がなかったので、簡単にまとめておきます。

# 例外とは
異常が発生したことを表すオブジェクト。
使用例としては、実行時に予想外のエラーが発生してプログラムが停止しないように、エラーを検知してプログラムの続きができるようになります。

# 例外を発生させる
`Kernel.#raise`を使用すると、意図的にエラーを発生させることができます。
第一引数には例外クラスを指定する。第二引数には例外メッセージを指定します。

“`ruby
raise StandardError
raise StandardError, “error” #StandardError: error!
raise StandardError.new(“error”)
# それぞれの書き方があります
“`

# 例外クラスの種類
上の例では`StandardError`を発生させましたが、Rubyで定義されている例外クラスを用いていろいろなErrorを発生させることができます。

“`ruby
raise StandardError, “error!” # => StandardEr

初心者がRuby技術者試験Silver 3.1を受けてみた

就職活動中の見習いRubyエンジニアです。
先日腕試しを兼ねてRuby技術者試験Silverを受験し、結果無事合格することが出来ました。

また同試験は昨年10月にruby3.1に対応する改定が行われたばかりで、専用の参考書などが見つかりません。
そのため、はたしてちゃんと試験対策できるのか?と申し込んでから困ったりもしました。
この点も含めて、これから受験する方の目安・参考になればと思い、学習の振り返りを残そうと思います。

試験内容自体のまとめ・解説や具体的な出題傾向の予測については、多くの優れた先行記事がありますのでここでは触れません。
Ruby初心者の私がどんな対策をしたか・それらが有効だったかに焦点を当てて述べていきます。

## 前提・自分の知識レベル
参考として受験時点(23年1月)の私の知識の水準は以下の通りです。
– プログラミング・Ruby経験5か月目の初心者(実務経験無し)
– Ruby技術者試験は旧バージョン含め初めての受験
– プログラミングスクール(フルタイム)を4か月受講+[プロを目指す人のためのRuby入門

AWSのS3にSDKなしで認証リクエストを作りたかった話

お仕事でSDK使えないよぉ…。

だけど、頑張ってS3から画像は取得しないと…。

## 前提

外部の別プロジェクトでAWS S3にアップロードされた画像を、どうにかして取得する。

* Ruby on Rails(いにしえのバージョン)
* アクセスキーIDとシークレットキーはもらえている
* AWS SDKは使えない(重要)
* いにしえのバージョンでも使えるのか?
* AWS CLIは使えるけど、今回は対象外
* AWS STSは使っていない

大分縛りがキツいけど、がんばるぞい。

## 調査からリクエストしてみるまで

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/RESTAuthentication.html

まずは、この方法で取得できる参考資料として、上記のリンクが共有される。

調査してみて、STS使えれば認証情報がもらえるし、たたければ楽できそう?
と思ったが、別プロジェクトではSTSは使っておらず、認証ヘッダを使用していると聞く。

チームメンバーと相談して、結果的に認証ヘッダを使

deviseをアップデートしたらomniauthエラーで詰まった

### はじめに
deviseをアップグレードするために、omniauthのバージョンも同時にアップグレードしたら一部のコールバックがnilになってハマってしまったので共有します。

### やったこと
– device, omniauthをアップグレードした
“`diff_ruby:Gemfile
– gem ‘devise’, ‘4.4.3’
– gem ‘omniauth’, ‘~> 1.9.0’

+ gem ‘devise’
+ gem ‘omniauth’
“`

“`diff_ruby:Gemfile.lock
– devise (4.4.3)
+ devise (4.8.1)

– omniauth (1.9.2)
+ omniauth (2.1.0)
“`

### 発生した問題
oauth認証で必要な値が`nil`になってしまった。
“`ruby
[1] pry> request.env[‘omniauth.auth’]
=> nil
“`

### 解決方法
– こちらにも同様の現象が起きているとissueがあがっていたのを発見。

https://g

実務未経験者がRailsで予約管理アプリを作成しました!(simple_calendar)

アプリ概要

ヘッドスパスクールの授業を予約するアプリを作成しました。
イメージとしては美容室などの予約アプリのようなシステムです。

まず教師側が授業可能な日程を登録し、その日程の中から生徒が日程を選択し、授業を予約するという使い方です。

https://jsmc-machido.com/

https://github.com/keiino0425/JSMCreserveapp

作成背景

プログラミングの学習を進めていたところ、知人がヘッドスパスクールを始めたいという話をしていたので必要なシステムがないかヒアリングしたところ、予約を管理するシステムが必要とのことだったので作りました。

使用イメージ

講師側

講師用のマイページで仮予約や予約を確認できます。また、仮予約は確定もしくは削除すると生徒にメールが自動送信されます。

![スクリーンショット 2023-01-17 0.00.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws

【個人開発】キャンプ旅行に持っていくキャンプ道具を共有するアプリ – Camplet –

# はじめに

初めまして@asaAxisと申します。
この記事は初学者が初めて個人開発したWebアプリの紹介記事です。
Campと旅行のPamphletの意味を込めてCampletという名前にしました。

アプリURL : http://52.69.152.68/
旅行の際にキャンプ道具を共有する 大変さから解放されます!

# 開発の経緯

![開発経緯説明.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881856/e485df4f-8432-efa7-05f3-f03eeae416ed.png)

キャンプをやったことがない人でも、
**持っていく道具が多そう…
何を持って行けば良いの?** とか…

そういった、ことを減らすためにこのアプリを開発しました。
旅行の際にキャンプ道具を共有する大変さから解放される!
をコンセプトに開発をいたしました。

# 開発環境
* Ruby 3.0.1
* Ruby on Rails 6.1.7
* PostgreSOL 14.5

# 主な機能

[Rails]Railsアプリケーションの雛形作成

概要

Railsアプリケーションの雛形作成と削除方法を簡単に説明します。
拙い文章で申し訳ございません。
記事の記述方法や内容に不備等ございましたら、指摘してくださると幸いですm(-_-)m

# 環境
IDEはAWSのcloud9を使用しています。
Rubyのバージョンは3.1.2
Railsのバージョンは6.1.7

アプリケーションの雛形作成方法

結論としては、「rails new」コマンドを実行します。
記述方法は以下の通りです。

“`
rails new アプリケーション名
“`
例として、「SNS」というアプリケーション名で作成する場合は
“`
rails new SNS
“`
となります。

rails newを実行する際に注意する点が2点あります。
– スペルミス
– 半角スペースの場所を間違えない

特に2点目の「半角スペースの場所を間違えない」というのは、どのような場合か

例えば、先ほど例同様に「SNS」というアプリケーションを作成した際
“`
rails newSNS
“`
と入

Ruby on RailsでDBを途中からmysqlに変更したいときに変更する場所

# はじめに
当記事はRuby on Railsでアプリケーションを作成している途中でDBを変更したいと思ったときに変更する場所を記します。
今回はSQLiteからmysqlへ変更します。

また、最初からmysqlで始める場合は以下のコマンドで`new`することでmysqlで開始することができます。

“`terminal:terminal
rails new アプリケーション名 -d mysql
“`

# 環境

“`terminal:terminal
$ ruby -v
ruby 2.7.3
$ rails -v
Rails 7.0.4
mysql -version
mysql Ver 8.0.31
$ bundle -v
Bundler version 2.1.4
“`

# 前提条件

* DBの設定が完了していること。(mysqlだと最低限、rootユーザーでアクセス可能である。)

# DB変更

1. Gemfileに以下を追記する。

“`:/Gemfile
gem “mysql2”
“`
1. terminalから`Gemf

Ruby 環境構築【Mac】

お久しぶりです。かのうです。
今回は勉強がてら、Rubyの環境構築から記事にしていきたいと思います。

【環境】

macOS Big Sur 11.5.2

まず、バージョンを確認してみましょう。
下記、コマンドを実行します。
“`
ruby -v

>> ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin20]
“`
上記のように、OS標準搭載のものを使っても良いです。
ただ今回は、新しいバージョンのものをインストールしましょう。

必要なもの
・brew
・rbenv

※brewが入っていない方は、xcodeをインストール等してください。
この記事ではbrewがインストール済みであるという前提から、進めます。

brewを最新版にアップデートする。
“`
brew update
brew upgrade
“`
rbenvをインストールする。
“`
brew install rbenv
“`

このrbenvを使って最新のrubyをインストールします。(2023/1/16

Ruby on Railsを基本からまとめてみた【エラーに対するトラブルシューティング①】

railsで『API』を作成しようとしたら、下記のエラーが表示。

“`
Rails is not currently installed on this system. To get the latest version, simply type:

$ sudo gem install rails

You can then rerun your “rails” command.
“`
#### 解決方法

下記のコマンドをシェルに打ち込んだら、解決したので記載。

“`
export PATH=”$HOME/.rbenv/bin:$PATH”
“`
または

“`
export PATH=”$HOME/.rbenv/shims:$PATH”
“`

#### 原因

シェルを変えたことで、パスを設定し直さなければならないのを忘れていたことが原因とのこと。
rbenvのpathが無くなったことで、macに標準でインストールされているrubyのgemを確認してrailsのgemが無いとエラーを出していたらしい。

## 参考サイト
[Shellをzshにし

文字列連結まとめ①(Ruby)

Rubyで文字列連結のプログラムをいくつか実装しました

問題

>3 つの文字列が改行区切りで与えられます。
これらの文字列をバーティカルライン | 区切りで出力してください。

①「<<」で連結する方法 ```Ruby ans = "" for i in 1..3 do input_line = gets.chomp if i < 3 ans = ans << input_line << "|" elsif i ==3 ans = ans << input_line end end puts ans ``` ②「+」で連結する方法 ```Ruby ans = "" for i in 1..3 do input_line = gets.chomp if i < 3 ans = ans + input_line + "|" elsif i ==

さくらVPSでSinatra(+mysql)を使って簡単なWEBアプリを作る

## ■環境

– さくらVPS(Cent OS7)
– Nginx
– MySQL (5.7)
– Sinatra (2.2.0)

## ■ゴール

Rubyで書いた簡単なTodoアプリを Nginxで動かしてみたいと思います。

## ■サーバの準備と Nginxのインストール

– サーバのプログラムをアップデートし、 Nginx等をインストールする準備をする。

“`jsx
sudo yum update
“`

– Nginxをインストールする。

“`jsx
sudo yum install nginx
“`

– ブラウザからログインし、Cent OSトップページが表示されることを確認する。

  ※ さくらVPSのコンパネにログインすればIPアドレスを確認できます。
![スクリーンショット 2023-01-15 21.34.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3092884/12d463c0-4208-abdc-702a-327ce5e40ffa.p