エンジニアが知っておいて損は無さそうなISOの標準規格たち

「それ○○で標準化されているよ」って指摘されることほど、エンジニアにとっての屈辱は無いですよね。
ということで、世間知らずだと思われないためにも、手始めにISO縛りで有益そうな標準規格[^1]をまとめてみました。

[^1]: マネジメントシステムに関する企画は趣旨が異なりそうなので除外しています

ちなみに、ISOとは…？
 > 国際標準化機構（**I**nternational **O**rganization for **S**tandardization）は国際規格を策定する世界最大のボランタリーな開発組織で、国家間に共通な標準を提供することによって、世界の貿易を促進することに貢献している

という組織だそうです。
(どう考えても**IOS**と略すべきだと思うのですが、ISOになった理由は諸説[^3]あるようです。)

[^3]: http://www.gtc.co.jp/iso/iso.html

# コード体系

## ISO 639  (言語名コード)

例: 

* 日本語 =  ja,  jpn
* 朝鮮語 =  ko, kor
* 中国語 =  zh, zho, chi, zho
* ドイツ =  de, deu, ger, deu

ISO 639-2はTコードとBコードと分かれているとのことで、微妙に異なるのが入るみたいです。

##  ISO 3166-1 (国名コード)

例: 

| 国・地域名       | ISO 3166-1における英語名 | numeric | alpha-3 | alpha-2 |
|------------------|--------------------------|---------|---------|---------|
| 日本             | Japan                    | 392     | JPN     | JP      |
| 西サハラ         | Western Sahara           | 732     | ESH     | EH      |
| ニューカレドニア | New Caledonia            | 540     | NCL     | NC      |

こちらはシンプルですね。
numericはラテン語を利用しない国での使用を想定しているそうです。


## ISO 3166-2:JP（日本の都道府県コード）

例: 

* JP-01 = 北海道
* JP-02 = 青森県
* JP-03 = 岩手県

北から順に連番になっているようです。
ちなみに、JP-46が鹿児島県、JP-47が沖縄県でした。

## ISO 4217 (通貨名コード)

例: 

| コード | 通貨名           | 国・地域   |
|--------|------------------|------------|
| JPY    | 円               | 日本       |
| KES    | ケニア・シリング | ケニア     |
| KGS    | キルギス・ソム   | キルギス   |

どうでも良いですが、通貨名ってカッコイイ響きが多いですよね。


## ISO 5218 (性別コード)

例: 

* 0 = not known（不明）
* 1 = male（男性）
* 2 = female（女性）
* 9 = not applicable（適用不能）

話題になることも多いのでご存知の方も多そうな区分です。
男性にM（Male）、女性にF（Female）を使う業界もあるそうですが、ISO標準的には1, 2を使いましょう。


## ISO 22324（深刻度を表わすカラーコード）

公衆向け警報において危険の深刻度をカラーコードで表現するためのガイドラインを与える標準だそうです。
https://ja.wikipedia.org/wiki/ISO_22324

**深刻度を示すカラーコード**

| 色 | 意味 | 期待される行動                       | テキスト色 |
|----|------|--------------------------------------|------------|
| 赤 | 危険 | ただちに適切な保安行動をとる         | 白         |
| 黄 | 注意 | 適切な保安行動をとるための準備をする | 黒         |
| 緑 | 安全 | 行動は求めない                       | 白         |

**補助的情報のためのカラーコード**

| 色   | 意味         | 使用の制約                                         | テキスト色 |
|------|--------------|----------------------------------------------------|------------|
| 黒   | 致命的な危険 | 赤と併用できる。白黒の市松模様で置き換えてもよい。 | 白         |
| 紫   | 致命的な危険 | 赤と併用できる。                                   | 白         |
| 青   | 参考情報     | 深刻度レベルをあらわすのに用いるべきではない       | ---        |
| 灰色 | 情報なし     | 情報が得られないことを示すのに用いる               | ---        |

下記のような **トリアージタッグ** と呼ばれる患者用の優先度付けのタグへ利用されるようです。映画で見たことあるような、無いような…。

![tag1.jpg](https://qiita-image-store.s3.amazonaws.com/0/6463/33a9a5dd-224c-9744-3683-9a9a79572589.jpeg)

Web画面のアラートなどに応用すると、ちょっと仰々過ぎてユーザから非難が出るかもしれませんね。


# フォーマット

## ISO 8601（日付と時刻の表記）

* 基本形式	20170107T150339+0900
* 拡張形式	2017-01-07T15:03:39+09:00

日付と時刻の間に"T"を入れるのって、いつまで経っても慣れないですがこれが標準だと思ってTを入れるようにしています。


# メッセージプロトコル

メッセージングのプロトコル的（？）なものもISO規格に存在するようです。
金融に詳しく無いので調べていませんが…。

* ISO 8583（クレジットカードのメッセージ規格）
    * 金融取引カード始発メッセージを定めたもので、カード所有者が支払手段にカードを使用した場合に発生する電子メッセージの規格
    * https://ja.wikipedia.org/wiki/ISO_8583

* ISO 20022（金融通信メッセージの国際規格）
    * XML2を主要なデータ記述言語として利用する、金融通信メッセージの規格である
    * http://www.imes.boj.or.jp/iso/kikaku/1ISO20022gaiyo.pdf


# 最後に

コード設計やフォーマット設計は重要な割に、自転車置き場議論と同じく議論が発散しがちでなので、なるべく既存の規格は利用したいところです。

…なのですが、ことISOに関しては調べ方が悪いのか良さげな規格をあまり見つける事ができませんでした。

今後は、「一般ユーザ」と「プレミアムユーザ」といったWebっぽいコード設計などもデファクトが出てきて、ゆくゆくは標準化されると良いですね。

余談ですが、ISO標準の住所形式は存在しないようです[^2]。
国や地域によってまちまちなので、そりゃそうだろうという感じです。

[^2]: http://stackoverflow.com/questions/4840928/iso-standard-street-addresses