プログラマのための IT 教科書

規格は誰が決めているのか

この部の 11 / 12 章 ・ 全体で 32 / 76 章 ・ 読了目安 35 分

この章を読むとできるようになること
  • 仕様の議論を「規格ではこう」で終わらせられる
  • RFC を Obsoleted by まで確認して読める
  • 国・通貨・日時を自分で定義せず、標準のコードを使える

ここまで、たくさんの略語が出てきました。

HTTP  TCP  DNS  TLS  JSON  UTF-8  ISO 8601  ECMAScript  POSIX  OAuth

素朴な疑問があります。

これ、誰が決めたのか?

Google が作ったブラウザと、Apple が作ったスマホと、 どこの誰が書いたか分からないサーバーが、なぜ同じ手順で会話できるのでしょうか。

答えは、書かれた仕様が公開されていて、全員がそれに従っているからです。 その仕様を 規格(standard) といいます。

この章は、その仕様がどこにあり、どう読み、いつ役に立つかの話です。

なぜ規格を知っていると得なのか

新人のうちは「規格なんて自分には関係ない」と感じます。実際には3つの場面で効いてきます。

1. 仕様の争いを1分で終わらせられる

「この API、日付は yyyy/MM/dd で返すべきでは?」
「いや yyyy-MM-dd でしょう」
   ↓
「日時は RFC 3339 に寄せませんか。2026-08-14T09:30:00+09:00 の形です」

「私はこう思う」の水掛け論が、「既にある選択肢のどれを採るか」に変わります。

ただし、規格を持ち出せば議論が終わるわけではありません。 規格はたいてい幅を持っているので(ISO 8601 には複数の書き方があります)、 「その中のどれを自分たちの API の約束にするか」はチームで決める必要があります。 規格が与えてくれるのは、共通の語彙と、検討済みの選択肢です。

2. 車輪を再発明しなくて済む

□ 国の一覧を自分で作る          → ISO 3166 がある
□ 通貨コードを独自に決める      → ISO 4217 がある
□ 「日本語」の言語コードを決める → ISO 639 がある
□ 独自のパスワード保存方式を作る → 既存の標準アルゴリズムがある

自分で決めた独自コードは、他社とデータ交換する日に必ず破綻します。

3. 「仕様ではどうなっているか」を自分で確認できる

ライブラリの挙動が想定と違う時、 「バグなのか、仕様通りなのか」を判定できるのは規格だけです。

Stack Overflow の回答より、一次情報のほうが速くて確実です。

誰が決めているのか — 標準化団体の地図

規格は1つの組織が全部決めているわけではありません。領域ごとに担当が違います。

団体主な担当あなたが日々触れているもの
IETFインターネットの通信HTTP, TCP/IP, DNS, TLS, JSON, OAuth(RFC として公開)
W3C / WHATWGWeb の技術HTML, CSS, DOM, WebAuthn
Ecma Internationalプログラミング言語ほかECMAScript(= JavaScript の本体), JSON, C#
ISO / IEC工業製品全般(国際標準化機構)ISO 8601(日時), ISO 3166(国), ISO/IEC 27001(情報セキュリティ), C や C++ の言語仕様
IEEE電気・電子Wi-Fi(802.11), Ethernet(802.3), 浮動小数点(754), POSIX(1003)
Unicode Consortium文字Unicode, 絵文字, 正規化
ITU-T通信全般(国連の機関)X.509(TLS 証明書の形式), H.264
NIST米国政府の標準AES, SHA-2/3, パスワードのガイドライン
OASIS企業間のデータ交換SAML, MQTT
JIS日本産業規格日本国内向け。ISO を翻訳したものが多い
覚え方
通信の手順       → IETF(RFC)
ブラウザの中     → W3C / WHATWG
JavaScript の文法 → Ecma
物や決まりごと    → ISO
電気・信号・数値  → IEEE
文字             → Unicode
暗号             → NIST

「これ誰が決めてるんだろう」と思ったら、この表に戻ってきてください。

RFC — インターネットの仕様書

エンジニアが最も読む機会が多いのが RFC(Request for Comments)です。 IETF が公開していて、全部無料で読めます。

RFC 9110  HTTP Semantics          HTTP そのもの
RFC 9112  HTTP/1.1
RFC 8446  TLS 1.3
RFC 8259  JSON
RFC 6749  OAuth 2.0
RFC 3339  日時の書き方(インターネット向け)
RFC 1035  DNS
RFC 2119  仕様書で使う「MUST」「SHOULD」の意味

