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

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

CLIでツイートするだけのgemを作った

本記事はエイチームフィナジーアドベントカレンダー4日目の投稿です。
ちいさいgemを作ってはじめて公開したお話になります。

# ツイートするだけのシンプルなツールが欲しかった

普段プライベートで開発や調べ物をしてるときに、作業内容をメモがてらTwitterにつぶやいたりしています。そういうときはだいたいターミナルを開いて作業してるので、いちいちTwitterクライアントに切り替えるのがめんどくさいです。なのでターミナルから使えるCLIのクライアントをいくつか使ってるのですが、たいてい高機能で個人的にほぼ使わない機能がいっぱいあって、もっとシンプルなのが欲しいなと常々思っていました。

# gemを作って公開してみたかった

業務でRailsアプリをメンテしてたりプライベートでRails製の個人サイトを運用してたり、普段からRubyによく触れています。当然gemの導入やコードを読むこともありますが、gemを作って公開したことはありませんでした。
ちょうどいいのでgemとしてリリースしてみることにしました。

# 作ったgem「twee」

tweeというgemを作りました。

htt

元記事を表示

オフラインどう書くE10の解答

問題はこちら->http://mtsmfm.github.io/2016/12/03/doukaku-e10.html

Prolog,Julia ,Ruby,Nimで解いています。
かなり前の下書きを修正してJulia,Nimでは最近のバージョンで動くよう一部変更しました。

まずPrologで解きました。
操作(OX)と全体の中の黒の正方形の位置(角、辺、中)によって場合分します。
元の黒い正方形が角
 X->黒が辺に2個、中に2個に変化、白が2個増加、
 O->黒が角に1個,辺に2個,中に2個に変化,白が2個増加
元の黒い正方形が辺
 X->黒が辺に1個、中に3個に変化、白が1個増加、
 O->黒が辺に2個,中に3個に変化,白が1個増加
元の黒い正方形が中
 X->黒が中に4個に変化、白が1個増加、
 O->黒が中に5個に変化,白が0個増加
この情報はp/5に入っています。
p(OまたはX,[元の黒が角、辺、中の場合の白の増加数],[元の黒が角の場合の角、辺、中の黒の数],[元の黒が辺の場合の角、辺、中の黒の数],[元の黒が中の場合の角、辺、中の黒の数])
更にXの場合それまであ

元記事を表示

mini_racerのインストールが、依存関係にあるlibv8で失敗する

## mini_racerのインストールで失敗する
Railsあるある
依存関係にあるlibv8のインストールで失敗しているみたい。
(mini_racerのgemアップデートも同じこと起きやすいです)

“`
An error occurred while installing libv8 (8.4.255.0), and Bundler cannot continue.
Make sure that `gem install libv8 -v ‘8.4.255.0’ –source ‘https://rubygems.org/’` succeeds before bundling.

In Gemfile:
mini_racer was resolved to 0.3.1, which depends on
libv8

“`

エラーログを見ていくと以下辺りが怪しそう。

“`
Error: Command ‘vpython third_party/depot_tools/update_depot_tools_toggle.py –disable’ retu

元記事を表示

【Ruby のまずいコード】leet

# お題

引数として与えられた文字列に以下の変換を施した文字列を返すメソッドを定義してください。

* `A` → `4`
* `G` → `6`
* `I` → `1`
* `O` → `0`
* `S` → `5`
* `Z` → `2`

たとえば `”GIANTS”` を与えると `”614NT5″` を返します。

