Ruby関連のことを調べてみた2022年07月15日

Ruby関連のことを調べてみた2022年07月15日

【Ruby】0埋めに失敗するケースについて

# はじめに
Rubyの0埋め処理においてエラーが発生したので、原因と対応策を備忘として残しておきます。

# エラーになる場合がある0埋め処理
“`
# 月を0埋めして2桁にしようとした
# monthには「09」と言う文字列が設定されていた
val = sprintf(‘%d/%02d/01’, year, month)
“`
# 結果
“`
invalid value for Integer(): “09” (ArgumentError)
“`
【原因】
Rubyに限ったことではないが、整数リテラルの前に0があると8進数と認識されることがある。
(「されることがある」としているのは使用する関数や前後の処理で変わってくるため。)
今回の場合、「09」を8進数と認識され、8進数で9は存在しないよ!といった感じでエラーになった。

【対応策】
“%02d”の部分に文字列を渡さず、整数化してから渡す。
“`
val = sprintf(‘%d/%02d/01’, year, month.to_i)
“`

# おわりに
8進数では8も使用できない。
扱える数値は各々調べてみて

元記事を表示

Rails CRUD処理実装のアプリを立ち上げ~Git hub管理まで

アプリを作成する度に未だに毎回検索しているのでここの復習も兼ねてまとめます。
プログラミング初心者向けの記事となります。

# 開発環境
– `Rails`
– `Ruby`
– `git`
– `Git hub`
# 手順
– `Rails`でアプリ作成
– `git`で`ローカルリポジトリ`を作成
– `Git hub`で`リモートリポジトリ`を作成
– `ローカルリポジトリ`に`リモートリポジトリ`を追加する
# まずはRailsでアプリを作成
“`:ターミナル
rails _6.1.6_ new アプリ名 -d postgresql -T
cd アプリ名                                                                     
rails db:create
“`
### コマンドの解説
__Q:なぜ`Rails`のバージョンは`6系`指定?__
A:最新の`Rails`のバージョン`7`はまだ出たばかりで不具合などあり,変更点も多々あるため`6系`最新バージョンを指定しています。

__

元記事を表示

rails環境構築の全体像と、各ツール・コマンドの意味、役割について〜Command Line Tools for Xcodeとhomebrewとrbenvとrubyとbundlerとgemとrailsと…!〜

railsの学習を始めて数ヶ月経ちましたが、環境構築について、写経のように何も理解できないまま行ってしまっていたので、各ツール、プログラムの全体での立ち位置を意識しながら、どの立場で何をやっているのか、またその中で感じた疑問をまとめてみました。
初学者の方が環境構築するにあたって、今何をしているのかわかる地図のようになればいいなぁと思っております。
誤り等にお気づきの方はご連絡をお願いいたします。

■想定読者
①:複数回環境構築を行い、やり方はわかったが、何をしているのか分からない初学者の方々
②:まさに①である筆者の拙い記事を、温かい目で校正していただける先輩エンジニアの方々

