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

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

点字メーカープログラムのコードレビュー Part 1 – Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-

## この記事は何?
Qiita Advent Calendar 2021「Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-」で投稿してもらったコードを出題者である僕、伊藤淳一がレビューしてみました。

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

### アドベントカレンダー参加者のみなさんへ

ネタバレになってしまうので、自分の投稿が完了するまでこちらの記事(動画)は見ないようにお願いします〜 :pray:

### レビュー対象の記事はこちら!

今回レビューさせてもらったのは以下の1日目から5日目の記事です。投稿してくれたみなさん、どうもありがとうございました!

https://qiita.com/cielavenir/items/441631f6796af95fe0ea

https://qiita.com/nodai2h_ITC/items/8217d525b308f9bd5a12

https://techracho.bpsinc.jp/morimorihoge/2021_1

元記事を表示

僕も Ruby で 競プロでのデバッグを標準エラー出力で行っているという話 やってみた

# はじめに
@amaguri0408 さんの記事 [競プロでのデバッグを標準エラー出力で行っているという話](https://qiita.com/amaguri0408/items/61d65c3bea3a5815d704) が素敵でしたので、やってみました。
# Ruby(WA)
“`ruby
N, X = gets.split.map(&:to_i)
A = gets.split.map(&:to_i)
known = [false] * N

x = X
while known[x].!
known[x] = true
x = A[x]
end
ans = 0
known.each do |i|
ans += 1 if i
end
puts ans
“`
“`
4 2
3 1 1 2
2
“`
うむ、3 が正答なので`WA`ですね。
# p
“`ruby
N, X = gets.split.map(&:to_i)
A = gets.split.map{ _1.to_i – 1 }
known = [false] * N

x = X – 1
while k

元記事を表示

僕も Ruby で ポリモーフィズム やってみた

# はじめに
前回の記事 [Ruby 多重継承 Mix-in](https://qiita.com/superrino130/items/3da663bcebe7e396e51f) でクラスの継承が気になっていたところ [ポリモーフィズムの記事](https://qiita.com/kat0/items/30596c55a7f043ee56aa) がありましたので、やってみました。
# 継承版
“`ruby
class Animal
def cry(voice: ”)
puts “#{voice}”
end
end

class Dog < Animal def cry(voice: 'わんわん') super end end class Cat < Animal def cry (voice: 'にゃー') super end end Dog.new.cry Cat.new.cry ``` 流石にもろコピペは回避いたしましたが、`Java`で散々やったパターンです。 # ダックタイピング版 ```ruby class Anim

元記事を表示

【Ruby のまずいコード】階乗

# お題

引数として与えられた正の整数の階乗を返すメソッドを定義してください。
`n` の階乗とは,1 から `n` までの整数を掛け合わせたものです。

# コード

## コード 1

“`rb
def factorial(n)
(1..n).inject{ |product, x| product * x }
end
“`

## コード 2

“`rb
def factorial(n)
(1..n).inject(&:*)
end
“`

# 改善

コード 1 よりコード 2 のほうが簡潔ですが,[Enumerable#inject](https://docs.ruby-lang.org/ja/3.0.0/method/Enumerable/i/inject.html) には引数としてシンボルを与える用法があり,これを使うと

“`rb
def factorial(n)
(1..n).inject(:*)
end
“`

と書けます。
コード 2 より 1 字少ないだけですがコード 2 では Proc オブジェクトが作られるのに対し,こちらは作られま

元記事を表示

Rubyやってた人間がGo始めて思ったこと

この記事は、[フラー株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/fuller-inc)の6日目の記事です。

5日目の記事は [@m-coder](https://qiita.com/m-coder) さんによる [DroidKaigi2021に登壇した話](https://note.com/m_coder/n/n74901d195d83) でした。

私は元々Ruby on Railsで開発をしていたのですが、最近転職しまして、Goに入門しました。
Goやり始めて「へぇ〜」と思ったことを書いてみます。

## 型があるとうれしい

私は静的型付けの言語をこれまであまり触ったことがなかったのですが、型がちゃんと決まってるとありがたいですね。

エディタ(VSCodeを使っています)の補完機能がバリバリ効いて、

– この変数にどんな値が入っているのか
– この変数はどんなメソッドが使えるか
– このメソッドにどんな値を入れればいいか

などを教えてもらえるので、サクサクコードを書き進められ

元記事を表示

[読書備忘録]RubyとSinatraではじめる Webアプリケーション開発の教科書

# はじめに
`Ruby` 関連本って `Rails` を除いてなかなか出版されない中、`sinatra`ですからちょっとびっくり。
# RubyとSinatraではじめる Webアプリケーション開発の教科書
[RubyとSinatraではじめる Webアプリケーション開発の教科書](https://www.morikita.co.jp/books/mid/085561) を図書館で借りて読みました。

いわゆる?安定の森北出版
# 目次
第1章 Webアプリが動くしくみ
第2章 PC上に仮想環境を構築しよう ― Webアプリ作成前の準備
第3章 Rubyのコーディングに慣れよう
第4章 Webカレンダーを作ろう ― いちばん簡単なWebアプリ
第5章 シンプルな掲示板Webアプリを作ろう ― データベースと連携する
第6章 パスワードの管理のしかた ― ログイン機能をつけるための基礎知識
第7章 Cookieの使い方 ― セッションを継続させるための基礎知識
第8章 掲示板Webアプリを完成させよう ― より実用的なWebアプリ

`JavaScript`を使用した派手な部分はないも

元記事を表示

国民の祝日.csvを使いやすい形式にパースしてみた

# 概要

`国民の祝日.csv`を、使いやすい形式にパースする課題にチャレンジしました。

置換前と置換後は、以下となります。

## 置換前

“`app/public_holiday.csv
平成28年(2016年),,平成29年(2017年),,平成30年(2018年),
名称,月日,名称,月日,名称,月日
元日,2016/01/01,元日,2017/01/01,元日,2018/01/01
成人の日,2016/01/11,成人の日,2017/01/09,成人の日,2018/01/08
建国記念の日,2016/02/11,建国記念の日,2017/02/11,建国記念の日,2018/02/11
春分の日,2016/03/20,春分の日,2017/03/20,春分の日,2018/03/21
昭和の日,2016/04/29,昭和の日,2017/04/29,昭和の日,2018/04/29
憲法記念日,2016/05/03,憲法記念日,2017/05/03,憲法記念日,2018/05/03
みどりの日,2016/05/04,みどりの日,2017/05/04,みどりの日,2018/05/0

元記事を表示

Rubyプログラミング問題にチャレンジ! suzuki_mar

この記事は、 @jnchitoさんのアドベントカレンダーの[Rubyプログラミング問題にチャレンジ!](https://qiita.com/advent-calendar/2021/ruby-challenge)の12月5日の担当分です。
詳しいレギュレーションは、問題のGitHubの[URL](https://github.com/JunichiIto/tenji-maker-challenge)を参照してください。
[PRのURL](https://github.com/JunichiIto/tenji-maker-challenge/pull/11)

# ロジックの解説
## 用語

| 名前 | 英語 | 説明 |
|:———–|————:|:————:|
|マス|square| 点字の中の一つの点|
|点字|Tenji| マスが一つの組み合わせになったもの 点字の組み合わせで文字に対応している|
|マーク|mark|点字を組み合わせた単語(文字列)|

![スクリーンショット 2021-11-24 14.14.19.png]

元記事を表示

【ruby】条件演算子を用いたif文

#条件演算子とは?

今回のトピックは、rubyの基礎である条件演算子を用いた
プログラミングを解説していこうと思います。

if文を使用しなくても、短く書けるので、
リーダブルコードになるためとてもいいと思いますよ^^

ぜひ、覚えていってくださいね!

##条件文

まず、初めによく見る条件文というのはif文だと思います。

例えばこんな感じのやつ↓

“`php:example

def country(language)
if language == “Japan”
  “Japanese”
elsif language == “the us”
“English”
elseif language == “Italy”
“Italy”
else
“WHAT???”
end
end

language = Japan
puts country(language)

“`

ifの後に続けて書くのが、一番初めに習う
if文の条件式かと思います。

しかしもっと、短く書くこともできるのが
条件演算子なんですね^^

元記事を表示

英語ディクテーション用にyoutube-dlでダウンロードしたvtt形式の字幕ファイルをPlain Textに変換するrubyスクリプト

vtt形式は字幕表示に特化したフォーマットなので、人間が目で見るにはなかなか厳しいものがあります。

そこで、人間が見るのに適したPlain Textに変換するrubyスクリプトを作りました。

“`ruby:vtt2txt.rb
#!ruby

valid_texts = []

while line = gets
line.strip!
if line =~ /–>/
valid_texts << gets.strip end end lastline = nil valid_texts.each do |line| if line != lastline puts line lastline = line end end ``` YouTubeのCNN 10の自動生成字幕で動作確認済みです。

元記事を表示

Rubyの新しいデバッガを試してみる

# はじめに

Ruby 3.1.0 の目玉機能の1つに新しいデバッガがあります。
私は、このデバッガの2つの特徴に注目しました。
1つは、リモートデバッガ。もう1つは、DAPに対応していることです。

# 新しいデバッガのインストール

デバッガ自体は、Ruby 3.0 でも使うことができます。

“`shell
$ ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]
“`

デバッガをインストールしてみましょう。

“`
$ gem install debug
“`

デバッガのバージョンは、1.3.4です。

“`
$ rdbg -v
rdbg 1.3.4
“`

# リモートデバッガ

リモートデバッガは、別のサーバーで動いているデバッガに接続してデバッグできる機能です。
以下のような簡単なプログラムで少し試してみましょう。

“`ruby:target.rb
a = 1
b = 2
c = 3
d = 4
p [a, b, c, d]
“`

## リモートデバッガを試し

元記事を表示

gemを使ってスクレイピングしてみた

# はじめに
本記事は、[2021 RUNTEQアドベントカレンダー](https://qiita.com/advent-calendar/2021/runteq)5日目の記事になります!
現在ポートフォリオを作成しており、その作成過程でスクレイピングを用いて必要な情報を取得しDBに格納しました。今回はそこで使用した**gem Mechanize**について書いていこうと思います!

# この記事でわかること

**gem Mechanizeについて**

– できること
– 提供しているメソッド
– PFで用いたDBに格納する方法

##できること

まず概要を[公式](https://github.com/sparklemotion/mechanize)より見てみます

> Mechanizeライブラリは、ウェブサイトとの対話を自動化するために使用されます。Mechanizeは、自動的にクッキーを保存、送信し、リダイレクトを行い、リンクをたどり、フォームを送信することができます。フォームフィールドは入力して送信することができます。また、

元記事を表示

【Ruby のまずいコード】次の整数

# お題

整数に 1 足した整数を得るコードを書いてください
元の整数は変数 `n` に代入されているとしましょう。

# コード

## コード 1

“`rb
n + 1
“`

## コード 2

“`rb
n.next
“`

# 改善

コード 1 もコード 2 もまずくありません。ほとんどの場合,これで問題ありません。
記事タイトルに「Ruby のまずいコード」と入っているのは,このアドベントカレンダーの共通のスタイルなだけです。

コード 1 と 2 のどちらがよいかは,好みでいいと思います。
ただ,変数の値に 1 を足すのではなく,メソッドチェーンの途中で 1 を足すという場合,`next` を使うほうが書きやすいと思います。
つまり,

“`rb
foo.bar.next.hoge.fuga
“`

のほうが

“`rb
(foo.bar + 1).hoge.fuga
“`

とか

“`rb
foo.bar.then{ |n| n + 1 }.hoge.fuga
“`

よりもいいだろう,ということです。

## 速度を極限まで求めるなら

元記事を表示

Lambda サブスクリプションフィルター + AWS WAF で実現する「フルリモートワーク時代のお手軽社内サイト」

本記事は [AWS LambdaとServerless Advent Calendar 2021](https://qiita.com/advent-calendar/2021/lambda) の4日目です。

たまたま空きがあることに気付いたため、せっかくでしたらと急遽参加させていただきます! よろしくお願いいたします ?

こんにちは。[**Togetter**](http://togetter.com) を運営しているトゥギャッター株式会社でエンジニアをしている [@MintoAoyama](http://twitter.com/MintoAoyama) です。

[**Togetter**](http://togetter.com) はツイートを始めとした様々な情報を組み合わせてコンテンツを作り出すキュレーションサービスです。
2009年に誕生してから**今年で13年目**に突入し、現在も**月間PV約1億、月間UU約1500万という規模感**で成長を続けています。

元記事を表示

【オブジェクト指向】ポリモーフィズム

##ポリモーフィズムとは
意味:多相性、多態性

プログラミング言語の持つ性質の一つで、ある関数やメソッドなどが、引数や返り値の数やデータ型などの異なる複数の実装を持ち、呼び出し時に使い分けるようにできること。
**多態性の概念がない言語では、同名のプログラムが二重に定義されていますとエラーが出てくる。**

https://e-words.jp/w/%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%95%E3%82%A3%E3%82%BA%E3%83%A0.html

– dogもcatも同じcryメソッドを呼び出しているが、呼び出し先に応じて適切なメソッドを実行している。

“`ruby
class Animal
attr_accessor :name

def cry(voice=”)
“#{self.name}: #{voice}”
end
end

class Dog < Animal def cry(voice='わんわん') super end end class Cat < Animal

元記事を表示

bootsnapの「wrong argument type false (expected Symbol) (TypeError)」エラーで「bundle exec」コマンドが使えない場合の対処法

## 背景

自分は普段、Github Actions で CI/CD 環境を作る事が多いのですが、つい先日、新たなコミットを push してビルドおよびテストを実行した結果、なぜか途中でコケるようになってしまいました。

具体的に言うと、「bundle exec」コマンドを使おうとするタイミングで

`to_binary’: wrong argument type false (expected Symbol) (TypeError)`

エラーが発生するようになってしまった感じです。

“`
▶︎ Run bundle exec rails db:create
bundle exec rails db:create
bundle exec rails db:migrate
shell: sh -e {0}
/__w/myapp/vendor/bundle/ruby/3.0.0/gems/bootsnap-1.9.1/lib/bootsnap/compile_cache/iseq.rb:13:in `to_binary’: wrong argument type fal

元記事を表示

【Rails】TimeWithZoneクラスとは

##TimeWithZoneクラス
– Rails独自のクラスで、Timeクラスと完全な互換性がある。ただし、実装としてはTimeクラスを継承して作られているわけではない。(親クラスはObject)
– Timeクラスよりもタイムゾーンを柔軟に扱うことができる。
– TimeWithZoneクラスのインスタンスはnewではなく、以下のような方法で取得するのが望ましい。

“`ruby
Time.zone = ‘Eastern Time (US & Canada)’ # => ‘Eastern Time (US & Canada)’
Time.zone.local(2007, 2, 10, 15, 30, 45) # => Sat, 10 Feb 2007 15:30:45.000000000 EST -05:00
Time.zone.parse(‘2007-02-10 15:30:45’) # => Sat, 10 Feb 2007 15:30:45.000000000 EST -05:00
Time.zone.at(1171139445

元記事を表示

【Python】ModuleNotFoundError ~ PythonとRubyが混在するWindowsの罠 ~

## この記事について

Windowsで色んな言語で開発しているとこんなことがある(かも)

## 環境
– Windows10
– Ruby 2.7
– Python 3.8.2

## 本題
pip installしたのにModuleNotFoundErrorが治らない。何故だろう?
・・・

C:\develop>python -m pip install --upgrade pip
C:\DevelopmentTools\Ruby27-x64\msys64\mingw64\bin\python.exe: No module named pip

Ruby・・・??
ということで環境変数を修正。RubyのPathがPythonより上になっていたので順序を変えたら解決。

## 最後に
Windowsを使ってる方は、Pathの順序に注意(キホン)

元記事を表示

rakeとシェルスクリプトを使って、複数DBへのデータインポートを効率化する

初めまして、kouです!
いつもは社内アカウントでqiitaを書いているのですが、今回は気分転換に個人アカウントで記事を書いていきたいと思います!

## 座学編

### rakeとは?
rubyで使用されるタスクランナーの一種。
実行したい処理をrubyで書いてタスクとして登録し、登録したタスクをrakeコマンドで実行する。
→ 一旦rakeタスクに登録しておけば、コマンドを入力するだけで処理を実行してくれるのでかなり便利!

### シェルスクリプトとは?
> シェルスクリプトとは、シェルによって解釈・実行される一連の処理を記述したスクリプト。狭義では、Unixシェルで用いられるスクリプト言語を指します。
「スクリプト(script)」は「台本」という意味で、コンピュータに実行させたい処理を記述してコンピュータを動かせます。
この台本をテキストデータで用意したものがシェルスクリプトです。コマンド・インタプリタとも呼ばれています。
ref: https://udemy.benesse.co.jp/development/system/shellscript.html

→ エクセル

元記事を表示

Rubyのインストール(簡易)

Windows WSLのubuntu20.04にRubyをインストールしようとして数回失敗。

以前、Chromebook(Debian: penguin)にRubyをインストールしたときはあっさり入ったのになぜ?と言うことで、成功していたChromebookのhistryを見て同様のことをwsl のubuntu20.04に行ったらあっさりインストールできた。

“`bsh:rubyinstall
sudo apt-get install ruby -y
“`

これだけで出来た。
(というか、apt-get install rubyって普通ですよね。Rubyのバージョン管理ツールrbenvやらを意識したインストールで失敗したので・・・。)

作業を行った2021年09月時点では ruby 2.7.4 (ver. 2の最新)がインストールされた。

rbenvとか使用しないのであればとりあえず。

元記事を表示

OTHERカテゴリの最新記事