Ruby

UTF-8 validationとmruby/c

これは mrubyファミリー Advent Calendar 2023 の2日目の記事です。 こんにちは。ima1zumiです。 私はmruby/cでUTF-8を使えるように実装しています。そのなかでRubyの String#valid_encoding みたいな機能を実装しているのでその背景とコードについて書きま…

IRBの型補完を有効にする方法

IRB 1.9.0から tompng さんの実装によりIRBでは型補完が使えるようになりました。katakata_irb の機能がIRB本体に入った形です。 今までは正規表現での補完だったため精度があまり良くなかったのですが、型のパワーを得てより速く精度の良い補完になりました…

IRBとRelineのHEADを使いつつ現在のブランチ名とcommit hashを表示する

IRBとRelineはHEADで使いたいので、特定ディレクトリのものを使用して実行している。 ASDF_RUBY_VERSION=3.3.0-dev ruby -I /Users/mi/ghq/github.com/ruby/reline/lib -I /Users/mi/ghq/github.com/ruby/irb/lib /Users/mi/ghq/github.com/ruby/irb/exe/irb…

RubyKaigi 2023で "UTF-8 is coming to mruby/c" というタイトルで話しました

スライドタイトルは「サンタが街にやってくる」つまり「Santa Claus Is Coming to Town」のもじりでした。 UTF-8がルンルンでmruby/cにやってくる様子を思い浮かべながら決めました。 スライド きっかけ 発表内でも触れましたが、はすみさんにRubyWorldConfe…

IRBとRelineのバージョンを変更してIRBを起動するスクリプトを書いた

IRBのバージョンは簡単に変更できるけど、Relineのバージョン変えてIRB起動するのが面倒だったのでスクリプトを書いてみた。 手元でしか使わないのでARGVで文字列渡すだけの簡素な作り。 bundler/inline は便利だなぁ。 コードにもコメントしてあるけど、ARG…

福岡Rubyist会議03に参加した

福岡Rubyist会議03 regional.rubykaigi.org キーノートスピーカーの2名が公開されたときに、これは絶対に行きたい!!と思って参加を決めた。参加してとても良かった。 sorahさんの発表はRubyKaigiがどんなものを使って、どんなスケジュール感で作られている…

Ruby 3.2 リリースパーティー presented by アンドパッドに参加した

Ruby 3.2 リリースパーティー presented by アンドパッドに参加しました。とても楽しい時間で、新しいRubyのたくさんの機能が楽しみになりました。 andpad.connpass.com 今日のスライドです。文字が小さいときはこれをみてください #ruby32_andpad https://t…

Ruby ビルド時の parse.tmp.y:12.10-14: require bison 3.0, but have 2.3 を解決する

macOS に入っている bison のバージョンが 2.3 のため Ruby 3.2 がビルドできなくなっていた。 ❯ asdf install ruby 3.2.0-dev Downloading ruby-build... Cloning into '/Users/mi/.asdf/plugins/ruby/ruby-build-source'... remote: Enumerating objects: …

perfでCRubyのプロファイリングができる環境を作る

みなさん、こんにちは。ima1zumi です。 これは Ruby Advent Calendar 2022 6日目の記事です。 本日は macOS で perf が動く仮想環境を作って CRuby のプロファイリングできる環境構築をしていきます。 目次 macOS で perf は使えない Virtualbox & Vagrant …

RubyKaigi2022で "String meets Encoding" というタイトルで話しました

RubyKaigi2022 Day3で "String meets Encoding" というタイトルで話しました。 無事話すことができて良かったです。 スライド 後日YouTubeに動画がアップロードされると思うので、アップロードされたらそちらも貼ります。 きっかけ 本編中に話したとおり、Ru…

String#force_encodingは文字コードの強制変換ではない

Ruby の String#force_encoding は String の encoding を変更するだけで、文字コードの変換を行うわけではありません。そのため、バイト列は変換されません。 force_encoding はどんなメソッドか String の encoding を変更します。ただし、バイト列は変更…

Rubyだけで文字コード変換を実装する

Ruby Advent Calendar 2021 - Qiita の5日目の記事です。 こんにちは。ima1zumiです。 私はRubyKaigi Takeout 2021 で Dive into Encoding というタイトルでオレオレ文字コードを作って文字コードを学ぶ話をしました。 その中で、C拡張のgemとして自作文字コ…

RubyKaigi Takeout 2021 に登壇します

RubyKaigi Takeout 2021 に『Dive into Encoding』というタイトルで登壇します。 私の登壇は3日目である 2021-09-11 (土) の 11:00 - 11:25 です。 rubykaigi.org 自作文字コードを作ってローカルのRubyにビルドして遊んだ話をします。文字コードの基礎からR…

Gemのバージョンを比較する

文字列で比較するとうまく比較できない。 '1.0.9' < '1.0.10' # => false Gem::Version を使うと文字列のまま比較できる。 また、 pre や beta などの文字が入っていても正しく比較できる。 require 'rubygems' Gem::Version.new('1.0.9') < Gem::Version.ne…