名前の由来が示していること

「Request for Comments」——意見募集です。 「これで決まりだ」ではなく「こう考えたけど、どう思う?」として始まった文化がそのまま残っています。

インターネットの仕様が、特定の企業や政府ではなく、公開の議論で決まってきたことの表れです。

読み方の作法

番号は変わらない。中身が古くなる

RFC は一度発行されると、内容が書き換わることはありません。 訂正は新しい番号で出ます。

RFC 2616  HTTP/1.1(1999年)      ← 今これを読んではいけない
   ↓ Obsoleted by
RFC 7230-7235(2014年)
   ↓ Obsoleted by
RFC 9110-9112(2022年)           ← 今読むべきはこれ

古い RFC をそのまま読んで実装すると、20年前の仕様で作ることになります。

対策は簡単で、rfc-editor.org で番号を引くと、 ページの先頭に 「Obsoleted by ○○」 と大きく出ます。必ずここを見てください。

表示意味
Obsoleted byこの文書は時代遅れ。新しいほうを読む
Updated by一部が更新されている。両方読む必要がある
Status: Internet Standard十分に枯れて、正式な標準になったもの
Status: Proposed Standard標準への提案段階。実際にはこれが広く使われていることも多い
MUST と SHOULD は厳密に区別されている(RFC 2119)

仕様書に出てくる大文字の語は、日常語ではなく定義された用語です。

語意味
MUST / REQUIRED / SHALL絶対に守る。 守らないと仕様違反
MUST NOT絶対にやってはいけない
SHOULD / RECOMMENDED正当な理由があれば外れてよい。 ただし影響を理解した上で
MAY / OPTIONALやってもやらなくてもよい

設計レビューで「SHOULD だからやらなくていい」と言う人がいたら、 「その正当な理由は何ですか」 が正しい問い返しです。

この区別を知っているだけで、仕様書の読める速度が変わります。

まだ規格ではないもの

Internet-Draft   議論中の草案。おおむね6ヶ月で失効し、改訂版が別の版として出る

「draft-」で始まる文書を根拠に実装すると、来月には内容が変わっている可能性があります。 参照すること自体は問題ありませんが、その場合は 版番号まで含めて固定し、更新を追いかける必要があります。

安定した標準として依存してはいけない、と覚えてください。

実務で効く ISO 番号

ISO の規格は数万件ありますが、プログラマが繰り返し出会うのは片手で足ります。

番号内容例
ISO 8601日付と時刻の書き方2026-08-14T09:30:00+09:00
ISO 3166-1国コードJP US(alpha-2), 392(数値)
ISO 4217通貨コードJPY USD EUR
ISO 639-1言語コードja en zh
ISO/IEC 27001情報セキュリティの管理体制会社が取得する認証。監査で出てくる
ISO/IEC 9899C 言語「C99」「C11」の正体
国コードと通貨コードは、自分で定義しない
-- 悪い例
country VARCHAR(20)   -- '日本' '日本国' 'JAPAN' 'Japan' が混在する
 
-- 良い例
country CHAR(2)       -- ISO 3166-1 alpha-2: 'JP'
currency CHAR(3)      -- ISO 4217: 'JPY'

独自の値を使うと、外部サービスと連携する日に変換表を書くことになります。 決済代行・配送・分析ツールは、ほぼ全部が ISO コードで受け取ります。

なお ISO 3166 は変わります(国は増えたり名前が変わったりする)。 「不変の定数」ではなく「更新されるマスタデータ」として扱ってください。

ISO 8601 と RFC 3339 は、同じようで違う

どちらも「2026-08-14T09:30:00+09:00」の形式ですが、完全に同じではありません。

ISO 8601   幅が広い。20260814T093000+0900 のような区切りなしも許す
RFC 3339   ISO 8601 のうち、機械が扱いやすい部分に絞ったもの

API で使うなら RFC 3339 に寄せるのが安全です。 「ISO 8601 形式で」と言われたら、実務ではたいてい RFC 3339 のことを指しています。

そして最大の注意点——タイムゾーンを必ず付けてください。 2026-08-14T09:30:00(付いていない)は、受け取った側がどう解釈するか分かりません。

デジュールとデファクト

規格には2種類あります。

