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

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

migrationのrollbackの注意点(dafault値の取り扱い)

# TL;DR
migrate後のmigrationファイルを書き換えると、データの値が荒れがち。
rubocopに「直したほうが良い」と言われようとも、migrationファイルは書き換えないのが基本。
(自戒の念を込めて記事化)

# 状況
rubocopで静的解析をかけた時のお話。
こんな表示が出ました。

“`ruby:rubocop実行画面
db/migrate/20210827131348_add_activations_to_users.rb:9:5:
C: Rails/BulkChangeTable:
You can use change_table :relationships, bulk: true to combine alter queries.
“`

「add_columnを何度も重ねずに、add_tableで一括変更してくれ」とのことなので、
そのように変更。

# やったこと

“rails db:migrate:status” => ID確認。
“rails db:migrate:down VERSION=xxxxxxx” => downに

元記事を表示

【Rails】GETでリクエストボディを利用しない方がよい理由

# はじめに

Web APIを開発する場合、必要なパラメータを取得する方法はいくつか存在します。

1. URLパラメータ
1. リクエストヘッダ
1. リクエストボディ

> リクエストの最後の部分が本文です。本文が存在しないリクエストもあります。リソースを取り込むリクエストである GET, HEAD, DELETE, OPTIONS は通常、本文は不要です。サーバー内のデータを更新するためにデータを送信するリクエストもあり、 POST リクエストでよくあります (HTML フォームのデータを持つ)。

参考: https://developer.mozilla.org/ja/docs/Web/HTTP/Messages#body

# GETでリクエストボディを利用したらどうなるか

そもそもGETメソッドはリソースを取り込むリクエストであるため、リクエストボディを用いなくても要件を実現できるはずですが、実装次第ではリクエストボディを用いることができてしまいます。
ここでは、GETメソッドでリクエストボディを利用した場合のケースを解説します。

## 実例

実際の開発現場で書か

元記事を表示

【Ruby のまずいコード】シーザー暗号

# お題

大文字アルファベット A〜Z のみを用いた文字列を左に 3 シフトさせたシーザー暗号を復号[^fkg]するメソッドを書いてください。

[^fkg]: 復号とは,暗号化した文字列を元に戻すこと。

たとえば「FIREFOX」を暗号化するとします。
暗号化ではアルファベットを左に 3 シフトさせるので,

“`
A B C D E F G H I …
“`

の系列を見ると,F は C に変換すればいいと判ります。
他の文字も同様にすると最終的に暗号文「CFOBCLU」が得られます。

作りたいメソッドはこの「CFOBCLU」を「FIREFOX」に戻すものです:

“`rb
p decode_caesar(“CFOBCLU”) # => “FIREFOX”
“`

# コード

“`rb
def decode_caesar(coded)
coded.chars.map{ |char| (char.ord + 3).chr }.join
end
“`

文字ごとにバラバラにして,文字のコードを取得し,3 を足してそれをコードとする文字を得たあと,結合して返してい

元記事を表示

mruby で特殊変数 `$!` を使えるようにするには? (脳内妄想・アイディア段階)

mruby には特殊変数である `$!` が実装されていません。
また `rescue` / `ensure` 中に C 空間からエラーを直接取得する、CRuby にある `rb_errinfo()` 関数のようなものもありません。

`mrb->exc` が利用できるだろうと考えたこともありますが、`rescue` / `ensure` ブロックの中では仮想機械のスタックやマシンスタックに一時保存されて `mrb->exc` は空っぽになってしまいます。

どのようにしたら実装できるかについて頭の中で考えていることを書き留めてみようと思います。
なおあくまでも脳内妄想であり、実際に試したわけでも現在取り組んでいるわけでもないことを明言しておきます。

## やること① 特殊変数の仕組みを使えるようにする

まず、mruby には特殊変数のための仕組みそのものが実装されていません。
どういう事かと言うと、`$!` どころか `$0` だったり `$~` だったりがまるっきり機能しません。

