pockestrap

Programmer's memo

Ruby

Action Mailerのpreview機能を使って、Railsアプリケーションから送るメールを一覧するページを作った

ある時「アプリケーションがどういうタイミングでどういうメールを送るか、エンジニア以外も把握したい」という要望が社内で上がりました。 これはもっともな要望で、アプリケーションがどういうメールを送っているのか分からずユーザーサポートするのはしん…

CircleCIの実行を速くした

先週仕事でやったのをメモします。 CI力が低いので、記事を公開することでツッコミをもらうのが目的です。 モチベーション 弊社ではCIの実行が1回あたり20分ほどかかっています。 これはわりとストレスなので速くしたいです。幸いにも削れそうなところが2つ…

Rails/UniqueValidationWithoutIndex copを追加した

rubocop-rails にRails/UniqueValidationWithoutIndex copを追加しました。 rubocop-railsの次期リリース(おそらくv2.5.0)から利用できます。 github.com これはなに Rails/UniqueValidationWithoutIndex copは、RDBMSのunique indexがついていないカラムに…

RubotyでSKIコンビネータ計算する

RubotyはRubyで書かれたチャットボットフレームワークです。 github.com RubotyはRubyでプラグインを実装して拡張できます。つまりRubyでできることはRubotyでできます。便利ですね。 ということでRubotyでSKIコンビネータ計算をしてみました。 しかし、Ruby…

Rubyで型情報を使ってオーバーロードをする

以前Rubyでoverloadをするという記事を書きました。 この記事で紹介しているoverloader gemを使うとRubyでオーバーロードができるようになります。 overloader gemは今まで引数の数の違いでしかオーバーロードを定義できませんでしたが、v0.2.0で型情報を使…

毎日日記を書く技術

最近、 https://commits.hatenablog.com で毎日日記を書いている。 この毎日というのは一日も欠かさずという意味で、実際日記を書き始めた2019-12-17から一日も欠かさずに続けている。1 これを続けるために2つ工夫していることがあるので紹介したい。1つは仕…

Kernel.#systemの型はむずかしい

adventar.org この記事は ruby-signature advent calendar 23日目の記事です。 今日が祝日じゃないと今月に入ってから知りました。 私はruby-signatureにKernel.#systemメソッドの型を修正するPRを出しました。 https://github.com/ruby/ruby-signature/pull…

rubocop-rubycwとは

github.com TL;DR ruby -cw をRuboCopのインターフェイスで扱うためのgem ruby -cwとは rubyのコマンドラインオプション。 -cを付けると、Rubyはコードを実行せず、構文のチェックのみを行う。 -c check syntax only -wを付けると、Rubyは見つけた警告をすべ…

今年GitHubに作ったリポジトリを振り返ってみませんか?

gist.github.com 上のRubyプログラムを適当に保存して実行すると、あなたが今年作ったリポジトリの一覧が表示されます。 # 私の例 $ ruby this-year-repos.rb https://github.com/pocke/ika2.vim https://github.com/pocke/chuu https://github.com/pocke/re…

平成Ruby会議01 で、Regression test for RuboCopというタイトルで発表しました。

heiseirb.github.io Proposalはこちら pocke.hatenablog.com ついつい本番だと早口になってしまうので、3分ぐらい余らせてしまった。余った時用のコンテンツを用意しておくのが良いのかなあ。 knuさんとkoicさんの発表がそれぞれOSSのいい話という感じで良か…

平成Ruby会議01 CfP

