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

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

パワポの教材をマークダウンに移行した話

## 背景

定期的にプログラミング研修の講師の仕事をしています。その研修で使用する教材はほとんどがパワポで作成されています。受講生に対しては、パワポから出力したPDFを研修のテキストとして配布し、パワポのスライドをプロジェクターに映しながら講義をします。その研修はもう何年も前からこの運用方法で実施していますが、最近はパワポで教材を作ることに色々と不便に感じる部分があり、マークダウンに移行することにしました。この記事はその過程と移行する際に使用したツールや技術に関するまとめ、及び備忘録です。

## パワポで教材を作ることの問題点

パワポでプログラミングの教材を作ることには以下のような問題点がありました。

1. 共同制作が難しい
1. 編集履歴の管理ができない
1. Macユーザーに不利
1. アクセシビリティが悪い
1. ソースコードのコピペが不便

### 共同制作が難しい

講師は私一人ではなく、複数名存在します。そのため、講師間で共同編集できると効率が良いですが、パワポのファイルで教材を管理していると共同制作は難しくなります。OneDriveやSharePointを使うこ

元記事を表示

link_toのソースコード読解

ネットでオープンソースを読解することで良い勉強になるということを見かけたので、Railsでも代表的なメソッドであるlink_toのソースコードを読解してみようとおもいます。そして最後のほうに、具体例をあげてコードを追ってみようとおもいます。
事前に申し上げておきますが、今回の記事はかなり重厚になることが予想されます。また、privateメソッドが多いため読解するメソッドがコロコロ変わりますのであしからず。