このような文字列表現を [leet](https://ja.wikipedia.org/wiki/Leet) と呼ぶようです。
メールなどでふざけてアルファベットの一部を形の似た数字に置き換えたりするものですが,ここでお題として挙げた変換は leet の多様な置き換えのごく一部です。

# コード

実際に見たことのあるコードを思い出しながら例を二つ作ってみました。

## コード 1

“`rb
def leet(str)
result = “”
str.chars.each do |char|
case char
when “A”
result << "4" when "G" result << "

元記事を表示

コードの見方・関わり方が少し変わった一年でした、という話

グロービスにバックエンドエンジニアとして参画している @ymstshinichiro です。
僕は今年の5月から本格的に[GLOPLA LMS](https://glopla.globis.co.jp/)の開発にジョインしました。
本記事では、そこから今日までの7ヶ月を通して自分に起こった変化について書いてみたいと思います。

## 参画以前は
僕は約10年飲食の業界にいましたが、約4年前にキャリアチェンジで SIer > Web業界(社員) > Web業界(フリーランス) という流れで現在に至っており、新卒できちんと先輩から教わったとか、スクールで先生についてもらったみたいなことがありませんでした。

なので、基本的に独学でプログラミングを学び現場のコードを見ながら/直しながら覚えていくという感じでやってきており、

– 「こうあるべき」みたいなのは書籍を読んで得たものが基本
– とはいえ現場では現場のルールや状況がある
– 結果、その時々で対応していくので、背骨のある設計/実装、綺麗で汎用性の高いコード みたいなのがあまり身についてこなかった

という実感がありました。
一方で、急

元記事を表示

マンダラートを作りたい #1

https://navi.dropbox.jp/mandal-art

![マンダラート](https://2fnflu14pimi44odtt128jit-wpengine.netdna-ssl.com/wp-content/uploads/2017/01/mandal-art-06.jpg)

マンダラートとはアイデア出しの手法の一つ。
こんな漢字で、連想してアイデアを出してく。

最初から、こんな漢字のマス目を用意して、投稿表示するのが意外と難しい。

投稿ページ、投稿一覧表示ページ、投稿編集ページを合体させたいのだが、それが意外と難しい。(大事なことなので2回言った)

“`ruby
class MandalartsController < ApplicationController def index @mandalarts = Mandalart.all new end def new @mandalart = Mandalart.new end def create @mandalart = Manda

元記事を表示

Railsで日時を取得したいのに、2000年1月1日ばかり保存されてしまう件について

#はじめに
現在、Ruby on Railsにて睡眠を記録するアプリを作成しています。form_withを使用して日時を記録する際に、登録したデータの日付が2000年1月1日としか保存されませんでした。非常に単純な原因でしたので、備忘録として投稿します。

## 開発環境

DBにはMySQLを使用しています。

* Mac OS Big Sur 11.6
* VSCode
* Ruby 3.0.2p107
* Rails 6.1.4.1
* MySQL 8.0.27 for macos11.6 on arm64 (Homebrew)

#原因

* **migrationファイルでDateTime型とすべきところをTime型にしていた。**
* MySQLについて調べるべきなのに、Rubyのことを調べていた。

## 背後要因

> 日付だけでなく時刻も扱える Date のサブクラスです。
> DateTime は deprecated とされているため、 Timeを使うことを推奨します。
> [Ruby 3.0.0 リファレンスマニュアル class DateTime(要約)](h

元記事を表示

【技育展2021】本当に”はじめてのアプトプット”をしたら意外にも優秀賞をもらえた

# 技育展とは?

株式会社サポーターズが開催する、学生エンジニアのアウトプットを展示するイベントです。
アウトプット作品を作る+それをプレゼンすることがイベントの主な内容です。
私は2021年開催の回に参加しました。
チームは高校時代の同級生の友人と2人でした。

https://talent.supporterz.jp/geekten/2021/

# 何を作ったの?

**失敗ドットコム**というWebサイトを作成したました。
このサイトは、みんなの失敗談を知識として集積して、他の人の挑戦に役立てようというコンセプトから生まれました。
主な機能は、自分の失敗談を投稿したり、他人の失敗談を閲覧することです。

https://www.shippai-for-everyone.com/

例えば、こんな投稿があったりします。

https://www.shippai-for-everyone.com/posts/24

# 審査結果は?

以下のようなルールで入賞者が選出されます。

>最優秀賞(1作品) 30万円/テーマ
>優秀賞(1作品) 10万円/テーマ
>「はじめてのアウトプ

元記事を表示

【Ruby】trimしたいときはstripしよう

##strip
Rubyには“`trim“`メソッドがないので代わりに“`strip“`メソッドを使う。

**文字列先頭**と**末尾の空白文字**を全て取り除いた文字列を生成して返す。
空白文字の定義は“`” \t\r\n\f\v”“`
文字列右側からは“`”\0″“`も取り除くが、左側の“`”\0″“`は取り除かない。

“`ruby
pry(main)> p ” s”.strip
=> “s”
# 文字と文字の間の空文字は取り除かない
pry(main)> p ” s f “.strip
=> “s f”
pry(main)> p ” s f\n”.strip
=> “s f”
pry(main)> p “\0 s f\0”.strip
=> “\u0000 s f”
“`

##参考

https://docs.ruby-lang.org/ja/latest/method/String/i/strip.html

元記事を表示

【Rails】Twitter APIとLINE APIでジャニーズの私物を特定して、すぐに購入できるサービスを作ってみた!!! PF

#はじめに
PFで**ジャニーズの私物を特定して、すぐに購入できるサービス**を作成したのでまとめます。

#サービスの概要

ジャニーズファンは推しと同じものを日常生活やライブで身につけたいという心理があります。
twitte上にファンの人が私物を特定してツイートをするので、そのツイートをキャッチして、LINEで通知・購入できるサービスになっています。

#なぜこのサービスを作成したか
私物の特定のツイートがされるとすぐファンが購入し、売り切れてしまうことがよくあります。

私自身、私物特定のツイートを発見し、サイトを検索してももう売り切れてしまっていたということが何回もあります。

他のファンよりも早く購入できるサービスがあればいいなと思い、このサービスを作成しました。

##使用した機能
Twitter API
LINE Messaging API
Sorcery

##ER図

##モデル

##Twiiter API 部分について

**Twiiter API**を使用して、特定のアカウントが私物に関するツイートをした際にツイート内容や画像等を取得します。

#### 1.

元記事を表示

勝手に「点字メーカープログラム」を作ってみる

#はじめに
これは、[2021年の Ruby アドベントカレンダー2](https://qiita.com/advent-calendar/2021/ruby)の3日目の記事です。

先日「[挑戦者求む!Rubyで点字メーカープログラムを作ってみよう 〜Qiita Advent Calendar 2021〜](https://blog.jnito.com/entry/2021/11/04/092218)」という記事を見つけました。
これは面白そうな題材です。10人いれば100通りの実装が出てくるのが ruby の醍醐味。是非とも、いろいろな方が書いたコードを見比べてみたい、自分の作ったコードとも比較してみたい。

なので、さっそく[参加しよう](https://qiita.com/advent-calendar/2021/ruby-challenge)と思ったものの、その時点で既にすべての枠が埋まっていたのでした。仕方がないので、こうして勝手にRuby アドベントカレンダーに投稿しています。
(Ruby アドベントカレンダー1の2日目にも、同じような方がいる模様です)

なお、出来上が

元記事を表示

【Ruby のまずいコード】文字列を文字の配列にする

# お題

文字列(例えば `”Ruby”`)を文字の配列(`[“R”, “u”, “b” ,”y”]`)に変換してください。

# コード

“`rb
str = “Ruby”

chars = str.split(“”)
“`

# 改善

このコードはとくにまずいということはないと思いますが,この目的には専用のメソッド [String#chars](https://docs.ruby-lang.org/ja/3.0.0/method/String/i/chars.html) があるので,それを使えばいいでしょう。

“`rb
str = “Ruby”

chars = str.chars
“`

速度面では変わらないようです。
`chars` のメリットは簡潔なことですが,意図が分かりやすいとは言えるかと思います。
[String#split](https://docs.ruby-lang.org/ja/3.0.0/method/String/i/split.html) の仕様はかなり複雑で,筆者もその全ては記憶していません。

“`rb
str = ” A B

元記事を表示

データ分析基盤・DataLakeを作成するツールとしてのEmbulk

この記事はエイチーム引越し侍 / エイチームコネクトの社員による、[Ateam Hikkoshi samurai Inc.× Ateam Connect Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/hikkoshizamurai-connect) 3日目の記事です。

## はじめに
今日は、最近のお仕事で触ることになる可能性が高いEmbulkについて書きます。
*触ることになる*とあるようにEmbulkを使い始めるソフトウェアエンジニアによる記事です。説明に至らない点があったり間違っていたりするかもしれません。その際は[編集リクエスト](https://help.qiita.com/ja/articles/qiita-edit-request)なりコメントなりでご指摘いただけたら幸いです。

何に使うかですが、データ分析基盤、DataLake作成におけるETL処理のために使います。ちなみにETLはExtract、Transform、Loadの略でデータを抽出、変換・加工、ロード(Output)する

元記事を表示

部分和問題を動的計画法で解く

## 概要

これは [Money Forward Engineering Advent Calendar 2021](https://adventar.org/calendars/6182) 3 日目の記事です ?

運用しているとある Rails アプリケーションのある機能でリクエストがタイムアウトしてしまう問題が生じたのが発端です。ある n 個の整数の集合 $\\{a_1, a_2, …, a_n\\}$ から、和が与えられた sum に等しくなるように部分集合を選ぶ問題を解く処理があります。この問題を [部分和問題](https://ja.wikipedia.org/wiki/%E9%83%A8%E5%88%86%E5%92%8C%E5%95%8F%E9%A1%8C) と呼びます。例えば集合が $\\{3, 34, 4, 12, 5, 2\\}$ で sum = 20 の場合、和が 20 となる部分集合は $\\{3, 12, 5\\}$です。

今回 n の数がある程度大きい場合に、Rails アプリケーション内の処理に含まれる部分和問題を数分では解くことができず、結果

元記事を表示

【LINE×Rails】Rails初学者も作れるLINE Botアプリケーション

# 概要
この記事では、先日リリースした[ReLINE【”猫さん”】](https://www.cat-reline.com/)で得た LINE Messaging API の知見を使って、`投稿に応じて返信するテキストを変化させるLINE Botアプリケーション`を作成します。

記事の内容に沿って実際に手を動かして取り組んでもらうと、今回私が作成したものと同じものができるので、お時間のある方はチャレンジしてもらえると嬉しいです!

【注意点】
この記事では上記のLINE Botアプリケーションを作成する流れを記載していきます。そのため技術的な話はほとんど出てきませんが、身近なLINEアプリを使ってプログラミングへの楽しさや作成する面白さなどを感じてもらえたら幸いです。

【今回挑戦する4ケース】
1.”おまじない”(`アブラカタブラ`、`チチンプイプイ`、`ヒラケゴマ` のいずれかテキスト)が投稿された場合
   => `It is Omajinai`と返す
2.`ruby`というテキストが投稿された場合
   => `Is it Programming language? O

元記事を表示

Rubocopまとめ

#Rubocopとは
Rubyのコーディングチェックツールです。
Rubocopを使うことで、誰でも一定の品質のコードを書くことができます。
一部のルールについては、自動修正にも対応しているため自分で修正する手間も省くことができます。
またRubocopでは`Cop`という単位でルールを管理しています。

#導入方法
rubocopはgemのため、インストールします。

“`ruby
group :development do
gem ‘rubocop’, require: false
gem ‘rubocop-rails’, require: false
end
“`

ここでrubocopはアプリ側で呼び出す必要がないため、`require: false`をつけています。

#ファイル
##.rubocop.yml
Rubocopの設定ファイルです。
ここで、修正するcopを設定することができます。

##.rubocop_todo.yml
ここに今すぐ修正できないcopを退避させて置くことで、警告が出ないようになります。
(以下のコマンドのおかげ)

“`ruby:

元記事を表示

Ruby 多重継承 Mix-in

# はじめに
`python`から`ruby`に移植する話がありまして、ソースを見ていたところpythonに多重継承がありました。

どうしたものか。
# 競技プログラミング
*[atcoder](https://atcoder.jp/home)* さんには大変お世話になっているものの、`class`どころか`def`もほとんど書きませんので、クラス・モジュール・継承となると再勉強が必要。
*[Ruby Gold](https://qiita.com/superrino130/items/328854a699658ed72d30)* も使わなければ忘れるだけですね。
# Perl to Ruby
ところで、*[PerlユーザーのためのRuby入門](https://www.ohmsha.co.jp/book/9784274065156/)* という本がございまして、例によって20年位前の本になりますが、第5章に`5-2 Perl多重継承v.s. Ruby Mix-in`という興味深い記載が載っておりました。

“`ruby
class Staff
def initialize(h

元記事を表示

Macにおけるファイルエンコーディングの確認方法

##はじめに
[プロを目指す人にためのRuby入門](https://ruby-book.jnito.com/)に取り組んでいたところ、ファイルエンコーディングを確認する機会があったため、忘れないようにメモとして残しておこうと思います。

##ファイルエンコーディングの確認方法
ファイルエンコーディングを確認する際は`file`コマンドを使用します。`–mime-encoding`をオプションとして加えることによって、ファイルエンコーディングのみ出力されます。

“`shell:コンソール
file –mime-encoding sample.rb
sample.rb: utf-8
“`

出力結果から、ファイルエンコーディングはUTF-8だとわかりました。

[UTF-8](https://wa3.i-3-i.info/word1812.html) (文字コードとファイルエンコーディングの違いで混乱した時に読んだ記事です)

元記事を表示

【Rails】目的地の日没時刻がわかるだけのシンプルなアプリを作った

##はじめに
タイトル通り、目的地の日没時刻がわかるだけのシンプルなアプリを作りました。
[シンプルマジックアワー](“https://simple-magichour.com/”)というアプリです。
開発の過程などを記していきます。

##アプリの説明
日付と都市を選択すると日没の時刻を表示します。
それだけだとあまりに味気なかったので、マジックアワーの時刻も付け足しました。
![スクリーンショット 2021-12-02 13.49.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1535961/1a05c464-4f75-cfa3-5ec6-d5df906cea44.png)

####なぜ作ろうと思ったか
一眼レフカメラで夕焼けの写真を撮るのが趣味なのですが、綺麗な夕焼けを撮るには日没の時間を知っておく必要があります。
日没の時間が分かるアプリはごまんとあるのですが、その多くは日没時刻以外の情報もたくさん表示されます。(日の出の時刻や太陽の位置など)
また、地点についても詳細な位置を取得するた

元記事を表示

Ruby biz Grand prix 2021のファイナリストに選ばれた

[Catallaxy Advent Calendar](https://qiita.com/advent-calendar/2021/catallaxy) 1日目を担当します、エンジニア1号です。

[Ruby biz Grand prix 2021(Ruby bizグランプリ2021)](https://rubybiz.jp/)へエントリーして、ファイナリストに選ばれましたので、今日はそのことに触れてみたいと思います。

## Catallaxyとは
金属加工プラットフォームを提供する2015年創業スタートアップになります。2018年に現在の業態にピボットしたのち、2021年3月にはシリーズAとして約4.1億円を調達しており、現在までに累計約8億円の資金調達をしております。従業員数26名のうち、エンジニア10名、デザイナー1名、エンジニアの業務委託・インターン数名のメンバー構成になっており(2021年9月応募時点)、約半数がプロダクトに関わる業務に携わっています。

## Ruby biz Grand prix
2015年からRuby bizグランプリ実行委員会が開催するRubyを活

元記事を表示

OTHERカテゴリの最新記事