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

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

Rails5.2で色々やってみる

宮崎勉強会 Advent Calendar 15日目の記事です。勉強会の中では年上の方なので、「枯れた」技術の良さを再確認するという主旨で、私の好きなRubyとRails、そのオススメのgemを幾つか紹介します。(本当はRails6の新機能を紹介する記事を書くつもりでいたんですが、環境構築で手こずって路線変更しています。6を使いたいけど、まだ導入のハードルが高かった…)

今回使用するRailsのバージョンは5.2.4です。vagrant上に構築したUbuntuでコマンドを実行しています。

“`bash

$ rails -v
Rails 5.2.4
“`

まずは、新しいプロジェクトを作成します。今回は `wiki` という名前にしました。生成されたプロジェクトのディレクトリに入って、データベースの初期化とサーバの立ち上げもします。PostgreSQLを指定しているのは、このあとherokuというプラットフォームに載せてみようとしてるからです。

“`bash
rails new wiki –database=postgresql
cd wiki/
rails db:cre

元記事を表示

【Ruby】each文でハッシュを使う

この記事ではRuby 2.6を使っています。

ブログアプリの記事一覧を作るときに、eachでハッシュを使ったので備忘録として記録します。
each文でハッシュを使うときの参考になればと思います。

ハッシュに下記のようなブログのタイトルと記事をもたせます。
今回は

タイトル:初投稿 本文:ブログ始めました
タイトル:こんにちは 本文:さむいですね

の2つの記事です。

“`ruby:blog.rb
blogs = [
{title: “初投稿”, content: “ブログ始めました”},
{title: “こんにちは”, content: “寒いですね”}
]
“`
eachを使って出力させます。
ここで、`blog[:title]`とすることで、`title`をキーとして持った値(1つ目のタイトルの場合`”初投稿”`)が指定されます。

“`ruby:blog.rb

blogs.each do |blog|
puts “タイトル:#{blog[:title]}”
puts “本文:#{blog[:content]}”
puts “——-

元記事を表示

SinatraでOpenID Connect Providerを利用した認証を利用する

# はじめに

SinatraでDex(dexidp/dex, OpenID Connect Provider)を利用した認証を利用するための検証用コードを作成してみました。

