<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Rails on Fluffy Moss</title><link>https://flfymoss.com/tags/rails/</link><description>Recent content in Rails on Fluffy Moss</description><generator>Hugo</generator><language>ja-JP</language><lastBuildDate>Sun, 14 Dec 2025 00:00:00 +0900</lastBuildDate><atom:link href="https://flfymoss.com/tags/rails/index.xml" rel="self" type="application/rss+xml"/><item><title>Rails 8.1 で Protocol Buffers を扱う</title><link>https://flfymoss.com/posts/2025-12-12-rails-81-with-protobuf/</link><pubDate>Sun, 14 Dec 2025 00:00:00 +0900</pubDate><guid>https://flfymoss.com/posts/2025-12-12-rails-81-with-protobuf/</guid><description>&lt;div class="notice info"&gt;
 &lt;div class="notice-title"&gt;
 &lt;i class="fa-solid fa-exclamation-circle" aria-hidden="true"&gt;&lt;/i&gt;Info
 &lt;/div&gt;
 &lt;div class="notice-content"&gt;本記事は&lt;a href="https://adventar.org/calendars/12269" class="external-link" target="_blank" rel="noopener"&gt;Akatsuki Games Advent Calendar 2025&lt;/a&gt;における14日目の記事です。
昨日の13日目は奈茶さんの記事『&lt;a href="https://knasa.hateblo.jp/entry/2025/12/13/000000" class="external-link" target="_blank" rel="noopener"&gt;【Unity】良い感じに被写界深度を調整できるカメラを作る&lt;/a&gt;』でした。&lt;/div&gt;
&lt;/div&gt;

&lt;hr&gt;
&lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#はじめに"&gt;はじめに&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#巨大な数値の取り扱いが処理系依存"&gt;巨大な数値の取り扱いが処理系依存&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#データ量が大きくなりがち"&gt;データ量が大きくなりがち&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#デコードの負荷が高め"&gt;デコードの負荷が高め&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#rails-と-protobuf-の食い合わせの悪さについて"&gt;Rails と protobuf の食い合わせの悪さについて&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#protobuf-の基本"&gt;protobuf の基本&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#railsでの難しさ1--リロード"&gt;Railsでの難しさ(1) : リロード&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#railsでの難しさ2--require-による依存解決"&gt;Railsでの難しさ(2) : require による依存解決&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#ここまでの対応まとめ"&gt;ここまでの対応まとめ&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#なるべくシンプルに-rails-へ適応させるには"&gt;なるべくシンプルに Rails へ適応させるには&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#protoc-実行後-pb-ファイルの-require-を書き換える"&gt;protoc 実行後、 pb ファイルの require を書き換える&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#zeitwerk-の管理下から除外し-initializer-で一括-require-する"&gt;Zeitwerk の管理下から除外し、 initializer で一括 require する&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#まとめ"&gt;まとめ&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#ライセンス"&gt;ライセンス&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;


&lt;h2 id="はじめに"&gt;
 はじめに
 &lt;a class="heading-link" href="#%e3%81%af%e3%81%98%e3%82%81%e3%81%ab"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;見出しへのリンク&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;サーバがHTTP経由でAPIを公開しクライアントがそれを呼び出すモデルにおいて、送受信するデータの形式としてJSONが広く利用されています。
JSON は基本的にどんな言語でもサポートされており（特にブラウザとの相性が良い）、可読性が高く、取り回しもしやすいため潰しが効きます。そのため、とりあえず JSON を採用しておけば困るケースはほとんどありません。&lt;/p&gt;
&lt;p&gt;……と書きましたが、「ほとんど」と書いたように、困るとまではいかなくとも最適でないケースがいくつかあります。例えば、以下のケースです。&lt;/p&gt;
&lt;h3 id="巨大な数値の取り扱いが処理系依存"&gt;
 巨大な数値の取り扱いが処理系依存
 &lt;a class="heading-link" href="#%e5%b7%a8%e5%a4%a7%e3%81%aa%e6%95%b0%e5%80%a4%e3%81%ae%e5%8f%96%e3%82%8a%e6%89%b1%e3%81%84%e3%81%8c%e5%87%a6%e7%90%86%e7%b3%bb%e4%be%9d%e5%ad%98"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;見出しへのリンク&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;JSON において、数値の取り扱いは処理系依存です。
例として、int64 の最大値である &lt;code&gt;9223372036854775807&lt;/code&gt; を含む JSON について、手元の Node.js と Ruby でそれぞれ出力した結果が以下になります。&lt;/p&gt;</description></item></channel></rss>