# 全体イメージ
※あくまで環境構築の一例。
(例えば、rbenvがなくてもrubyのインストールはできるし、bundlerがなくてもgemのインストールは可能。)
### イメージ図
![全体イメージ_rails環境構築.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710784/5c01e0aa-dbc3-7c48

元記事を表示

raise_conflict_error enumに定義できない命名について

## 経緯
`Ruby on Rails`でアプリ作成中にenumでこのような定義し、`rails c -s`で動作確認をしたところエラーが発生しました。
今回の記事ではこのエラー発生原因と解決方法までを残します。同じプログラミング初心者へのヒントになれば幸いです。
“`rb:model
class Present < ApplicationRecord with_options presence: true do validates :present_name validates :present_score validates :present_review end enum present_score: { poor: 1, average: 2, good: 3, verygood: 4, excellent: 5 } end ``` ```:ターミナル ~~~省略~~~~ `raise_conflict_error': You trie

元記事を表示

100日後くらいに個人開発するぞ!day057

## 今日は継承を学んでみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/0d95f7fb-14cd-a3ab-8a5c-9c498f3157da.png)

## 今日の学び

### 継承
* 継承とはあるクラスを元にして新たなクラスをつくること
* `class 新しいクラス名 < 元にするクラス名`で他のクラスを継承できる * 新しいクラスを「子クラス」、元にするクラスを「親クラス」と呼ぶ * 継承すると親クラスのインスタンス変数やインスタンスメソッドを小クラスでも使える ### 子クラスにインスタンス変数を追加する * `attr_accessor`を用いると子クラスにインスタンス変数を追加することができる

元記事を表示

みんな大好きリーダブルコードまとめ①

# 対象者
当方と同じく、駆け出しエンジニアの皆様。また、初級エンジニアの方もこんな内容だったなと思いながらお読みいただければ幸いです。
※当方、駆け出しエンジニアですので間違いやご指摘あれば、コメントいただければ幸いです。

# リーダブルコードとは?
駆け出しエンジニアや、初級エンジニアの方々のバイブル的書物。
以前、エンジニアの方とお話しさせていただく機会がありやはりこちらの本は読んでおいて損はないとのことで、購入して少しずつ読み進めていこうと考えています。

# 第1章 理解しやすいコード
#### メインテーマ
本章のメインメッセージは、『良いコードとは、ただ簡潔に書けば良いということではなく、共通認識しやすいコード(著書の中では、「安心」と言われる)が良いコードなんだよ〜。』と4ページほどで説明してくれています。

#### ディテール
具体的な例で話すと、本章には動作が同じコードを2種類記載されています。
一方は2行ほどで記述されているがエンジニアの直感で書かれたコードで読めなくはないが、どのような動作が行われるのかを理解するには少し時間がかかります。
他方、7行のある一

元記事を表示

railsのmigrationfileについてのメモ

# 概要
railsのmigrationfileは変更したいことを
ファイルの名前に設定し実際の変更を加える
## なぜそのようなことを行うのか?
チーム開発においてmigrationfileは
共有されるものであるため、
自分がなにをやったのかということをわかりやすくするため
### 気をつけるべき点
変更を加えてからもとに戻そうとして
rails db:migrate:resetをしてしまうと
一緒に開発している人との環境に
齟齬が生じるので
概要に記したやり方で実装しないと後々面倒なことになる
#### 上記を踏まえて今日自分が学んだこと
まだチーム開発は経験せず一人で実装を進めているが
チーム開発の学習にいずれは入るため、
上記のことを考えすぎて
一度`rails db:migrate`したmigrationfileはいじれないと思いそこを変更しないまま
ファイルの名前だけ変えた中身が同じファイルを`rails:db:migrate`しようとしてエラーが出てしまい、
メンターの方に聞いたとき
今は個人でやってるからまだやらなくて大丈夫と言われあっさり解決した。
原因はメンター

元記事を表示

あのOSSで有名なEvil Martians正式に日本上陸!(職務執行者就任!)

## 日本のオフィスは大阪の江戸堀!

![iOS の画像.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462614/14cebb35-93df-3a6b-eaaa-99f69de6ba48.jpeg)

突然ですが、報告です!

Evil Martians Inc.(アメリカ)の子会社、合同会社イービルマーシャンズの職務執行者に就任しました。
日本で外資系企業設立もいろいろ大変なこともありましたので、興味ある人は絡んでください。

Evil Martians Inc.はアメリカのユニコーンも含むスタートアップと開発した経験が豊富にあるので、今後は日本のIT企業のアメリカ進出も支援できればと思っています!

日本でも火星人のコンサルティングと開発サービスを日本語で提供できるようになっています。ちなみに、9月に開催されるRuby Kaigiでは、チーム全員に会うことができますよ!

火星人の多くはアニメが好きで、その影響で日本語もできますので、AnyCable Proやimgproxy Proなどの製

元記事を表示

うんこーどを直したい

# はじめに

筆者転職活動中に久々に書かないとなと思うコードに遭遇してしまい筆を取る次第。

この記事のうんこーどがやりたいことを簡単に言うとINPUTに対して該当するプランがあるのか?他に予約がないか?をチェックして通ったら合計金額を返すだけのコードである。皆で仲良く直しましょう。

## お題

皆さんはうんこーどに遭遇したことはありますか?私はあります。
とりあえず何も考えずに以下のコードを御覧ください。

“`
class HogeController < ApplicationController def index room = Room.find(params[:room_id]) plans = Plan.where(room_id: params[:room_id], status: true) if plans.count == 0 || params[:started_at].nil? || params[:ended_at].nil? return render json: {} end starte

元記事を表示

社内部活制度でgemのコードリーディング会を実施した話

# 前置き

こんにちは。株式会社Relicのyamashitaというものです。
弊社にはさまざまな部活動がありまして、ruby部、php部、aws部…音楽部、お金部、などなど。。
社員は自由に部活動を選択でき、そのテーマに興味のある仲間と交流しながら技術を高め合う事ができます?

あ、最後の2つは技術の話ではなかったですね…。失礼しました。

## ruby部について

私は参加してから1ヶ月ほどになります。

週に一度30分ほどの集まりが催され、rubyをテーマにしたお題について議論をするのがデフォルトです。
いまは3名のエンジニアが運営ですが、つよつよなruby大好き業務委託さんも、この勉強会に大いに貢献してくださっています。運営の皆さん、いつもありがとうございますmm

## トライしてみたこと

部活動の話とは別件なのですが、プロジェクト内で既存のテーブルの命名を見直す会をしていたときのこと、
メンターに「たまにはOSSのコードも読んでみるとよいょ」と言われてmastodonのスキーマをほいっと渡されました。
(データの持ち方に応じてどんな命名をしているか勉強になったので

元記事を表示

Rubyのバージョン管理とアップグレード時の注意点

# Ruby のバージョン管理やアップグレード

Ruby のバージョンは毎年 12 月 25 日に新しいバージョンが公開される

その時に Ruby のバージョンアップをするが、そのままアップグレードしてしまうと今まで書いたプログラムが急に動かなくなったりすることもある

なので、 `rbenv` というものを使って、使用する Ruby のバージョンを管理する必要がある

まず brew の rbenv をインストールする

“`zsh
$ brew install rbenv
“`

既にインストールしているときは、Ruby のバージョンを上げるのに新しい rbenv が必要になるので、以下のコマンドで rbenv ( インストールしてる brew 全部)のアップデートをする

“`zsh
$ brew update
“`

インストールできる Ruby のバージョンを確認する

“`zsh
$ rbenv install -l
“`

Ruby のアップデートを install するために、 `ruby-build` のアップデートをする

“`zsh
$ brew

元記事を表示

Rails バリデーションと制約の違い(初心者向け)

# 結論
制約とバリデーションの違いは __空文字が許されるか否か__ 。
`Not null制約` :空文字 :o:
`presence: true` :空文字 :x:

`Not null制約`だけでは、データベースに空文字が保存されてしまう。

# Q:制約とかバリデーションって何?
A:_アプリ制作で投稿フォームからの`空文字`や未記入`null`を防ぐため必要なシステムのこと。_
データベースにおいて`null`は __特殊な扱い__ を受けるらしく不要なトラブルを避けるためにもこのシステムが採用されることが多いらしい。

【SQL】意外とややこしいnullについての基本的知識とSQLのnot nullを分かりやすく解説。

__Q:そもそも制約(constraint)とはどんな意味?__
A:_`constraint`:制約、ある条件を付けて完全な自由にさせないこと、窮屈、強制 という意味
`Rails`においては、`テーブルのカラム`や`データ`に制限を加え、 __想定通りの値__ が入るようにすること。_

__Q:そもそもバリデーション(validation)とはど

元記事を表示

asdf install rubyまたはrbenv installがopensslのエラーで止まる場合の対処

## 前提
筆者はasdfを利用しているため、以下よりasdfを利用する前提で記述します。
rbenvを利用する場合は`asdf install`を`rbenv install`に置き換えるだけで動くと思います。

## やること

asdfにrubyのpluginを追加
“`shell
asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git
“`

rubyをinstallするためには`openssl 1.1.1q`が必要なため、installしておく
なくても適切なopensslを一時的にinstallしてくれるはずだが、筆者の環境ではうまく動いてくれなかった。
“`shell
brew install openssl@1.1
“`

先程installしたopensslを利用して、rubyのinstallを実行する
“`shell
RUBY_CONFIGURE_OPTS=”–with-openssl-dir=`brew –prefix openssl@1.1`” asdf install ruby

元記事を表示

簡単にAWS Lambdaでrubyコードを実行できます

# 簡単にAWS Lambdaでrubyコードを実行できます
– ruby初心者
– AWS CLI使いたくない方 (AWS Consoleでやりたい)

# Aws Lambdaとは
– AWSサーバーレス(サーバーなしでコード実行できるもの) → プログラム集中できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318767/43cd8d52-f791-342e-8833-9c1eca7f3258.png)

# Aws Lambdaでできること
– バックエンドの処理
– マイクロサービス
– …

# コードをAWS Lambdaにデプロイする方法
– AWS CLIでデプロイする(コマンドで実行する方法)
– https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html
– AWS Consoleでデプ

元記事を表示

Webpacker::Manifest::MissingEntryError 解消法

rails sを実行したところ下記エラーが発生
Webpacker::Manifest::MissingEntryError in Blogs#index

その解決方法を記載していきます。

# 結論

結論から言うと、webpackerをコンパイルすれば直ります。
コンパイルするまでの過程を記載していきます。

①テキストエディタから、gemfileを探し、webpackerのバージョンを確認
②バージョンを5.0に更新
③コマンドを実行
④コンパイル
⑤rails s

順に詳しく説明していきます。

# webpackerのバージョンを確認

“rails s”を実行するためには、”webpacker”のバージョンを5.0にアップしなければならないようです。
バージョンアップする場合は”terminal”で実行するのではなく、”text editor”の中から”gemfile”を探し、バージョンを確認してください。

# バージョンを5.0に更新

webpackerのバージョンが5.0になっていない場合は、書き換えます。

“`gemfile.
変更前: gem ‘web

元記事を表示

100日後くらいに個人開発するぞ!day056

## 今日は入力データを受け取る処理をしてみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/8686356c-4a07-20c9-a859-165dcec80c15.png)

## 今日の学び

### 繰り返し処理で番号をつける
* each文の処理で値を1増やして更新する繰り返し処理で番号をつける
* 例
* `foods = [“パン”,”ラーメン”,…]`
* `index = 0`
* `foods.each do |menu|`
* ` puts “#{index}. #{foods}”`
* ` index += 1`
* `end`

### 入力を受け取る
* `変数 = gets.chomp`とすることで、エンターキーを押されるまでに入力された値を変数に代入することができる
* `puts “メニューを入力してください”`

元記事を表示

【Solargraph】Solargraph用のコンテナを作成する【Docker】

## `Dockerfile`を作成
以下が`Dockerfile`の例です。
“`Dockerfile:Dockerfile
FROM ruby:3.1.2

WORKDIR /app
RUN gem install solargraph

EXPOSE 7658
“`

## `docker-compose.yml`を作成
`docker-compose.yml`を以下のように作成します。

“`docker-compose.yml
solargraph:
build: .
command: bundle exec solargraph socket –host=0.0.0.0 –port=7658
volumes:
– .:/app
ports:
– “7658:7658”
“`

`docker-compose.yml`を作成したらコンテナを起動します。

“`:ターミナル
$ docker-compose up -d solargraph
“`

## 拡張機能をインストール
VSCodeに以下の拡張機能

元記事を表示

RSpecのbefore

時間固定などbeforeを使う機会が多々あるのですが、引数を渡すことで実行タイミングを変更できると知らなかったのでメモです。

具体的に言うと、これまで以下のように書いていたのですが、
“`
before do
travel_to(Time.zone.local(2022, 7, 1, 0, 0, 0)) }
end
“`

以下の3パターンで変更ができます。 ※afterも同様です
1. before(:suite)
RSpecの実行時に呼び出される。
2. before(:all)
context/describeブロックの実行時に呼び出される。`before(:context)`とも書ける。
3. before(:each) ※デフォルト
itの直前に毎回呼び出される。冒頭に記載したように引数を指定しないとこのパターンになる。`before(:example)`とも書ける。

あくまでイメージですが、コードで見るとよりわかりやすいかと思います。
“`ruby
RSpec.describe Sample do
before(:all) do
puts ‘all

元記事を表示

Rails link_toで関数を渡す

# 背景
レシピ共有アプリ制作にて以下のような問題がありました

“`ruby:モデル
class User < ApplicationRecord has_many: recipes has_one: list end class Recipe < ApplicationRecord belongs_to: user has_many: ingredients end class Ingredient < ApplicationRecord belongs_to: recipe end #これは買い物リストのモデルで、追加したいレシピの材料をリストテーブルに保存します class List < ApplicationRecord belongs_to: user end ``` 買い物リストにレシピの材料を追加するときに、 パラメーターの中にレシピの情報を追加したかったのですが、 親子関係ではないのでルーティングのネストをせずに実現したい。。。 迷った末見つけた方法をここに残します ```ruby:ルーティング post '/lists', to: 'lists#c

元記事を表示

[Ruby]オプションの使い方・取得の仕方(OptionParser)

最近学んだOptionParserの使い方についてアウトプットします。

まず以下のような課題があるとします。
### Rubyでカレンダーを作る

`$ cal`で表示されるカレンダーを作ってみよう。

イメージ
“`
➜ ruby calendar.rb
2月 2022
日 月 火 水 木 金 土
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28
“`

### 必須要件
– macに入っているcalコマンドと同じ見た目になっていること
– Gemは使わないこと
– `-m`オプションで月を指定できるようにすること。今年が2022年なら `cal -m 6`で2022年6月のカレンダーになる。
– 引数を指定しない場合は、今月・今年のカレンダーが表示される

### 本題
この課題に対して、どのようにOptionPaserを駆使するか。。
まず、使い方の流れは以下の通りです。
1. OptionPaser オブジェクト opt を生

元記事を表示

OTHERカテゴリの最新記事