pockestrap

Programmer's memo

Programming

activerecord-originator をリリースしました

こんにちは。 id:Pocke です。 今日は activerecord-originator という gem を作ったので紹介します。 github.com なにこれ Active Record が発行するSQLの各部分に、それがどこで作られたものかをコメントとして入れ込む gem です。 理解するには実例を見る…

オンデマンドパルワールド

こんにちは。 id:Pocke です。最近はパルワールドというゲームをやっています。 パルワールドでは個人がサーバーを建てることができ、私も例に漏れず自宅のあまっているPCにサーバーを建てています。 ですがサーバーを管理している上でいくつか不便なことが…

graphql-coverage をリリースした

こんにちは。 id:Pocke です。 graphql-coverage という gem をリリースしました。 github.com なにこれ GraphQL-Ruby を使っているときに、テストがすべてのフィールドを網羅して呼んでいることを検査するための gem です。 モチベーション 私は GraphQL-Ru…

数クリックでSteepを試せる環境を作った

こんにちは。pockeです。今回は、GitHub Codespacesを利用して数クリックでSteepを試せる環境を作ったので紹介します。 使い方 pocke/steep-codespacesにアクセスする。 このリポジトリをGitHub Codespacesで開く。 Steepが有効となったVS Codeが起動する。 …

RubyKaigi 2023 Let's write RBS! 予習記事

こんにちは。ぽっけです。 RubyKaigi 2023 で RBS に関するトークをします。この記事では、そのトークをより楽しむために予習しておくと良い内容をかんたんに紹介します。 rubykaigi.org トークの内容 このトークでは、RBSを使ったRubyアプリケーションの開…

正規表現でかんたんにCopを書けるRuboCop拡張 rubocop-grep をリリースしました

こんにちは。正規表現でかんたんにCopを書けるRuboCop拡張を作ってみたので紹介します。 github.com 使い方 まず、ほかのRuboCop拡張と同様にgemをインストールし、.rubocop.ymlのrequireにこのgemを指定してください。 この拡張は設定をしないと何も動きま…

Rubyの外部コマンド実行入門について発表しました

福岡Rubyist会議03で、「外部コマンド実行入門」というタイトルで発表をしました。 この記事では、登壇の背景や今後について書きたいと思います。 (福岡Rubyist会議に登壇しました(します) - pockestrap という記事で「この記事は登壇後に編集し、登壇報告記…

福岡Rubyist会議に登壇しました(します)

この記事は福岡Rubyist会議の登壇資料です。ひとまず資料の公開のために記事を公開します。 この記事は登壇後に編集し、登壇報告記事になります。(追記: と言っていたのですが、新しく記事を書くことにして公開しました。 Rubyの外部コマンド実行入門につい…

福岡Rubyist会議03 Proposal: ⁠外部コマンド実行入門

福岡Rubyist会議03に応募したプロポーザルです。このプロポーザルは採択されました。 タイトル トークのタイトルを 30 文字以内で書いてください。これは公式サイトに記載されます。 ⁠外部コマンド実行入門 トーク概要(100文字以内) トークの概要を 100 文字…

Kaigi on Rails 2021 で登壇しました

先日Kaigi on Rails 2021で、Cache on Railsというテーマで登壇しました。 参加者としての感想は雑に日記に書きましたので、この記事では登壇者としての感想を書きます。 各種資料 スライド スピーカーノートを開くと(ほぼ完全な)トークスクリプトもついてい…

RubyKaigi Takeout 2021 に登壇した

RubyKaigi Takeout 2021 に登壇しました。 rubykaigi.org スライドはこちら。 docs.google.com 今回は、Ruby 3.1に向けてRBSはどのような機能追加を予定しているのか、という話をしました。私が最近開発しているrbs collectionコマンドを中心に据えて、souta…

Rails 7で導入される invert_where メソッドが危険そうだったので調べた

この記事は現時点(2021-04-28)のrails/railsのmainブランチの最新のコミットでテストしています。 TL;DR invert_whereはすべてのwhereをinvertする 使い方によっては意図しない条件をinvertして危険 invert_whereとは invert_whereは、Rails 7でActiveRecord…

Rubyで数値を 123_456_789 のように表示する

irbで3桁区切りで _ を入れて数値を表示するようにしてみた pic.twitter.com/CrPxSIiaqE— Pocke(ぽっけ) (@p_ck_) 2021年4月9日 twitter.com デバッグなどをしていて、数値が区切り無しで出力されると読みづらいため、_をはさんでみた。 Rubyでは数値リテラ…

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

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

RBS基礎文法最速マスター

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

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

年末なので、今年GitHubに作ったリポジトリを振り返ってみます。 このリストは次の記事のコードを使って生成しました。(記事は去年のものだけど、今年実行しても動くはず) pocke.hatenablog.com 今年は15個のリポジトリを作りました。去年の31個より減ってる…

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を触ることになる…