Ruby関連のことを調べてみた

Ruby関連のことを調べてみた

AtCoder Beginner Contest 348参戦記録(A~C問題)

RubyでAtCoderに参戦した記録です。
今回はABC3完でした。

## [ABC348 A Penalty Kick](https://atcoder.jp/contests/abc348/tasks/abc348_a)
N回のペナルティキックの結果を「o」と「x」で記述します。3の倍数回目の時のみキックに失敗するそうです。

“`Ruby
n= gets.to_i
for i in (1..n) do
if i % 3 ==0
print “x”
else
print “o”
end
end
“`
特に難しいわけでもないのですが、最初n.timesで書こうとして「あれ?」となりました。
“`Ruby
# 誤答です
n.times do
if (n+1)%3 == 0
print “x”
else
print “o”
end
end
“`
.timesでは0~nまでが順番に渡されるという記憶があったのですが、それは下記のようにパラメータを設定した時ですね。
“`Ruby
n.times do |i|
if

元記事を表示

【Rails】メモ書きしたコメントを一括で見る機能

## はじめに

アプリケーションコード内のコメントにtodoを書くことがあるのですが、実装途中に一覧で確認したい時があり、探したところ見つかりました!!

:::note warn
ご覧いただきありがとうございます!
この記事の投稿者は主にRuby on Railsを学習している初学者です。
理解不足な点や内容に誤りがございましたらご指摘いただけますと幸いです。
:::

## 問題
コメントに記入したtodoの内容は把握できているはずだが、見落としがないか一覧表示で確認したい。

## 解決方法
コメントをアノテーション(注釈)として残しておく機能がRailsにありましたので、そちらを使っていきます。

使用方法は簡単です、コメントの記述方法を少しだけ追加します。
“`ruby:example_controller.rb
def example_action
# TODO: 後でちゃんと実装してくださいね
puts “hoge”
end
“`
コマンドラインで下記コマンドを入力します、すると・・・
“`
bin/rails notes
“`
このような形で表示させ

元記事を表示

【RSpec】フレーキーなテスト(たまに落ちるテスト)の直し方

## はじめに
自動テストを整備しておくと大量のテストを自動実行してくれるので大変便利です。
ですが、テストコードが増えてくると「パスするはずなのに、なぜかたまに失敗する」というテストが出てきます。
このような不安定なテストを「フレーキー(flaky)なテスト」と呼びます。

### フレーキーなテストの問題点
フレーキーなテストは「たまに失敗するだけ」なので、何度かやり直せばパスします。
なので、GitHub ActionsのようなCIツール上でテストが落ちても、「あ、また落ちた。再実行したら直るかな(ポチッ)」という安易な解決策に走りがちです。

しかし、フレーキーなテストを放置するのはよくありません。
理由は以下の通りです。

– 本当はバグのせいで失敗しているのに「きっとフレーキーなテストだからに違いない」と思い込んで、そのままリリースしてしまうから(いわゆる「狼少年」状態)
– 実務レベルの巨大なテストコードになると、再実行するにしても完了まで数十分かかるので開発のテンポが遅くなるから
– 1回の再実行で全パスする保証はどこにもなく、再々実行や再々々実行しないとパスしない可能

元記事を表示

devise導入における基本コマンド

# devise 導入 基本手順
## deviseとは?
deviseとはユーザー認証機能導入を手助けするgemです。
## ユーザー管理機能の実装
### deviseのinstall
#### gemファイルへの追記
**Gemfile**
“`
# 中略
gem ‘devise’
“`
#### bundleによる反映
**コマンド**
“`
bundle install
“`
### deviseの設定ファイルの作成
“`
rails g devise:install
“`
### userモデルの作成
モデルやマイグレーションファイルの自動生成、ルーティングへの追記を行う[^1]

[^1]:**user**はあくまでモデル名の一例。masterでもなんでも良い。
“`
rails g devise user
“`
### usersテーブルの作成
マイグレーションの実行
“`
rails db:migrate
“`
再起動して反映
“`
rails s
“`

### viewの作成
“`
rails g devise:views
“`

元記事を表示

GroveBeginnerKit を、C++(Aruduino)とRuby(ラズパイ,Rboard) で使う PWM編

[しまねソフト研究開発センター](https://www.s-itoc.jp)(略称 ITOC)にいます、東です。

[Grove Beginner Kit for Arduino](https://wiki.seeedstudio.com/Grove-Beginner-Kit-For-Arduino/) を使ってみる記事の第3回、今回は PWM (Pulse Width Moduration) を題材にします。

ターゲットは、以下の通り。
* Arduino - 付属の Arduino Uno 互換機
* mruby/c – [Rboard](https://www.sjc-inc.co.jp/service/rboard)

今回、ラズパイのライブラリは、まだPWMを用意していないので一旦保留にします。

# 1. Buzzer

Grove ブザーモジュールは、ピエゾ素子を使ったモジュールです。
Buzzer という名前に反して、自励式ではありません。つまり電源をONしただけでは音が鳴りません。音を鳴らすには、鳴らしたい周波数で信号線を ON/OFF する必要があります。

元記事を表示

新社会人が読むべき、初心者からRailsを始めて三ヶ月が経った人間の日記①

## 注意
仕事をやめ実家に帰ることとなった際、
兄に誘われた事をきっかけにRailsをやり始めた。
プログライミング?何それ?からの三ヶ月です。
つらつらと自分が分かった事、知ったことを羅列しておきます。
新社会人に教えていて、こいつどこでどうつまずいるのかよくわかんないなって思っている人は、何かの参考になるかも知れません。
※誤った情報もあるかも知れません。
# 学んでいった過程
### エンジニアにはインフラ、システム、フロントエンドなどがある。
・インフラエンジニアはシステムやインターネットを使用するために必要なサーバーやネットワークを開発、運用できるようにする仕事
・システムエンジニアはインターネット内のシステム全体の開発、設計をする仕事
・フロントエンドエンジニアはwebサイトやアプリの見た目を開発、設計をする仕事
webページで言うと、ログインしたり、お気に入りをしたり、投稿された動画が並ぶような開発をするのがシステムエンジニア、
それの見た目をしっかり作るのがフロントエンドエンジニア、
インフラエンジニアがいるからそのインターネットが使えてる。
そう言う認識です。
##

元記事を表示

density

“`ruby:title.rb