この記事はCfPアドベントカレンダー1日目の記事です。 adventar.org heiseirb.github.io このトークはacceptされました。12月14日に話します。 発表タイトル(※本情報は当選時にLPに掲載されます) Regression Test for RuboCop 発表の概要(※本情報は審査にの…

鹿児島Ruby会議01に参加した

k-ruby.github.io 先日行われた鹿児島Ruby会議01に登壇者として参加してきました。 私は「ruby-jp」というタイトルで、ruby-jpというコミュニティ1について発表してきました。 speakerdeck.com 発表後にたくさん声をかけてもらえたし、ruby-jpのslackにもた…

rurema organization に招待された

ruremaとはRuby Reference Manualの略(これには最近気がついた)で、Rubyの公式リファレンスマニュアルをなんやかんやしているプロジェクトです。 github.com 今日このプロジェクトのメンバーに招待されました。できることをコツコツやっていこうと思います。…

ruby-signatureにテストファイルのジェネレータを追加した

ruby-signatureとは github.com Ruby 3に向けて、Rubyの型定義ファイル周りを提供するプロジェクトです。 https://speakerdeck.com/soutaro/ruby-hack-challenge-holiday-number-8 このスライドも参考になるでしょう。 この記事では組み込みライブラリの型定…

RuboCopで型情報を利用した解析を試している

3行 RuboCopで「この変数はString」とかの情報を含めて解析させられないか試している まだPoCだけど、なんとなくは動いている https://github.com/pocke/rubocop-typed を見て 何をしているの rubocop-typed というプロジェクトで、RuboCopで今までできてい…

RuboCop Rake をリリースしました

github.com これはなに RuboCop Rakeは、Rake関連のファイルに対してのCopを集めたRuboCopプラグインです。 実はリリースは少し前からしていたのですが、晴れてRuboCop HQ下に移動した1のでリリース記事を書いてみました。 Cops 現在、RuboCop Rakeは3つのCo…

大阪Ruby会議02で、「Suppress Warnings」というタイトルで登壇しました

docs.google.com speakerdeck.com speakerdeckよりもGoogle Slideの方が埋め込んだGIF動画が動くのでオススメです。 regional.rubykaigi.org 大阪Ruby会議02でSuppress Warningsというタイトルで登壇させていただきました。 登壇してから気がついたことや、…

String#gsub! は String#gsub よりも遅い

ruby-jp1のSlackで話していて面白かったのでまとめ。 Slack上の発言 RubyのString#gsub!はString#gsubの破壊的バージョンで、置換結果でレシーバを上書きする。 当然gsub!の方が新しいStringオブジェクトを生成しないので速いと思っていたら、どうやらそんな…

Ruby 2.6でunicornがrestartしない

あるRailsアプリケーションで使用しているRubyを2.5から2.6に上げたところ、unicornがrestartしてくれなくてハマった。 その時の問題と解決方法をメモ。 エラー内容 restartに失敗しているunicornのerror logを見てみると、次のようなエラーが出力されていた…

RuboCopのカスタムCop gemを作るためのジェネレータを作った

github.com これはなに RuboCopのカスタムCop gemを作るためのジェネレータです。 rubocop-rspecなどのgemを作る時のひな型を生成します。 使い方 まず、gem installします。 $ gem install custom_cops_generator そして、custom_cops_generatorコマンドを…

大阪Ruby会議02 CFP: Suppress Warnings

regional.rubykaigi.org rubykansai.doorkeeper.jp このCFPは大阪Ruby会議02に採択されました。 発表の題目 Suppress warnings 発表の概要 Rubyを-wオプション付きで実行したことはありますか? このオプションをつけてRubyを実行すると、様々なRubyの警告が…

次のRubyプログラムの出力はなにか。

元ネタ: https://twitter.com/p_ck_/status/1164901123666272262 問題 次のRubyプログラムを実行した時の出力を、次の4つから選べ。 case when p, q = 1, 2 p 3 else p 4 end p p p q 選択肢1 3 1 2 選択肢2 3 nil 1 選択肢3 4 1 2 選択肢4 3 nil 2 答えと解…

Ruby界隈の大統一Slackワークスペースがほしい

TL;DR https://join.slack.com/t/ruby-jp/shared_invite/enQtNzE1NDg1ODE2MDM2LTE1NTc2Y2M0ZThlNzdmOWEyZjYwZjdhZDAwNjNhMGE0NDJiODcwMTNkZWRjOTgyMzNkZjEyMmQ1ZWYyNzkzYzk に入るといい感じになってほしい このブログの内容は私個人の意見であってこのSlack…

Ruby 2.7では require 'stringio' が必要になりそう

github.com 今まではrubygemsがrequire 'stringio'をしていたけど、高速化のためにlazy loadingするようにして起動時に読み込まないようになった模様。 結構な数のプログラムが壊れそう(実際壊れた)。1 $ ruby -v -e 'p require "stringio"' ruby 2.7.0dev (…

OvtoにPureComponentを実装した

github.com Ovtoとは github.com Rubyで書かれたフロントエンドのフレームワーク。 Hyperappをベースにしていて、VDOMを使っている。 https://magazine.rubyist.net/articles/0059/0059-Ovto.html とかを読むのが良いと思います。 PureComponentとは Reactと…

Naming/RescuedExceptionsVariableName copが壊れていたから直した

github.com Naming/RescuedExceptionsVariableNameとは rubocop.readthedocs.io RuboCopのCopで、rescue節で例外をキャプチャした時の変数名を統一するためのCop。 デフォルトではeに統一される。1 例 # good begin rescue StandardError => e end # bad beg…

Ruby Puzzle その3

その1はこちら pocke.hatenablog.com その2はこちら pocke.hatenablog.com 解答、ヒント、解説などは充分な余白を開けた上で表示するので、安心して読んでください。 問題 mobile.twitter.com 1 || true || puts("Hello world") || 1 このRubyプログラムに1…

AURからパッケージをインストールするItamaeのresourceを作った

github.com AUR (Arch User Repository)からパッケージをインストールするItamaeのresourceを作りました。 Usage 次のように書くとrbenvパッケージをAURからインストールします。 aur_package "rbenv" Arch Linuxの環境をItamaeで構築するのに便利な気がしま…

Meguro.rb#27 でFizzbuzzだけできるRuby to JavaScriptコンパイラを書いた

github.com Meguro.rb#27のLTで、ライブコーディングでFizzbuzzができるRuby to JavaScriptコンパイラを書きました。 ライブコーディングだけをしたので、資料は↑のGitHubリポジトリのみです。 このコンパイラを使うと、次のFizzbuzzのコードがJavaScriptの…

Vimでカーソル位置のRubyVM::AST::Nodeを表示する

quickrunを使って、RubyVM::ASTを使ってパースしたASTからカーソル下のノードをサッと表示できるようにしてみた pic.twitter.com/EkpYdP669j— Pocke(ぽっけ) SW-1309-2807-5790 (@p_ck_) May 27, 2019 次のコードをprint-focused-ast.rbとして適当なところに…