45
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プロトコルとは(Protocol の本来の意味から技術英語へ)

Last updated at Posted at 2018-07-26

この記事は「プロトコル」という単語をよく見聞きするも、漠然とした理解なので「英語の文献に出てくると、いまいちピンとこない新人の方」向けの技術用語記事です。

英語における「プロトコル」の理解の手助け、そして「プロトコル」という用語を深く掘り下げることで、汎用的な技術英語の理解(咀嚼そしゃくの仕方)の手助けとなればいいなと思います。

TL; DR 今北産業

「プロトコル」とは

参加するための事前同意・合意のこと。「それ」を知らないと「参加できない/仲間に入れない/楽しめない/良さがわからない」ことになる、共通ルールのこと。

プロトコルのイメージ
( my_rule == your_rule ) === ( our_protocol )

TS; DR 〜たかが「protocol」の英単語を徹底的に理解する細かいこと〜

「プロトコルって通信規格のことでしょ?」という言葉を聞きます。

上記のような用語を見聞きしているからだと思われますが、間違ってはいません。

しかし「通信規格」にこだってしまうと、英語の文献を読んだときに難しいと感じてしまう人が多いように感じます。なぜなら「protocol」はネットワークや通信以外の文脈でも使われているからです。

いわゆる「通信規格」は「protocol」の1部でしかありません。

例えば、ドラマ「24」や軍隊モノの映画などで、ルールを曲げてでも助けに行こうとすると上官に止められ、「It's a protocol!」(意訳:「だってルールなんだもん!」)と怒鳴られては地団駄を踏んでいるのを観たことはないでしょうか。トットと助けに行けばいいのに。

また、スターウォーズの金色こんじきのアイドル「C-3PO」は「プロトコル・ドロイド」と自称しているのに、吹き替えでは「通訳ロボット」や「式典用ロボット」と呼ばれたり。

ルールなのか、通訳なのか、礼儀作法やマナーなのか、いまいちわからない単語です。しかし辞書を引くと、どれも意味として出てきます。

【Protocol】

  1. The system of rules and acceptable behaviour used at official ceremonies and occasions.
  2. A formal international agreement.
  3. A computer language allowing computers that are connected to each other to communicate.
    PROTOCOL | 意味 @ Cambridge Dictionary より)

上記は以下とほぼ同じです。

【Protocol】
外交儀礼、儀典、礼儀作法、慣習
条約議定書、協約、協定、議定書
手順、手続き、指令、命令
《コ》プロトコル、〔コンピューターの〕通信接続手順、通信規約◆コンピューター間でデータを送受信するためのルール[決まり事]
protocol の意味・用例 @ アルク より)

コンピュータの項目を見ると通信ルールっぽい感じなのですが、コンピューターの文献を読んでもネットワークとは関係ないところで「protocol」の用語も出てきます。これは同音異義語なのでしょうか。「決まり事」なら regulation と何が違うのでしょう。

日常におけるプロトコルの例

そこで、まずは「プロトコル」を身近な例で例えたいと思います。

ダチョウ倶楽部・プロトコル
「俺やらないからね」「じゃ、俺がやる」「いや、俺がやる」「え?じゃ俺やる」「どうぞ、どうぞ」
ジャイアン・プロトコル
「お前のものは」と来たら、「俺のもの」
浄土宗・十念プロトコル
「なむあみだぶ」を4回2セット唱え、「なむあみだぶつ」を1回、最後に「なむあみだぶ」を1回の計10回唱える
プロレスのプロトコル
大げさな技やパフォーマンスで、いかに無駄に体力を使うか「実は優雅なスタミナ勝負をしている」のを楽しむ
ジャズのプロトコル
演奏中ソロのパートで「テーマ」と呼ばれる部分が終わった節目で観客は拍手をする
ジャズや落語のプロトコル
同じ演目でも、演者の違いによる解釈の違いやニュアンスの違いを楽しむ
ワインのテイスティング・プロトコル
飲んだ時の香りを「例え」で表現することでフラグを立て、後日そのフラグの組み合わせによって飲んだワインを思い出す
法律プロトコル
法律は「複数の解釈が持てる」ように書き、法律の解釈は裁判や判例で決定する
理数系論文プロトコル
句読点は「。」「、」でなく「.」「,」を使う
Xジャンプ・プロトコル
手をクロスさせるのは集団でダメ出しをしているのではなく、バンド名の X を意味している
和室プロトコル
靴を脱がないと部屋にあげてあげない
GitHubAPIプロトコル
リクエスト・ヘッダに "User-Agent" を含めないと反応してあげない
GoogleDataV1プロトコル
俺様仕様の XML フォーマットを使わないとリクエスト受け付けてあげない
TCPプロトコル
特定のビット並びから始まったデータを送ってくれないとコネクションを確立してあげない
機械学習プロトコル
数値だけで構成された array データを「ベクトル」と呼ぶ
核のフットボールプロトコル
米国大統領が核兵器の使用を決めても国防長官による本人確認をパスしないと発射されないが、国防長官は発射拒否もできない

