初心者が苦戦するプログラミング以外の部分
プログラミングの勉強をしていると、プログラミング以外のところでいくつかつまづくポイントがでてくると思います。
プログラミングスクールでプログラミングを学ぶとwebアプリケーションを作れるスキルが身につきます。しかしアプリを実際に自分のサービスとして公開したりもっと複雑な機能を追加しようとすると、アプリケーションだけでなく他にもさまざまな知識が必要になってきます。
例えば、サーバー、ネットワーク、データベースなどです。
Railsの開発では、rails sをして自分のPCサーバーをたて、ネットワークを使わず自分の PCにアクセスし、createメソッドを書けば勝手にデータベースに保存してくれます。
しかし、実際にアプリケーションをデプロイしてみると、アプリをどこか他のサーバーで管理し、それによりネットワークを使ってアクセスすることが必要になり、時にはデータベースを触ることも必要になってきます。
本来はアプリケーションエンジニアとインフラエンジニアという感じで仕事がわかれていますが、アプリケーションエンジニアもアプリを作っていく上で必要な知識になってくるので必ず勉強をしておくことをおすすめします。
今日はそのなかでもネットワークについてお話しします。
そもそもネットワークとは?
現在私たちはスマートフォンやパソコンなどを使ってなんらかのネットワークに接続することができます。家でも外でもWiFiが届く範囲内にいればルータを介して世界中の情報にアクセスすることができます。
ネットワークはできる仕事がたくさんあります。一番わかりやすいのはブラウザからホームページにアクセスしたりできることです。他にもメール、電話、ファイル共有、周辺機器への接続(プリンタとか)、遠隔操作(sshとか)、があります。
プロトコルとは?
それぞれのネットワークにはする仕事に応じた送る時に決められたルールがあります。メールならメールのルールが、電話なら電話のルールが、ファイル共有ならファイル共有のルールがあり、このルールをプロトコルと呼ばれています。
webアプリ作成で出てくる代表的なプロトコルを紹介します。
HTTP
Webページのデータのやり取りをする。普通にブラウザでwebサイトを見るときはこれが使われている。
HTTPS
HTTPの進化版。HTTPよりもセキュリティが高い。サイトを作るときはこっちを使いましょう。
FTP
他のPCなどにファイルを転送する時に使う。ex) filezilla, FFFTPなど
SSH
コンピュータを遠隔操作する。これは結構使います。
DNS
URLとIPアドレスを交換する。
TCP
確実さを優先したデータ通信。電話以外はだいたいこれ
UDP
TCPの逆で速度を優先したデータ通信。電話とかで使う。
IP
パケットを目的地まで送り届ける住所のようなもの。
プロトコルは複数のものを組み合わせて使います。例えば、webサイトを見るときは、HTTPとTCPとIPを組み合わせた通信が行われています。
TCP/IP
インターネットで標準的に利用されるプロトコルをまとめてこのように呼びます。先ほど紹介した特定のプロトコルを意味するのではなく、これらを総称してTCP/IPと呼ぶので覚えておきましょう。
昔は、このプロトコルはOSを作っているメーカーが勝手に独自で開発していたので、異なるOS間で通信ができませんでした。これを世界的に統一しOSの垣根を超えて通信できるようにしようとした結果、このTCP/IPというルールが採用されました。
サーバー・クライアント方式とピアツーピア方式
クライアントサーバー方式
ネットワークを理解する上で欠かせないのがこのサーバーとクライアントという概念です。
ネットワークの世界ではコンピュータに役割をサーバーとクライアントという役割を与え作業を分担して運用しています。ブラウザで検索してみることができるホームページのような全員が共有したいデータを置いておくPCをサーバー、そこにアクセスするための一般ユーザーが使うPCがクライアントです。
下の図のように多くの人はサーバーはでっかい箱みたいなコンピュータでクライアントは私たちが普段使っているPCと思っている方が多いと思いますが、クライアントとサーバーはハードウェアの違いではなくどんなプログラムをインストールするかによって決まります。
サーバークライアント方式は、1つのサーバーがデータを管理し複数のクライアントとやりとりをする中央集権的な構造を取るため、管理者にとって管理が簡単であることがメリットです。
多くの人はwebアプリケーションを作ったらこの方法を利用すると思います。一方でデメリットとして、このサーバーが止まってしまうとシステムが全て止まってしまうことが挙げられます。
ピアツーピア
クライアントどうしがサーバーになったりクライアントになったりしてネットワークの通信を行うことをピアツーピア(peer-to-peerやP2Pとも呼ばれます)通信といいます。
サーバークライアント方式とは反対に、中央にあるサーバーを介さずクラアント同士で通信をするため、サーバーがダウンしても動かすことができます。
一方、管理者が目の届かないところで悪意のあるユーザーによりウイルスを混入したファイルを送るなどセキュリティの面でのリスクがあることはデメリットとしてあげられます。
私たちが使っているアプリはこのどちらかの通信方法が使われています。メリット・デメリットをしっかりと考え、適した方法でアプリケーション開発を行なってください。
回線交換方式とパケット
パケット方式
コンピュータのネットワークでは、webサイトへのアクセスやファイルなどのデータを送る時に、送るデータをパケットと呼ばれる小さな単位に分割しやり取りをします。パケットには、どこからどこへ届けるのかのアドレスもつけられています。
回線方式
回線交換方式とは、通信経路を占有しデータを丸ごとおくる方式です。アナログ電話や携帯電話の3G回線ではこのような方式が用いられています。最近はVoLTEという技術が登場し電話をするときでも4Gで使うことができるようになっています。
ネットワークのTCP/IP4階層モデルとは
ネットワークを理解するために重要になってくるのがこのネットワークの階層モデルという考え方です。
ネットワークは1つの通信を実現するために様々なプログラムが動いています。それらの役割を明確にするためにこの階層モデルという考え方が取り入れられています。
TCP/IP階層モデルは4つの階層に分けられます。
これらは階層ごとに異なるプロトコルがあり、それぞれ行う仕事が異なっています。
アプリケーション層
アプリケーションごとの固有の規定です。
HTTP, FTP, SSHなどのプロトコルを使用し、通信アプリケーションの機能を実現します。
トランスポート層
ノード間のデータ転送の信頼性を確保するための規定です。TCPやUDPのプロトコルを使用します。
インターネット層
ネットワーク間のエンドツーエンドの通信のための規定です。この層では、IPが代表的なプロトコルになります。
IPによりネットワーク上のノードに対して自分のIPアドレスを割り当て、エンドツーエンドの通信を実現します。
ネットワークインターフェース層
直接的に接続されたノード間の通信のための規定です。
イーサネット、PPPが代表的なプロトコルです。