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

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

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とか使用しないのであればとりあえず。

元記事を表示

改訂版チェリー本発売記念tenji-maker-challenge~点字は行列に見立てる

# 成果物
https://github.com/JunichiIto/tenji-maker-challenge/pull/3

プルリクから実装箇所を抜粋

“`ruby
class TenjiMaker
DOT = ‘o’.freeze
DASH = ‘-‘.freeze

Point = Struct.new(:i, :j)
ZERO_ZERO, ZERO_ONE = Point.new(0, 0), Point.new(0, 1)
ONE_ZERO, ONE_ONE = Point.new(1, 0), Point.new(1, 1)
TWO_ZERO, TWO_ONE = Point.new(2, 0), Point.new(2, 1)

def to_tenji(text)
result = text.split.map do |s|
/(?[KSTNHMYRW]|)(?[AIUEO]|)/ =~ s
tenj

元記事を表示

CLIでツイートするだけのgemを作った

本記事はエイチームフィナジーアドベントカレンダー4日目の投稿です。
ちいさいgemを作ってはじめて公開したお話になります。

# ツイートするだけのシンプルなツールが欲しかった

普段プライベートで開発や調べ物をしてるときに、作業内容をメモがてらTwitterにつぶやいたりしています。そういうときはだいたいターミナルを開いて作業してるので、いちいちTwitterクライアントに切り替えるのがめんどくさいです。なのでターミナルから使えるCLIのクライアントをいくつか使ってるのですが、たいてい高機能で個人的にほぼ使わない機能がいっぱいあって、もっとシンプルなのが欲しいなと常々思っていました。

# gemを作って公開してみたかった

業務でRailsアプリをメンテしてたりプライベートでRails製の個人サイトを運用してたり、普段からRubyによく触れています。当然gemの導入やコードを読むこともありますが、gemを作って公開したことはありませんでした。
ちょうどいいのでgemとしてリリースしてみることにしました。

# 作ったgem「twee」

tweeというgemを作りました。

htt

元記事を表示

オフラインどう書くE10の解答

問題はこちら->http://mtsmfm.github.io/2016/12/03/doukaku-e10.html

Prolog,Julia ,Ruby,Nimで解いています。
かなり前の下書きを修正してJulia,Nimでは最近のバージョンで動くよう一部変更しました。

まずPrologで解きました。
操作(OX)と全体の中の黒の正方形の位置(角、辺、中)によって場合分します。
元の黒い正方形が角
 X->黒が辺に2個、中に2個に変化、白が2個増加、
 O->黒が角に1個,辺に2個,中に2個に変化,白が2個増加
元の黒い正方形が辺
 X->黒が辺に1個、中に3個に変化、白が1個増加、
 O->黒が辺に2個,中に3個に変化,白が1個増加
元の黒い正方形が中
 X->黒が中に4個に変化、白が1個増加、
 O->黒が中に5個に変化,白が0個増加
この情報はp/5に入っています。
p(OまたはX,[元の黒が角、辺、中の場合の白の増加数],[元の黒が角の場合の角、辺、中の黒の数],[元の黒が辺の場合の角、辺、中の黒の数],[元の黒が中の場合の角、辺、中の黒の数])
更にXの場合それまであ

元記事を表示

mini_racerのインストールが、依存関係にあるlibv8で失敗する

## mini_racerのインストールで失敗する
Railsあるある
依存関係にあるlibv8のインストールで失敗しているみたい。
(mini_racerのgemアップデートも同じこと起きやすいです)

“`
An error occurred while installing libv8 (8.4.255.0), and Bundler cannot continue.
Make sure that `gem install libv8 -v ‘8.4.255.0’ –source ‘https://rubygems.org/’` succeeds before bundling.

In Gemfile:
mini_racer was resolved to 0.3.1, which depends on
libv8

“`

エラーログを見ていくと以下辺りが怪しそう。

“`
Error: Command ‘vpython third_party/depot_tools/update_depot_tools_toggle.py –disable’ retu

元記事を表示

【Ruby のまずいコード】leet

# お題

引数として与えられた文字列に以下の変換を施した文字列を返すメソッドを定義してください。

* `A` → `4`
* `G` → `6`
* `I` → `1`
* `O` → `0`
* `S` → `5`
* `Z` → `2`

たとえば `”GIANTS”` を与えると `”614NT5″` を返します。

