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

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

ぐるなび、食べログ、Rettyから飲食店リストを取得APIの構築

## 概要
飲食店情報を取得するAPIを構築する

## 実装

### はじめに
https://qiita.com/itaya/items/0cd39400e274b926d5be
https://qiita.com/itaya/items/d6918a17d9f546a4ea60
https://qiita.com/itaya/items/52dcc8a38c16c0a48d1a
これらの記事で作ったコードをAPIとして実装するので、こちら読んでない方はぜひ読んでください。

### 情報取得用クラス作成
飲食店情報取得クラスを作成といっても、上記で記載していた記事のものをクラス化するだけです。
`gnavi_crawler.rb`
“`rb
require ‘uri’
require ‘nokogiri’
require ‘kconv’
require ‘net/http’
require ‘uri’

class GnaviCrawler
def main(area, keyword)
area = URI.encode_www_form_component(a

元記事を表示

Docker で Rails と OpenSearch を連携させる【環境構築】

# はじめに

docekr-composeを使ったRailsアプリケーションにて
OpenSearchを利用するための開発環境 構築手順をまとめます。

## 方針

下記2点の理由から、gem `elasticsearch-rails` を使ってRailsとOpenSearchを連携させます。
– rubyとopensearchを使ったクライアントは2022/12/11時点では公式に存在しない
– OpenSearch1系はElasticSearchの7.10をサポートしている

# 実行環境

“`config: バージョン情報
Docker: 20.10.14
docker-compose: 1.29.2
ruby: 2.7.6
rails: 6.0.5
OpenSearch: 1.3.6
“`

## 前提

– docker-composeでrailsが構築できていること
– 検索として扱うModelが存在し、レコードを持っていること
– 今回は例として`Book`Modelを使用

# 開発環境の構築

## OpenSearchをdocker-compo

元記事を表示

ruby.wasmでrequire_relativeを使えるようにしたい

# 背景

[ruby.wasm](https://github.com/ruby/ruby.wasm)というRubyのランタイムをWebAsssemblyにコンパイルした実行環境があります。
これを使うとブラウザでRubyスクリプトを実行出来ます。
実際にいくつかのアプリケーションが作られ、次のページで公開されています。

https://github.com/ruby/ruby.wasm/wiki/Showcase

具体的にブラウザでRubyスクリプトを動かすには、たとえば、次のようにscriptタグにインラインでRubyスクリプトを記述します。

“`html




“`

または次のようにscriptタグの

元記事を表示

【Rails】gemを使わずに 楽天Apiを動かしてみよう:後編【ハンズオン】

この投稿は、
[DMM WEBCAMP mentor Advent Calendar 2022](https://qiita.com/advent-calendar/2022/infratop_mentor)
の投稿12日目のエントリーです。

11日目は @takumi3488 さんで
[【CSS】テキストの下線(アンダーライン)を太くしたくないですか?僕はしたいです。](https://qiita.com/takumi3488/items/074a995cb4a5313991eb)

## 環境と前提

– ruby 3.1.1
– Rails 6.1.7

https://qiita.com/tomoaki-kimura/items/635b7f136a9967b457b4

↑こちらからの続きとなります。

Apiの理解が・・・という方は是非前編で手を動かしてみて下さい。

## 1.Railsでアプリを作る

### 準備

準備は、 `rails new` をやる準備が整っている前提で進めていきます。

“`bash:bash
$ rails _6.1.7_ new ra

元記事を表示

Cloud FunctionsのCloudEvent関数でRSpecする

この記事は、[Ateam LifeDesign Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ateam-life-design) カレンダー1の13日目の記事です。

# CloudEvent関数でRSpecがしたかった
Cloud FunctionsのCloudEvent関数のロジックに手を加える機会があったのですが、本番へデプロイするまで動作確認をする術がありませんでした。

CloudEvent関数への改修は初めてでしたので、普段業務で使用しているRSpecでテストコードを書いて安心してリリースが行えるようDockerでのテスト環境の構築から行いました。

この記事ではCloudEvent関数でのRSpecを使ったテストコードの記述例が当時見られなかったので、備忘録を兼ねて書き残したいと思います。

# CloudEvent関数のRSpecの書き方
以下のようなCloudEvent関数を例とする。
内容としてはeventデータが存在したときにFirehoseへデータレコードを配信ストリームに書き込むと

元記事を表示

Rails RuboCop

## はじめに
チーム開発ではコードの規約が大切になります。

規約がなかった場合、「僕はインデント幅2が好きだから2にしとくね」「僕はインデント幅100が好きだから100にしとくね」みたいな感じになってコードの可読性が落ちたり、思わぬエラーを引き起こしたりします。