import pandas as pd
import numpy as np

r_res = 0.01 # 距離方向の分解能(m)

# DataFrameの作成
df = pd.DataFrame(columns=[‘r’, ‘theta’, ‘phi’])

# r, theta, phiの値を生成するリスト内包表記
data = [{‘r’: r, ‘theta’: theta, ‘phi’: phi}
for r in [num * r_res for num in range(0, 1000)]
for theta in range(-30, 32, 2)
for phi in range(-30, 32, 2)]

sin_th = np.sin(np.radians(df[‘theta’].astype(float)))
cos_th = np.cos(np.radians(df[‘theta’].astype(float)))
sin_ph = np.sin(np.radians(d

元記事を表示

keisan3

“`ruby:title.rb

import pandas as pd
import numpy as np

# DataFrameの作成
df = pd.DataFrame(columns=[‘r’, ‘theta’, ‘phi’])

# r, theta, phiの値を生成するリスト内包表記
data = [{‘r’: r, ‘theta’: theta, ‘phi’: phi}
for r in range(4, 5) # rの範囲は1~10
for theta in range(-60, 62, 2)
for phi in range(-60, 62, 2)]

# DataFrameにデータを追加
df = df.append(data, ignore_index=True)

df[‘x’] = df[‘r’] * np.sin(np.radians(df[‘theta’].astype(float))) * np.cos(np.radians(df[‘phi’].astype(float)))
df[‘y’] =

元記事を表示

keisan2

“`ruby:title.rb

import pandas as pd
import numpy as np

# DataFrameの作成
df = pd.DataFrame(columns=[‘r’, ‘theta’, ‘phi’])

# r, theta, phiの値を生成するリスト内包表記
data = [{‘r’: r, ‘theta’: theta, ‘phi’: phi}
for r in range(4, 5) # rの範囲は1~10
for theta in range(-60, 62, 2)
for phi in range(-60, 62, 2)]

sin_th = np.sin(np.radians(df[‘theta’].astype(float)))
cos_th = np.cos(np.radians(df[‘theta’].astype(float)))
sin_ph = np.sin(np.radians(df[‘phi’].astype(float)))
cos_ph = np.cos(np

元記事を表示

配列をコピーする時の注意点

# はじめに
 Atcoder004 – Cross Sum(★2)の問題を解いている時、自分の考えている処理と異なる処理が行われた。具体的には、2次元配列をコピーする際、コピーする元の配列まで変化してしまうというエラーが発生した。自分の学習のメモとして、記事を書いた。
# コード
“`ruby
#1次元配列の場合
a = [1,3]
b = a.dup
b[0] = 2

print a #[1, 3]
print b #[2, 3]

#2次元配列の場合
c = [[1,2],[1,3]]
d = c.dup
d[0][0] = 2

print c #[[2, 2], [1, 3]]
print d #[[2, 2], [1, 3]]
“`
# 解説
 1次元配列の場合、配列をコピーしたものの要素を変更しても、元の配列は変化しない。しかし、2次元配列の場合、配列をコピーしたものお要素を変更すると、元の配列も変更されてしまう。
 原因は、dupやcloneなどの配列を複製するコマンドは浅いコピーであることだ。浅いコピーの場合、コピー元の配列も変更する場合が生まれてしまう。今回の

元記事を表示

Ruby でかけっこのパズルを解く

https://qiita.com/jpwgad/items/5431e452b4a65cba3862
# 問題
>一郎、二郎、三郎の三人で駆けっこをして、その結果を次のように言っています。
>
>一郎:「僕は一番じゃない」
>二郎:「僕は一番だ」
>三郎:「僕は二番だ」

三人のなかで一人だけウソをついています。それは誰でしょう?

# Ruby で解いてみる
総当りで解いています。
0, 1, 2 でそれぞれ一郎、二郎、三郎を表しています。

“`ruby
names = %W(一郎 二郎 三郎)
(0..2).each do |usotsuki| #嘘つきを選びます
table = [-1, 1, 2] #与えられた条件(否定は負にします)
#嘘をつかせます
table[usotsuki] = -table[usotsuki]
#可能性のある順位を配列にします
tmp = table.map { _1 < 0 ? [1, 2, 3] - [-_1] : [_1] } #順位を総当りでまわして判定します [1, 2, 3].permuta

元記事を表示

新人エンジニアに向けてのエール

# 初投稿です。

4月も1週間過ぎたので、駆け出しエンジニアに向けてエールを送る意味で記事を執筆することにしました。

まず初めに軽い自己紹介から。
### About me
“`java:AboutMe.java
// 私は都内のIT企業で働く4年目のエンジニアです。
// 得意科目はフロントエンドの実装で、これまでにReact.jsやVue.jsなど
// のプロジェクトで要件定義~テストまで幅広く開発してまいりました。
// フロント以外にも、JavaやPHP、Pythonなども経験があります。
// 4年目といってもまだまだ勉強することだらけの毎日ですが、培ってきた知見や、
// つらかった経験、楽しかった経験などつらつらと発進できたらと思います。
// ということで。。。

String greeting = “よろしくお願いします。”;
System.out.println(greeting);
“`

### プログラミング学習について

未熟な私ですが、最近では後輩なども何人かできて、よく質問されるのが、「どうやって覚えてますか?」といった質問です。
その問いに対

元記事を表示

Railsを使ってアプリを作る(基礎中の基礎)

# はじめに
今回は、railsをつかってアプリをつくり、デプロイまでの基本的な流れをまとめました。
基礎中の基礎という通り、画面にHello,worldを表示するだけのアプリになります。
エディタはVSCodeを用いて、バージョン管理をGitで行い、Renderへデプロイします。
使用ハードはmacbook m2です。
Rubyはデフォルトで入ってるので、Railsのインストールから始めます。

# Railsをインストール
“`
$ gem install rails
“`

-vを行うことでバージョンの指定もできます。

“`
$ gem install rails -v 7.0.4.3
“`

次にbundlerをインストールします。

“`
$ gem install bundler
“`

# アプリを作る

Railsプロジェクト用のenvironmentディレクトリを作ります。

“`
$ cd
$ mkdir environment
$ cd environment/
“`

rails newを実行する。
このとき、PCにインストー

元記事を表示

rescueとrescue_fromの使い方

# はじめに

先日、業務でrescueを使用したエラー処理を実装したので、備忘録として記事にしたいと思います。

この記事では、rescue と rescue_from の基本的な使い方をまとめてみました。

私自身、まだまだ未熟な経験の浅いエンジニアですので、誤った解釈をしている可能性もあります。もしそういった場合がありましたら、ぜひコメントでご指摘いただければ幸いです。

# rescue

`rescue` は、プログラム内で発生する特定のエラーを効果的に捕捉し、対処するための機能です。
これにより、エラー発生時の適切な対応やプログラムの安定稼働が可能になります。

### 基本構文

`rescue` を使うことで、特定のエラーが発生した時に特定のコードを実行するよう設定できます。
基本的な形式は以下のようになります。

“`ruby
begin

# 例外が発生する可能性のあるコード

rescue [例外クラス]

# 例外が発生した時に実行するコード

end
“`

### 使用例

例えば、ユーザーがデータベースに存在しない ID でアクセスしたときにエラ

元記事を表示

【Ruby】ハッシュを使って条件分岐をスッキリさせよう

## これは何?

目の前にいる海外からやってきた人にあいさつしたいとき、ありますよね?
どうせあいさつするならその方の国の言語であいさつしたいものです。

相手の国に合わせたあいさつをするときに便利なのが、条件分岐です。
この条件分岐をスッキリ書く方法を学んだので、アウトプットします。

## やってみよう

レベル別に段階を踏んでやっていきます。

### if文

“`ruby
if country == ‘Japan’
hello = ‘こんにちは’
elsif country == ‘USA’
hello = ‘Hello’
elsif country == ‘France’
hello = ‘Bonjour’
elsif country == ‘Spain’
hello = ‘Hola’
elsif country == ‘China’
hello = ‘你好’
else
hello = ‘Hello’ # デフォルトの挨拶
end
“`

もっとも地道に書く方法として、if文があります。
でも、いちいち`elsif country ==`、`

元記事を表示

20240406 日記 pipenvについて、githubのlockについて

### pipenvについて

Pipfileというのがあって、そこに環境ごとに使うpipモジュールを書いていく
そして、`pipenv install` (`–dev`とかつけるとその環境用の)とすると、Pipfileに書かれたモジュールが閉じられた仮想環境向けにインストールされる、という仕組みらしい

これだけ聞くとrubyのbundlerに似てる、と思った。けどbundlerはグローバルにgemをインストールしてくる(`–path vender/bundle`とかでグローバルに入れない方法もあるのは知ってるけど)
Rubyではグローバルに入れる使い方だけど、それで問題になったことはない
一方pythonはなんとなく仮想環境つかってグローバルを汚染しないようにする、という感覚だったけど、何が違うのだろう?

と不思議におもったのでまずBundlerで調べると、まさに自分が思った通りのことをまとめてくれている方がいた
参考:[bundle install時に–path vendor/bundleを付ける必要性は本当にあるのか、もう一度よく考えてみよう #Ruby – Qiita

元記事を表示

【Ruby】じゃんけんプログラム

# 仕様
– ユーザーにじゃんけんの手を選んでもらう。(0:グー、1:チョキ、2:パー)
– プログラム側では、ユーザーと勝負するじゃんけんの手をランダムに選ぶ。
– 「ユーザーが選んだじゃんけんの手」と「プログラムがランダムに選んだじゃんけんの手」を表示する。
– ユーザーが勝った場合は「あなたの勝ちです。」と表示する。
– ユーザーが負けた場合は「あなたの負けです。」と表示する。
– あいこの場合は 「あいこで」と表示させたあともう一度じゃんけんをさせる。
– あいこが3回続いた場合は、「3回あいこが続きました。また挑戦してください。」と表示させたあとにプログラムを終了させる。

# 自分のコードとChatGPTのコードの比較
### 自分のコード
“`ruby:janken
# 配列とあいこカウント用変数の定義
janken_hands = [“グー”, “チョキ”, “パー”]
aiko_count = 0

puts “最初はグー、じゃんけん…”

# 3回ループさせる
while aiko_count < 3 if aiko_count > 0
puts

元記事を表示

Rails 6.0.3でRuby 2.6.6の環境構築

 Ruby on Railsなるものを勉強してみようと『パーフェクトRuby on Rails【増補改訂版】』に手を出しました。

 数年前の書籍だから完全に同じ環境を構築する必要も無さそうだけど、出来るだけ同じ環境で勉強してみることにしました。意外と手間が掛かったので記録しておきます。

 書籍の「Appendix Railsの開発環境構築」に関しては特に問題は無かったので省略して、Railsのversion 6.0.3をインストールする部分を説明していきます。

 まず普通に`gem install rails -v 6.0.3`をすると下記のようにnokogiriライブラリに関するエラーが出ます。
“` console
$ gem install rails -v 6.0.3
(中略)
Successfully installed activesupport-6.0.3
Building native extensions. This could take a while…
/home/user/.rbenv/versions/2.6.6/lib/ruby/2.6.0/ru

元記事を表示

Railsでの命名の単数複数形使い分け

### モデル名

– **形式**: 単数形
– **例**: User, Product, Order
– **理由**: モデルは1つのオブジェクトを表すため
– **参考コマンド**: “`rails generate model Post content:text“`
(postsテーブルにtext型のcontentカラムを作成)

### コントローラー名

– **形式**: 複数形
– **例**: UsersController, ProductsController, OrdersController
– **理由**: コントローラーは複数のリソース(モデルのインスタンス)を扱うため
– **参考コマンド**: “`rails generate controller Posts home about“`
(home,aboutアクションを持つPostsコントローラーを作成)

### テーブル名

– **形式**: 複数形
– **例**: users, products, orders
– **理由**: 1つのテーブルには複数のレコー

元記事を表示

【Rails】Ferrumを使ってHTMLをPDFへ変換してみた(wicked_pdfからの移行)

HTMLからPDFを生成する処理が上手く動かなくなってしまったため、
PDF生成ライブラリを`wicked_pdf`から`Ferrum`へ移行しました。
まだまだRails初心者なので、何か間違い等あればご指摘いただけると幸いです!

## HTMLからPDFの変換処理に定番だった`wicked_pdf`

上記の通り、PDF生成機能の実装によく使われていたかと思います。

今回、私はRailsのバージョンを6から7へ引き上げて動作確認を行なった際に、
既存で実装されているPDF生成機能が動かなくなっていることに気がつきました。
なお、既存の実装内容は、viewテンプレート(hogehoge.html.erb形式のファイル)から
`wicked_pdf`を使用してPDFへ変換処理を行っていました。

`wicked_pdf`自体は現在もサポートされているgemですが、
このgemは`wkhtmltopdf`というHTMLをPDFに変換するCLIツールに依存しています。
そして、この`wkhtmltopdf`は、2023年1月にGitHub上からリポジトリがアーカイブされており、開発終了

元記事を表示

OTHERカテゴリの最新記事