タグ

ブックマーク / pocke.hatenablog.com (15)

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

    こんにちは。 id:Pocke です。 今日は activerecord-originator という gem を作ったので紹介します。 github.com なにこれ Active Record が発行するSQLの各部分に、それがどこで作られたものかをコメントとして入れ込む gem です。 理解するには実例を見るのが早いでしょう。次のログはArticlesController#indexで実行されるクエリの例です。 Article Load (0.1ms) SELECT "articles".* FROM "articles" WHERE "articles"."status" = ? /* app/models/article.rb:3:in `published' */ AND "articles"."category_id" = ? /* app/controllers/artic

    activerecord-originator をリリースしました - pockestrap
    iga_k
    iga_k 2024/03/15
    便利そう!! “Active Record が発行するSQLの各部分に、それがどこで作られたものかをコメントとして入れ込む gem です。”
  • graphql-coverage をリリースした - pockestrap

    こんにちは。 id:Pocke です。 graphql-coverage という gem をリリースしました。 github.com なにこれ GraphQL-Ruby を使っているときに、テストがすべてのフィールドを網羅して呼んでいることを検査するための gem です。 モチベーション 私は GraphQL-Ruby を使って GraphQL サーバーを実装するときに、テストからはすべてのフィールドを呼ぶようなルールで開発をしています。ですがこれを強制する良いツールはありませんでした。そのためフィールドにテストが書かれていることを開発者自身が確認する必要がありました。 「SimpleCovのようなカバレッジ測定ツールを使えば解決するのでは?」と思う方もいるかもしれません。ですが GraphQL-Ruby の場合は単純なコードカバレッジの測定ではこの問題は解決しません。なぜならば Grap

    graphql-coverage をリリースした - pockestrap
  • Rubyの外部コマンド実行入門について発表しました - pockestrap

    福岡Rubyist会議03で、「外部コマンド実行入門」というタイトルで発表をしました。 この記事では、登壇の背景や今後について書きたいと思います。 (福岡Rubyist会議に登壇しました(します) - pockestrap という記事で「この記事は登壇後に編集し、登壇報告記事になります。」と書いたのですが、この記事を直接編集してしまうとこの記事へのツイートとかが微妙な感じになってしまうなーと思ったので、新しく記事を書くことにしました。) 登壇資料 今回の発表では、スライドと「コマンドの選び方フローチャート」を使用しました。両方ともPDFで公開しています。 スライド フローチャート 補足など 発表時に話したりなかったことや、質疑応答で出てきたことなどを少し書きます。 openメソッドについて 質疑応答で、nagachikaさん1から「Kernel.#openメソッドでファイルを開こうとするこ

    Rubyの外部コマンド実行入門について発表しました - pockestrap
    iga_k
    iga_k 2023/11/02
    pockeさんのsystemとか外部コマンドを実行するメソッドの紹介 2023
  • RBS Railsを使ってRailsアプリケーションにSteepを導入する - pockestrap

    RBS Railsを使ってRailsアプリケーションにSteepを導入するまでの解説します。 ただしこの「導入できる」というのは、解析が完走するという意味です。 型エラーを全てつぶすことや、Steepを実際の開発フローに乗っけることは私もまだできていないため、この記事ではサポートしません。 登場人物 RailsアプリケーションにSteepを導入するには、複数のプロジェクトが関連してきます。 まずはそれらをざっと紹介します。 steep gem Rubyの静的型検査器です。 rbs_rails gem RailsでRBSを使う上で必要な型定義を提供・生成するgemです。 データベースのスキーマ定義からモデルの型生成、及びroutesの定義からパスヘルパーの型生成をします。 それ以外のコードの型生成は担当範囲外です。 rbs gem ビルトインのライブラリ、及びスタンダードライブラリの型定義を

    RBS Railsを使ってRailsアプリケーションにSteepを導入する - pockestrap
  • 数クリックでSteepを試せる環境を作った - pockestrap

    こんにちは。pockeです。今回は、GitHub Codespacesを利用して数クリックでSteepを試せる環境を作ったので紹介します。 使い方 pocke/steep-codespacesにアクセスする。 このリポジトリをGitHub Codespacesで開く。 Steepが有効となったVS Codeが起動する。 と言った感じでSteepを試せます。次のようにVS Codeが起動し、型エラーの表示や補完がされます。 型エラーの表示 メソッドの補完 なおGitHub CodeSpacesの無料枠を超える場合、課金が発生するのでご注意ください。 何故作ったか RBSやSteepを手軽に試せる環境を作りたかったためです。 それらを手元の環境にインストールして試すのは、Steepに慣れない人にとっては色々調べることがあり、ハードルが高いです。 またSteepに慣れた人にとっても、環境構築をせ

    数クリックでSteepを試せる環境を作った - pockestrap
  • 正規表現でかんたんにCopを書けるRuboCop拡張 rubocop-grep をリリースしました - pockestrap

    こんにちは。正規表現でかんたんにCopを書けるRuboCop拡張を作ってみたので紹介します。 github.com 使い方 まず、ほかのRuboCop拡張と同様にgemをインストールし、.rubocop.ymlのrequireにこのgemを指定してください。 この拡張は設定をしないと何も動きません。次のように.rubocop.ymlに設定をします。 Grep/Grep: Rules: # シンプルな例。正規表現にマッチした場合に、このCopが警告をします。 - Pattern: '\bENV\b' Message: Do not refer ENV directly. # パターンはArrayにして複数の正規表現を含めることができます。 - Pattern: - 'binding\.irb' - 'binding\.pry' Message: 'Debug code remains' #

    正規表現でかんたんにCopを書けるRuboCop拡張 rubocop-grep をリリースしました - pockestrap
    iga_k
    iga_k 2023/03/06
    pockeさんのRuboCopツール。便利そう!
  • 福岡Rubyist会議に登壇しました(します) - pockestrap

    この記事は福岡Rubyist会議の登壇資料です。ひとまず資料の公開のために記事を公開します。 この記事は登壇後に編集し、登壇報告記事になります。(追記: と言っていたのですが、新しく記事を書くことにして公開しました。 Rubyの外部コマンド実行入門について発表しました - pockestrap) スライド スライド内で用いているフローチャート

    福岡Rubyist会議に登壇しました(します) - pockestrap
    iga_k
    iga_k 2023/02/18
    pockeさんの福岡Rubyist会議03講演
  • Kaigi on Rails 2021 で登壇しました - pockestrap

    先日Kaigi on Rails 2021で、Cache on Railsというテーマで登壇しました。 参加者としての感想は雑に日記に書きましたので、この記事では登壇者としての感想を書きます。 各種資料 スライド スピーカーノートを開くと(ほぼ完全な)トークスクリプトもついています。 Proposal zenn.dev Proposal自体の他に、調査メモなども雑に置いてあります。 話した内容について タイトル通り、Railsにおけるキャッシュについてお話しました。 話した内容の補足をします。 Avoid Using Cache 特にお伝えしたかったのは、「キャッシュを使う必要がなければ、キャッシュを使わない」ということです。 一番話したかったことは、キャッシュを使わずになんとかなるときにキャッシュを使ってしまうのは避けよう、ということでした #kaigionrails— 🎹 (@p_c

    Kaigi on Rails 2021 で登壇しました - pockestrap
    iga_k
    iga_k 2022/06/07
    pockeさんのETagなどの各種資料
  • Rails 7で導入される invert_where メソッドが危険そうだったので調べた - pockestrap

    この記事は現時点(2021-04-28)のrails/railsのmainブランチの最新のコミットでテストしています。 TL;DR invert_whereはすべてのwhereをinvertする 使い方によっては意図しない条件をinvertして危険 invert_whereとは invert_whereは、Rails 7でActiveRecord::Relationに追加される予定のメソッドです。 このメソッドは、relationにチェーンして呼び出すことで、それまでのwhereの条件を反転できます。 つまり次のようになります。(CHANGELOGから引用) class User scope :active, -> { where(accepted: true, locked: false) } end User.active # ... WHERE `accepted` = 1 AND

    Rails 7で導入される invert_where メソッドが危険そうだったので調べた - pockestrap
  • gemspecのfilesとtest_filesとはなんなのか - pockestrap

    TL;DR test_filesは使わない。 files と test_files gemspecで指定するこれらの挙動を説明します。 files https://guides.rubygems.org/specification-reference/#files パッケージに含まれるファイルを指定します。 Gem::Specification.new do |s| s.files = ['foo.rb', 'bar.rb'] end このように書くと、このgemにはfoo.rbとbar.rbのみが含まれます。 実際にはファイルを手書きで列挙せずに、git ls-filesを使ったりDir.globを使ったりすることが多いでしょう。 test_files パッケージに含まれるテストファイルを指定します たとえば次のように指定できます。 Gem::Specification.new do |

    gemspecのfilesとtest_filesとはなんなのか - pockestrap
    iga_k
    iga_k 2021/09/08
    知見
  • Rubyの日本語リファレンスマニュアルに、英語のページが現れるようになります - pockestrap

    こんにちは。ruremaメンバーの id:Pocke です。 Rubyの日語リファレンスマニュアルで、未翻訳の英語のドキュメントが公開されるようになりました。 この記事では、それについて簡単に解説します。 何が変わるのか 今までは、未訳のメソッドは日語リファレンスマニュアルには一切書かれていませんでした。 それが今回の変更によって、英語のリファレンスマニュアルと同じ文章が、そのまま日語リファレンスマニュアルにも書かれるようになります。 たとえば Ruby 2.7で追加されたModule#const_source_locationメソッドのドキュメントは未訳であるため、今までは日語リファレンスマニュアルにはドキュメントが存在しませんでした。 ところが今回からは次のようなドキュメントが日語リファレンスマニュアルにも存在するようになります。 https://docs.ruby-lang

    Rubyの日本語リファレンスマニュアルに、英語のページが現れるようになります - pockestrap
    iga_k
    iga_k 2020/07/09
    これはナイス変更!
  • Rails/UniqueValidationWithoutIndex copを追加した - pockestrap

    rubocop-railsRails/UniqueValidationWithoutIndex copを追加しました。 rubocop-railsの次期リリース(おそらくv2.5.0)から利用できます。 github.com これはなに Rails/UniqueValidationWithoutIndex copは、RDBMSのunique indexがついていないカラムに対して、Active Recordのレイヤーでuniquenessバリデーションを書いている場合に警告をします。 たとえば次のバリデーション定義がある時を考えます。 class User < ApplicationRecord validates :account, uniqueness: true end この時、このCopは次のスキーマ定義によって警告を出したり出さなかったりします。 # account カラムに

    Rails/UniqueValidationWithoutIndex copを追加した - pockestrap
    iga_k
    iga_k 2020/03/26
    unique制約の知見
  • CircleCIの実行を速くした - pockestrap

    先週仕事でやったのをメモします。 CI力が低いので、記事を公開することでツッコミをもらうのが目的です。 モチベーション 弊社ではCIの実行が1回あたり20分ほどかかっています。 これはわりとストレスなので速くしたいです。幸いにも削れそうなところが2つ見つかったので削ってみました。 Shallow Clone CircleCIではデフォルトのcheckoutを使用するとリポジトリの全体をcloneしてきます。 これを回避するためにshallow cloneを導入しました。 まず、次のようなコマンドを定義します。 commands: shallow-clone: description: 'Git clone shallowly' steps: - run: name: 'shallow clone' command: | set -x echo "machine github.com log

    CircleCIの実行を速くした - pockestrap
    iga_k
    iga_k 2020/03/19
    知見だ!
  • String#gsub! は String#gsub よりも遅い - pockestrap

    ruby-jp1のSlackで話していて面白かったのでまとめ。 Slack上の発言 RubyのString#gsub!はString#gsubの破壊的バージョンで、置換結果でレシーバを上書きする。 当然gsub!の方が新しいStringオブジェクトを生成しないので速いと思っていたら、どうやらそんなことはない(しかもgsub!のほうが微妙に遅い)ようなので盛り上がった。 ベンチマーク ベンチマークは次の通り。mameさんが出してくれたサンプルコードをそのままコピペしている。 ss = "abcde" * 100 t = Time.now 100000.times do s = ss s = s.gsub("a", "A").gsub("b", "B").gsub("c", "C").gsub("d", "D").gsub("e", "E") end p Time.now - t #=> 4.

    String#gsub! は String#gsub よりも遅い - pockestrap
    iga_k
    iga_k 2019/09/14
    ruby-jpでみんなでわいわい盛り上がった話題
  • Ruby界隈の大統一Slackワークスペースがほしい - pockestrap

    TL;DR https://join.slack.com/t/ruby-jp/shared_invite/enQtNzE1NDg1ODE2MDM2LTE1NTc2Y2M0ZThlNzdmOWEyZjYwZjdhZDAwNjNhMGE0NDJiODcwMTNkZWRjOTgyMzNkZjEyMmQ1ZWYyNzkzYzk に入るといい感じになってほしい このブログの内容は私個人の意見であってこのSlackコミュニティ全体の意見ではないです 何が欲しいのか vim-jpのSlack1がとてもうまく回っていて、これがRubyコミュニティにもほしい。2 vim-jpのSlackでは、雑談、質問、記事やプラグインの宣伝、Vim体の開発、プラグインの開発、流行りのプラグイン、地域Vimイベント、各言語とVimの話、ランチ料理、スロット、バンクーバー情報などなどとても雑多に色々話されている。 これは

    Ruby界隈の大統一Slackワークスペースがほしい - pockestrap
    iga_k
    iga_k 2019/08/06
    便利〜
  • 1