そのような規約を暗黙の了解ではなく、自動的に適用させられたら嬉しいです。
そんな時に役立つのが“`RuboCop“`です。

## RuboCopとは
Rubyのリンターです。Javascriptだと“`ESLint“`が有名だと思います。
解析するだけでなく、フォーマッターの役割もしてくれます。

#### セットアップ
Railsに導入するものとします。“`Gemfile“`に以下のgemを追加します(rspecを使わない方は4行目は必要ありません)。
“`
gem ‘rubocop’, require: false
gem “rubocop-performance”, require: false
gem “rubocop-rails”, require: false

元記事を表示

Stimulus 3: リアルなものを構築する

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/handbook/building-something-real

最初のコントローラーを実装し、StimulusがHTMLをJavaScriptに接続する方法を学びました。 それでは、Basecampからコントローラーを再作成して、実際のアプリケーションで使用できるものを見てみましょう。

# DOMクリップボードAPIのラッピング

BasecampのUIには次のようなボタンが散在しています。

![bc3-clipboard-ui.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238166/a07f03d3-3a96-7438-dfc1-3089312c16df.png)

これらのボタンのいずれかをクリックすると、BasecampはURLや電子メー アドレスなどのテキストをクリップボード

元記事を表示

デザイン用gem(bulma-rails)

# bulma-railsについて
デザイン用のgemです。
Github↓
https://github.com/joshuajansen/bulma-rails

# バージョン
Ruby:2.7.7
Rails:7.0.4

# 導入方法
Gemfileに`gem “bulma-rails”`を書き込み、ターミナルで`bundle install`を行う。

インポートするために、app/assets/stylesheets/application.cssに書き込む。
“`ruby:app/assets/stylesheets/application.css
@import “bulma”;
“`
この際、拡張子を`css`から`scss`に変更する。

これで導入完了です。

元記事を表示

アプリにログイン機能を追加

# 参考記事
参考記事というか、deviseについてはここに全部書いてあります。
https://github.com/heartcombo/devise#starting-with-rails

# バージョン
Ruby:2.7.7
Rails:7.0.4

# gemをインストール
これをやらないと使えないです。
“` ruby:Gemfile
gem ‘devise’
“`
保存後、ターミナルに下記のコードを入力
“`
 bundle install
“`

# セットアップ
インストールが完了すると、色々出てくるので指示通りに進めていきます。
※保存を忘れずに
![スクリーンショット 2022-12-13 1.43.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2018163/4c86643b-dc2b-f30d-109a-c87db58aa05a.png)

[1] `config/environments/development.rb`に以下のコードを書く。
“`ruby

元記事を表示

Kolkataの紹介

「私には夢がある。それは、いつの日か、私の4人の幼い子どもたちが、静的型の有無によってではなく、機能そのものによって評価されるプログラミング言語を使うという夢である。」
https://americancenterjapan.com/aboutusa/translations/2368/
私には4人の子供どころか配偶者もいないですが、まあそんなことはどうでもいい話でしたね。
さて、この夢の実現のために動的型付け言語で静的型に負けない処理系を日夜夢見たり実際に作ったりしています。特にRubyというとても最適化が難しい言語仕様だが、なぜか処理系がいっぱいある言語を主にターゲットにしています。実装が難しい言語をみんなが工夫して優れた処理系を生み出していて楽しいです。
さて今のところ一番大きな成果は抽象解釈(Abstract Interpretation)と言う技法を使ってコンパイル時に型を推定したりエスケープ解析をしたりするプログラムを作ったことです。抽象解釈はとても強力な技法で多くのRubyプログラムに静的に型をつけることが出来、静的型付け言語の特権だった高速な実行速度やコンパイル時のエラ

元記事を表示

2つの文字列の末尾に対して一致・不一致を判断するプログラムの実装

# 問題
2つの文字列の末尾の文字を比較して、一致する場合はTrue、
一致しない場合はFalseを出力するプログラムを実装します。

以下の要件を満たすend_otherメソッドを実装しましょう。

– メソッドの引数に、任意の2つの文字列を指定する。
– 引数に指定された2つの文字列のうち、
 どちらかがもう一方の文字列の末尾にある場合は、Trueを出力する
– 上記を満たせていない場合は、Falseを出力する
– 入力した文字が大文字でも小文字でも、同一の文字として処理を行う

##### 雛形
~~~ruby
def end_other(a, b)
# 処理を記述
end

# 呼び出し例
end_other(‘Hiabc’, ‘abc’)
~~~

# 解答
~~~ruby
def end_other(a, b)
a_down = a.downcase
b_down = b.downcase
a_len = a_down.length
b_len = b_down.length
if b_down.slice(-(a_len)..- 1) == a_d

元記事を表示

【Ruby】Gemのインストール先を確認する方法

