Edited at

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

この記事は「プロトコル」という単語をよく見聞きするも、「英語の文献に出てくると、いまいちピンとこない新人の方」向けに、英語におけるプロトコルの理解の手助けになればいいなと思い書いた記事です。


TL;DR


「プロトコル」とは



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


TS;DR

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

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

しかし、どうやら「そこにこだわってしまうと英語の文献を読んだ際に難しいと感じてしまう人が多い」ように思います。

なぜなら、英語における「通信規格」は「protocol」の1部でしかなく、「protocol」は様々な箇所で使われます。

ドラマ「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」の用語も出てきます。これは同音異義語なのでしょうか。


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

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


ダチョウ倶楽部・プロトコル

「俺やらないからね」「じゃ、俺がやる」「いや、俺がやる」「え?じゃ俺やる」「どうぞ、どうぞ」



ジャイアン・プロトコル

「お前のものは」と来たら?「俺のもの」



浄土宗・十念プロトコル

「なむあみだぶ」を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!」というのは、厳密には「ルールなんだもん!」ではなく「(それをするにはしかるべき手順を踏まないと)執行できない(から無理言うな!)」という意味なのです。


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

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

rule」は内部での取り決めを指します。内部とは、自分もしくは対象が属しているグループです。国、宗教、学校、会社、マンション、部活、サークル、コミュニティなどです。

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

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

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

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

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


プロトコルのイメージ

( my_rule == your_rule ) === ( our_protocol )


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

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

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

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

以上を踏まえて、改めて辞書の意味を見て見ましょう。


【Protocol】

外交儀礼、儀典、礼儀作法、慣習

条約議定書、協約、協定、議定書

手順、手続き、指令、命令

《コ》プロトコル、〔コンピューターの〕通信接続手順、通信規約◆コンピューター間でデータを送受信するためのルール[決まり事]

引用元: protocolの意味・用例 アルク


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


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

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

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

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


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


プロトコルが難しい理由

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

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

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

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

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

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

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

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

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

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

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


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

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

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

漫才やコントなどの台本のようなもので、HTTPS プロトコルとは何か、GETとは何か、メソッドとは何か、説明もなければ、それらを使う理由も説明されません。

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

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

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

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

例えば、お笑いのプロトコルである「ノリツッコミ」的なものに、Web API のプロトコルでは「RESTful」というのもがあったり、ALSAという Linux コンポーネント(ツール群)の amidi コマンドを使えば USB の MIDI キーボードで押されたボタンやキーが簡単に取得できます。

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

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

私も、機械学習を始めようとしてプロトコルにノックアウトされたので、その機械学習プロトコルを利用した面白そうなものから、少しずつ勉強しています。

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


「プロトコル」とは



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






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