このように知っている人には当然のことであっても、知らない人からすれば「( ̄σ・ ̄)フーン」ということが世の中にはたくさんあります。

先の C-3PO の場合は、異なる宗教・習慣・言語の違い、つまり「ルールの違いを説明/補佐してくれるドロイド」という意味で「プロトコル・ドロイド」と呼ばれ、「通訳ロボット」も正しいし「式典用ロボット」も意味としては正しいのです。

🐒   余談
しかしファンとしては「ドロイド」を「ロボット」と訳すのは、「ドローン」を「ラジコン」と呼ぶようなモヤモヤ感があります。
面白いのが、英語版のスターウォーズでは、英語/ウーキー語/どこそこの惑星のメーカーのバイナリ言語/ドロイドのピコピコ音など、コミュニケーションや通信におけるすべてが「言語」として括られていて、上記ケンブリッジ大学の辞書の 3. の引用でもプロトコルを「language」と表現していることです。

そして IT 業界しかり、さまざまなところでプロトコルが使われています。

  • ケーブル通信でデータ送信開始を示すシグナルのパターン
  • 外部コマンドに渡す引数の渡し方
  • URL に含めるクエリの記述ルール
  • アプリケーションに使われる文字コードや改行コード
  • Web API を叩くのに必要なデータのフォーマット
  • etc.

このように、相手のプロトコルがわからないと自分が作ったアプリケーションはコラボレーションができず、また、しかるべき手順を踏まないとアプリケーション間で意思疎通ができないのです。

軍隊の映画で言う「It's a protocol!」というのは、厳密には「ルールなんだもん!」ではなく「(それをするにはしかるべき手順を踏まないと)執行できない(から無理言うな!)」という意味なのです。

では「手続き」や「手順」の意である procedureprotocol は何が違うのでしょう。

語源から連想しよう

技術英語がわかりづらい理由に「言い得て妙」な表現を好むことがあります。

例えば「クラウド」です。複数の小さなサービスやサーバーを組み合わせて、インターネット上で提供する総合サービスを「クラウド」と表現します。引きで見ないとサービス全体が見えないからです。しかし、わかっていない人には、むしろつかみ所のないものに見えます。雲だけに。

このような「辞書を引いて出てくる単語の意味」だけではわからない技術用語が多くあります。なぜなら、そもそもプログラマーは言語遊びが好きなのです。

特に、英語圏では「理系」「文系」という区分けがありません。せいぜい「体育会系」(厳密にはアメフト系)と「オタク系」(nerd)と「その他」くらいです。

日本で言う「理系」の人は英語圏の nerd 層に該当する感じもします。しかし、数学や物理と同じくらい哲学や美術も学んだりする人が多く、なぜか名言や格言を好む人も多くいます。日本でも、この業界(IT 全般)を見ると理系なのに下手な文系の人より歴史や語学に詳しい人が意外に多いと感じると思います。

数学の場合、複雑な数式を一旦いったん別の文字に置き換えてシンプルに表現することが多くあります。そのためか、プログラムの世界でも、処理や機能を別の何かに置き換えて表現することが多くあり、先のクラウドのように「わかっている者同士では『言い得て妙』な表現」を好むのです。

技術英語において、単語の理解の助けになるのが英単語が持つ複数の解釈を俯瞰ふかんで理解することです。

英語圏とは言え、別の言語を母国語とする人も多くいるため、別言語のニュアンスで付けられている単語も多くあります。つまり「この単語の意味は、これ」と決めつけずに、漠然とした共通の意味を見つけることが重要になってきます。

その1つとして、おすすめするのが「英単語の語源」を調べることです。