このような文字列表現を [leet](https://ja.wikipedia.org/wiki/Leet) と呼ぶようです。
メールなどでふざけてアルファベットの一部を形の似た数字に置き換えたりするものですが,ここでお題として挙げた変換は leet の多様な置き換えのごく一部です。

# コード

実際に見たことのあるコードを思い出しながら例を二つ作ってみました。

## コード 1

“`rb
def leet(str)
result = “”
str.chars.each do |char|
case char
when “A”
result << "4" when "G" result << "

元記事を表示

コードの見方・関わり方が少し変わった一年でした、という話

グロービスにバックエンドエンジニアとして参画している @ymstshinichiro です。
僕は今年の5月から本格的に[GLOPLA LMS](https://glopla.globis.co.jp/)の開発にジョインしました。
本記事では、そこから今日までの7ヶ月を通して自分に起こった変化について書いてみたいと思います。

## 参画以前は
僕は約10年飲食の業界にいましたが、約4年前にキャリアチェンジで SIer > Web業界(社員) > Web業界(フリーランス) という流れで現在に至っており、新卒できちんと先輩から教わったとか、スクールで先生についてもらったみたいなことがありませんでした。

なので、基本的に独学でプログラミングを学び現場のコードを見ながら/直しながら覚えていくという感じでやってきており、

– 「こうあるべき」みたいなのは書籍を読んで得たものが基本
– とはいえ現場では現場のルールや状況がある
– 結果、その時々で対応していくので、背骨のある設計/実装、綺麗で汎用性の高いコード みたいなのがあまり身についてこなかった

という実感がありました。
一方で、急

元記事を表示

マンダラートを作りたい #1

https://navi.dropbox.jp/mandal-art

![マンダラート](https://2fnflu14pimi44odtt128jit-wpengine.netdna-ssl.com/wp-content/uploads/2017/01/mandal-art-06.jpg)

マンダラートとはアイデア出しの手法の一つ。
こんな漢字で、連想してアイデアを出してく。

最初から、こんな漢字のマス目を用意して、投稿表示するのが意外と難しい。

投稿ページ、投稿一覧表示ページ、投稿編集ページを合体させたいのだが、それが意外と難しい。(大事なことなので2回言った)

“`ruby
class MandalartsController < ApplicationController def index @mandalarts = Mandalart.all new end def new @mandalart = Mandalart.new end def create @mandalart = Manda

元記事を表示

Railsで日時を取得したいのに、2000年1月1日ばかり保存されてしまう件について

#はじめに
現在、Ruby on Railsにて睡眠を記録するアプリを作成しています。form_withを使用して日時を記録する際に、登録したデータの日付が2000年1月1日としか保存されませんでした。非常に単純な原因でしたので、備忘録として投稿します。

## 開発環境

DBにはMySQLを使用しています。

* Mac OS Big Sur 11.6
* VSCode
* Ruby 3.0.2p107
* Rails 6.1.4.1
* MySQL 8.0.27 for macos11.6 on arm64 (Homebrew)

#原因

* **migrationファイルでDateTime型とすべきところをTime型にしていた。**
* MySQLについて調べるべきなのに、Rubyのことを調べていた。

## 背後要因

> 日付だけでなく時刻も扱える Date のサブクラスです。
> DateTime は deprecated とされているため、 Timeを使うことを推奨します。
> [Ruby 3.0.0 リファレンスマニュアル class DateTime(要約)](h

元記事を表示

【技育展2021】本当に”はじめてのアプトプット”をしたら意外にも優秀賞をもらえた

# 技育展とは?

株式会社サポーターズが開催する、学生エンジニアのアウトプットを展示するイベントです。
アウトプット作品を作る+それをプレゼンすることがイベントの主な内容です。
私は2021年開催の回に参加しました。
チームは高校時代の同級生の友人と2人でした。

https://talent.supporterz.jp/geekten/2021/

# 何を作ったの?

**失敗ドットコム**というWebサイトを作成したました。
このサイトは、みんなの失敗談を知識として集積して、他の人の挑戦に役立てようというコンセプトから生まれました。
主な機能は、自分の失敗談を投稿したり、他人の失敗談を閲覧することです。

https://www.shippai-for-everyone.com/

例えば、こんな投稿があったりします。

https://www.shippai-for-everyone.com/posts/24

# 審査結果は?

以下のようなルールで入賞者が選出されます。

>最優秀賞(1作品) 30万円/テーマ
>優秀賞(1作品) 10万円/テーマ
>「はじめてのアウトプ

元記事を表示

【Ruby】trimしたいときはstripしよう

##strip
Rubyには“`trim“`メソッドがないので代わりに“`strip“`メソッドを使う。

**文字列先頭**と**末尾の空白文字**を全て取り除いた文字列を生成して返す。
空白文字の定義は“`” \t\r\n\f\v”“`
文字列右側からは“`”\0″“`も取り除くが、左側の“`”\0″“`は取り除かない。

“`ruby
pry(main)> p ” s”.strip
=> “s”
# 文字と文字の間の空文字は取り除かない
pry(main)> p ” s f “.strip
=> “s f”
pry(main)> p ” s f\n”.strip
=> “s f”
pry(main)> p “\0 s f\0”.strip
=> “\u0000 s f”
“`

##参考

https://docs.ruby-lang.org/ja/latest/method/String/i/strip.html

元記事を表示

OTHERカテゴリの最新記事