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

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

CC0ライセンスの空白PDFファイル

# はじめに

ライセンス的に問題のない「空白PDFファイル」が欲しかったのですが、すぐに見つからなかったので作りました。リポジトリはこちらです。

https://github.com/kaityo256/blank_pdf

# 空白PDFが欲しい

あるPDFファイルと別のPDFを`pdftk`で結合することを考えます。この時、二つ目のPDFを、いわゆる「奇数ページ起こし」にしたいことがあります。つまり、1つ目のファイル(A)が奇数ページ(例えば3ページ)で終わっており、二つ目のファイル(B)が偶数ページ(例えば4ページ)ある時、そのまま結合して両面印刷すると

“`txt
A1,A2 | A3,B1 | B2, B3| B4
“`

みたいになって読みづらくなります。これを、空白を一枚挟んで

“`txt
A1,A2 | A3,空白 | B1, B2| B3, B4
“`

としたくなりますね。もし空白のPDF`blank.pdf`があれば、`pdftk`を使って

“`sh
pdftk A.pdf blank.pdf B.pdf cat output output.

元記事を表示

サンプルコードでわかる!Ruby 2.7の主な新機能と変更点 Part 1 – 番号指定パラメータ(numbered parameter)

## はじめに
Rubyは毎年12月25日にアップデートされます。
Ruby 2.7については2019年11月23日にpreview3がリリースされました。

[Ruby 2\.7\.0\-preview3 リリース](https://www.ruby-lang.org/ja/news/2019/11/23/ruby-2-7-0-preview3-released/)

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

ただし、Ruby 2.7は多くの新機能や変更点があり、1つの記事に収まらないのでいくつかの記事に分けて書いていきます。
本記事で紹介するのは番号指定パラメータ(numbered parameter)です。

### 本記事の情報源
本記事は以下のような情報源をベースにして、記事を執筆しています。

– [Ruby 2.7.0のリリースノート](https://www.ruby-lang.org/ja/news/2019/11/23/ruby-2-7-0-preview3-released/)

元記事を表示

Fullstaq Ruby を投入してみた(結果編に続く)

こんにちは。

以前見かけた [Fullstaq Ruby](https://fullstaqruby.org/) を試してみようと思います。

## Fullstaq Ruby

### 触れ込みについて

[公式サイト](https://fullstaqruby.org/) の触れ込みでは

> Ruby, optimized for production
> A new Ruby distribution, with the Ruby you know and love, but better.

本番環境向けに調整されたより優れたRubyとのことです。

> Less memory — save 30-50%

メモリ消費を3~5割抑え

> Faster

高速で

> More secure

セキュアで

> Fully open source, based on MRI

MRIベースの完全なオープンソース

とのこと。

### 作者について

サイトをみていると、創設者は Hongli Lai と Fullstaq という会社のようです。
Hongli Lai はそ

元記事を表示

三井住友信託銀行プログラミングコンテスト2019に参加してみた

#感想
AtCoderのコンテスト初参加。結構疲れた。てかムズイ。普通に数学的な発想が求められるんだな〜。
解ければ快感、解けなければうつ病。
https://atcoder.jp/contests/sumitrust2019
以下自分の回答
#A November 30
“`ruby
M1,D1 = gets.chomp.split.map(&:to_i)
M2,D2 = gets.chomp.split.map(&:to_i)

ret = 0

if M1 == 12
if D1 == 31
ret = 1
end
end

if M1 + 1 == M2
ret = 1
end

puts ret
“`
D2が1かどうか判定すれば良かっただけなのに、なにしてるんだろうか。ぐぬぬ。

#B Tax Rate
“`ruby
N = gets.to_i

