pockestrap

Programmer's memo

Ruby

RBSではRubyと定数探索がちょっとだけ違う

ほとんど一緒なので気にすることはあまりないとは思います。 タイトル通り、RBSとRubyでは定数探索がちょっとだけ違います。 具体的にはスーパークラスやinclude元のモジュールで定義された定数がRBSでは参照できません。 Rubyの場合 まずはRubyの場合の挙動…

RBS基礎文法最速マスター

RBSはRuby 3に組み込まれた、Rubyの型情報を記述する言語です。 この記事ではRBSの文法を駆け足で紹介します。 細かい話は飛ばしますが、この記事を読めば大体のケースでRBSを読み書きできるようになると思います。 事前準備 インストール まずは文法の前に…

RBSではmoduleのinclude先としてinclude先のクラスを指定してはいけない

タイトルを読んでも何を言っているのかわからないと思いますが、モジュールをincludeしようとするとRBS::RecursiveAncestorErrorが発生することがあります。 とくにObjectクラスにincludeするようなケースでは注意が必要です。 この記事ではrbs gem v1.0.0で…

RBS Railsを使ってRailsアプリケーションにSteepを導入する

RBS Railsを使ってRailsアプリケーションにSteepを導入するまでの解説します。 ただしこの「導入できる」というのは、解析が完走するという意味です。 型エラーを全てつぶすことや、Steepを実際の開発フローに乗っけることは私もまだできていないため、この…

OpenStructに信頼できない値を渡してはいけない

新しいOpenStructに信頼できない値を渡すと、GCされないシンボルが作成されメモリが使いつくされる可能性があります。 対象のバージョン 対象となるostruct gemのバージョンは、0.3.0かそれ以上です。 Ruby 3.0にはostructのバージョン0.3.1が添付されている…

RubyからRBSを生成する各方法の特徴

この記事はRuby 3.0 Advent Calendar 18日目の記事です。 qiita.com 昨日の記事は id:Pocke さんで「ruby/rbsに取り込まれた私のパッチ」でした。 pocke.hatenablog.com この記事ではRuby 3で導入される型定義ファイルであるRBSファイルを自動生成する方法に…

ruby/rbsに取り込まれた私のパッチ

この記事はRuby 3.0 Advent Calendar 17日目の記事です。 qiita.com 昨日の記事は id:gamelinks007 さんで「C APIのヘッダーが分割された話」でした。 gamelinks007.hatenablog.com この記事では、Ruby 3に同梱されるrbsに対して私が書いたPull Requestを紹…

Active Recordのクエリの実行元の表示から、特定のパスを除外する

TL;DR ActiveRecord::LogSubscriber.backtrace_cleaner = Rails::BacktraceCleaner.new.tap do |c| c.add_silencer { |line| line.include?('path/to/meaningless/file.rb') } end Problem Active Recordにはクエリの実行元をログに表示する機能があります。…

Rails.cache.fetch_multi するGraphQL BatchのLoader

Rails.cache.fetch_multiするLoaderを書いてみた。 コードのライセンスはCC-0とするのでご自由にお使いください。 class RailsCacheLoader < GraphQL::Batch::Loader def initialize end # @param args [Array<[untyped, Proc]>] The first item is cache ke…

gemspecのfilesとtest_filesとはなんなのか

TL;DR test_filesは使わない。 files と test_files gemspecで指定するこれらの挙動を説明します。 files https://guides.rubygems.org/specification-reference/#files パッケージに含まれるファイルを指定します。 Gem::Specification.new do |s| s.files …

CircleCIでparallel_testsのruntime logを保存する

TL;DR # from .circleci/config.yml - restore_cache: name: 'parallel spec runtime log' keys: - parallel-spec-runtime-log-{{ .Environment.COMMON_CACHE_KEY }}-{{ .Branch }} - parallel-spec-runtime-log-{{ .Environment.COMMON_CACHE_KEY }}- - run…

Gemfileでバージョン指定している時にコメントを強制するRuboCopの設定

TL;DR Bundler/GemComment: Enabled: true OnlyFor: - git - github - version_specifiers 目的 私はGemfileではなるべくバージョンを指定せず、bundle updateによって常に最新のgemが使われることを意識しています。 # Gemfile # bad gem 'rubocop', '0.93.…

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がついていないカラムに…

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 今日このプロジェクトのメンバーに招待されました。できることをコツコツやっていこうと思います。…