<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: shimokawa</title>
    <description>The latest articles on DEV Community by shimokawa (@aim2bpg).</description>
    <link>https://dev.to/aim2bpg</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3625795%2Faa73ed65-b933-45a8-b16e-004df124b6ab.jpeg</url>
      <title>DEV Community: shimokawa</title>
      <link>https://dev.to/aim2bpg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aim2bpg"/>
    <language>en</language>
    <item>
      <title>Rubree: A Modern Ruby Regex Editor Running Fully in Your Browser</title>
      <dc:creator>shimokawa</dc:creator>
      <pubDate>Mon, 24 Nov 2025 11:55:20 +0000</pubDate>
      <link>https://dev.to/aim2bpg/rubree-a-modern-ruby-regex-editor-running-fully-in-your-browser-5g2b</link>
      <guid>https://dev.to/aim2bpg/rubree-a-modern-ruby-regex-editor-running-fully-in-your-browser-5g2b</guid>
      <description>&lt;p&gt;I’m excited to announce &lt;strong&gt;Rubree&lt;/strong&gt;, a modern regular expression editor for Ruby developers — inspired by Rubular but rebuilt from scratch using &lt;strong&gt;Ruby, Rails, and WebAssembly (Wasm)&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/aim2bpg/rubree/main/app/assets/images/site_view.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmclcqguxlqcc0lszy7yg.png" alt="Rubree Screenshot" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Why Rubree?
&lt;/h2&gt;

&lt;p&gt;Rubular has long been a beloved tool for Rubyists, but it comes with some limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs on older Ruby 2.5.9, which affects speed and maintainability
&lt;/li&gt;
&lt;li&gt;Not open-source, making customization and internal investigation difficult
&lt;/li&gt;
&lt;li&gt;Matching is server-dependent, requiring backend processing for every input
&lt;/li&gt;
&lt;li&gt;Cannot visualize regex structure as a railroad diagram (like Regexper)
&lt;/li&gt;
&lt;li&gt;Replacement preview is unavailable
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rubree addresses these challenges by redesigning both the &lt;strong&gt;UI&lt;/strong&gt; and &lt;strong&gt;backend logic&lt;/strong&gt;, running entirely in the browser for a fast, modern regex experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ■ In-Browser Regex Evaluation (Wasm)
&lt;/h3&gt;

&lt;p&gt;All regex evaluation runs locally in the browser using WebAssembly-powered Ruby.&lt;br&gt;&lt;br&gt;
No network latency, and input responses feel instant.&lt;/p&gt;

&lt;h3&gt;
  
  
  ■ Regex Structure Visualization (Railroad Diagrams)
&lt;/h3&gt;

&lt;p&gt;Using &lt;code&gt;regexp_parser&lt;/code&gt; for parsing and &lt;code&gt;railroad_diagrams&lt;/code&gt; for SVG rendering,&lt;br&gt;&lt;br&gt;
Rubree provides clear, visual insights into your regex structure.  &lt;/p&gt;

&lt;p&gt;Perfect when you want to understand &lt;strong&gt;how your regex actually connects patterns&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ■ Substitution Preview
&lt;/h3&gt;

&lt;p&gt;Replacements directly in the browser and preview results instantly.&lt;/p&gt;

&lt;h3&gt;
  
  
  ■ Ruby Code Snippet Generation
&lt;/h3&gt;

&lt;p&gt;Generate ready-to-use Ruby code directly from your regex input.&lt;/p&gt;

&lt;h3&gt;
  
  
  ■ Shareable URLs
&lt;/h3&gt;

&lt;p&gt;Click the share icon to encode your current input in Base64 and generate a URL.&lt;br&gt;&lt;br&gt;
Share with teammates or in chat, and they can reproduce the same state instantly.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔧 How to Use
&lt;/h2&gt;

&lt;h3&gt;
  
  
  First Visit
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://aim2bpg.github.io/rubree/" rel="noopener noreferrer"&gt;Rubree Demo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;"Get started"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Initial Wasm loading takes about &lt;strong&gt;10 seconds&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Subsequent Visits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Depending on browser cache, a few seconds of loading may occur. This is due to browser behavior, not Wasm.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Basic Flow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Enter your regex
&lt;/li&gt;
&lt;li&gt;Enter sample text
&lt;/li&gt;
&lt;li&gt;Check matches, replacement results, and structure diagrams&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Try Sample Texts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Try this example&lt;/strong&gt;: auto-fill a sample
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dice icon&lt;/strong&gt;: display a random text
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regex Examples&lt;/strong&gt;: choose from a curated list&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Zoom &amp;amp; Share Diagrams
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Magnifying glass icon&lt;/strong&gt;: zoom in
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clipboard icon&lt;/strong&gt;: copy the SVG diagram&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧱 Tech Stack
&lt;/h2&gt;

&lt;p&gt;Rubree started with Ruby 3.3 + Rails 8.0 running stably on Wasm.&lt;br&gt;
After working through several technical challenges specific to Wasm builds, Rubree now runs on Ruby 4.0 + Rails 8.1 as of April 5, 2026.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚙️ Backend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ruby 4.0
&lt;/li&gt;
&lt;li&gt;Rails 8.1
&lt;/li&gt;
&lt;li&gt;Regexp::Parser&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎨 Frontend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hotwire
&lt;/li&gt;
&lt;li&gt;TailwindCSS
&lt;/li&gt;
&lt;li&gt;RailroadDiagrams (SVG)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🛠 Development
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Foreman
&lt;/li&gt;
&lt;li&gt;Lefthook&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧹 Lint / Testing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Rubocop / ERB Lint / Biome
&lt;/li&gt;
&lt;li&gt;RSpec
&lt;/li&gt;
&lt;li&gt;Playwright
&lt;/li&gt;
&lt;li&gt;Octocov&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Build / Deployment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Wasmify Rails → WebAssembly
&lt;/li&gt;
&lt;li&gt;GitHub Pages&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🤖 Security (Shift-left)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dependabot
&lt;/li&gt;
&lt;li&gt;Gitleaks
&lt;/li&gt;
&lt;li&gt;Brakeman&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ▶️ CI/CD
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧩 Background
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Started in 2022 as a &lt;a href="https://bootcamp.fjord.jp/" rel="noopener noreferrer"&gt;FJORD BOOT CAMP&lt;/a&gt; graduation project
&lt;/li&gt;
&lt;li&gt;Inspired by demand for an open-source Rubular alternative
&lt;/li&gt;
&lt;li&gt;RubyKaigi 2025 LT helped define the combination of &lt;code&gt;regexp_parser&lt;/code&gt; + &lt;code&gt;railroad_diagrams&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Built a browser workflow: &lt;strong&gt;AST parsing → SVG rendering → Wasm execution&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Achieved full Rails app execution in the browser&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Rubree is a &lt;strong&gt;one-stop regex tool&lt;/strong&gt; for Rubyists, long-time Rubular users, and anyone learning regular expressions.  &lt;/p&gt;

&lt;p&gt;Use it for quick code testing, learning, or exploring complex regex patterns.&lt;br&gt;&lt;br&gt;
Questions or feature requests? Open an issue on GitHub:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/aim2bpg/rubree/issues" rel="noopener noreferrer"&gt;Rubree Issues&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy regexing! 🔍✨&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>regex</category>
      <category>webassembly</category>
      <category>rails</category>
    </item>
  </channel>
</rss>