そこから、単語の意味を見比べると共通のニュアンスが見えてくると思います。英英辞典には、たいてい語源が載っていますが、オックスフォード大学やケンブリッジ大学などのオンライン辞書で見れるものもあるので、複数のオンライン辞書を見比べてもいいでしょう。

では、「protocol」の語源を調べると、以下のような記載があります。

Origin
Late Middle English (denoting the original minute of an agreement, forming the legal authority for future dealings relating to it): from Old French prothocole, via medieval Latin from Greek prōtokollon "first page, flyleaf", from prōtos "first" + kolla "glue". Sense 1 derives from French protocole, the collection of set forms of etiquette to be observed by the French head of state, and the name of the government department responsible for this (in the 19th century).
Definition of protocol in English @ lexico

語源(筆者訳)
後期の中世英語。契約の最初の小さな合意を示し、これに関連する将来の取引のための法的権限を形成するもの。ギリシャ語の prōtokollonprōtos(最初) + kolla(繋げる・組み合わせる)から来た「本のカバーと本文の間にある最初の空白ページ」の意)から、中世のラテン語を介して古いフランス語の prothocole(19世紀ごろのフランスの議定書、フランスの国家元首が遵守すべき一連の作法をとりまとめたもの、およびこれを担当する政府部門の名前 protocole)に由来しています。

つまり、protocolproto + col にわけられ、プロトタイプ(prototype)などの proto と同じ「最初の」「事前の」といった意味を含むことがわかります。また、 col はコラージュ(collage)の col と同じ「つなぎ合わせた」「組み合わせた」と言う意味も含むことがわかります。

転じて、「バラバラであったものを1つにまとめた際の最初のルール」のようなものであることが漠然と見えてきます。

ルールとプロトコルの違い

では、「rules === protocol」なのかと言うと、若干違います。

rule」は内部での取り決めを指します。内部とは、自分もしくは対象が属しているグループです。例えば、国、宗教、学校、会社、マンション、部活やサークルなどです。また、これには自分自身も含みます。いわゆるマイ・ルールというやつです。つまり、大小関係なく所属している中での取り決めを「rule」と言います。

例えば「rule」が語源の「ruler」は「定規」という意味ですが、「メートル法」か「ヤード・ポンド法」か、ルールは国や環境によって異なります。そのため、ルールが違う二者間でやりとりする場合は、お互いが使う定規を取り決めないと尺が合いません。

そこで「お互いに測定データを渡し合う時は『尺貫法』を使おう」といった取り決めが「プロトコル」です。

他にも「当社はスーツ着用」は社内ルールですが、「次回の合同ミーティングはジャージでやりましょう」と他者(他社)と取り決めたものがプロトコルになるのです。

つまり、意思疎通のためにお互いに合意しているルールを「プロトコル」と言うのです。そのため、自分の都合でルール変更しても何とかなるものではないのです。そういう時に「It's a protocol!」と発せられます。

プログラマー・プロトコル風に表現すると、こんなイメージです。

プロトコルのイメージ
( my_rule == your_rule ) === ( our_protocol )

そして、ルールのうち、「処理が止まる」「受け付けない」「罰金がある」「解雇される」といった罰則のあるルールを「レギュレーション」regulation)と呼びます。

実は、rule の語源は regulationregula-tion)の regula だったりします。特にロマンス語圏では「定規」や「ルール」はむしろ「regula」(を語源にした単語)が使われます。

これは宗教的な制約(正しい道に進ませる)と言う意味の「regere」から来ていて、王制の多かった時代に、領土戦争などにより当主が変わると勝った国(ruler)の宗教ルールに従わざるを得ない時代の名残りです。

日本語でも、ルールにそった選抜争いにより勝ち抜いた「おもて立つ人」を「レギュラーregular」と呼びます。他にも「正規表現」の regular expression も「正しい(と思われる)」方向に矯正するのに使われたりします。

そして、これらルールやプロトコルを記述・制定したものを英語で「CODE」(コード)と呼ぶのです。

「ドレス・コード」は、パーティなどに参加する際の「服装のプロトコルを制定したもの」ですし、「セキュリティ・コード」はカードをかざさないと入館できないなどの「セキュリティのプロトコルを制定したもの」です。

「ダビンチ・コード」は、レオナルド・ダ・ビンチの「俺様ルール」を書き残したもので、彼の世界観を楽しむためにはプロトコルを理解する(受け入れる)必要があります。

他にも、エンジニアで身近なところでは「プログラム・コード」「ソースコード」や「エンコード」などがあります。