[blog.s21g.comの記事](http://blog.s21g.com/articles/1635)では、Sinatraで利用可能な認証モジュールのリストがありますが、現在はメンテナンスされていないライブラリも掲載されています。

最終的には[docs.openathens.netの記事](http://docs.openathens.net/display/public/OAAccess/Ruby+OpenID+Connect+example)のクラスを利用しました。

OpenAPIの本来の主旨からすれば、API-Keyを個別に発行してAuthorization: Bearerの利用をクライアントの要求するのが作法だと思いますが、今回はopenapi-generatorをHTMLコードを扱うWebアプリケーションのスケルトンコード発生器として使用しています。今回は、「生のSinatra使えばいいんじ

元記事を表示

Rails JQuery 動かない

# JQueryはちゃんと書けている。ソースも更新されている。
しかし、狙い通りに動作しない。Javascriptのエラーもでてない。
単純にalert();とかconsole.log();とかやっても反応しない。

全く動かないわけではなく、ページを再読み込みしたときは狙い通りに動く。
ぐぬぬ。

## 理由はturbolinksだった。

“`application.html.erb
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
“`

turbolinksがあるとSPAのような動きをするらしい。(SPAよく知らないが)

>[Rails 4のturbolinksについて最低でも知っておきたい事](https://kray.jp/blog/must-know-about-turbolinks/)
>turbolinksの動作は、すごく大雑把に言うと以下の通りです。
>
>1. リンクのclickイベントをフック
>2. リンク先のページをXHRで取り寄せる
>3. レスポン

元記事を表示

【Ruby】13日の金曜日をお知らせするSlackbotをつくる

##はじめに
DMM WEBCAMP AdventCalendarの13日目を担当いたします、 @chanmio1992 です。
大雑把にいうと、DMM WEBCAMP運営部の中の人の1人です。

Qiitaはもちろん技術系記事を書くのは初めてなので、いろいろ至らない点があるかと思います。
多めに見ていただけますと幸いです。

##やること
タイトルの通り、RubyとSlackAPIを使ってbotを作ります。
以下のことがやんわり理解できます。
・SlackBotの作り方
・Ruby
・gem whenever
・13日の金曜日に「斉藤優里」がトレンド入りする理由

##経緯
弊社では社内のコミュニケーションツールとして、Slackを使っています。
その中で、個人が公私問わず自由に投稿できる場として、 #times という文化があります。
times.pngOpalでrougeを動かそうとしている話

# 3行

* https://github.com/pocke/rouge-opal
* 色々hackを書いた
* まだ動いていない

# Opalとは?

ブラウザで動くRuby

# Rougeとは?

RougeはRubyで実装されたSyntax Highlightライブラリです。
つまり、これがOpalで動けばブラウザのみでSyntax Highlightが行えるようになります。面白そうですね。[^1]

とはいえOpalのことがなにも考えられていないライブラリは、一筋縄では動きません。
というわけでどういうhackをしていったのかを紹介していきます。

# hack

## rougeをrequireするようにする

rougeでは、requireの代わりに`load_relative`や`load_lexer`というメソッドが定義されています。
これらはOpalから使う上で都合が悪いので、代わりにrequireで置き換えます。

具体的には、rougeのリポジトリの`lib/rouge.rb`をコピーしてきて、`load_relative`の変わりに単にr

元記事を表示

[Ruby on Rails5 アプリケーション プログラミング]学習ログ#2[2019/12/12]

<前回([#1](https://qiita.com/CAD-guest01/items/06892b36973fa1e35828))> <次回(#3)>

#目的
### Progateで学んだことをローカル環境で手を動かして復習することで、基礎を固める

#使用する教材
###山田祥寛(2017). RubyonRails5 アプリケーションプログラミング 株式会社技術評論社

#Q.「RubyonRails5 アプリケーションプログラミング」とは?
#A.ProgateのRoRコースを終えた後にするRoRの勉強としておすすめされている本

出典
(Samurai Blog / Ruby on Rails学習本おすすめ6選【入門者〜上級者までレベル別に解説】)[https://www.sejuku.net/blog/110292]


#今日やったこと
##Scaffolding機能によるRails開発の基礎(p64~p102)
[前回](https://qiita.com/CAD-guest01/items/06892b36973fa1e35828)とは異なり、コマン

元記事を表示

こんなメソッドまで?ブロックを受け取るRubyのメソッドたち

# 動機

この記事はもともと[LegalForceさんで行われたイベント](https://legalforce.connpass.com/event/154895/)のために調べ物をしていたのでそれを再利用したものです。
私はRubyの最大の強みの一つはブロックの表現力だと思うのですが、この記事ではそんなブロックを(実は)引数に受け取るメソッド群を紹介したいと思います。

# 本編

## 但し書き

今回はコアクラス(`String`, `Array`, `Hash`)のみに絞って紹介しています。
明らかにブロックを受け取ると思われるもの(例:each系のメソッド)などは除外されています。
その他、明らかに使い途がないと個人的に思われたものも除外しています。

## String

### String#gsub

個人的に意外だったものの筆頭は、`gsub`と`gsub!`がブロックを受け取ることです。以下のように使います。

“`ruby
‘hoge’.gsub(/[aiueo]/) {|match| match * 2 } # => hoogee
“`

これはかなり便

元記事を表示

Windows に Gollum をインストール

WindowsにGollumを入れて実行できるようにしました。WSLとかCygwinは甘えと断じ使いませんでした。

以下の2つ(または3つ)の困難がありました。

1. Ryzen系のCPUでMSYSインストーラが正常動作しない
2. libicuのファイル名がmsysではデフォルトと違う
3. gitlab-gritがWindowsに対応していない

以上の問題の解決法を書いた、gollumインストールの備忘録です。

# 環境を用意

https://rubyinstaller.org/downloads/

ここから、Ruby+Devkit の一番新しいやつを落としてきます。
2019/12/10 のときの最新版(2.6.5-1)でやりました。

そしてインストーラをダブルクリックしてインストール。Pathは特にどこでもいいと思いますが、環境変数に追加したほうがいいかなと思います。

で、最後のMSYSセットアップ起動にチェックを入れて、MSYSのインストールに移ります。で、MSYSをインストールします。

# PATHを通す

* Rubyのbin
* MSYSの/usr/

元記事を表示

アソシエーションの基礎 current_user

#ここでやりたいこと
1. **productを作った人とサイインしている人は常に同じ人物である**
– create アクションをするときにcurrent_idと紐づいたproductを保存したい
2. **ProductモデルとUserモデルとcurrent_userをわかりやすく紐付けたい。下記のコードをアソシエーションを用いて簡単にしたい。**

コメントアウトしているのは最初に僕が1のことをやろうとして試したこと。**この時は=をイコールとして考えていました。**

“`rb
def create
@product = Product.new(product_params)
#current_user.id = @product.user.id
respond_to do |format|
if @product.save
format.html { redirect_to @product, notice: ‘Product was successfully created.’ }
format.jso

元記事を表示

MacへRubyをインストールする際の備忘録

# インストールメモ
## `rbenv` と `ruby-build` のインストール
“`bash
$ brew install rbenv ruby-build
“`

## Ruby をインストール

執筆時点で最新の `Ruby 2.5.6` をインストールする。
補足ですが、Rubyのバージョンは `rbenv install -l` で検索することができます。

“`
$ rbenv install 2.6.5
“`

## `.zshrc` の編集
`rbenv` のコマンドを利用できるように、パスを設定します。
私は、zshを利用しているため、 `.zshrc` に下記設定を追加しました。

“`zsh
export PATH=”$HOME/.rbenv/bin:$PATH”
eval “$(rbenv init – zsh)”
“`

追記後、下記コマンドを実行する。

“`zsh
$ source .zshrc
“`

## Rubyのバージョンを切り替える
MacにはデフォルトでRubyがインストールされているので、今回インストールしたRuby

元記事を表示

VBScriptを作ってみる(意味解析編・代入式まで)

前回はVBScriptの簡単なソースコードを構文解析して抽象構文木(AST)を作りました。
今回はそのASTをパースすることでソースコードの実行をしようと思います。

とりあえず、前回パースしたASTを再掲します。

“`
#,
#]>,
#

元記事を表示

【Rails】Twitterのリストのメンバー全員を取得したい

#概要

Twitter廃人です。
2019-12-12、PCでのリスト閲覧が出来なくなっており、俺のツイッターライフが滅亡の危機に瀕しています。
スマホでは出来るけどなんで……。

Twitterくん頑張ってるけど、ふとしたことでリスト機能自体を消しちゃったりしそう……?
そうでなくてもアカウント永久凍結されたりしたら本気でヤバいなと思い、リストのメンバーを取得しておきたいと思います。

#環境
Ruby2.5.3
Rails5.2.1

#前提

TwitterAPI使えるようにするまでとかは他記事でお願いします。

gemで’twitter’を追加してbundle installするだけで良かった気がする。
他にもやった気もする。

忘れました

#Model

“`ruby:app/model/tweet.rb

class Tweet < ApplicationRecord # --- Twitter API --- # APIに接続するためのクライアント生成 def self.get_client client = Twitter::REST

元記事を表示

ポケモンしりとり(ピカチュウ→ミュウVer.)を最短にする

Diverse Advent Calendar 2019 12日目の記事です。

最近最新作の発売されたポケモンの名前でしりとりをしてピカチュウからミュウまで最短何手でいけるのか。
またどのポケモンからどのポケモンの最短手数が一番多いのかを調べていきたいと思います。

# なんでやろうと思ったの?
~~AdventCalender圧を受けて一番最初に思いついたのがこれだったので~~

新しく始まったアニメシリーズ「ポケットモンスター」のED主題歌でテクノ風のサウンドに合わせてポケモンの名前でしりとりをする「ポケモンしりとり (ピカチュウ→ミュウVer.) 」を聞いて非常に感銘を受けしりとりの生成に興味を持ったので

誰の役にも立たない記事を書きたい気持ちが強かった。

# 単語リスト生成(ポケモン一覧取得)
どこかポケモンの一覧がまとまっているところからプログラムで取得してテキストファイル化することにします。

ポケモンWikiさんの[ポケモン一覧](https://wiki.xn--rckteqa2e.com/wiki/%E3%83%9D%E3%82%B1%E3%83%A2%E3%8

元記事を表示

middlemanでrubyバージョンは何を使ったらいいのかはどこを調べるの?

今進行中のファイルの中にruby -vと書いてあるのでそれをソースコードエディタで開く。私の場合、vscode。

はい、終わり

元記事を表示

フォームに関する基礎知識をつける Ruby on Rails

## 新規作成フォームと更新フォーム中身は同じ?でも何かが違う!

**中身 = 入力欄が記載されている_form.html.erbなどのことです**
**違い = action 属性**

下記のような_form.htmlはnewとedit両方に使用されます。(中身は同じ)

“`rb

<%= form.label :name, "ユーザー名"%> <%= form.text_field :name %>
<%= form.label :birthday, "誕生日", for: "member_birthday_li"%> <%= form.date_select :birthday, start_year: 1970, end_year: Time.current.year,

CircleCI+ActiveStorageでRspecがコケる(undefined method `upload’ for nil:NilClass)

表題の通り。

## 結論から。
### 原因
ActiveStorageの設定ファイルであるstorage.ymlに本番用の保存先(AWS S3)のSecretKeyなどをENV.fetchでセットしていたことが原因。
テスト用の設定しか使わないが、ymlを読んだ際に本番用環境変数もセットされていないとエラーになる。

エラーになるが、Rspecのテストでは
“`undefined method `upload’ for nil:NilClass“`
と表示されてしまうのが鬼門。

### 対応策
config/environments/test.rbで設定している通り、本番用の設定は実際には使わない。
そのためCircleCIの設定で該当の環境変数についてダミーの値をいれておいたらPassした。

## まとめ
Rspecにはエラーメッセージわかりにくい大賞を授与いたします。

プログラミング初心者がWeb開発を行えるようになるための5ステップ

みなさんこんにちは、[@y_temp4](https://twitter.com/y_temp4)です。

自分は普段フリーランスのエンジニアとして働いており、そのかたわら[TechTrain](https://techbowl.co.jp/techtrain/)でメンターもしています。

メンターの経験を通してメンティーから感じることは様々ですが、多くの初心者はどのように学習を進めていけばよいか悩んでいるケースが多いように思います。

そこで今回は「**Web 開発を学ぶ上での初期の学習の進め方**」について、自分なりのアプローチを書いてみようと思います。

前提として、以下のような方を想定読者としています。

– プログラミング未経験・軽く嗜んだ程度
– Web アプリ・サービスを作りたい
– やる気がある(← 重要)

では、さっそく本題に入ります!

## ステップ 0: MacBook を買う

いきなりですが、Web 開発を行う上では**Mac**を使うのが望ましいです。自分の経験上、多くの方が Mac で開発を行っていますし、Mac でなかったとしても Linux を使っ

【Ruby】merge, merge!

#mergeメソッドについて
2つのハッシュを統合するレシーバhashと引数other_hashのキーと値を集め、新しいハッシュに入れて返す。重複するキーが有るときは、ohter_hashの値が使われます。

“`
image1 = { :src => “monkey.jpg”, :alt => “monkey” }
image2 = { :width => 320, :height => 240 }
image3 = image1.merge(image2)
puts image3[:src], image3[:width]
“`

“`
monkey.jpg
320
“`

### 使い方
“`
hash.merge(other_hash) {|key, oldval, newval| block }

Rails6 のちょい足しな新機能を試す(uniqueness validation with belongs_to編)

# はじめに

Rails 6 に追加された新機能を試す第111段。 今回は、`uniqueness validation with belongs_to` 編です。
Rails 6 では、 `belongs_to`, `has_many` の関係があるModel で、 `uniqueness` 制約がある場合に `save!` メソッドで例外が発生しないバグが修正されました。
(なお、 後述しますが、 `accepts_nested_attributes_for` を組み合わせた場合のバグは修正されていません。)

Ruby 2.6.5, Rails 6.0.1 で確認しました。 (Rails 6.0.0 で修正されています。)

“`shell
$ rails –version
Rails 6.0.1
“`

今回は、Author モデルと Book モデルを作って、スクリプトで動作確認してみます。

# Rails プロジェクトを作成する

“`shell
$ rails new rails_sandbox
$ cd rails_sandbox
“`

# Author