意味例
デジュール標準(de jure)標準化団体が正式に決めたものHTTP(RFC), ISO 8601, ECMAScript
デファクト標準(de facto)決められてはいないが、みんなが使うので事実上の標準Docker のイメージ形式(後に OCI として正式化), Kubernetes, Markdown

デファクトが後から正式な規格になることはよくあります。 Docker はその典型で、広まった後に OCI として仕様が切り出されました。

規格になっていないものもある

実務で当たり前に使うものの中には、規格ではないものが混ざっています。

よく規格と誤解されるもの実態
セマンティックバージョニング(1.2.3)個人が書いた仕様。広く使われているが標準化団体のものではない
REST論文で提唱された設計様式。RFC ではない
Markdown元は個人の記法。CommonMark という仕様化の試みがある
.env ファイル誰も標準化していない。ツールごとに解釈が微妙に違う

「規格だと思っていたら、単なる慣習だった」ことは珍しくありません。 厳密さが要る場面では、根拠がどこにあるかを確かめてください。

どこで引くか

対象場所費用
RFCrfc-editor.org無料
HTML / DOMhtml.spec.whatwg.org無料
CSSw3.org/TR無料
ECMAScripttc39.es/ecma262無料
ISO のコード表(国・通貨・言語)iso.org/obp閲覧は無料
ISO 規格の本文iso.org有料(数万円のことが多い)
JIS日本産業標準調査会閲覧は無料
ISO の規格本文は有料

インターネット系(RFC・W3C・WHATWG)が全部無料で読めるのに対し、 ISO と IEEE の規格は原則として有料です。1本で数万円することもあります。

そこで、用途で使い分けます。

目的見るもの
概要をつかむMDN などの信頼できる解説(Wikipedia は入口まで)
実装の判断をする一次仕様。無料のもの(RFC・W3C・WHATWG)は必ずこちら
有料規格の中身が要る会社が購入しているか確認する。個人で買わない

「相互運用する」「境界値を決める」「セキュリティに関わる」場面では、 解説ではなく一次情報を見てください。 ここを妥協すると、後で原因が分からないバグになります。

実務の落とし穴まとめ

やりがちなことどうなるか
古い RFC を読んで実装する20年前の仕様で作ることになる。必ず Obsoleted by を見る
SHOULD を「やらなくていい」と読む理由を説明できないまま仕様から外れる
国名・通貨を文字列で持つ表記ゆれが混入し、外部連携の日に変換表を書く羽目になる
日時にタイムゾーンを付けない受け取る側の解釈次第でずれる。9時間の事故が起きる
Internet-Draft を根拠に実装する来月には仕様が変わっている
「業界標準です」を鵜呑みにする実は誰も標準化していない慣習のことがある

まとめ

  • 異なる会社の機械同士が会話できるのは、公開された仕様に全員が従っているから
  • 領域ごとに担当が違う。通信は IETF、Web は W3C/WHATWG、JS は Ecma、物と決めごとは ISO
  • RFC は無料で読める。 ただし番号は永久なので、Obsoleted by を必ず確認する
  • MUST / SHOULD / MAY は定義された用語。「SHOULD だから省く」には理由が要る
  • 国・通貨・言語・日時は自分で決めない。ISO のコードを使う
  • デファクト標準もある。そして「規格だと思っていたら慣習」も珍しくない
  • 迷ったら一次情報。Stack Overflow より速くて確実なことが多い

公式ドキュメント

対象リンク
RFC Editor(RFC 全文検索)https://www.rfc-editor.org/
IETFhttps://www.ietf.org/
WHATWG HTML Standardhttps://html.spec.whatwg.org/
W3C 標準一覧https://www.w3.org/TR/
ECMAScript 仕様https://tc39.es/ecma262/
ISO Online Browsing Platform(国・通貨コード)https://www.iso.org/obp/ui/
Unicode Consortiumhttps://home.unicode.org/
日本産業標準調査会(JIS 検索)https://www.jisc.gov.jp/

章末問題

HTTP のキャッシュの挙動を正確に知りたくなり、検索したところ RFC 2616 が見つかりました。どうするのが適切でしょうか?

新しく作る API で、注文日時を返すことになりました。最も適切な形式はどれでしょうか?

次の章では、ここまでの規格を実際に実装している側—— ブラウザの中で何が起きているのかを見ていきます。

読み終わったら記録しておくと、目次で進み具合が分かります。