## 確認方法

次のコマンドを実行することでGemのインストール先を確認できます。

“`terminal
gem environment gemdir
“`

“`terminal
$ gem environment gemdir
/usr/local/bundle
“`

`gemdir`を除いて実行すると以下のような情報が出力される。

“`terminal
$ RubyGems Environment:
– RUBYGEMS VERSION: 3.3.26
– RUBY VERSION: 3.1.3 (2022-11-24 patchlevel 185) [aarch64-linux]
– INSTALLATION DIRECTORY: /usr/local/bundle
– USER INSTALLATION DIRECTORY: /home/ruby/.local/share/gem/ruby/3.1.0
– RUBY EXECUTABLE: /usr/local/bin/ruby
– GIT EXECUTABLE: /usr/b

元記事を表示

[小ネタ]スプレッドシートのデータからSQLを泥臭く作るときにRubyを使ってみる

# まえおき

データメンテなどでスプレッドシートをもとにデータメンテ用のSQLを作る場合があります。
その場合元となるスプレッドシートからデータメンテ用のSQLを作ろうとしても、 `スプレッドシート力(≒エクセル力)` が足りずに余計に時間がかかるぅぅぅRubyだったら速攻なのにぃぃぃ…となってしまう、そんな私向けの記事です。

# 作るもの

たとえば、ユーザ毎にメールアドレスがあるシステムで、データメンテで削除するメールアドレスIDを?のようなスプレッドシートでもらったとしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144344/15fde2ad-ecd4-4050-31f3-f10770862fc1.png)

そこから以下のようなある程度行数の多いデータメンテ用のSQLを作りたいとします。

“`sql

— UserID: 100

— 事前確認
select count(*) from emails
where id in (1,2)
a

元記事を表示

Ruby2.7系のリリース情報と主要な対応履歴へのリンク一覧

# 目的

Ruby2.7系に更新する際に、机上での変更の確認するシーンがあると思う。
一覧情報があると見やすいし、レビュー等の他人に見せる用途にも使いやすいかなと思いまとめてみました。

少なくとも自分は使いたい情報なので、他に必要な方がいらっしゃればお裾分けという感じで。

# Ruby2.7系の情報ソース