ファイルパスを指定して irb と reline を起動したい

はじめに 私は irb をよく使うので、せっかくなら常に最新版を使ってバグを見つけたいなと思いました。 irb と reline は git clone しておおむね master に追従しているので、ファイルパスを指定して irb を起動することにしました。 ruby -I <path> Ruby 起動時</path>…

gem installしたgemのパスを知りたい

gemのインストール場所は、$ gem environment の出力結果の INSTALLATION DIRECTORY で分かる。 ❯ gem environment RubyGems Environment: - RUBYGEMS VERSION: 3.2.3 - RUBY VERSION: 3.0.0 (2020-12-25 patchlevel 0) [x86_64-darwin19] - INSTALLATION DI…

URI#escape と URI#unescape は Ruby 3.0.0 から削除された

タイトルの通り、 URI.escape と URI.unescape は Ruby 3.0.0 から削除されました。長い間非推奨となっていましたが、ついに 3.0.0 で削除されました。 代わりに ERB::Util.#url_encode , CGI.escape , URI.encode_www_form , WEBrick::HTTPUtils.#escape_fo…

reline のテストを実行

はじめに この記事は2020年ふりかえりアドベントカレンダー 11日目です。これを書いているのは12月14日ですが、あまり気にしないことにしました。昨日の記事は サロゲートペアとRubyのStringについての覚書 - いまブログ です。 先日 Ruby の標準添付ライブ…

サロゲートペアとRubyのStringについての覚書

はじめに この記事は2020年ふりかえりアドベントカレンダー 10日目です。これを書いているのは12月14日ですが、あまり気にしないことにしました。昨日の記事は .irbrc で irb で使える独自メソッドを定義する - いまブログ です。 TL;DL サロゲートペアは16…

.irbrc で irb で使える独自メソッドを定義する

はじめに この記事は2020年ふりかえりアドベントカレンダー 9日目です。これを書いているのは12月12日ですが、あまり気にしないことにします。昨日の記事は Hamada.rb #16 に参加 - いまブログ です。 今日は以下のツイートで教えていただいた内容についてま…

Hamada.rb #16 に参加

この記事は2020年ふりかえりアドベントカレンダー 8日目です。昨日の記事は yarn install 時の gyp: No Xcode or CLT version detected! を解消する - いまブログ です。 島根県浜田市の Ruby コミュニティ、 Hamada.rb に参加しました。現在はオンラインで…

Rubyにはオブジェクトを汚染する仕組みがあった

はじめに Ruby 3.0 Advent Calendar 2020 5日目の記事です。 昨日は、【Ruby 3.0 Advent Calendar 2020】Ruby3.0で非推奨から廃止になるメソッドたち【4日目】 - ゲームリンクスの徒然なる日常 です。 また、この記事は2020年ふりかえりアドベントカレンダー…

Rubyリファレンスマニュアルを修正する方法

この記事は2020年ふりかえりアドベントカレンダー 2日目です。昨日の記事は 2020年の終わりと2021年に向けての準備をするぞという気持ち - いまブログ です。 Ruby リファレンスマニュアルとは Ruby の日本語版の公式ドキュメントです。略して「るりま」と呼…

Machida.rb #04 に参加

Machida.rb #04 Machida.rb #04 - Machida.rb | Doorkeeper 今回のテーマはRubyのコードを持ち寄ってワイワイコードレビューする会! ということで私も自作プログラムをレビューしていただいた。 レビューしてもらったコード Slackのメッセージをコピペする…

macOSでRubyをビルドするときの注意点

2020/09/08: gdbmのスペルが間違っていたため修正 2022/09/20: libyamlを追加 Ruby Hacking Challenge in Hamada.rb - connpassに参加しDocker(Ubuntu)でRuby 2.8をビルドしました。 ローカルのmacOS Catalinaでもビルドできたので注意点を書き残しておきま…

VSCodeで使っている拡張機能とsettings.json

まえがき macをクリーンインストールするためにVSCodeの拡張機能を整理したのでまとめました。 使う言語 メイン: Ruby, Ruby on Rails, Python たまに使う: JavaScript, HTML, CSS 拡張機能 アルファベット順に書いていきます。 Beautify JS書いてる時に便…

gemのソースコードをVSCodeで開く

gemのソースコードを見たいときにbundle openを使うと便利です。 このコマンドを使うと、bundleしているバージョンのgemのソースコードをコマンド一発で開けます。気持ちがいいです。 Bundler: The best way to manage a Ruby application's gems というわけ…

【Ruby】URLに使えるランダムな文字列を生成する

SecureRandom.urlsafe_base64が利用できます。 require "securerandom" p SecureRandom.urlsafe_base64 # => j5NMdF_d2_4KUWkjIesVfw 文字数を変えたい場合は、SecureRandom.urlsafe_base64(n)のように書きます。生成される文字列の長さはn の約 4/3 倍にな…