X = “:(”

a = N * 100 / 108
if ( N * 100 ) % 108 != 0
a += 1
end

if a * 108 / 100 == N
X = a
end

元記事を表示

ログイン中ユーザーの投稿内容をshowアクション以外で出力する方法

SNSっぽいアプリケーションのマイページで、ログイン中ユーザの投稿一覧を取得したかっただけなのにかなり詰まったので備忘録として残しておきます。

アプリの仕様上showアクションやshow.html.erbファイルを使用できず、index.html.erbで表示させるというレア?パターンではありますが。
#環境
Rails 5.2.3
Ruby 2.5.1
gemのdeviseを使用
当記事で使用しているモデル名はplace
#詰まった所
homes/index.html.erbファイル内にてeach doを利用し投稿内容を全部出力したい。

“`homes/index.html.erb
<% @myplaces.each do |myplace| %>
#省略
<% end %>
“`

全部のplaceを取得するのはhomesコントローラー内のindexアクションで

“`:./controllers/homes_controller
@places = Place.all
“`
こう書けばいい。そりゃそうだ。
問題はログイン中ユーザの投稿内容だけを取得したい時。

元記事を表示

誤り検出方法 Checksumについて

ブロックチェーン関連の実装を行なっていた際に、チェックサムで引っかかり「アドレスがinvalidです」と表示されることがあった。その際に、「チェックサムって誤り検出のやつだよな?仕組み知らないわ」となったので、少し調べて簡易的に実装してみた。

## チャックサムとは?
チャックサムとは、データの信頼性を検査するための算出した値のことを言う。この値を元に、データが適切なものであるかを調べることができる

非常に単純な誤り検出方法の1つで、誤り検出の精度は低いが原理が簡単で容易に実装でき、計算コストも低いため、簡単な誤り検出方法として広く普及している

データの誤り検出の方法としてハッシュ関数を利用する方法もあるが、誤り検出のために送信する必要のあるデータのサイズが大きく、処理負荷が大きい。しかし、誤り検出の信頼性はチャックサムを利用する場合よりも高い。

## チェックサムの求め方
チャックサムの求め方については、様々な手法があるが簡単な方法としては、データ列を整数値の列としてみなし和を求め、これをある定数で割った余りを検査用データとするものがある。

### チャックサムの計算の例

元記事を表示

Capybaraで壊れにくいテストを書くために気を付けていること

この記事は[SmartHR Advent Calendar 2019](https://qiita.com/advent-calendar/2019/smarthr) 2日目の記事です。

SmartHRではRuby on Railsを広く採用しています。アプリケーションを長期的にメンテナンスしていくためにテストは欠かせません。特にReact.jsなどを用いた複雑なUIにおいては、単なるAPIのテストやモデルのテストだけではなく「実際にブラウザを操作して、ユーザーが期待する結果を得られるかどうか」をテストすることが重要です。

Rubyではこのようなブラウザを操作するテストを書くために、[Capybara](https://github.com/teamcapybara/capybara)という便利なフレームワークがあり、比較的簡単にテストを書き始めることができます。ただ、この手のテストは保守が大変であったり、手間の大きさからテストが追加されなくなったり、ということがよくあります。本記事では、私がこれまでの経験から学んだ、壊れにくいテストを書くためのTipsを紹介します。

なお、特に

元記事を表示

【ruby】エイリアスメソッドの生成/メソッドの削除 /クラスのネスト

## エイリアスメソッドの定義
独自に作成したクラスもエイリアスメソッドを定義することができる。

`alias 新しいメソッド名 既存メソッド名`とすればok

“`rb:
class User
def hello
‘hello’
end

alias greeting hello
end

user = User.new
p user.hello
p user.greeting
“`

## メソッドの削除

`undef 削除したいメソッド名`とする
objectクラスに定義されたfreezeメソッドを削除する

“`rb:
class User
undef freeze
end

user = User.new
p user.freeze
#=>
Traceback (most recent call last):
test2.rb:7:in `

‘: undefined method `freeze’ for # (NoMethodError)
“`

## ネ

元記事を表示

C++で作るRuby拡張

# はじめに

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

C++でのRuby拡張実装について、つらつらと書いている記事になります。

内容としては[TataraというRubyで型を使えるライブラリを作ってみた](https://qiita.com/S_H_/items/99730236c0e6acfada6b)で紹介した自作Ruby拡張を作るにあたって得たC++でのRuby拡張実装知見の記事になります。

# Ruby拡張って?

皆さんが普段使っているRuby(ここではCRubyのことです)はCによって実装されています。ですので、Cを使ってRubyの拡張機能を作成することもできます。

つまり、Cで既に作成されているライブラリなどをRuby拡張として作成することができるというメリットがあります。CでRuby拡張を実装した場合、Rubyで実装するよりも高速に処理できるケースもあるようです。

実際にCで拡張機能が実装されているgemとしては[sqlit

元記事を表示

rails独学でポートフォリオを作成中

こんにちは!現在転職活動中のバスケンです。
初めての投稿です!

railsの独学を初めて3か月が経ちました。
この3か月間の私の学習経過は下記になります。

**1、progateでhtml,css,ruby,ruby on rails,githubを1周**
**2、ruby on rails チュートリアル2週**
**3、railsでオリジナルのポートフォリオを作成途中**

今日は**3**にて私が作成したポートフォリオの**概要**を説明します。

ポートフォリオ「KuiShare」の概要

私は人の**後悔**を聞いたとき似たような**後悔**が自分に起きないように気をつけるよにします。

このことから、みんなとたくさんの**後悔**が共有できればおのずと注意深くなり先々で自分に起きうる**後悔**を減らすことができるのではないかと考えました。

みんなと気軽に後悔を共有することができるのが今回作成した**「KuiShare」**です。

「KuiShare」のURL「https://kuishare.herokuapp.com/」

**「KuiSha

元記事を表示

RubyでDBMSを実装 字句解析(2日目)

この記事は [RubyでDBMS Advent Calendar 2019](https://qiita.com/advent-calendar/2019/rbdb) の2日目の記事です。

# 本日の概要

初日は特に中身のないechoサーバとクライアントで終わってしまいましたが、
本日から実際にサーバに渡ってきた文字列をSQLとして解析していきます。
本日はその中でも前半のフェーズである字句解析を実装します。

実装は[こちら](https://github.com/gtnao0219/rbdb-ac/tree/master/day02)のGitHubリポジトリに置いてあります。

# 字句解析とは

字句解析とは、ただの文字列をそれ以上分割できない意味のある最小単位(トークン)に分割する処理です。
例として、以下のSQLを想定した文字列をトークンに分割してみます。

“`sql
SELECT id,email FROM users WHERE id=5;
“`

| 文字列 | 種別 | 値 |
|:—–

元記事を表示

Rails × CircleCI × ECSのインフラ構築

簡単なDocker RailsアプリをECSを利用して本番環境に上げるまでのまとめ

* あくまで参考に(実務でそのまま利用できるほどしっかり構築しておりません)

![image.png](https://cacoo.com/diagrams/nEYNTgyozWzsHKqQ-7F3E1.png)

# 前提知識
ECSとは?クラスターとは?サービスとは?タスクとは?って人は
[ECSの概念を理解しよう](http://www.mpon.me/entry/2017/11/19/200000)
などを読んでください。

# Railsアプリ作成
まずはローカルでRailsアプリを作成しましょう。
機能は簡単なものでいいので、scaffoldなどを利用してサクッと作成してしまいましょう。
脳死で作成したい人は下記をご覧下さい。
[Docker Rails Sampleアプリ構築 \- Qiita](https://qiita.com/key_sn/items/6a04dd9a03012a691119)

# AWS上で利用するリソースの作成
コンソール上(or Terraformなど)

元記事を表示

Docker Rails Sampleアプリ構築

適当なRailsアプリを作成するのに**脳死で作成**する

### 前提
* Ruby 2.6.5
* Railsバージョン6.0.1
* MySQL 5.7
* Node.js 8系
* webpacker用のコンテナは用意していない

“`
$ mkdir rails-sample

$ rbenv local [使用するrubyバージョン]

$ git init

$ bundle init
gem ‘rails’のコメントアウトを外す

$ bundle install –path vendor/bundle

$ bundle exec rails new . -B -d mysql –skip-test
-B bundle install をスキップする(お好み)
-d 利用するDBを指定(デフォルトはSQLite)
–skip-test railsのデフォルトのminitestというテストを利用しない場合は指定(お好み)

Gemfileの上書きしていいかどうかは Y でEnter

$ bundle exec rails webpacker:install

元記事を表示

つくってまなぶ★DES☆

この記事は信州大学kstmアドベントカレンダー2019の三日目の記事です。
去年と同様に ~~人不足のため~~ わたくし @arsley の1/2回目の記事となります。よろしくお願いします。

## :pencil: 導入

本記事では私がゼミにて勉強した DES (Data Encryption Standard) とかいう「暗号化方式の1手法として聞いたことはあるけど、どういうものか知らない」という技術について、 ~~得た知識をすぐに他者に伝えマウントをとってしまう若き頃のような気持ちで~~ 実装例を挙げながら説明します。
これを機に暗号分野にホーーーーンの少しでも興味を持っていただければ幸いです:pray:

## :tired_face: TL;DWR

_too long don’t wanna read_
完成品は[こちら](https://gist.github.com/arsley/0566c5a6afb1ffc74861aa977f3d1378)(3分間クッキング)(Ruby実装)(雑README)

「手っ取り早くどういう挙動をするものなのか知りたい」という方はご参

元記事を表示

【Ruby | Rails】Dockerfileの中で”ADD Gemfile ~ RUN bundle install”をするのはやめませんかという話

# 今回の検証環境

– Ruby `2.6.5`
– Docker `19.03.5`
– Docker-Compose `1.24.1`

# はじめに

– Railsの設定を例にすると結構複雑になっちゃうので、今回は単純にRubyをDocker上で使用する例で解説します。
Railsを使用する場合も要点は同じなので適宜読み替えてください。
– 今回は`hogehoge`ディレクトリ配下で作業します。サンプルコード中の`hogehoge`の部分は自由に変更して構いません。

# やめませんか

RailsやRubyのDocker環境構築の解説をしている記事で、`Dockerfile`内で以下のように`ADD Gemfile`~`RUN bundle install`している記事を本当にたくさんよく見かけます。

“`dockerfile:Dockerfile
FROM ruby:2.6.5

WORKDIR /hogehoge

RUN gem install bundler

# ↓こういうの↓
ADD Gemfile Gemfile
ADD Gemfile.lock G

元記事を表示

Railsチュートリアル学習メモ3

## renderの中身はルーティングパスじゃなくてcontrollerの階層を記述する
“`ruby
render(“users/login_form”)
“`

## viewで `<%= @user.id %>` などとやらずにechoする方法
“`ruby
<% if @user.id == @current_user.id concat link_to("編集", "/users/#{@user.id}/edit") end %>
“`
concatを使う。なんでputsとかprintとかできないんだろ。

## 簡単にループ
“`ruby
<% 10.times do concat "cat" end %>
“`

元記事を表示

Railsでmodelに動的なカウンターをつける

### 要約
railsで一覧画面に何かしらの集計値とかフラグを表示したいときがあると思います。
いいね数とかそういうの。
それをcounter_cacheとかでデータとして持たずに、動的に集計してきれいに組み込む方法です。

### やり方
“`ruby
class Post < ApplicationRecord has_many :likes, as: :likable end class Like < ApplicationRecord belongs_to :likable, polymorphic: true end @posts = Post.all.select("posts.*, (select count(*) from likes l where l.likable_type='Post' and l.likable_id=posts.id) as likes_count") @posts.first.likes_count # as xxxがattributeになる => 3
“`

サブクエリ`(select count(*) from li

元記事を表示

RailsのGeneratorGeneratorが便利すぎたので早く帰れる

どうも、株式会社Fusicでプリンシパルエンジニアやってる南部です。この記事は[Fusic その2 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/fusic-2)の2日目の記事です。

## 経緯

エンジニアは怠惰であれ、という言葉は誰が言ったのか、知るよしもありませんが、私もその例にもれず、怠惰な人間です。
ルーチンで作るものは5秒でつくってしまって、本当に頭を使うべきものに時間を割きたいと思うのは私だけではないでしょう。

RailsにはGeneratorをGenerateするGeneratorGeneratorというものがあります。もう何を言ってるのかわかりませんが、とにかくそういうものがあるのです。

これを導入すると、ルーチンワークを5秒で終わらせる夢が叶います。
みなさんも是非お試しください。

## GeneratorGeneratorでGeneratorのテンプレートを作ろう

“`terminal
$ bundle exec rails generate generator nantoka

元記事を表示

Rubyのmap.flatten(1)よりもflat_mapの方が高速な理由をふわっと調べてみる

# 概要

タイトルの通りですが、具体的にソースを見るまで納得できなかったので調べてみました。

## Rubyのソースコードを見てみる

本当はバージョンとかも考慮したほうがいいですが、下記リポジトリの最新版で見てみます。
https://github.com/ruby/ruby

### まずはflat_mapを見てみる

どうやらEnumeratorのソースは`enum.c`にありそうでしたので、flat_mapに関連する箇所を確認してみました。
単純に配列を生成して、yieldした結果を格納しているというシンプルな内容でした。

“`c:enum.c
enum_flat_map(VALUE obj)
{
VALUE ary;

RETURN_SIZED_ENUMERATOR(obj, 0, 0, enum_size);

ary = rb_ary_new();
rb_block_call(obj, id_each, 0, 0, flat_map_i, ary);

return ary;
}

flat_map_i(RB_BLOCK

元記事を表示

JScript 覚書(実践編その壱)

この記事は、[富士通ソーシアルサイエンスラボラトリ Advent Calendar 2019](http://qiita.com/advent-calendar/2019/ssl)の 3 日目の記事です。

# はじめに

@GORO_Nekoです。ご存知の方ご無沙汰してます。初めての方お初にお目にかかります。

えーっと、先にお断りをば一言。

以下は、自分が所属する会社の意向を反映したものでもスタンスを示すものでもなく、単なる一個人の趣味の活動から産まれた記述です。

# JScriptって知ってます?

知らない方、まず[こちらの記事](https://qiita.com/GORO_Neko/items/0be4ddc3b40094d0006f)をご覧ください。

てぇわけでこの記事、じつは単品記事じゃなくて上で紹介した記事「JScript 覚書」の続編デス。

前の記事で「JScript とは何か」および「JScript で Windows の標準入力・標準出力・標準エラー出力を利用する方法」を紹介してみたつもりでいたのですが、読み返してみるとなんか座りが悪い。

使い方の説明

元記事を表示

OTHERカテゴリの最新記事