それでは実際のソースコードを以下にペーストします。
“`
def link_to(name = nil, options = nil, html_options = nil, &block)
html_options, options, name = options, name, block if block_given?
options ||= {}

html_options = convert_options_to_data_attributes(options, html_options)

url = url_target(name, options)

元記事を表示

背景色をグラデーションする方法

# CSSを使って背景濁をグラデーションにする方法

## background: linear-gradient(-135deg, #FF00FF, #9941D8);プロパティーを使用します。

### 具体的なコードに書き方
“`
form input[type=”submit”] {
background: linear-gradient(-135deg, #FF00FF, #9941D8);
}
“`

### 結論
1.deg値
 角度を表す値で、右回りですと360度、左回りですとー360度と記述します。
上記の-135は時計の7時から8時の方向にグラデーションしていきます。
2.#FF00FF, #9941D8値
 カラーを表す値で、何色から何色にグラデーションしていくか決めることができます。

元記事を表示

【個人開発】「真のナポリピッツァ協会」認定店をサクッと探せるWebサービスをリリースしました。

## はじめに
[おおの](https://twitter.com/ohno_hope3)と申します。
突然ですが、**真のナポリピッツァ**[^1]を食べたくありませんか?
これを使えば**真のナポリピッツァが食べられて感動すること間違い無し**というサービスを開発しました。
![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/804334/fb766782-164b-270b-1fc7-8955e8622296.png)
– ナポリピッツァ好きが**真のナポリピッツァ協会認定店**[^2]をサクッと探したい。
– ナポリピッツァを意識して食べたことがなかった人に**真のナポリピッツァ**[^1]の感動を伝えたい。
– ナポリピッツァ界隈の発展を応援する想いを込めて **『真のナポリピッツァ部』** を開発しました。

**URL:** https://www.napolipizza-club.com/
**GitHub:** https://github.com/shota-hope/True

元記事を表示

ルーティングの指定方法について

ルーティングにおいて

collectionとmenberの違い。
idを特定することができるのがmember
書き方としては下記のようになる。

collection do
post :confirm
end
member do
patch :confirm
end

もしくは
 
  post:confirm, on:collection
  patch :confirm, on:member

と書くこともできる。

元記事を表示

任意の回数繰り返してから次に行く配列の生成

# 任意の回数繰り返してから次に行く配列
次のような配列をRubyのワンクエリで作ろうとして頭を悩ませた。
“`
# それぞれの数字をn回繰り返してから、1ずつ加算し、mまでの配列
[1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5]
“`

## 先に結論
以下を考えました。(もっと良い解答があるようです)
“`
[*1..n].map{[*1..m]}.transpose.flatten

# 例
irb> [*1..5].map{[*1..10]}.transpose.flatten
=> [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10]
“`

### 解説
“`
# ‘*’をつけて配列展開
> [*1..5]
=> [1, 2, 3, 4, 5]

# .mapで1..5のそれぞ

元記事を表示

ヘッダーを透明にし、body要素の上に配置する

# ackground-color: rgba(0, 0, 0, 0);とposition: fixed;を使用してヘッダーを透明にし、body要素の上に配置する

## 具体的な使い方
“`
header {
position: fixed;
background-color: rgba(0, 0, 0, 0);
}
“`
こんな感じになります。
![スクリーンショット 2022-03-03 22.54.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2533976/31485d41-dcd5-484f-ad37-de654db1105f.png)

### 結論
1.position: fixed;はヘッダーを固定するプロパティでbody要素に被せるように配置します。スクロールしてもヘッダーは表示されたままになります。
2.background-color: rgba(0, 0, 0, 0);は4番目の値を0~1で透明度を設定でき、0に近ければより透明になります。1、2、3

元記事を表示

【Ruby】ある与えられた入力を昇順に並び替えて出力する

こんにちは。
早く駆け出したい修行僧です。

今回、paizaラーニング 「背番号順 Ruby編」にて学びがありましたので、
こちらでアウトプットしていきます。
まだ問題を解いていない方は、ここで退出することをお勧めします。

尚、「それは違うよ」など訂正箇所がございましたら、
愛のあるご指摘を頂けたら幸いです。

## :pen_ballpoint: 問題

最初にある数値nが与えられます。
その後、n行の背番号と選手名の文字列が与えられます。
背番号が小さい順に並び替えて出力してください。

## :telescope: コード考察

ここからは一つ一つコードがどのような処理になっていくのか見ていきます。

### 2-1. 最初に数値nを入力できるようにする

“`ruby:main.rb
n = gets.to_i
#=> 5
“`

まずは、`gets`メソッドを使用してサンプルコードを入力できるようにして、変数nに格納します。また、後に繰り返し処理を行うので、この変数nを数値として扱えるように`to_i`を加えます。`gets`メソッドは1行を読み込んで成功したら文字

元記事を表示

Ruby で 数独 の3

# はじめに
https://qiita.com/superrino130/items/d9c83ee3b1b3876688a5

前回の記事で初期値の設定が終わりましたので、判定処理に移ります。

https://ja.wikipedia.org/wiki/%E6%95%B0%E7%8B%AC

入力例は、wikiの数独の問題例を使用します。
“`
5 3 0 0 7 0 0 0 0
6 0 0 1 9 5 0 0 0
0 9 8 0 0 0 0 6 0
8 0 0 0 6 0 0 0 3
4 0 0 8 0 3 0 0 1
7 0 0 0 2 0 0 0 6
0 6 0 0 0 0 2 8 0
0 0 0 4 1 9 0 0 5
0 0 0 0 8 0 0 7 9
“`
# 初期値設定後の状態
“`ruby
require ‘numo/narray’
include Numo

h = w = 9
@banmen = UInt32.zeros(h, w)
@uramen = NArray.cast(Array.new(h){ Array.new(w){ (1..9).to_a

元記事を表示

【Heroku】herokuでRailsアプリをデプロイする際の基本的な手順のまとめ

## 本記事の前提
**使用環境**
– Rails 5.2.6.2
– ruby 2.6.6
– git 2.18.5
– AWS Cloud9

**省略作業**
– Herokuアカウントの登録
– Gitのインストール
– デプロイするアプリの作成

## デプロイする手順
### 1.Heroku CLIのインストール
Herokuの操作をコマンドラインから行えるようにするために、Heroku CLIをインストールしていきます。
以下の公式サイトからご自身のOSに合ったものをインストールして下さい。

https://devcenter.heroku.com/articles/heroku-cli

**AWS Cloud9の場合**
以下のコマンドを全てコピーし、ターミナルに貼り付けて実行して下さい。
“`terminal:terminar
$ curl -OL https://cli-assets.heroku.com/heroku-linux-x64.tar.gz
tar zxf heroku-linux-x64.tar.gz && rm -f heroku-linu

元記事を表示

【Heroku】Rubyバージョンの差異によるエラーの解決

## 発生したエラー
![スクリーンショット 2022-03-03 10.40.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694767/3ce57220-2142-1b6f-ac9e-bbe3be567ed7.png)
git commitしたの後にgit push heroku masterを実行し、アプリをデプロイしようとしたところ、Rubyバージョンが2.6.3のためにheroku-20にデプロイできないという旨のエラー発生した。。

## 解決方法
解決策としてherokuのstackを20から18に下げる方法もあるが、今回はRubyのバージョンをheroku-20に対応している2.6.6に変更することで解決していく。Rubyのバージョンを2.6.6に変更する際の作業の流れは以下のようになる。

1.Rubyバージョンの確認し、Ruby2.6.6をインストール
“`terminal:terminal
$ rvm -v //rvmのバージョンとインストールされていることを確認
$ rv

元記事を表示

【Rails】ページネーション機能の導入

#gem kaminariによるページネーション機能の実装

## 実装の流れ
1. Gemfileにgem ‘kaminari’を追加する。
1. bundle installを実行してkaminariをインストールする。
1. rails g kaminari:configを実行してkaminariの設定ファイルを作成する。
1. rails g kaminari:views defaultを実行してページャで利用するテンプレートを作成する。
1. 該当するコントローラー,ビューにページャを実装していく。

## 1.Gemfileにgem ‘kaminari’を追加する。
“`rails:Gemfile
gem ‘kaminari’
“`

## 2.bundle installを実行してkaminariをインストールする。
“`rails:terminal
$ bundle install
“`

## 3.rails g kaminari:configを実行してkaminariの設定ファイルを作成する。
“`rails:terminal
$ rails g kami

元記事を表示

Rubyで特定の数字を検知するプログラムを実装する

# はじめに
プログラミングスクールでRubyについて学習しています。
これから平日は毎日何かしらアウトプットのため投稿を続ける予定です。
今回は特定の数字が存在するかどうかを判定するプログラムをinclude?メソッドを使用して実装していきます。

# 問題
以下の要件を満たすarray123メソッドを実装します。

・配列内に1,2,3が全て入っている場合は、「True」と出力する
・配列内に1,2,3の全てが入っていない場合は、「False」と出力する

“`Ruby:雛形
def array123(nums)
# 処理を記述
end

# 呼び出し例
array123([1, 1, 2, 3, 1])
“`
include?メソッドについて
[Ruby 3.1 リファレンスマニュアルinstance method String#include?](https://docs.ruby-lang.org/ja/latest/method/String/i/include=3f.html)
[Ruby 3.1 リファレンスマニュアルinstance method Array#

元記事を表示

テキストエリアの高さを行数に合わせて自動で変更する

# cssでheightプロパティー、 値autoを使ってテキストエリアの高さを中身の行数によって自動で変更

## 具体的な使用例
“`
.css{
height: auto;
}
“`

## 結果
![スクリーンショット 2022-03-03 10.59.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2533976/984ee0e1-6299-1f2f-93bd-0d487339d0b0.png)
こんな感じで長い文章でも表示できます。

元記事を表示

rubyにおけるcount,size,lengthメソッドの違い

結論からいうと、配列、ハッシュ、文字列によって異なります。
## 配列のとき
ある条件を満たす要素数を知りたいとき→**count**
単に配列の要素数を知りたいとき→**length, size**countも使える

## ハッシュのとき
ある条件を満たすkeyとvalueの要素数を知りたいとき→**count**
単にKeyとvalueの要素数を知りたいとき→**length, size**countも使える

## 文字列のとき
ある条件を満たす要素数を知りたいとき→**count**
単に文字数をしりたいとき→**length, size**countは使えないです

この結論をもとに話を進めていきます。

## lengthとsize
先ほどの説明からも分かる通り、同じメソッドなんです。やってることが同じです。
実際にコードを打っても同じ結果が返ってきます。

## count
countは文字列以外を除いては、lengthとsizeと同じ働きをします。書き方に多少の差はありますが、同じ動きをしてくれます。
では何が違うのか?length/sizeとcountだと処理速度が

元記事を表示

ridgepoleを導入したのに、” Migrations are pendding “とはドユコト? のときに見る記事

# はじめに

今更ながらrailsアプリケーションに**ridgepole**を導入してみました。

その際に`rails migrate`とは別れたはずなのですが、railsのエラー画面で`”Migrations are pendding”`というmigrationファイルと付き合っていたころの見慣れたエラーに出くわしてしまいました。

別れた次の日にばったりいつもの公園で出会ってしまったカップルのように・・・

どうやら復縁を迫られているみたいです。

そこで、そんな人がそんなときに見る用の記事(migrationと未練を残さずお別れする方法)として、やったことをまとめました。

「そもそも**ridgepole**とはなんぞ?」

という方は、偉大な先人たちがたくさん知恵を残してくれているのでそちらをご参照ください!
(導入まで簡単にできます)

https://qiita.com/piggydev/items/12885fed7135e0443ad5

https://re-engines.com/2017/05/03/370/

# 原因調査
## 1. railsの見て

元記事を表示

limitとoffsetについて

activerecordはrailsを使う際にはよく使われるとおもいますが、コマンドを打ったりコードを書いたりする際にlimitとoffsetをちゃんと知らんかったのでまとめようとおもいます。

## limit
これは名前から分かるかもしれませんね。
引数に数値を渡すことで、指定したレコード数を取得できます。
例えば、
“`
User.limit(2)
# 最初のレコードから2件レコードを獲得される
“`

## offset
これは、特定の位置からそれ以降のレコード数を取得できるメソッドです。
“`
User.offset(3)
# 最初から3件目のレコードから最後までのレコードを獲得する
“`

最後にこの2つを合わせた書き方があるんです。

## 途中から指定した件数を取得
以下のようなコードになります。
“`
User.limit(3).offset(7)
# 最初から7番目のレコードから3件値を取得する
“`
次回は、link_toのソースコードをアウトプットしようと思っていますので重めの内容になるかと思います
以上です。何か間違いがございましたら、ご教示いただ

元記事を表示

Python/RubyのGILはC-Ext実行中は遷移しない

## Python

https://github.com/cielavenir/pybind11_playground/blob/master/sleeptest.py

“`
sleep start
hello # main-thread’s hello can be executed during time.sleep(3)
sleep end
sleep start
sleep end
hello # pybind11_playground.toyclass().sleep(3) blocks executing main-thread’s hello
“`

## Ruby

https://github.com/cielavenir/rice_playground/blob/master/sleeptest.rb

“`
sleep start
hello # main-thread’s hello can be executed during sleep(3)
hello
hello
hello
hello
sleep end
sleep start
hello #

元記事を表示

Ruby 範囲オブジェクトの使い方

# はじめに
先日、範囲オブジェクトを教えていただいたので、使い方を自分なりに学習していこうと思います。

# 環境
ruby 2.6.5

# 範囲オブジェクトの概要

何らかの範囲を表すオブジェクトです。
例えば、
– 数値  1~10
– 日付  2022-3-1~2022-3-10
– 文字列 ”a”~”z”
などを表すことができます。

Rangeクラス。

“`.rb
range = 1..10
puts range.class
“`

“`ターミナル.
Range
“`

# 範囲オブジェクトの書き方
“`.rb
Range.new(1, 5) # 1 以上 5 以下
1..5 # 同上
1…5 # 1 以上 5 未満
“`
数字部分に「nil」を用いることで、「以上」「以下」というオブジェクトを作成することもできます。

# 範囲オブジェクトの機能
### eachメソッド
範囲オブジェクトの最初から最後までの値を1つずつ取り出し、繰り返し処理を行うことができます。
“`.rb
range = 1..10

元記事を表示

ダミーデータを作るときに使うGem “Faker”は、東方Projectにも対応している

クスっとしたのでシェア
ドラゴンボールとかワンピースがあるのはわかるけど……

https://github.com/faker-ruby/faker/blob/master/doc/games/touhou.md

“`ruby
# Random Touhou game
Faker::Games::Touhou.game #=> “Mountain of Faith”

# Random Touhou character
Faker::Games::Touhou.character #=> “Sanae Kochiya”

# Random Touhou location
Faker::Games::Touhou.location #=> “Moriya Shrine”

# Random Touhou item
Faker::Games::Touhou.spell_card #=> ‘Esoterica “Gray Thaumaturgy”‘

# Random Touhou song
Faker::Games::Touhou.song #=> “Faith Is for the

元記事を表示

OTHERカテゴリの最新記事