pockestrap

Programmer's memo

Gitのコミットメッセージからブランチ名を作る

Git

設定 # .gitconfig [alias] new-br = !git checkout -b "$(git log --format=%s -n 1 @ | ruby -pe '$_=$_.chomp.gsub!(/[^a-zA-Z0-9_]/, ?_)')" 本文 最近コミットメッセージからブランチ名を作ってcheckoutするようにした。 適当に最新のコミットメッセー…

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

私に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…