`bin/mruby` でも `$0` が使えるでしょと思ったそこのあなた、mruby だとそ

元記事を表示

RubyMineをさらに便利にするプラグインたち:2021年版

# はじめに
[Ateam Commerce Tech Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ateam-commerce-tech)の20日分です。
本日は@hibiheionが担当します。
業務では主に自転車ECサイト[cyma](https://cyclemarket.jp)のバックエンドの機能をRailsで書いています。

# RubyMineとのかかわり
RubyMineはJetBrainsが提供しているRubyが得意なIDEです。
cymaのバックエンドは数年前にRailsへリプレースしたのですが、その頃から愛用しています。
最近はTypeScriptやReactといったフロントエンド系の開発への関わりも出てきてRubyMineではつらいのではないかという懸念もあったのですが、そういったものに対してもコード補完などは効いて問題なく開発できました。
このあたりは多彩なIDEを作っているJetBrainsの面目躍如といったところかもしれません。

# RubyMineのプラグイン

元記事を表示

教員からエンジニアになってみて

## 前職について
前職は小学校教員をしていました。
1日の流れとしては、朝7時半には学校に着き、朝からせわしなく過ごすことも多かったです。
朝の7時50分には教室で、子どもたちがやってきた宿題を丸付けしたり子どもの対応など。
そこから子供たちが帰る3時、4時まで働き、そこから会議や保護者対応や明日の授業準備など。
普段帰る時間は19時ごろでした。縛られている時間は多かったかなと思います。
## エンジニアになろうと思ったきっかけ
このまま教員を続けるか迷っていたことや昔からパソコンが好きなのもあり、働きながら初めは独学でHTMLやCSSのプログラミングの勉強を始めました。
やっているうちにとても楽しくなり、毎日勉強をしていました。転職を考えはじめたのですがどのレベルまでいけば転職ができる、実務ができるのかわからなくて不安だったので、オンラインスクールにも通いました。そのスクールでrailsを学ぶことができ、課題もこなし、実際エンジニアとして働いている人からのコードレビューももらい、自信もついたのでエンジニアに転職しようと決めました。
## エンジニアとして働いてみた感想
エンジニアに

元記事を表示

環境構築の素人がRailsの環境をWIndows11PCに作ってみた

この記事はエイチーム引越し侍 / エイチームコネクトの社員による、[Ateam Hikkoshi samurai Inc.× Ateam Connect Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/hikkoshizamurai-connect) 20日目の記事です。

# はじめに
僕は環境構築が素人なphperです。
そんな僕がそろそろRuby on Railsでも覚えようかなと思い立ち、環境を用意した中で、環境構築をよくわかっていない素人だからこそ簡単な事にハマってしまいました。
そんな悲しみを1人でも減らすため、僕と同じような素人が何となく環境を作る事ができるようにお手伝いできたら幸いです。

# 調べるにあたっての不安
まず環境構築をしようと調べる中で、Windows11での環境構築に関する記事はあまり見つからないのではないでしょうか?
リリースされてから、まだそれほど期間もたっていないので当然といえば当然ですね。
でも安心してください!
僕がやってみた所感なのですが、先人がWindows

元記事を表示

Rails 6.1 の Renderable objects で薄い View をお手軽に脱 ERB する

こんにちは。 Qiita Team の開発に参画している @tomoasleep です。
巷では、Rails 7 で盛り上がってますが、今回は Rails 6.1 で導入された Renderable objects についての紹介と、開発での応用例について話していきたいと思います。

## Rails 6.1 で `render` に `#render_in` を実装したオブジェクトを渡せるようになった

Rails 6.1 では以下のように、View や Controller の render メソッドに `render_in` を実装したオブジェクト (Renderable object) を渡すことができるようになりました。

“`erb

Header

<%= render HelloComponent.new %>
“`

“`ruby
class HelloComponent
def render_in(view_context)
# view_context を介して helper method などの view で使える method

元記事を表示

参照の値渡しについて

# はじめに

Rubyist Magazineでは、「参照の値渡し」が解説されています。

> Rubyist Magazine
> [値渡しと参照渡しの違いを理解する](https://magazine.rubyist.net/articles/0032/0032-CallByValueAndCallByReference.html)

ただ、具体的かつ簡単なコードを題材にして理解したかったので、ざっくりと調べてみました。
(初学者が書くことなので間違い等があると思いますが、参考までにご覧ください)

# 不思議の共有

まず、「参照の値渡し」の前に、事情をよく分かっていない方にとっては不思議な事象を紹介します。
「参照の値渡し」を学びつつ、この不思議を解き明かしていきます。

“`rb
irb(main):001:0> array = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> array2 = array
=> [1, 2, 3]
irb(main):003:0> array[0] = 100
=> 100
irb(main):004:0>

元記事を表示

【Rails】Gemfileのgemバージョン指定

####初めに
Gemfileにgemを記入する際に、バージョン指定の書き方がいまいち理解できていなかったので、まとめてみました。

####gem記入方
“`
gem ライブラリ名 ,バージョン
“`

####バージョン指定

◆“1.0.0“
バージョンを固定。

◆“>= 1.0.0“
1.0.0以上のバージョンが必要。

◆“>= 1.0.0, < 2.0.0`` 1.0.0以上、2.0.0未満のバージョンが必要。 ◆``~> 1.0.0“
1.0.0以上で利用可能で、1.0.9などは問題なく、1.1にバージョンが上がると利用不可になる。

◆バージョン指定無しの場合は、常に最新版をインストール。

####参考記事
[【Rails】Gemfileのバージョン指定の書き方](https://blog.yuhiisk.com/archive/2017/04/24/specify-the-version-of-gemfile.html)

元記事を表示

【Rails】日本語化のやり方

##手順
①gem ‘rails-i18n’をインストール
②デフォルトの言語を日本語に設定
③複数のロケールファイルが読み込まれるようpathを通す
④新しいファイルを作成

####①gem ‘rails-i18n’をインストール

“`
#Gemfile
gem ‘rails-i18n’, ‘入れたいバージョン’
→ bundle install
“`

####②デフォルトの言語を日本語に設定
config/application.rbに
“`config.i18n.default_locale = :ja“`を追加。

“`
class Application < Rails::Application  #以下の記述を追記する  #デフォルトのlocaleを日本語(:ja)にする  config.i18n.default_locale = :ja end ``` ####③複数のロケールファイルが読み込まれるようpathを通す 先程の②と同様にconfig/application.rbに ``` config.i18n.load_path += Dir[Ra

元記事を表示

Ruby: stripe API 使い方 (List all customers)

こちらのページの続きです。
[stripe API 使い方 (List all customers)](https://qiita.com/ekzemplaro/items/ed152ef41f1e81811519)

#Ruby Faraday でカスタマーの一覧を取得#

“`rb:get_customers_faraday.rb
#! /usr/bin/ruby
#
# get_customers_faraday.rb
#
# Dec/19/2021
# ———————————————————————
require ‘faraday’
require ‘json’
require “dotenv”
Dotenv.load
secret_key = ENV[‘SECRET_KEY’]

STDERR.puts “*** 開始 ***”
#
url=”https://api.stripe.com/v1/customers”
#
headers = {“Authorization”:

元記事を表示

環境構築 ~WindowsにShopify-CLIをインストールする~

WindowsのPCにShopify-CLIをインストールするまでの工程を解説します。
今までのShopifyのテーマ改修では[Theme Kit](https://github.com/Shopify/themekit)が使用されていましたが、
Online Store 2.0からShopify-CLIを使用する必要があります。

# 環境構築
Shopify-CLIをインストールする前に

– Ruby(バージョン2.7以上)
– Git

が必要になります。すでにインストールされているのかコマンドプロント/ターミナルで確認してください。
不足している場合はインストールします。

## 確認方法
“`Linux
$ ruby -v
“`
“`Linux
$ git –version
“`
インストールされている場合は、バージョン番号が返ってきます。

“`linux
$ ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x64-mingw32]
“`
“`linux
$ git –version
gi

元記事を表示

【Rails】Twitter APIとLINE APIでジャニーズの私物を特定して、すぐに購入できるサービスを作ってみた!!! PF [gem部分]

#はじめに
PFで**ジャニーズの私物を特定して、すぐに購入できるサービス**を作成したのでまとめます。
あまりにも長くなりそうだったので、4回に分けてまとめています。
今回が最後です使用した`gem`についてまとめます。

#サービスの概要

ジャニーズファンは推しと同じものを日常生活やライブで身につけたいという心理があります。
twitte上にファンの人が私物を特定してツイートをするので、そのツイートをキャッチして、LINEで通知・購入できるサービスになっています。

#なぜこのサービスを作成したか
私物の特定のツイートがされるとすぐファンが購入し、売り切れてしまうことがよくあります。
私自身、私物特定のツイートを発見し、サイトを検索してももう売り切れてしまっていたということが何回もあります。
他のファンよりも早く購入できるサービスがあればいいなと思い、このサービスを作成しました。

##完成したサービス
Webサイトは以下になります↓

https://www.findgoodsofstan.jp/

LINEのQRコードになります。
ぜひ動かしてみてください!!

元記事を表示

【Rails】Twitter APIとLINE APIでジャニーズの私物を特定して、すぐに購入できるサービスを作ってみた!!! PF [LINE API部分❷]

#はじめに
PFで**ジャニーズの私物を特定して、すぐに購入できるサービス**を作成したのでまとめます。
あまりにも長くなりそうなので、今回は`LINE Messaging API`を使用した部分についてまとめます。
❶はこちらです。

https://qiita.com/mm_st/items/4ca1ab54d207effdf3ff

#サービスの概要

ジャニーズファンは推しと同じものを日常生活やライブで身につけたいという心理があります。
twitte上にファンの人が私物を特定してツイートをするので、そのツイートをキャッチして、LINEで通知・購入できるサービスになっています。

#なぜこのサービスを作成したか
私物の特定のツイートがされるとすぐファンが購入し、売り切れてしまうことがよくあります。
私自身、私物特定のツイートを発見し、サイトを検索してももう売り切れてしまっていたということが何回もあります。
他のファンよりも早く購入できるサービスがあればいいなと思い、このサービスを作成しました。

##完成したサービス
Webサイトは以下になります↓

https://www.fi

元記事を表示

【Rails】Twitter APIとLINE APIでジャニーズの私物を特定して、すぐに購入できるサービスを作ってみた!!! PF [LINE API部分❶] (リッチメニューの切り替え)

#はじめに
PFで**ジャニーズの私物を特定して、すぐに購入できるサービス**を作成したのでまとめます。
あまりにも長くなりそうなので、今回は`LINE Messaging API`を使用した部分についてまとめます。

#サービスの概要

ジャニーズファンは推しと同じものを日常生活やライブで身につけたいという心理があります。
twitte上にファンの人が私物を特定してツイートをするので、そのツイートをキャッチして、LINEで通知・購入できるサービスになっています。

#なぜこのサービスを作成したか
私物の特定のツイートがされるとすぐファンが購入し、売り切れてしまうことがよくあります。
私自身、私物特定のツイートを発見し、サイトを検索してももう売り切れてしまっていたということが何回もあります。
他のファンよりも早く購入できるサービスがあればいいなと思い、このサービスを作成しました。

##完成したサービス
Webサイトは以下になります↓

https://www.findgoodsofstan.jp/

LINEのQRコードになります。
ぜひ動かしてみてください!!

元記事を表示

Rubyで画像からテキストを認識する

# はじめに
テキストでいっぱいの画像があり、わからなくても意味はまだ知りたいと想像してください。その時にどうすれば良いですか。翻訳ツールを利用すると思い付きますね。翻訳したいのにどのように書かれているのかわからないので、その際に画像からテキストを取得する方法が必要になります。
それで今日はRubyで画像から文字を認識するを紹介したいと思います。
# 実装

画像からテキストを認識するため、`ImageMagick`と`Tesseract`を使います。
**ImageMagick**: Rubyに画像処理ツールです。

“`
# インストール(MacOS)
brew install imagemagick
“`

**Tesseract**: 光学式文字認識を使用してテキスト認識ツールです。現在、多くの言語をサポートしています。

“`
# インストール(MacOS)
brew install tesseract
# training dataはどこで保存しているか確認するコマンド
brew list tesseract
“`
training dataフォルダで画像からテキス

元記事を表示

RubyのC拡張でサブディレクトリに配置したCファイルを使いたい! ー symbol lookup error を回避する

## はじめに

RubyのC拡張でバインディングを作成する場合、`ext/fooba` にCファイルを配置する。伝統的なRubyのGemはこのディレクトリにフラットにCファイルを展開するようだ。けれども、サブディレクトリを使いたい場合がある。具体的には Git submoduleなどで、バインディング先のCのライブラリを `ext/foobar` に配置してバージョン管理したいような場合だ。

その場合、`$INCFLAGS` や `$VPATH` を利用するという方法がよく紹介される。

“`
INCFLAGS << " -I$(srcdir)/libFooBar" VPATH << " $(srcdir)/libFooBar" ``` しかしこの方法は一見すると`rake compile`が成功するのだが、いざテストを実行すると、と symbol lookup error が発生する。そして `ldd` をしても特に足りない共有ライブラリなどはない。どうすればいいのだろうか? ## どうればいいのか? 一つの方法 インターネット上を探してもそれほど回答は多くない。

元記事を表示

【初心者向け】Ruby の Hash#each はブロックに何を渡す?

# 質問

Ruby の `Hash#each` はブロックに対して何を渡すか。

# 回答

うわー,これまたチョー初心者向けの質問やなあ,各要素のキーと値のペアに決まっとるやん。
だってほら,たとえば

“`rb
food = {morning: 3, evening: 4}

food.each do |time, amount|
p [time, amount]
end
# => [:morning, 3]
# [:evening, 4]
“`

ってなるやんか。

# 更問

その「キーと値のペア」ってどういうこと?
たとえば次のコードの結果はどうなる?

“`rb
food = {morning: 3, evening: 4}

food.each do |x|
p x
end
“`

# 回答

げっ,二つ渡されてるのにブロックパラメーターを一つしか書いてないときって,ええと・・・。
リファレンスマニュアルの「[ブロックパラメータの挙動](https://docs.ruby-lang.org/ja/3.0.0/doc/spec=2fcall.html

元記事を表示

unvt/equinox コンポーネントレビュー

これは[ベクトルタイル Advent Calendar 2021](https://qiita.com/advent-calendar/2021/vt)の第19日目です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102082/0eedf77c-fe41-825d-fb58-552673e29507.png)

– 地図に自由を
– データに愛着を
– 現場に向かって

をビジョンとして進めている国連ベクトルタイルツールキット(UNVT)ファミリーですが、特に現場に向かって前進するときに重視しているのが Raspberry Pi の活用です。

なお、UNVTを用いる場合のサーバー選びについては、[サーバーの選び方 – ベクトルタイルをどう配備するか
](https://docs.google.com/presentation/d/1FFal8xxbGbSJrjk8CViYcsAXv9VfXdO9eGawKgdpuGo/edit?usp=sharing) も見ていただけると嬉しいで

元記事を表示

OTHERカテゴリの最新記事