サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆議院選挙2026
pocke.hatenablog.com
タイトルは id:h6n 、id:anatofuz リスペクトです。 hanachin.hateblo.jp anatofuz.hatenablog.com 2026年1月に株式会社コードタクトに入社して1ヶ月が経ちました。いわゆる入社エントリです。 入社まで 入社までは半年ほど無職をしていました。1 半年間、長いようですぐ終わってしまった。やりたいことは色々あったのですが、やりきれないまま終わってしまった感があります。 とはいえ、まるまる1週間使った車旅を2回やったり、ゲームの攻略サイトを作るためにVibe Codingを本格的にはじめたり、ゲーム関連で人生初の同人誌を出したり、新卒の頃に一度作ってあまりの大変さに二度とやるまいと思っていた栗の渋皮煮を作ったり、時間があるからこそできたことはたくさんありました。 無職であることで、転職活動の選考に時間を使えたのも良い体験でした。今回転職プ
こんにちは。 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
こんにちは。 id:Pocke です。 graphql-coverage という gem をリリースしました。 github.com なにこれ GraphQL-Ruby を使っているときに、テストがすべてのフィールドを網羅して呼んでいることを検査するための gem です。 モチベーション 私は GraphQL-Ruby を使って GraphQL サーバーを実装するときに、テストからはすべてのフィールドを呼ぶようなルールで開発をしています。ですがこれを強制する良いツールはありませんでした。そのためフィールドにテストが書かれていることを開発者自身が確認する必要がありました。 「SimpleCovのようなカバレッジ測定ツールを使えば解決するのでは?」と思う方もいるかもしれません。ですが GraphQL-Ruby の場合は単純なコードカバレッジの測定ではこの問題は解決しません。なぜならば Grap
こんにちは。pockeです。今回は、GitHub Codespacesを利用して数クリックでSteepを試せる環境を作ったので紹介します。 使い方 pocke/steep-codespacesにアクセスする。 このリポジトリをGitHub Codespacesで開く。 Steepが有効となったVS Codeが起動する。 と言った感じでSteepを試せます。次のようにVS Codeが起動し、型エラーの表示や補完がされます。 型エラーの表示 メソッドの補完 なおGitHub CodeSpacesの無料枠を超える場合、課金が発生するのでご注意ください。 何故作ったか RBSやSteepを手軽に試せる環境を作りたかったためです。 それらを手元の環境にインストールして試すのは、Steepに慣れない人にとっては色々調べることがあり、ハードルが高いです。 またSteepに慣れた人にとっても、環境構築をせ
こんにちは。正規表現でかんたんに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' #
福岡Rubyist会議03で、「外部コマンド実行入門」というタイトルで発表をしました。 この記事では、登壇の背景や今後について書きたいと思います。 (福岡Rubyist会議に登壇しました(します) - pockestrap という記事で「この記事は登壇後に編集し、登壇報告記事になります。」と書いたのですが、この記事を直接編集してしまうとこの記事へのツイートとかが微妙な感じになってしまうなーと思ったので、新しく記事を書くことにしました。) 登壇資料 今回の発表では、スライドと「コマンドの選び方フローチャート」を使用しました。両方ともPDFで公開しています。 スライド フローチャート 補足など 発表時に話したりなかったことや、質疑応答で出てきたことなどを少し書きます。 openメソッドについて 質疑応答で、nagachikaさん1から「Kernel.#openメソッドでファイルを開こうとするこ
この記事は福岡Rubyist会議の登壇資料です。ひとまず資料の公開のために記事を公開します。 この記事は登壇後に編集し、登壇報告記事になります。(追記: と言っていたのですが、新しく記事を書くことにして公開しました。 Rubyの外部コマンド実行入門について発表しました - pockestrap) スライド スライド内で用いているフローチャート
福岡Rubyist会議03に応募したプロポーザルです。このプロポーザルは採択されました。 タイトル トークのタイトルを 30 文字以内で書いてください。これは公式サイトに記載されます。 外部コマンド実行入門 トーク概要(100文字以内) トークの概要を 100 文字以内で書いてください。これは公式サイトに記載されます。 Rubyからコマンドを起動する方法は数多くあります。systemメソッドなどがその代表です。ですが往々にしてそれらはうまく使い分けられていません。 このトークでは、それらの使い分けを解説します。 トーク詳細 トークの詳細を記載してください。これは外部に公開されません。審査員のみが参照します。 Rubyでは、外部コマンドを実行する方法が数多く用意されています。たとえば組み込みライブラリや標準添付ライブラリだけでも、以下のメソッドが挙げられます。(ざっと思い出せるものだけな
adventar.org この記事は地方在住Advent Calendar 25日目の記事です。 東京都目黒区から岡山に引っ越してきて1年ほど経ちました。 1年間住んでみて分かったことを記事にしようと思います。 Advent Calendarと関係なくもともと記事を書こうと思っていたのですが、どうせなら人を巻き込んだほうが面白いかなと思ってAdvent Calendarを作りました。数枠埋まれば良いかなと思っていたら、なんと20枠も埋まりました。書いていただいた皆様、ありがとうございました。 以下本題 住んでいる地域 岡山市内に住んでいます。 もともと、岡山駅近辺の路面電車が走っているエリアで家を探していました。 しかし結局はそのエリアからは少し外れた、郊外の住宅街という感じのエリアに住んでいます。 郊外を選んだのは、結果としては正解だったなと感じています。 岡山駅近辺だと高いビルがたくさ
おはようございます。ぽっけです。2021年12月21日目の、朝…じゃないな、夜です。 この記事はRubyist近況Advent Calendar 2021 21日目の記事です。 20日目は id:Sixeight さんの近況でした。Ruby Prizeのお祝いありがとうございます! 私はキーボードはずっとHHKB Pro 2 Type-Sをつかっています。 この記事では、ここ1年ぐらいの自分の話を適当に書こうと思います。 退職 本日が株式会社ビットジャーニーへの最終出社でした。近況っぽい話ですね。2019年の2月に入社したので、3年弱在籍していたことになります。 1.7ヶ月ほど無職を満喫します。旅行に行きたいけど、コロナが厳しそうで悲しい……。 次の会社ではRailsアプリケーションエンジニアとしても働きますが、業務としてRBSの開発も行う予定です。1 Ruby Ruby関連では、コミッタ
最近、 https://commits.hatenablog.com で毎日日記を書いている。 この毎日というのは一日も欠かさずという意味で、実際日記を書き始めた2019-12-17から一日も欠かさずに続けている。1 これを続けるために2つ工夫していることがあるので紹介したい。1つは仕組み化で、もう1つは日記への向き合い方である。 仕組み化 この日記を書くために必要なことは徹底的に仕組み化している。 なぜならば、そうしないとめんどくさくなってすぐ書くのをやめてしまうのが目に見えているからだ。 まず、記事をVimで書けるようにした。 これによってはてなブログにアクセスすることなく記事を書けるようになった。 コミットログを見ると、2019-12-20(つまりブログを書き始めてから3日目)にはVimから記事を書くことができるようになっていた。 そして、記事の公開とツイートを完全に自動化した。 V
TL;DR expect{subject}.to raise_error SystemExit exitをテストする状況はそもそも筋が悪い 前置き こんにちは。私は最近miというRails用のマイグレーションジェネレータを作っています。 github.com Railsのジェネレータは内部でThorというライブラリを使用しています。 このライブラリを使用していく上で、一つ問題が発生しました。 処理を途中で切り上げるためにexitメソッドを使用しないといけない事態に陥ってしまっていました。 問題点 exitはその時点でプロセスを終了するメソッドです。 このメソッドの問題点の一つに、テストがしづらくなると言うことがあります。 例えば、以下のようなメソッドをテストすることを考えます。 def do_something # ... if cond # ... exit 1 end # ... en
先日Kaigi on Rails 2021で、Cache on Railsというテーマで登壇しました。 参加者としての感想は雑に日記に書きましたので、この記事では登壇者としての感想を書きます。 各種資料 スライド スピーカーノートを開くと(ほぼ完全な)トークスクリプトもついています。 Proposal zenn.dev Proposal自体の他に、調査メモなども雑に置いてあります。 話した内容について タイトル通り、Railsにおけるキャッシュについてお話しました。 話した内容の補足をします。 Avoid Using Cache 特にお伝えしたかったのは、「キャッシュを使う必要がなければ、キャッシュを使わない」ということです。 一番話したかったことは、キャッシュを使わずになんとかなるときにキャッシュを使ってしまうのは避けよう、ということでした #kaigionrails— 🎹 (@p_c
RubyKaigi Takeout 2021 に登壇しました。 rubykaigi.org スライドはこちら。 docs.google.com 今回は、Ruby 3.1に向けてRBSはどのような機能追加を予定しているのか、という話をしました。私が最近開発しているrbs collectionコマンドを中心に据えて、soutaroさんが開発予定のRBS言語仕様のアップデートについても紹介しました。 内容について 今回の発表は新機能の紹介がメインになりました。そのためテクニカルなトークはあまりできなかったかなあ、と少し反省しています。どこかでrbs collectionのもう少し実装よりの話をできると良いかも知れないですね。 とはいえ、その分新機能の紹介にしっかり時間を使って紹介はできたかなと思っています。 また、RBS言語仕様のアップデートについてはRBSの作者のsoutaroさんに内容のサポ
この記事は現時点(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
先日mameさんとsoutaroさんに推薦をいただいて、Rubyのコミッターになりました。 やっていること Ruby 3の新機能である静的型解析のためのRBSを、前述のmameさんsoutaroさんに助けられながら担当しています。 自分がメインで見ているものには、RubyのコードからRBSを生成するrbs prototypeコマンド群があります。 その他にも標準ライブラリの型を書いたり、RBS言語の構文をいじったり、なんとなく全体的に見れるものは見ています。 またgem_rbs_collectionという、GemのRBSを管理するリポジトリも担当しています。 個人的なプロジェクトのRBS Railsに関連して、特にRailsが持つ各種GemのRBSを管理しています。 静的型以外では、Ruby日本語リファレンスマニュアル(通称るりま)のメンバーでもあるため、るりまの作業中に見つかった問題を本
新しいOpenStructに信頼できない値を渡すと、GCされないシンボルが作成されメモリが使いつくされる可能性があります。 対象のバージョン 対象となるostruct gemのバージョンは、0.3.0かそれ以上です。 Ruby 3.0にはostructのバージョン0.3.1が添付されているため、この対象となります。 Ruby 2.7とそれ以前のRubyのバージョンでは、これよりも古いバージョンのostructが添付されているためデフォルトでは対象になりません。 しかし、Ruby 2.7でもgem install ostructしてバージョン0.3.1をインストールでき、その場合は対象となります。 Problem ostruct gem v0.3.0以上では、OpenStruct.newに渡したHashのキーに対応するメソッドを、OpenStruct#initializeが呼ばれたタイミング
最近の自分の読書スタイルについてまとめてみる。 基本的にKindleで本を読んでいる。物理本は読むことが少ないので、例外ケースという感じ。この記事で書くほどのことではない。 基本的に読書をする状況ごとに別の本を読んでいる。また、本ごとにつかうデバイスは固定している。1つの本をいろんなデバイスで読んでいると、切り替えがだるい。 主に次の4つの状況で読書をしている お風呂 寝る前 ドライヤー中 すきま時間 また、これとは別に娯楽として漫画を大量に読んでいる。 各状況ごとの読書スタイル 状況ごとに違うスタイルで読書をしているので、以下で各状況について書く。 お風呂での読書 一番時間を取っているのがお風呂での読書だと思う。1回の入浴で30分以上は読書に使っていると思う。ほぼ毎日。 お風呂ではKindle Paperwhite (多分防水)を使って読んでいる。お風呂の蓋のでこぼこにKindleをはさ
RBSはRuby 3に組み込まれた、Rubyの型情報を記述する言語です。 この記事ではRBSの文法を駆け足で紹介します。 細かい話は飛ばしますが、この記事を読めば大体のケースでRBSを読み書きできるようになると思います。 事前準備 インストール まずは文法の前に、rbs gemをインストールしましょう。 Ruby 3を使っている場合、rbs gemはRuby 3に同梱されているため何もしなくても使えます。 Ruby 3未満を使っている場合でも、gem install rbsすれば使うことができます。 この記事では、rbs gem v1.0.0を対象に構文を紹介します。 $ gem install rbs Successfully installed rbs-1.0.0 1 gem installed $ rbs --version rbs 1.0.0 動作確認 書いたRBSは、rbsコマン
RBS Railsを使ってRailsアプリケーションにSteepを導入するまでの解説します。 ただしこの「導入できる」というのは、解析が完走するという意味です。 型エラーを全てつぶすことや、Steepを実際の開発フローに乗っけることは私もまだできていないため、この記事ではサポートしません。 登場人物 RailsアプリケーションにSteepを導入するには、複数のプロジェクトが関連してきます。 まずはそれらをざっと紹介します。 steep gem Rubyの静的型検査器です。 rbs_rails gem RailsでRBSを使う上で必要な型定義を提供・生成するgemです。 データベースのスキーマ定義からモデルの型生成、及びroutesの定義からパスヘルパーの型生成をします。 それ以外のコードの型生成は担当範囲外です。 rbs gem ビルトインのライブラリ、及びスタンダードライブラリの型定義を
この記事はRuby 3.0 Advent Calendar 18日目の記事です。 qiita.com 昨日の記事は id:Pocke さんで「ruby/rbsに取り込まれた私のパッチ」でした。 pocke.hatenablog.com この記事ではRuby 3で導入される型定義ファイルであるRBSファイルを自動生成する方法について説明します。 既存のRubyコードに対するRBSを1から書いていくのは大変です。 そのためRBSを生成するプログラムがいくつか開発されており、Ruby 3にもTypeProf、rbs prototype rb、rbs prototype runtimeの3つが同梱されます。 ところがこれら3つの特徴を解説した情報は現時点ではあまりありません。私がrbs prototypeを主に開発していることもあり、今回それぞれの特徴を記事にまとめることにしました。 前提 前提知
なんか色々がちゃがちゃやっていて面白いので、メモしておく。 rbs_rails とは github.com Rails で RBS (Rubyの型定義ファイル)を扱うためのライブラリ。 「rbs_rails に Rails の型を取り込む」とは rbs_rails には2つの機能がある。 1つは、ユーザーの書いたRailsアプリケーションのコードから、型定義ファイルを生成すること。 例えば、usersテーブルにaccountというString型のカラムがあったら、Userクラスの型にaccountというStringを返すインスタンスメソッドを定義する。 こちらの機能は今回の記事には関係ない。 もう1つの機能は、Rails 自体の型定義を提供すること。 例えば Rails のコードを読み込むとActiveRecord::Baseクラスが定義されるが、それを型として使うにはActiveReco
最近、東京から岡山に引っ越しました。 実家は川崎市で、一人暮らしを始めてからはずっと東京にいたので、初めての地方暮らしとなります。 どこに引っ越したのか 岡山県に引っ越しました。特に縁もゆかりもないです。むしろ縁もゆかりもないところのほうが新鮮で面白いだろうなと思って選びました。 暮らしやすさ 都内にいた頃よりも、生活の満足度は上がっていると思います。 自転車がないと不便かなーと思うこともありますが、日常的な用事は徒歩で済むし、わりと快適に過ごせています。 家賃が安いのを良いことに条件の良い家に引っ越したことも、満足度の向上に寄与しているように思えます。 不安な点 一方不安な点として、店の少なさがあります。 今は家の近くにコンビニもスーパーもあるから良いのですが、そのコンビニ、スーパー1軒がなくなると途端に厳しくなります。SPOF感。 実際にこの不安はある程度現実になっていて、家の近くの飲
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 |
こんにちは。ruremaメンバーの id:Pocke です。 Rubyの日本語リファレンスマニュアルで、未翻訳の英語のドキュメントが公開されるようになりました。 この記事では、それについて簡単に解説します。 何が変わるのか 今までは、未訳のメソッドは日本語リファレンスマニュアルには一切書かれていませんでした。 それが今回の変更によって、英語のリファレンスマニュアルと同じ文章が、そのまま日本語リファレンスマニュアルにも書かれるようになります。 たとえば Ruby 2.7で追加されたModule#const_source_locationメソッドのドキュメントは未訳であるため、今までは日本語リファレンスマニュアルにはドキュメントが存在しませんでした。 ところが今回からは次のようなドキュメントが日本語リファレンスマニュアルにも存在するようになります。 https://docs.ruby-lang
github.com RBSというRubyの型のためのソフトウェアがあり、RBSはrbsコマンドを含んでいる。 このコマンドは、.rbsファイル(Rubyの型定義ファイル)を書いていく上で必要になる。 この記事では、そのrbsコマンドの各サブコマンドについて、簡単に解説する。 rbsコマンドの実装は lib/ast/cli.rb に書かれている。 サブコマンドの実装は、 run_サブコマンド名メソッドを読むと良い。つまり、rbs astコマンドの実装はrun_astメソッドにある。 現時点(2020-06-15)のmasterブランチの最新版( https://github.com/ruby/rbs/commit/00872ed5de364a5d2fcf8169aee87307ba67aad3 )を元にしている。 サブコマンドに共通のオプション まず、共通で使えるオプションの説明をする。
GraphQL Rubyで定義したスキーマの実行中に起きたエラーをいい感じに通知するようにしたので、それを紹介します。 Problem GraphQL Rubyで定義したスキーマのフィールドのresolve中にエラーが起きた場合、Rubyレベルのバックトレースはあまり当てになりません。 Rubyレベルのバックトレースには、リクエストされたクエリのフィールド名などは出てきません。 そのためどのようなクエリが実行された結果エラーが起きたのか、という情報は見えません。 Solution これを解決するためにGraphQL RubyのTracerを使い、Sentryのextra contextとしてGraphQL RubyレベルでのバックトレースをSentryに送るようにしました。 これによって、次のクエリに対して、次のバックトレースがSentryに送られるようになりました。 GraphQL Qu
ある時「アプリケーションがどういうタイミングでどういうメールを送るか、エンジニア以外も把握したい」という要望が社内で上がりました。 これはもっともな要望で、アプリケーションがどういうメールを送っているのか分からずユーザーサポートするのはしんどいことが容易に想像できます。 ところが、今まではどういうメールが送られるかを調べるにはコードを読むしかありませんでした。 この問題を解決するためにAction Mailerのpreview機能を使ったので、紹介します。 なおRailsのバージョンはv5.2.4.2を対象としています。 Action Mailerのpreview機能とは Action Mailerのpreview機能の情報はあまり多くありません。 とはいえRails Guideに少しだけ記述があるので、まずはそれを見てみましょう。 Action Mailerのプレビュー機能は、レンダリン
先週仕事でやったのをメモします。 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
次のページ
このページを最初にブックマークしてみませんか?
『pockestrap』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く