Unixソケットプログラミング/今後の学習案内
今後の学習案内
編集PHP は公式マニュアルが充実している
編集本書では原理的な説明としてC言語で説明したが、実はソケット通信をサポートしている言語はC言語のほかにもある。
特に、PHP というプログラミング言語が、よくソケット通信の関数やHTTP通信などをサポートしており、しかも公式マニュアルにもソケット関連のサンプルコードも多く充実しており、しかも日本語訳されているマニュアルが多い。
なので、C言語の次にソケット通信に関連する知識を学習するための言語としては、PHPがお勧めである。
正直言うと、このwikibooksのC言語のUnixソケットプログラミングのページを読める読者にとっては、単にインターネット通信のプログラムを書くだけならば、PHPなどのソケット通信からは、いまさら学ぶことは少ない。
単にプログラムを書くだけなら、わざわざC言語以外の言語でコードを書くよりも、wikibooks本ページで紹介したコードを元にアレンジするほうが作業的にはラクである。
だが、PHPコミュニティが一番、他のどのプログラミング言語コミュニティよりも、PHP公式マニュアルが最もソケット通信のサンプルコードが充実している。
そもそも、まともな技術者ならばマニュアルを整備するのも当然であり、そういう能力をもった技術者こそ、単なる器用なだけの職人ではない、高度な技術者である。
よってPHPコミュニティの優れた姿勢からは、学ぶべき事が多い。
なお、PHP以外のPerlやGo言語などのサーバー系で使うプログラミング言語も、仕様自体ではサーバー関連の関数をサポートしていたりするのだが、しかし、ソケット通信の公式マニュアルにソケット関連の説明が、PHP以外の言語では不足しているのが現状である。(もしかしたら公式マニュアルもあるのかもしれないが、グーグル検索しても、あまり出てこない。)
大抵、PHP以外のそれらの言語のweb上の公式マニュアルを見ても、ソケット関連となると、せいぜい関数の仕様を簡略に記載したリファレンスしかないのが現状である。
なお、D言語がC言語を置き換えるのを狙っていると主張しているが、しかし残念ながらD言語の公式マニュアルを見ても、ソケットについてはサンプルコードもなく(D言語フォーラムでもそう指摘されている)、ソケット通信の学習においてD言語ではハナシにならない現状である。このインターネット全盛の時代においてD言語がC言語を置き換えるのは、先述の理由から当分は無理そうである。
ソケット通信以外のネット知識の学習
編集ソケット通信ではないが、C言語じたいはHTTP通信など特定のプロトコルはサポートしていないので、PHPなどを使うことで、プロトコルの実装の手間を大幅に省ける。
ソケット通信は、そもそもプロトコル処理自体を「"GET /ファイル名.html HTTP/1.0\r\n\r\n")」みたいに送受信するものなので、C言語では、特定プロトコルを意識した実装はしていない。
なので、ソケット通信の学習だけだと、実際のプロトコルのノウハウがなかなか学習できなくなってしまう。
PHPなどを学ぶのにも利点があり、C言語だとサポート対象が原理的すぎてHTTPやTCPといったソケット通信システムの全体像が分かりづらいが、しかしPHPなどの言語だと、ソケット通信以外にもHTTP通信など個別の通信方式に特化した関数なども用意されてあり、そのためPHPなどの学習によりソケット通信の全体像も、さらに把握しやすくなる。
このため、初学者は、今後の学習では、C言語だけでなく、加えて PHP なども学習するのがオススメである。
もちろん、それらPHP実行環境などのプログラム言語自体のソースコードは最終的にはC言語で書かれているわけである。
PHPの次に学ぶオススメ言語
編集他の言語では、あたらし目の言語では「Go言語」(という名前のプログラミング言語がある)が、ソケット関係の関数をサポートしており(ただし、現状では公式マニュアル類が不足している)、また設定が比較的に細かくC言語に近い感じで可能である割に、HTTP通信もサポートしているので、PHPの次の勉強にならGo言語は良いだろう。
また、意外と思われるかもしれないが python もサーバー提供のあるフレームワーク(Flask や Django など)が充実している。
読書案内
編集出版業界でのソケットプログラミングの書籍は、残念ながら2020年代の現状、ソケット関連の解説のある書籍が少ない。かつてC言語系のソケット通信の書籍がいくつかあったが、多くが(事実上の)絶版になってしまった。
読者の中には、
- 「大学で、TCP/IPの授業でソケット通信も教えているのでは?」
と疑問に思うかもしれないが、大学の教科書で教えられているのは telnet通信まで であり、C言語ソケットプログラミングは解説されていない現状である。(たとえばオーム社の教科書『基礎からわかるTCP/IP ネットワークコンピューティング入門』ですら、telnetどまりの説明。しかし、telnetの解説があるだけマシという出版状況であり、他社の入門書だとtelnetの説明すらない場合もある(当然、その他社テキストにソケット通信のコードも無い)。)
大学の研究室でのマン・ツー・マン教育はどうだか分からないが、残念ながら市販の大学教材では、あまりC言語ソケット通信を教えられていないようである。
問題点を解決する書籍
編集それでも、どうしても書籍で昨今のソケット通信の仕様を確認したい場合、
- たとえば『C言語/C++大事典 2020』(※ 架空の署名です)
のような題名の書籍を買えば(出版状況によって変わる場合があるが)、事典なので断片的ではあるが、最新の規格や仕様にそったソケット通信のAPIや関数を紹介している場合があるので、最新の仕様を知りたい場合にはそういった事典類を参考のこと。
だが、値段の高い割には、ソケット以外の話題も扱っているので、ソケットについては情報不足ぎみなので、なるべく、wikibooksのようなネットの情報を参考にしたほうが安上りである。
小型のハンドブック類ではソケット関連まで掲載されていない場合が多いので、しかたなく大型になって値段が高くなってしまうがC++大事典のような書籍を買うしかない。
一方、『詳細 C++』のようなタイトルの書籍では、たとい大型の分厚い書籍でも、残念ながらソケット通信までは書いていない場合が多い。
問題点のある書籍
編集下記のような題名の書籍は、残念ながら日本の2020年代の出版状況では、ソケットプログラミングの学習自体には、あまり役立たない。
- TCP/IPの本はあまり使えない
TCP/IP の解説書を読んでも、実際のC言語/C++によるソケットプログラミングにはほとんど触れられていなかったり、入門レベルも書籍だと、そもそもソケット通信の紹介自体がされていない場合すらもよくある。
TCP/IP などの規格の話題は、資格試験などに出題されたり、大学などでソケット通信を無視して仕様ばかり詳しく習うので(規格などはテストで採点しやすいし、講義でも教えやすい。大学教員と学生の手抜き)、ソケット通信を紹介せずにTCP/IPの規格ばかりを紹介するといった内容の偏った書籍も残念ながら出版市場には多い。
すでに別の書籍でソケット通信について学習済みであるなら、TCP/IPについて詳しく確認するのも良いかもしれないが、しかし上述のような書籍は、残念ながらソケット通信の入門には不適切な現状である。
- 『ソケットプログラミング入門』みたいな本は古い
また、せっかく大型の書店などで「ソケットプログラミング入門」のような書籍を見つけても、大抵、内容の古い場合がよくあり、2001年ぐらいの内容だったりする場合すらある。(なおwikiのこの本文は2020年に執筆。)
API系の書籍は、売れないので内容が古く、Windows APIの書籍ですら、せいぜい、よくて2010年くらいの内容だったりする。(わるいと2005年くらいの古い内容の場合すらある。)
ソケット通信は、さらにそのAPIの書籍でも、マニアックな分野とされてしまっており、しかもWinSockでなくUnix系ソケット通信だとさらにマイナーなので内容がかなり古く、『C言語ソケットプログラミング入門』みたいな題名の書籍の内容は2001年のような、ほぼ1990年代の古さである。
2020年代のいまでこそwikibooksで初心者むけにソケット通信の教科書も書かれているものの、かつて初心者むけの Windows API ですら平易な入門書が無かった過去のせいか、出版業界がこのような状況になってしまっている。