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

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

データベース設計においてのインデックスの仕組み

# 結論

“`
「テーブルとは別に検索ように最適化された状態のデータ」
“`

データベースの性能を向上させる方法の一つです。

「探すレコードを識別するデータの項目」
「対象レコードの格納位置を示すポインタ」
で構成されており、これを利用してデータの格納位置を特定し、その位置を直接アクセスする事で、表の検索速度を上げることができます。

###Rubyにはindexメソッドがあります。

##indexメソッドの使い方

“`
オブジェクト.index(“検索したい部分文字列”)
配列の場合は、配列.index(“検索したい配列の要素”)
両者とも見つからない場合はnilが返す。
“`

## 終わりに
初学者です。理解しておくべき事と思い記録しました。
実際に使ったことがないので浅い知識だと思いますが、
また使ってみて、わかりやすく説明できたらと思います。

元記事を表示

Ruby 3.1で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について

## はじめに

2021年12月25日に、Rubyの新しいバージョンであるRuby 3.1がリリースされました。
一方、2021年12月2日に出版した書籍「[プロを目指す人のためのRuby入門 改訂2版](https://gihyo.jp/book/2021/978-4-297-12437-3)」(通称・チェリー本。以下、本書)は執筆当時最新だったRuby 3.0を対象にしています。

本書は紙の本であるため、簡単に内容をアップデートすることができません。しかし、何もしないとどんどん内容が古くなってしまい、「本の通りやってみたけど、今使っているRubyとなんか動きが違う」ということになってしまいます。

そこで新しいRubyのバージョンがリリースされて、本書の説明と異なる部分が出てきたときは、毎回ネット上でその差異を説明するようにしています。その説明を読めば、動きが違う部分があってもきっと落ち着いて対処できるはず、という算段です。

というわけで、この記事ではRuby 3.1で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について説明します(第1版との差異ではないの

元記事を表示

類似gemを教えてくれるサイト

gemの選定時に知りたい情報No.1といえば、類似gemの一覧です(当社調べ(調べてない(当社もない)))。

しかしrubyに限らず類似ライブラリの検索というのは意外と難しく、GitHubで検索しようにもキーワードに上手く引っかからないケースが多いです。

導入後に、より要件にフィットする類似ライブラリを見つけたことのある人の割合はなんと三人に五人です(当社調べ(調べてない(当社もない)))。

検索してたら偶然こんなサイトを見つけ、共有したく、この記事を書きました。

(私以外の全人類が知っている情報でしたらすみません)

https://ruby.libhunt.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188872/844d7da3-e87e-b026-a101-766a3a3d8421.png)

類似gemの一覧、及び大雑把な比較情報を出してくれるサイトです。

例えばみんな大好き`Ruby on Rails`ですと、こういう情報が出てきます。

![imag

元記事を表示

Ruby で解く AtCoder ABC 233 D

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。

# 今回のお題
https://atcoder.jp/contests/abc233/tasks/abc233_d

Difficulty: 726
# 解法
今回のテーマ:累積和の応用

“`
入力例 1
6 5
8 -3 5 7 0 -4
“`
まず、累積和を取ります

|入力|累積和|
|–:|–:|
| |0|
|8|8|
|-3|5|
|5|10|
|7|17|
|0|17|
|-4|13|
大人の都合で`0`が入っていますが、通常の累積和とは異なり、単調増加になっていないところが応用編となります。
![20211225a.png](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

【AWS Lambda/CDK】RSSフィードをツイートするBotを作るLambdaファンクション作ってみた

# 作ったもの

特定のTwitterアカウントをRSSリーダBot化するLambdaファンクションを作ってみました。CDKで構成を管理&デプロイします。

https://github.com/kuredev/rss2witter

# 仕組み

– AWS LambdaでRSSフィードを読み込み、ツイートします
– CloudWatch Eventsで定期実行します
– RSSフィードのURLはLambdaファンクションのコードで管理します(他に手軽な方法が思いつかなかった)

# 準備

## Twitterアカウントを準備する

Botとするアカウントを準備し、Developer Portalで以下のキーを取得します。
取得には電話番号の登録や、メールの返信等が必要なようです。

– consumer_key
– consumer_secret
– access_token
– access_token_secret

## RSSフィードを読み込みツイートするRubyスクリプト

全体のコードは[こちらのリポジトリ](https://github.com/kuredev/rs

元記事を表示

Windows10 に Ruby on Rails の環境構築をしよう

## はじめに
3年ほど前、MacでRailsを使って開発を行っていましたが
現在仕事でMacを使用しないため寂しいことにRailsとも疎遠になってしまいました。年末でせっかく時間もあることだし、とWindowsにRails環境を構築してみようと思いたったため、作業ログとして残します。

## PCのスペック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397779/40feda6c-747b-60a2-7f72-fe65541b8b81.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397779/30ce886d-a11d-b7a2-b600-e0b921c2ba70.png)

メモリが圧倒的に低い!
なんとかなるのでしょうか・・・どきどき

## いざ、作業へ
### Rubyを手に入れる!

https://rubyinstaller.org/downloads/

元記事を表示

サンプルコードでわかる!Ruby 3.1の主な新機能と変更点

(注:2021年12月25日21:30時点ではまだRuby 3.1.0リリースのアナウンスは出ていませんが、一足先に記事を公開します。必要なリンク等は正式リリース後に更新します)

## はじめに

???この記事は[Ruby Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ruby) 25日目の記事です???

Rubyは毎年12月25日にアップデートされます。
Ruby 3.1については2021年12月25日に3.1.0が正式リリースされました。

https://www.ruby-lang.org/ja/news/2021/12/25/ruby-3-1-0-released/

この記事ではRuby 3.1で導入される変更点や新機能について、サンプルコード付きでできるだけわかりやすく紹介していきます。

ただし、しっかり内容を確認する時間が取れなかった機能に関してはNEWS.mdの記載内容を転記するだけに留めています :pray:

### 本記事の情報源
本記事は以下のような情報源をベースにして、記事を

元記事を表示

【Ruby on Rails】コントローラーでヘルパーメソッドを使用する方法

そもそもコントローラーからヘルパーを呼び出せないかな?と疑問に思ったので調べてみた。

# メソッド先頭にview_contextをつけるだけ
結論、コントローラーで「view_context」をつけるだけ。

“`app/helpers/sample_helper.rb
module SampleHelper
def helper_method
# 処理の内容
end
end
“`

“`app/controllers/sample_controller.rb
class SampleController < ActionController::Base def index # 呼びたい箇所で、先頭にview_contextをつけるだけ view_context.helper_method end end ``` 意外とあっという間にできて安心した。 ただ、本来はビューのヘルパーを無理矢理呼び出すよりは、 アプリケーション共通処理として切り出すやり方の方が良いよう。 詳細はこちら、[【Ruby on Rails】コントローラーで

元記事を表示

[py2rb] merry christmas

# はじめに
移植やってます
# merry christmas
“`ruby
require ‘pycall’

PyCall.eval(“print(‘merry christmas’)”)

# `+’: no implicit conversion of nil into String (TypeError)
“`
ぐぬぬ、仏教徒に対する嫌がらせがここに。
# Traceback 1:
“`ruby
def normalize_path(path, suffix, apple_p=apple?)
when File.exist?(path + suffix)
“`
`suffix`が`nil`です。
# Traceback 2:
“`ruby
def find_libpython(python = nil)
# python = nil
python, python_config = find_python_config(python)
# python =

元記事を表示

【最終回】点字メーカープログラムの動画レビュー Part 5 – Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-

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

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

第1回〜第4回のレビュー動画はこちらです。

https://qiita.com/jnchito/items/26e8bd7c635e3d32e620

https://qiita.com/jnchito/items/d5f71c9ad90f2890647e

https://qiita.com/jnchito/items/60c0342971d93b174b6b

https://qiita.com/jnchito/items/5fe4d6d64799d22acf1b

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

今回レビューさせてもらったのは以下の20日目と、22日目から25日目の記事です。投稿してくれたみ

元記事を表示

続・勝手に「点字メーカープログラム」を作ってみる~「辛口バージョン」編

#はじめに
これは、[2021年の Ruby アドベントカレンダー2](https://qiita.com/advent-calendar/2021/ruby)の21日目の記事です。
(日が空いていたので、後から飛び込みました)

そして以下、2021年の Ruby アドベントカレンダー2の3日目の記事『[勝手に「点字メーカープログラム」を作ってみる](https://qiita.com/Reichardt/items/57c805989ffecc3e6d55)』の続編になります。

https://qiita.com/Reichardt/items/57c805989ffecc3e6d55

元記事は、「[挑戦者求む!Rubyで点字メーカープログラムを作ってみよう 〜Qiita Advent Calendar 2021〜](https://blog.jnito.com/entry/2021/11/04/092218)」に、勝手に参加したものでしたが、先日、主催者の[伊藤淳一](https://qiita.com/jnchito)さんから追加で以下のような出題がありました。

http

元記事を表示

AWS EC2 AmazonLinux2の中にMySQLを導入したが、起動してくれない時の対策法(自分用メモ)

ローカル環境では、起動できていたMySQLなのですが、AmazonLinux2の配備した途端動かなくなってしまいました。

“`
[ec2-user@ip-10-0-0-165 WorkShare]$ sudo service mysqld start
Redirecting to /bin/systemctl start mysqld.service
Failed to start mysqld.service: Unit not found.
“`
というエラーが発生。

ググった結果、[AWS EC2 AmazonLinux2の中にMySQLを入れたがすんなり起動してくれず、いろいろやってターミナルからMySQLにログインできるようにした話(駄々流し)](https://qiita.com/miriwo/items/e7afd5e1ae0de94f27c2)と同じようような症状であることがわかったので、参考にさせていだきます!

“`
$ yum list installed | grep mariadb
“`
を実行。CentOS7には「MariaDB」がデフォルトで

元記事を表示

【Ruby】コピー時に元データがなぜか上書きされる【浅いコピー】

コピー先の変数の値を書き換えようとしたら、なぜか、コピー元の方まで値が書き変わってしまう謎現象に遭遇し、困ったのでメモ。

謎現象の原因を探るには「浅いコピー」「深いコピー」「参照渡し」という概念について、それぞれ理解しなきゃならないらしい。

なんでお前が書き換わんだよ!!!お前じゃないんだよ!!!!
と3時間ぐらい一人で格闘していたが、
浅かったのは、私の頭の方だった。

# 浅い頭を悩ませる「浅いコピー」
![【Ruby】コピー時になぜか上書きされてしまう【参照コピー、浅いコピー】.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954103/66cc5e01-98a3-a1aa-2964-abd566a3cc5d.jpeg)

浅いコピーというのは、コピー元のオブジェクトとコピー先のオブジェクトがメモリ上の同一の場所を参照することになります。

っておい、なんじゃそれ :rage:

どうやら、参照先は一緒になるので、
片方に変更を加えると、もう片方のデータも変わってしまうらしい、

元記事を表示

malでかんたんなテンプレートエンジンを書いてみた

言語非依存なテンプレートエンジンがあったらいいなと昔からボンヤリ考えていた(切実にほしいという程ではない)のですが、[mal(Make a Lisp)](https://github.com/kanaka/mal)で作ったらどうだろうと思って試しにやってみました。「なんかやってみたくなってやってみた」系の記事です。

Lisp を書くのは年に数回という感じの人が書いていますので、拙いところは大目に見ていただければと思います。

ちなみに去年のアドベントカレンダーではこんなのを書きました。


https://qiita.com/sonota88/items/501f0efa437bc4d53cc7

# できたもの

https://github.com/sonota88/malten

`sonota88/mal` をサブモジュールとして使っているので、 `git clone –recursive …` でクローンする必要があります。

# Ruby版

Ruby 版

元記事を表示

Ruby on Rails 7の主要な新機能・機能追加・変更点

## はじめに

Ruby on Rails(以下Rails)の最新バージョンである7.0(以下Rails 7)が2021年12月15日に[リリース](https://rubyonrails.org/2021/12/15/Rails-7-fulfilling-a-vision)されました。

Rails 7では、JavaScriptフロントエンドの大幅な刷新、CSS BundlingによるTailwind CSSやPostCSSのサポートを含めた、メジャーバージョンアップグレードにふさわしい機能強化が行われています。

本記事では、[Railsの公式ブログ](https://rubyonrails.org/blog/)や[Railsガイド](https://edgeguides.rubyonrails.org/active_record_encryption.html)、GitHubのRailsプロジェクトの[Issues](https://github.com/rails/rails/issues)や[Pull Requests](https://github.com/rails/r

元記事を表示

N+1問題はincludesメソッドで解決できる

現在プログラミング勉強中です。
N+1問題について勉強していて、イメージがつき辛かったので備忘録としてまとめてみます。

#N+1問題とは

N+1問題とは、アソシエーションの関係にあるモデル間で、データベースへのアクセス回数が膨大になってしまうというものです。

例えばTwiiterなどでは、以下の画像のようにtweet毎に投稿者の名前が表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2378833/27280bcb-fe9c-9d63-8b18-ae586b66a5bd.png)

このようなtweet毎に紐づくユーザーネームを取ってくるためには、tweetの数分、usersテーブルにアクセスする必要があります。

具体的にコードを確認します。
まずは事前設定として、以下の表のようにアソシエーションの関係にある、
tweetsテーブルとusersテーブルを設定します。

![image.png](https://qiita-image-store.s3.ap-nor

元記事を表示

クリスマスなのでラズパイでイルミネーションしてみた

クリスマスなのでラズパイとRubyを使ってイルミネーションを作りました

## 完成イメージ
3つのLEDで順次点灯、順次消灯、全部点滅を繰り返します
![IMG_5370.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555267/e12ce94c-2113-1d21-e3dc-8121e02ed454.jpeg)

## 作り方
ラズパイのGPIOとRubyを使ってLEDの制御をしていきます

### 準備編
`pinout`というコマンドを使ってどこのピンが何ていう名前なのか確認出来ます
このコマンドで出てきたGPIO + 数字というピンのところに接続するとラズパイから入出力の制御を行えます。今回はT型GPIO拡張ボードとブレッドボードを使っているのでラズパイから一本一本ピンを接続することはしていませんがイメージはおんなじ感じかと思います

“`
pi@raspberrypi:~$ pinout
~省略~
J8:
3V3 (1) (2) 5V
GPIO2 (3) (4) 5V

元記事を表示

rails7からhelperを使って生成されるtypeがhiddenのinputタグでautocomplete属性にoffが指定される様になった

# 概要

* `hidden_field_tag`
* hidden_field_for_checkbox

などの``を生成するヘルパーがあるのですが、これらを生成する時に強制的にautocomplete属性にoffが指定される様になりました。

“`ruby
# Before
$ hidden_field_tag ‘tags_list’
=> “

# After
$ hidden_field_tag ‘tags_list’
=> “
“`

# 詳細
Firefoxのバグでhidden fieldのautocompleteに意図しないランダムな値が入力される可能性があるとのこと。
例えばCSRF保護などrailsはたくさんhidden fieldを

元記事を表示

関数のまとめ

`puts`のように、関数のように見えるものもメソッドであるRubyに関数はないと思われると思いますが、Rubyには様々な関数があります。

## メソッド

### 定義

#### 定義

“`rb
def method(argument, &block)
end
“`

仮引数の直前に`&`があると、このメソッドに渡されているブロックがProcのオブジェクトとしてこの引数に格納されます。

“`rb
def block_class(&block)
block.class
end
“`

“`irb
irb> block_class {}
=> Proc
“`

Ruby 3.1では、`&`を渡すことで、ブロックを他のメソッドに渡せます。

“`rb
def method(&)
def another(&)
end
end
“`

#### 一行メソッド定義

Ruby 3から使えます。

“`rb
def square(x) = x * x
“`

#### 動的な定義

以下をメソッドにします。

* Method
* UnboundMethod

元記事を表示

RubyとRuby on Railsの違い[3行で要約]

#結論

“`
・Rubyはプログラム言語の一つ。(他にはJava,PHPなど)
・Ruby on Railsはフレームワークの一つであり、言語ではない
・プログラミング言語Rubyで作成されているので、Ruby on Railsという名前になっている。
“`

#Ruby on Railsとは
Webアプリケーションフレームワークの1つです。Railsとも呼ばれています。

###Webアプリケーションとは
ブラウザを介してクライアントにサービスを提供する

##Ruby on Rails 特徴

“`
・MVCアーキテクチャ
・DRY(Don’t Repeat Yourself)
・CoC(Convention over Configuration)
“`

###MVCアーキテクチャ
Model,View,Controller設計法に基づいて開発を行います。

###DRY(Don’t Repeat Yourself)
DRY原則とは、同じこと(ソースコード)を繰り返し記述するのは避けよ

###CoC(Convention over Configuration)
設定よ

元記事を表示

OTHERカテゴリの最新記事