– [オブジェクト指向スクリプト言語 Ruby](https://www.ruby-lang.org/ja/)

https://www.ruby-lang.org/ja/

– [Ruby 2.7.0 リリース](https://www.ruby-lang.org/ja/news/2019/12/25/ruby-2-7-0-released/)

https://www.ruby-lang.org/ja/news/2019/12/25/ruby-2-7-0-released/

# Ruby2.7系のリリース情報と主要な対応履歴へのリンク一覧

– メンテナンスフェーズ
– [Ruby 2.7.0 リリース](https://www.ruby-lang.org/j

元記事を表示

Ruby2.6系のリリース情報と主要な対応履歴へのリンク一覧

# 目的

Ruby2.6系に更新する際に、机上での変更の確認するシーンがあると思う。
一覧情報があると見やすいし、レビュー等の他人に見せる用途にも使いやすいかなと思いまとめてみました。

少なくとも自分は使いたい情報なので、他に必要な方がいらっしゃればお裾分けという感じで。

# Ruby2.6系の情報ソース

– [オブジェクト指向スクリプト言語 Ruby](https://www.ruby-lang.org/ja/)

https://www.ruby-lang.org/ja/

– [Ruby 2.6.0 Released](https://www.ruby-lang.org/ja/news/2018/12/25/ruby-2-6-0-released/)

https://www.ruby-lang.org/ja/news/2018/12/25/ruby-2-6-0-released/

# Ruby2.6系のリリース情報と主要な対応履歴へのリンク一覧

– メンテナンスフェーズ
– [Ruby 2.6.0 Released](https://www.ruby-la

元記事を表示

Ruby2.5系のリリース情報と主要な対応履歴へのリンク一覧

# 目的

Ruby2.5系に更新する際に、机上での変更の確認するシーンがあると思う。
一覧情報があると見やすいし、レビュー等の他人に見せる用途にも使いやすいかなと思いまとめてみました。

少なくとも自分は使いたい情報なので、他に必要な方がいらっしゃればお裾分けという感じで。

# Ruby2.5系の情報ソース

– [オブジェクト指向スクリプト言語 Ruby](https://www.ruby-lang.org/ja/)

https://www.ruby-lang.org/ja/

– [Ruby 2.5.0 リリース](https://www.ruby-lang.org/ja/news/2017/12/25/ruby-2-5-0-released/)

https://www.ruby-lang.org/ja/news/2017/12/25/ruby-2-5-0-released/

# Ruby2.5系のリリース情報と主要な対応履歴へのリンク一覧

– [Ruby 2.5.0 リリース](https://www.ruby-lang.org/ja/news/2017/12/25

元記事を表示

Ruby2.4系のリリース情報と主要な対応履歴へのリンク一覧

# 目的

Ruby2.4系に更新する際に、机上での変更の確認するシーンがあると思う。
一覧情報があると見やすいし、レビュー等の他人に見せる用途にも使いやすいかなと思いまとめてみました。

少なくとも自分は使いたい情報なので、他に必要な方がいらっしゃればお裾分けという感じで。

# Ruby2.4系の情報ソース

– [オブジェクト指向スクリプト言語 Ruby](https://www.ruby-lang.org/ja/)

https://www.ruby-lang.org/ja/

– [Ruby 2.4.0 リリース](https://www.ruby-lang.org/ja/news/2016/12/25/ruby-2-4-0-released/)

https://www.ruby-lang.org/ja/news/2016/12/25/ruby-2-4-0-released/

– [Ruby 2.4 公式サポート終了](https://www.ruby-lang.org/ja/news/2020/04/05/support-of-ruby-2-4-has-ended/)

元記事を表示

OSSにコントリビュートするアイデアとRuby gemsでの実践例

# OSSにコントリビュートするアイデア

これまでいくつかの OSS にコントリビュートしてきた中で、**非推奨・廃止コードの対応**は比較的取り組みやすいと感じています。

そこで、今回は Ruby gems での非推奨・廃止コードに対応する例を紹介します。Ruby gems は1つの例であり、同じような対応をする事で他の言語やパッケージなどに応用できます。

主に「OSS にコントリビュートしたいけれど、具体的なアイデアが思いつかない、手段が分からない」といった課題を感じている方が参考になればうれしいです。

# 非推奨・廃止コードとは?

Ruby は一定の後方互換性を保ちつつ、時には非互換な変更を加えながら進化を続けているプログラミング言語です。非互換な変更として、例えばクラスやメソッドの廃止が該当します[^ruby]。

[^ruby]: 非互換な変更により、Ruby ユーザは既存コードの改修を余儀なくされます。しかし、ソフトウェア開発において、最初からすべてを予測する事は不可能であり、時代の変化に合った必要な対応だと考えています。また、Ruby の人気の高さは後方互換性の

元記事を表示

【これが理解できれば中級?】カプセル化を破壊する参照型変数の公開

### はじめに

プログラミングにおける一つの考え方として「カプセル化」があります。カプセル化は上手に使えばプログラムの可読性・保守性など品質向上に役立ちます。しかし、うっかりカプセルの機密性を損なってしまうようなコードの書き方をしてしまうと、せっかくのカプセル化の効用が薄れてしまいます。

この記事では、カプセルの機密性を損なってしまうようなケースとそれによって生じる課題・その解決策の一例をお伝えしたいと思います。

サンプルコードはRubyです。

### カプセル化とは?

Wikipediaには「コンピュータプログラミングで用いられる概念であり、特定のデータ構造とアルゴリズムなどをまとめたソフトウェア複合体の内側の詳細を外側から隠蔽すること」と書かれています。

内部データ構造に対する外部からの想定外のアクセスを防ぐことで誤りが発生し難いプログラムとなることがメリットとして挙げられます。
Rubyの場合、オブジェクト内のインスタンス変数をアクセッサーメソッドを通じてのみデータを操作できるようにする書き方が基本かと思います。

### この記事で伝えたいこと

– カプセル内に

元記事を表示

データ移行をして学んだ3つのこと

## はじめに
はじめまして。
リンクアンドモチベーションでエンジニアをしている田中です。
まだまだ若輩者のエンジニアですが
直近、データ移行タスクに挑戦する機会があり、大事な観点を特に3点学んだのでこの場でアウトプットさせていただきます。

## 構成
– 今回担当したデータ移行タスク
– 躓いたことと学び
– 今後の展望

## 今回担当したデータ移行タスク
今回担当した移行タスクは3点です。移行タスクファイルはrailsを使って作成しています。
– 社内Aアプリケーションから、社内Bアプリケーションへマイクロサービス化に伴ってDB分離するための移行
– 社内Aアプリケーションから、外部Cアプリケーションへマイクロサービス化に伴ってAPI分離するための移行
– 社内AアプリケーションのAテーブルにおいて、AカラムからBカラムへ、カラム名変更に伴う移行

## 躓いたことと学び
特に3点、ベテランエンジニアの方からFBいただく中で学びが大きかったので、ピックアップして書きたいと思います。

### 要件は正しいか 〜移行対象のデータ範囲が決まっていない〜
エンジニア側の要件定義では移

元記事を表示

OTHERカテゴリの最新記事