「プログラム・コード」は、「特定のプロトコルに添って式次第(プログラム、流れ)を書き起こしたもの」なのです。コンピューターに限らず、結婚式や運動会などで「本日のプログラムは〜」といったアレも同じだと思えばイメージしやすいかもしれません。

「ソースコード」は、コンパイラやインタプリタが処理をするのに参照したり、エンジニアが仕組みを参照したりできるように、「特定のプロトコルに沿って source(情報源、もとになるもの)を書き起こしたもの」です。

「エンコード」とは「コード化する」、つまり「プロトコルに添った形式で記述するための変換」という意味です(ちなみに「エンコード」は「暗号化」の意味ではありません)。

エンコード(encode)は en- code に分けられ、en- は「-状態にする」「-化する」という意味があります。例えば、enable で「有効化する」、enlarge で「大きくする」などでも使われます。そのため「en-code」というのは、相手が理解・受け取りができるように、プロトコルに添った形式にすることを言います。

そして「プロトコルに添ったデータ」(encoded data)を受け取ったら、自分が理解・処理しやすいルールに変換することを「デコード」(decode)というのです。

以上を踏まえて、改めて「プロトコル」の辞書の意味を見て見ましょう。

【Protocol】
外交儀礼、儀典、礼儀作法、慣習
条約議定書、協約、協定、議定書
手順、手続き、指令、命令
《コ》プロトコル、〔コンピューターの〕通信接続手順、通信規約◆コンピューター間でデータを送受信するためのルール[決まり事]
引用元: protocolの意味・用例 アルク

プログラムの世界で例えると、以下のように言えると思います。

「タブ・インデントがマイ・ルール」派のあなたが、「スペース・インデントがマイ・ルール」派の他人のソースコードに、編集リクエストや PR1 をあげるとします。

その際、スペース・インデントで送るのは「マナー」です。

この2者が共同開発をすることになり、『共通ライブラリは linter をかまして、関数名はキャメル形式、インデントはタブで統一しましょう』といった合意が「プロトコル」であり、第3者が参加したい場合は、これを文書にまとめた「CODE OF 〜」などを読んでプロトコルを合わせないと参加できません。

また、「レギュレーション」として CI のテストが通らないとマージされないルールを設けています。

いかがでしょう?どの訳にも通じる共通のモノが見えてきましたでしょうか

プロトコルが難しい理由

先のプロトコル例で「ダチョウ倶楽部プロトコル」や「ジャイアン・プロトコル」の説明では「なぜそうなのか」という説明がなく、「そういうものだから」的な簡素な説明をしました。

なぜ「お前のもの」が「俺のもの」なのか。そして、なぜそれが面白いのか。

