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

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

BioconductorのAnnotationDbiパッケージの中身のsqliteデータベース取り出してをRubyなど他の言語で利用することを考える

## はじめに

 生命科学のコンピュータによる解析では、R言語が広く使われています。Bioconductorプロジェクトが、品質の高いパッケージ群を支えています。Bioconductorでは、基本的なデータ構造について共通のものを利用することで、一貫したシステムを作り上げています。たとえば、ゲノム範囲を扱うパッケージで[GenomicRanges]()というものがあり、これがBioconductorで最も利用されるパッケージの一つになっています。しかし、他の言語でバイオインフォマティックスを行おうと考えている場合、こういった基盤となるパッケージやライブラリが存在しなくて苦労することがあります。

* [Bioconductor Top75](http://bioconductor.org/packages/stats/) – もっとも利用されているパッケージ75種類。

 Bioconductorを構成するパッケージの中にはデータベースを扱うカテゴリーがあります。これらはAnnotationDataという分類になっています。

http://bioconductor.org/pack

元記事を表示

preload, eager_load, includesについて

# はじめに
株式会社じげんでエンジニアをしているiLLviAです。

パフォーマンス低下につながる「N+1」問題。これを解消するメソッドとしてActiveRecordには`preload`, `eager_load`, `includes`が用意されています。
これらの各メソッドが「どのような挙動をするのか」「どのような場面で使い分けるのか」など理解せず雰囲気で`includes`を多用していたので、理解を深めるためにまとめてみました。

# 関連付け
`Article`は、中間テーブル`ArticleTag`を介して「Ruby」「JavaScript」「PHP」などの複数の`Tag`と紐づいています。
### **Model**

“`ruby
class Article < ApplicationRecord has_many: :article_tags has_many: :tags, through: :article_tags end class Tag < ApplicationRecord has_many: :article_tags has_

元記事を表示

【Ruby のまずいコード】二乗和

# お題

数値配列の要素の 2 乗の和を返すメソッドを定義しよう。

# コード

“`rb
def square_sum(values)
values.inject(0){ |sum, value| sum + value ** 2 }
end
“`

# 改善

もっと簡素に書けます。

総和を求めるのに専用のメソッド [Array#sum](https://docs.ruby-lang.org/ja/3.0.0/method/Array/i/sum.html) を使うとよいのですが,

“`rb
def square_sum(values)
values.map{ |value| value ** 2 }.sum
end
“`

などとせずとも,`sum` のブロック付き用法で,

“`rb
def square_sum(values)
values.sum{ |value| value ** 2 }
end
“`

と書けます。

番号指定ブロックパラメーターの導入された Ruby 2.7 以降なら

“`rb
def square_sum(valu

元記事を表示

「ロジックをモデルに移す」よりシンプルなファットコントローラの解消法【個人開発で学んだこと】

# 記事を読むのにかかる時間
約10分

# 結論
コントローラの記述が膨れ上がってしまう、いわゆる**「ファットコントローラ」**について、
最もオーソドックスな解消法として挙げられる「ロジックをモデルに移す」よりシンプルなのは
**「テーブル設計を工夫し、そもそもコントローラに何も書かなくて良い状態を作る」**
ことだと思います。
今回、個人開発でその体験ができたので共有します。

# この記事から得られること
実装の前段階にあたる**テーブル設計**を工夫することで
コードをシンプルにする方法を一つ知ることができる。

# 必要なRailsの予備知識
・一般的なCRUDのアクション
・多対多の関連付け(`has_many :through`とか`belongs_to`)の概要
・enum

# 目次
[結論](#結論)
[開発したサービス](#開発したサービス)
[テーブル設計で工夫したこと](#テーブル設計で工夫したこと)
[詳しく](#詳しく)
[まとめ](#まとめ)
[最後に](#最後に)

# 開発したサービス

https://bachelor-derby4.herok

元記事を表示

「点字」と「2進法」ッ!この世にこれほど相性のいいものがあるだろうかッ!?

# この記事について

 この記事は、Qiita Advent Calendar 2021[「Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-」](https://qiita.com/advent-calendar/2021/ruby-challenge)の 2 日目の記事です。何も考えずに空いているところに入れたら改訂版チェリー本の発売日でした。記念すべき日を私ごときが取ってしまい申し訳ありません…

[点字メーカープログラム PR (Qiita Advent Calendar 2021 12/02) by nodai2hITC · Pull Request #2 · JunichiIto/tenji-maker-challenge](https://github.com/JunichiIto/tenji-maker-challenge/pull/2)

# 方針

 まずタイトル(はいそうですジョジョ4部です)にある通り、点の有無で情報を表す「点字」は、「2進法」と非常に相性がいいのではないでしょうか。点の有無をそのまま 1・0 として置き換えることで、点字

元記事を表示

点字メーカープログラムを書いてみる

https://github.com/JunichiIto/tenji-maker-challenge

https://green.adam.ne.jp/roomazi/kunreisiki.html

http://www.naiiv.net/braille/?tenji-sikumi

“`markdown
Run options: –seed 9979

# Running:

……

Finished in 0.001547s, 3878.4745 runs/s, 3878.4745 assertions/s.

6 runs, 6 assertions, 0 failures, 0 errors, 0 skips
“`

### 点字メーカープログラム、試作(いくつかの問題がある)

“`ruby
# frozen_string_literal: true

class TenjiMaker
def to_tenji(*text)
beta = text.to_s.split.join

if beta.match?(/”A”./)

元記事を表示

【IT業界未経験】テックキャンプからエンジニア職に就職するまでの記録

#はじめに
2021年3月から学習を始めて内定をもらうまでの記録をまとめました。
参考にして頂けれる所とこれは参考にならないなど反面教師にして頂ければ幸いです。

| 章 | 内容 |
|—|—|
|簡単な経歴|[自己紹介](https://qiita.com/N396184501/items/88ac98c8e83b47df6187#%E8%87%AA%E5%B7%B1%E7%B4%B9%E4%BB%8B)|
|学習から内定までの道のり|[時系列にまとめています](https://qiita.com/N396184501/items/88ac98c8e83b47df6187#%E5%AD%A6%E7%BF%92%E3%81%8B%E3%82%89%E5%86%85%E5%AE%9A%E3%81%BE%E3%81%A7%E3%81%AE%E9%81%93%E3%81%AE%E3%82%8A)|
|転職活動内容|[実績と面接等について](https://qiita.com/N396184501/items/88ac98c8e83b47df6187#%E8%BB%A2%E8%81%

元記事を表示

【RSpec】JSONの値を確認するテスト

##環境
Ruby 3.0.2
Rails 6.1.4.1

##APIのリクエストテスト
gemを使わずにjsonが期待通りに取れているかのテストを書くとこうなる。

“`ruby
describe “GET /api/v1/fruits” do
subject { get ‘/api/v1/fruits’, headers: headers }
let!(:available_fruits1) { create(:fruit) }
let!(:available_fruits2) { create(:fruit) }
let!(:unavailable_fruits) { create(:fruit, :unavailable) }

it ‘旬の果物を返すこと’ do
subject
json = JSON.parse(response.body)
expect(response.status).to eq 200

# 果物が3つあり、そのうち旬の果物が2つ、旬じゃないのが1つ。jsonで取れるのは果物が2つ

元記事を表示

micro:bitをRubyでブラウザだけでプログラミングするプログラミング環境「rbCanvas」の紹介

この記事は「[micro:bit Advent Calendar 2021 – Qiita](https://qiita.com/advent-calendar/2021/microbit)」の2日目の記事です。

rbCanvas
https://rbcanvas.net/
rbcanvas_home.png
([rbCanvas公式ページ](https://rbcanvas.net/index.html) より)

## 1. はじめに
micro:bitを使えるプログラミング言語としては、今までブロック(MakeCode、Scratch3、Smalruby3)、JavaScript(MakeCode)、Python(MakeCode、MicroPython)C/ C++、Swift(Swift Playgro

元記事を表示

Gitサーバーが搭載された楽譜共有WEBサービスを作成した

# 楽譜共有WEBサービスを作成した

## 概要

「楽譜を共有する」サービスを作った。
既存サービスと異なる点

– 基本的にコードで楽譜を記述する
– Gitサーバーが搭載されているので、楽譜の間違いなどを修正することが容易
– アーティスト情報や曲情報を整理できるようになっている
– 例) 「凛として時雨」「TK from 凛として時雨」「Ling tosite Sigure」どれ…?
– 翻訳機能がついている

それを作るにあたって、困ったこと、工夫した点、使用した技術、などをまとめたいと思います。
※語彙力ないです
[alphaTab](https://github.com/CoderLine/alphaTab)様の恩恵が非常に大きいです

## 自己紹介

– 大学3年生
– 都内在住
– WEBエンジニア

はじめまして。私は主にWEB系の開発を行っています。
プログラミングは大学1年生の時にRailsTutorialに入門しました。
今は、RailsとReactをメインで開発を行っています。

## 今回使用した技術

### STAVE Editor

元記事を表示

細かいつまずいたことをメモしておく(11月編)

# はじめに

11月の個人的につまったところのメモになります。
Qiitaに記事にするほどでもないかなというものを自分用にまとめています。

今月は大した作業はなく問題は少なかったです。

# 問題

## 1. なぜか子モデルが作成されず、モデル名_idがないと言われた

“`
class_room.build_member(number: row[:number])
“`

rowはExcelのファイルをhash形式にした各行を表しています。
ここで、class_roomをsaveすると、member_idがないというSQLエラーが出ます。

原因は、row[:number]がinteger型で送られてくるのに対して、numberカラムのバリデーションで`string`になっていたことから`member`の作成ができずに、(エラーは起きるが)class_roomが作成されるため、参照するmemberがないので怒られていた。

“`
class_room.build_member(number: row[:number].to_s)
“`

とすることで解決した。

##

元記事を表示

レガシーシステムからの脱却

# 前書き
昨年に引き続き、今年もKITのアドカレの記事を書いていきます。
……他に話すべきこともないので早速初めましょうか。

# レガシーシステムの闇
私がアサインされたプロジェクトではRailsでWebアプリを開発していました。最初のリリースが行われたのは5年前だったため、古いプロジェクトではありませんでした。
また、実際にそのアプリが動いているサイトにアクセスしてみたりもしましたが、怪しい様子はありませんでした……あくまでユーザ側から見れば…。

## あるとき闇に気付く
環境構築をしていたとき、異変に気付きます。

* CIが数年前から失敗してるけど、設定ミスかな
* 今使ってるRubyが数年前からEOFになってる…
* 更新されないGemfile
* テストどこ…?
* slimファイルでごり押しされたレイアウト

ここから開発チームの戦いが始まりました。

### 1. CIが何年も前から失敗している
CIツールのバージョンが更新されていないのが原因でした。
イシューは立っていたものの、誰もその問題に対処していませんでした。

### 2. Rubyのバージョンが古い
R

元記事を表示

【初心者向け】MechanizeでJavaScriptの箇所を読み取れない

###■環境
・Windows10(64bit)
・Ruby 2.7.4
・Rails 5.2.6
・Mechanize 2.8.2
###■MechanizeでJavaScriptの箇所を読み取れない
####状況
Railsアプリケーションでgem「Mechanize」を使用し、Webスクレイピングを行っている。
しかし、HTMLファイル内のJavaScriptの箇所だけ読み取れない(パースできない)。
####原因
MechanizeはJavaScript未対応
####対処1
MechanizeではなくSeleniumなどを使用

https://iwathi3.hatenablog.com/entry/web_scraping_Ruby_Selenium

####対処2
JavaScriptが行うはずの処理をRubyで置き換える。
ただし、そのためにはJavaScriptの内容を読み解く能力が必要。

https://www.ownway.info/Ruby/mechanize/against_javascript

####対処3
HTMLファイル内のscriptタグを削

元記事を表示

文字列をランダムなストリームに変換する

与えられた文字列をバラバラにして、ランダムに並び替えて出力する Enumerator を返すメソッドというものを考えてみましょう、と思ったのですが…

まずは、愚直に1文字ずつ取り出す仕方を考えると、文字列を配列に変換して、`Array#delete_at`を使うかなと。こんな感じ。

“`ruby:random_stream1.rb
def random_stream1(str)
tmp = str.chars
Enumerator.new do |y|
tmp.size.times do
y << tmp.delete_at(rand(tmp.size)) end end end str = "Ruby is smart programming language!" stream1 = random_stream1(str) stream1.to_a.join #=>“rlg uin!yaR rsgansbae tugmmamrop ig”
“`

それよりも、便利メソッド`Array#shuffle`を使えば、もっと簡単か。せっ

元記事を表示

【Ruby のまずいコード】除算の落とし穴

# お題

体重と身長だけから算出されるおおざっぱな肥満度の指数として BMI(Body Mass Index)というものがありますね。
体重を $w$ kg,身長を $h$ m とすると,

“`math
\textrm{BMI} = \frac{ w }{ h^2 }
“`

と表されます。18.5 以上 25 未満が標準だそうです。

では,体重を kg で,身長を cm で与えると BMI 値を返すメソッドを定義してみましょう。上の式では身長の単位は m ですが,cm のほうが扱いやすいので,cm にしましょう。すると 10000 を掛けることになりますね。

# コード

ときどき,こういうコード(に類するもの)を目にします。

“`rb
def bmi(weight, height)
10_000 * weight / height ** 2
end
“`

# 問題点

このメソッドは,正確な値を返さないことがあります。
Ruby の除算演算子 `/` は,非除数(割られる数),除数(割る数)がいずれも Integer オブジェクトのとき,普通の商ではなく整商

元記事を表示

Railsである程度実装ができるようになったら

# はじめに
記念すべき DMM WEBCAMP Advent Calendar 2021 :christmas_tree: 1日目を担当します @SawaShuyaです!

Railsで開発を進めていると、3~4カ月ほどで設計から実装まである程度自力で開発できるようになってくると思います!
今回は、railsをある程度自力で書くことができるようになった方向けに、次にどのようなことを学んでいけばいいのかを書いていきたいと思います:shamrock:

構成は
1. rubyを学ぶ
2. railsの開発スキルを磨く
3. 周辺知識を学ぶ
となっておりますので、興味のある部分だけでも見ていただけたらと思います!

# 1. Rubyを学ぶ
railsはすべてrubyで書かれてます。rubyを深めていくことで、これまでは何気なく扱っていたclassやmodule、オブジェクトなどを理解することができ、より効率の良い開発ができるようになります!

では

元記事を表示

技術書書きたいですか?じゃあRe:View使おうね。

# はじめに
ども。僕です。

最近になって技術書を書く機会がありました。そこで、

「あーーーTexで書くのめんどくせー」

とか思ってました。Texって環境構築めんどいし。
Texっぽくてきれいに書けるやつ、ないかなーと調べてみると、

**「Re:View」**

という単語をみつけました。どうやら、同人技術書では多く使われているものっぽい。

こいつを使ってみっか!!
ということで、まとめていきます。

# Re:Viewとは

> Re:VIEWは電子書籍と紙書籍のための、簡潔かつ強力なデジタル出版ツールです。コンピュータ書等の技術書籍(紙・電子)の商業出版や同人出版に利用されています。
引用:https://reviewml.org/ja/

つまり、いろんなテンプレートあって技術書かけるぞ!!ってやつです。
出力形式も色んな種類があって、

– EPUB
– PDF (LaTeX)
– InDesign (IDGXML)
– Markdown
– plain text (TOPBuilder Text Markup Language)

があります。

主に出力するのはP

元記事を表示

点字メーカープログラム

## プルリクエストのリンク

https://github.com/JunichiIto/tenji-maker-challenge/pull/5

## ロジックの解説

– まず、ローマ字を0〜63のコード列に変換し、コード列を整形して出力する方針としました。この(codesの)整形は次で行なえます(左上の点を最上位ビットとする)。

“`rb
codes.map{|e|(‘%06b’%e).tr(’01’,’-o’).scan(/../)}.transpose.map{|e|e*’ ‘}*”\n”
“`

– さてコード列ですが、訓令式ということは(ヂとヅとヲは厳密には訓令式と異なる形となるが)母音と子音を分離できるということです。そこでまず母音と子音の辞書を作成しました。複数の(点字)文字を使う子音もあるので、子音の辞書の値は配列としました。そのうえで、子音の最後の要素の値と母音の値についてビット和を取ったものを(その音素の)コード列としました。子音がYおよびWの場合は別の母音の辞書を使うようにしました。母音を一番下まで下ろす際に、母音によってシフト数が異なるためです。

元記事を表示

Rubyで長文を変数に入れるあれ

いろんな言語扱っていると細かい書き方忘れがちですよね。

`if`ひとつとっても、「`if (…) {…}`だっけ?」、「`if … then … end`だっけ?」、「あれ?`then`いらないんだっけ?」、「最後は`end if`だっけ?」となって、1年ぶりに書く言語でNo資料、NoGoogleで書ける自信がありません。

なので久々に書く言語では、過去に書いたソースを流し見したりして、なんとなくの勘を取り戻したりします。

その時に**「こういうことができた気がするけど、書き方完全に忘れた」**ってのがよく出てきて、rubyでよく忘れるのが**ヒアドキュメント**の書き方です。

“`konnayatsu.rb
json = <<'EOS' { "language": "Ruby" } EOS ``` **ヒアドキュメント**って単語を覚えていればそれでググれば済む話なんですが、この単語が忘れがち。 **<<**を使うことだけは覚えているので**「ruby <<」**とかでググると ```korejanai.rb ary = [1] ary << 2

元記事を表示

gem を作って公開してみた 〜準備編〜

# 0. はじめに
Ruby や Railsの開発を行なっているとアプリケーションの機能拡充をしたりする上でgemを使う方はいるがご自身でgemの開発、公開をしたことがある方もいらっしゃらないかと思います。
その方向けにgemの開発〜公開までのフローについてまとめました。
記事としては以下の3つに分けて説明していこうと思います。 今回は準備編です。

1. 準備編
1. 開発編
1. 公開編

今回は私が公開した以下のgemをベースにお話しします。

https://rubygems.org/gems/ruby_calendar

## 開発環境

私が上記の開発、公開を行った環境は以下の通りとなります。

– OS: Mac
– ruby: 2.5.8
– bundler: 2.2.27

# 1. 準備編
今回の記事では、gemの開発に必要なものについての紹介とgemのビルド(雛形の作成)までを解説していきます。

# 2. gemの開発、公開に必要なもの
開発〜公開に必要なものは以下の通りとなります。

– メールアドレス
– 後述するRubyGems.org(gemの公開して

元記事を表示

OTHERカテゴリの最新記事