pockestrap

Programmer's memo

rbs_railsにRailsの型を取り込む手順 2020-07-16版

なんか色々がちゃがちゃやっていて面白いので、メモしておく。 rbs_rails とは github.com Rails で RBS (Rubyの型定義ファイル)を扱うためのライブラリ。 「rbs_rails に Rails の型を取り込む」とは rbs_rails には2つの機能がある。 1つは、ユーザーの書…

Rubyの日本語リファレンスマニュアルに、英語のページが現れるようになります

こんにちは。ruremaメンバーの id:Pocke です。 Rubyの日本語リファレンスマニュアルで、未翻訳の英語のドキュメントが公開されるようになりました。 この記事では、それについて簡単に解説します。 何が変わるのか 今までは、未訳のメソッドは日本語リファ…

rbs cli

github.com RBSというRubyの型のためのソフトウェアがあり、RBSはrbsコマンドを含んでいる。 このコマンドは、.rbsファイル(Rubyの型定義ファイル)を書いていく上で必要になる。 この記事では、そのrbsコマンドの各サブコマンドについて、簡単に解説する。 r…

Ovtoでコンポーネントに閉じたStateを作る

結論 実装に無理があるので、OpalからReactを使いたい。 これ何 Ovtoはhyperappをベースにしている。Ovtoではstateはappに対して1つのツリーしかない。 つまり、各コンポーネントに閉じたstateを持つことはできず、全てはグローバルなstateを触ることになる…

GraphQL Rubyで起きたエラーをSentryにいい感じに通知する

GraphQL Rubyで定義したスキーマの実行中に起きたエラーをいい感じに通知するようにしたので、それを紹介します。 Problem GraphQL Rubyで定義したスキーマのフィールドのresolve中にエラーが起きた場合、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がついていないカラムに…

私にPull Requestとレビューを見せてください

TL;DR RuboCopプラグインの開発の為にPull Requestを見たいです 仕事としてでもそうでなくても構いません TwitterやGitHub Issueやメール( kuwabara (at) pocke(dot)me )までご連絡お待ちしています 背景 現在私はRuboCop Typed (仮)というRuboCopプラグイン…

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つは仕…

2019年に作ったGitHubリポジトリ

年末なので、今年GitHubに作ったリポジトリを振り返ってみます。 このリストは次の記事のコードを使って生成しました。 pocke.hatenablog.com リポジトリたち 今年は31個のリポジトリを作りました。 下に行くほど新しいリポジトリです https://github.com/po…

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…

なにもできない

静的解析 RuboCopのコードを書けるから、ASTをトラバースするコードを書くのは慣れているけどそれだけ。 電卓以上のパーサを書いたことがない。 型システムも何もわからない。TypeScriptでプログラムを書くことはできるけど、TypeScriptがどうやって型を解析…

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

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

CfP Advent Calendarを作った

CfP Advent Calendar って何? adventar.org カンファレンスなどのCfP (Call for Proposals)に投稿したProposalをシェアするAdvent Calendarです。 たんにProposalを投稿するだけです。もちろんProposalの背景なども合わせて書いていただいても構いません。 …

平成Ruby会議01 CfP

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

Find who you'd like to sponsor on GitHub

I'm exiting with GitHub Sponsors. But it is not easy to find who enables GitHub Sponsors. So I created a program that finds users who enable GitHub Sponsors from my following. Usage Download the following code as gh-sponsors.rb. https://gi…

鹿児島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コマンドを…