「ギャグの説明をする」というのは「ギャグの裏にあるプロトコル(暗黙の常識)を説明する」という意味でもあります。(例:ギャグ説明

私が学生の頃、新歓(新入生歓迎会)で、同僚や先輩が一芸で「カイーノカイーノ」と言って股間を机の角で擦ったり、急に服を脱いで「ペチペチペーンチ!」と両手にペンチを持って胸を赤くなるまで叩いては、みんなゲラゲラ笑っているのを見ても、当時は何が面白いのか分かりませんでした。

また社会人になっても、妹がスゴイ顔をしながら「カッチンカッチンやねん」と自分の腕をペシペシ叩いているのに反応しない(意味がわからず反応できない)でいると、「あれ?ほら、『カッチンカッチンやねん!』(ペシペシ)」と繰り返し見せてくれるのですが、そのさまが面白いだけでネタの面白さが分かっていませんでした。

落語の「寿限無」にしても「(あー、はいはい。長い名前を覚えてすごいですね。クラシックでいう「くまんばちのマーチ」みたいな「俺すごい系」でしょ)」と、どこから目線ではなしも聞かず、「落ち」の意味も、落語の面白ささえも理解できていませんでした。

「プロトコルが分からない」というのは「ギャグが分からない」「伝統芸能が面白くない」のと同じで、バックグラウンドが異なる場合、そのプロトコルが理解できないということは往々にしてあるのです。

しかし、面白いと思えない人にはバックグラウンドを説明しないといけませんし、面白そうと思う人はプロトコルを理解するためにも勉強をしなければなりません。

プロトコルを理解するには、プロトコル以前の知識、つまり基礎知識が必要になるのです。先の「カイーノ」などの例の場合は「関西芸人」という基礎知識です。

元ネタも面白さもわかっていないのに使ってみて盛大に外した、恥ずかしい思いをしたこともたくさんあります。

かといって、説明を受けて理解できたところでそれを「面白い」(使いたい)と思うかは別の問題です。

このように、勉強する「時間というコスト」を失うリスクもあるなか「いまは面白くないけど、興味あるし、面白さを知りたい」と最短で理解しようとプロトコル仕様書を読むも、バックグラウンドが足りないので難しすぎて理解できないという流れがあるのです。

プロトコル仕様書は解説書ではなくチートシート

プロトコルの仕様書を見ても分かりづらいことが多いのは「なぜそうなのか」という、理由の説明でなく、「そういうものだから」という結果を整理したものだからです。

「面白そう」というモチベーションがあれば、諸々のコストを埋めてくれるものではありますが、分からない人向けと言うよりは、プロトコル仕様書は、むしろある程度の基礎知識がある人たちのためのものと言っても良いかもしれません。

事前の基礎知識が必要と言う意味では、海外ドラマの冒頭に流れる「前回までのなんとか」や、漫才やコントなどの台本のようなものです。

そのため Web API の仕様書を覗いても、HTTPS プロトコルとは何か、GETとは何か、メソッドとは何か。説明もなければ、それらを使う理由も説明されません。

逆に、それら用語の意味や使う理由を聞くことは「ギャグの説明を聞かれるようなもの」で、楽しんでいる人たちからは「(先に基礎を)勉強してこい」と思われやすいものなのです。

そのため、みんなが楽しそうにツイート BOT で遊んでいるのをみて、たかが「だっふんだ」というツイートをしたいがために twitter の WebAPI プロトコルの仕様を覗いても分からないと感じるのは当然のことです。

USB で機器を繋げて遊んでいるのをみて、たかが「ボタンを押した情報をパソコンで受け取りたい」がために USB2 のシリアル通信プロトコル仕様書を覗いても分からないと感じるのも当然のことなのです。

しかし、お笑い同様、1つを理解すればコツをつかんで他の理解が進むということが多くあります。また、ちょっとしたアドバイスで、みんなが魅了されているポイントがわかったりもします。

例えば、お笑いのプロトコルである「ノリツッコミ」的なものに、Web API のプロトコルでは RESTful というのもがあったります。

シリアル通信の1つである MIDI のプロトコルでは ALSA という Linux コンポーネント(ツール群)の amidi コマンドを使えば USB の MIDI キーボードで押されたボタンやキーが簡単に取得できます。

Linux においては、デバイス(周辺機器)はすべて「ファイル」として扱われることを聞いたことがないでしょうか。つまり、Mpeg や mp3 やテキストなどの「ファイルを開いて、バイナリ(バイト)データを読み込む」のと同じように、デバイス・ファイルを開いて「プロトコル」に準拠したデータを書き込めば、「プロトコル」に準拠したデータが読み込めるのです。

とうぜんファイルなので、誰かが(何かしらのアプリが)ファイルを開いていると、他はロックされて読むことができません。先の amidi などは代表してファイルを開くアプリがあり、それを他のアプリに分配することで、複数デバイスにもアクセスできるようにしているのです。

プロトコル仕様書を読んで、わけわかめ頭がパンクしそうになったら、プロトコルそのものでなく「そのプロトコルを利用した何か」からパラシュート式に勉強してみてはいかがでしょうか。

そうしていくなかで、プロトコル仕様書などで使われている単語を見聞きするようになり、少しずつ意味がわかるようになって行き、ついには「プロトコルの仕様書は説明書ではなく、わかっている人のためのチートシート的なもの」なんだと感じると思います。

そして、悩んだということは「同じように悩む人がいる」ということです。例え少数であっても、その人の為に Qiita に残していければ「幸せの公式 H=S-F」によりエンジニアはハッピーになれると思うのです。

それが Qiita のプロトコル。(レギュレーションもあるでよ)

「プロトコル」とは

それ」を知らないと『参加できない/仲間に入れない/楽しめない/良さがわからない』、コミュニティ間の同意のこと。

  1. PRとは GitHub における "Pull Request" の略で、プルリクとも呼ばれる。既存のソースコードに対し、編集・修正したコードを取り込んでもらうための依頼をあげる(リクエストする)こと。

45
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?