こんにちは、あのぶるです。

プログラミングをするとき、私たちの周りにはたくさんの「規格」と呼ばれる決まりが存在します。これらが存在する意義を考えてみたことはありますか?
今回はこの一見不自由を強いるような「規格」の話をしていきたいと思います。

今回の記事で触れる「規格」というのはものを作る時に従うべきとされる技術的な仕様のことです。コンピュータに関係するものだけでも様々な企業や団体が規格を定義していますが、その中にはプログラミング言語のように従わないとそもそも何も作れないもの、USBの仕様など無視してしまうと時には物理的な事故を引き起こすもの、言語コードの定義のように知らなくても一応プログラムが書けてしまうものと様々あります。
例に挙げたうち、プログラミング言語やUSBの仕様だと「なぜ存在するのか」は比較的想像しやすそうです。例えばUSBのType-CをType-Aに変換するアダプタはUSBの仕様で明確に禁止されているものなのですが、それはType-CがType-Aよりも高い電圧を流すことができるので、過電圧で最悪発火する危険があるためです。

参考: カデーニャカンパニー 第32話:あぶないメカ第66話:あふれる電気を受け止めて

では、言語コードのような一見「それと分かれば何でも構わなさそうなもの」にも規格が存在するのは何故でしょう?単純な答えですが、それは必要な条件を満たしていれば何でも良いとは言え、やっぱり何かには定まっていないと困るからです。
例えばあちらのシステムでは日本語を表すコードを”jp”、こちらのシステムでは”ja”、また別のシステムでは”J”、さらに別のシステムでは”1″、などと好きなように決めてしまうと、それらを繋ぎ合わせるときに都度コードの変換をしないといけないことになります。それが2〜3言語程度であればまだ大した手間ではないかもしれませんが、もっと対応言語が増えたら、もしくは同じ言語でも地域ごとの違い(例えば、英語も国ごとに少しずつ違いがありますね)に対応しようとしたら……と考えると、最初から一般的な規格に合わせて定義した方が良さそうですし、外部のライブラリを利用するのも簡単になりそうです。
このようなものは、単純に右に倣え的な話ではなく、みんなで同じものを使うからこそ意味が生まれる類のものです。インターネット上での様々な情報のやりとりを自分の好きなソフトウェアで利用できるのも、パソコンを組み立てるときにどんなパーツでも同じドライバーのセットで済ませられるのも、みんなが規格に沿ってものを作ることで実現しているのです。
ちなみに、インターネット上で言語指定(言語タグ)をどのように表現するかはRFC 5646で規定されています。

はっきりとした仕様が存在しないために、ちょっとややこしくなっている例の一つにCSVの仕様があります。もしCSVデータを扱ったことがあれば「あんな単純なものなのに?」と感じるかもしれません。確かにごく簡単なデータを扱う分には素直にカンマと改行で区切るだけでも良いのですが、ひとかたまりとして扱うべきデータの中に改行やカンマなどを含めようとすると、開発者ごとの実装の違いが発生してどんどん話が難しくなっていきます。現在ではこちらもRFC 7111として仕様をまとめたドキュメントが出ています。それでもあくまで参考情報扱いであり、誰もが従うべき仕様のレベルには至っていないのが現状です。

さて、実際にソフトウェア開発に関係しそうな規格としては、例えば以下のようなものがあります。(筆者がWeb分野のソフトウェアエンジニアなので、どうしてもインターネット関連の規格が多めですが……)

  • プログラミング言語のコミュニティや開発元企業の定める言語仕様やコーディング規約
  • ISO(国際標準化機構)規格とその日本語訳にあたるJIS(日本工業規格)
  • IETF(Internet Engineering Task Force)によるRFCなどの標準文書
  • W3C(World Wide Web Consortium)によるWeb関連の標準規格

もちろん、それぞれがお互いに参照し合うこともあって、RFCの仕様がISOの規格を元にしていたり、コミュニティで決められた言語仕様がそのままISOに組み込まれたりしていたりします。

規格は読む人ごとに解釈の違いを起こさないように厳密である必要があるので、かなり独特と言うか慣れるまでは読みづらさを感じることもあるかもしれません。これに関してはキャリアを重ねたエンジニアであっても正しく内容を理解するにはかなりカロリーを使うものなので、あまり不安にならないでくださいね。
特にRFCなどは有志の方が日本語訳を公開して下さっていることもあるので大いに参考にして欲しいのですが、概ね冒頭に「厳密な解釈にあたっては必ず原文を参照してください」という趣旨のメッセージが書かれていると思います。言葉尻が少し変わってしまうだけでも解釈の揺れが発生してしまうため、例えばいくつかの言語版の資料が公式のドキュメントとして公開されている場合でも、原本はそのうちの1つで、他はあくまでその翻訳版であり、言語間で解釈が異なる場合はその原本とされた言語のものに従うことが規定されています。そのくらい解釈揺れについて慎重になるべき文書であるということですね。
(かつ、そのようなケースでは概ね原本は英語版とされているので、深いところまで追求しようとするとどうしてもどこかで英語と向き合わなければいけないのですが、逆に言えば英語さえどうにかなればコンピュータの分野については情報を集め放題ということでもあります。)

これらはどこまでも厳密で息が苦しくなりそうですが、きちんと理解すればどこに行っても役に立つ知識です。規格に親しみ、使いこなせるようになることを願っています。


The following two tabs change content below.

あのぶる

Software Engineer
杜の都で育ち、赤べこの街でコンピュータのいろはを学んだソフトウェアエンジニア。今はスマホゲームのためのWebAPIを作るお仕事をしています。最近はすっかりガルパンおじさん化。