Webの世界に関する世界観です。
最近は、インターネットを用いたクラウドアプリケーションの形態をしたプログラムが増えています。
クラウドアプリケーションは、ネットワークに繋がなくても使えるような、自分のパソコンだけでは動いていません。ネットワークに繋がった別の「サーバー」と呼ばれる、大型の専用コンピュータと繋がって、インターネットでやり取りしながら、アプリケーションが動きます。
クラウドアプリケーションには、GmailなどのWebメールサービスや、TwitterやFacebookなどのSNSのほか、ストレージサービスやスマホを使って最新情報を得るサービスなどもクラウドであると言えます。
Webを使ったサービス、すなわちWebサービスの特徴は、不特定多数が参加して、さまざまな投稿をそれぞれがパソコンやスマホから行い、その情報がサーバーに集約され、常に最新の投稿を見ることができる、といったように、「不特定多数でつながる」ことができる、ということです。
特に、Twitterのように、RailsやScalaなどで作られたシステムで、大規模にとても多くの人が参加してその投稿をパソコンで見ることができる、といった具合です。
かつては、2ちゃんねるのような匿名掲示板や、それぞれのブログのような「CGIスクリプト」がこれを実現していましたが、最近はPerl/CGIからPHPへと移行し、さらにRubyやPythonなどによる「Webフレームワーク」へと移行しています。
こうしたWebサービスのシステムを開発する上で重要なのは、サーバーが高負荷になった時に、どれだけ安定してサービスを提供できるか、です。
高負荷時の安定的なサービスの提供には、LinuxやFreeBSDのようなUNIX系のOSが用いられることが多いです。特にFreeBSDなどは、サーバーが高負荷になった時にも、安定してシステムを提供することができる、ということを売りにしています。
昔は、2ちゃんねるのような掲示板は、レンタルサーバーを利用しており、高負荷になった時によく接続できなくなりました。そのため、read.cgiと呼ばれるサーバー側のスクリプトを実行せず、掲示板のログが書かれたdatファイルをそのまま読み込む「専用ブラウザ」というものが開発されていました。専用ブラウザを使うことで、サーバーの負荷が少なくなるほか、便利な機能がついていたり、スキン機能を使ってかわいらしいデザインで2ちゃんねるを読むことができました。
最近は、クラウドサーバーと呼ばれるWebホストサービスが盛んであり、この分野で標準的になっているのがAmazonのAWSです。AWSを使うことで、必要に応じて簡単に仮想サーバーのスケールを拡張することができ、最近ではSNSなどのサーバーに高負荷のために接続できなくなる、ということが稀になりました。
UNIXは昔から「ひとつの中央サーバーをみんなで使う」というシステムを作ることがとても得意で、マルチユーザーのタイムシェアリングシステムとして、UNIXやBSDのシステムはWindows以前から研究室のワークステーションなどで用いられてきました。コマンドで操作し、Xを使う場合もktermなどで操作することが多かったです。また、どのコンピュータからログインしても、同じ環境を保つことができました。
UNIXはネットワークととても親和性が高く、多くの、しかしコマンドラインのネットワーク操作プログラムが、UNIXで作られました。今のインターネットの基礎を作ったのは、既に化石のようになったUNIXです。
また、UNIX以外のOSでも、さまざまなネットワーク技術が盛んに作られていました。特に、UNIXと同じようにX11やCDEが動くことで有名なDECのOpenVMSでは、当初からクラスタによる利用が想定されており、特に特殊なことをしなくても、ひとつのシステムがダウンした時に別のシステムが代わりを務めてくれる、フェイルオーバーという仕組みが備わっていました。
メインフレームやミニコンの時代までさかのぼると、さらに見えてくるものがあります。DECが開発した、研究室用のメインフレームに比べて小さなコンピュータであるミニコンは、メインフレームの端末として使われることも多かったです。
そして、DOSのような16bitのシステムが高性能になって32bit/64bitになった今のパソコンでは、そうしたUNIXやミニコンなどのシステムの「再来」が起きていると思います。世界は、もう一度、ひとつの小さな個人向けのコンピュータではなく、たくさんのコンピュータが繋がって「サービスとして」動くようになりつつあります。
これは、良い点と悪い点があります。
良い点は、UNIXのような過去の資産として培われた技術と、パソコン向けの技術とが化学反応を起こして、たとえばMozilla.orgのような新しい革新が生まれるということです。たとえばAndroidやiPhoneなども、インターネットに繋げなければ使い物になりません。小さなAndroidスマホでも、インターネットにつながることでたくさんのことができるようになりました。
逆に、悪い点は、インターネットに過度に依存しすぎる、ということです。インターネット回線がもし何らかの理由で使えなくなれば、何もできなくなってしまいます。
また、インターネットは面白い情報やコミュニケーションがあって楽しいですが、危険な部分もあります。犯罪やハッキングなどの違法サイトやサービスも多い、ということです。また、Web上のアプリケーションは、コミュニケーションを楽しむことができ、開発としても人々に対して自分でサービスを公開できたりすることがありますが、なかなか全てのシステムをオープンソースでフリーにすることができません。このために、一社の営利企業に依存し、その一社のサービス提供がなければ、何もできなくなってしまいます。これはIBMやMicrosoftがやっていたベンダーロックインよりもさらに悪く、パスワードが漏れてしまえば誰かに乗っ取られたりすることもありますし、そもそもパスワードやサービスの存在を忘れてしまえば、自分の昔作ったアカウントを削除することもできなくなります。
インターネットの怖い点は、他にもあります。それは個人情報の問題です。自分の隠したいことや言ってほしくないことまで、一度噂が拡散してしまえば、あとでそれを簡単に削除することができません。このため、誰かの悪い噂を拡散すると、その誰かは途方もない辛い思いをします。これが「SNSいじめ」と呼ばれる行為になって、みんなで一人の人をいじめるツイートを拡散させたりすることができるようになったのです。
ただし、僕はインターネットという場所でさまざまなソフトウェア技術が生まれるのは、基本的には良いことではないかと思います。それは、「Microsoft以外の会社が強くなる」からです。今、パソコン向けのOSとして標準のシェアを持っているWindowsでは、IEやMS-Officeのような、Microsoftが作ったソフトウェアが基本となっており、別の会社の作ったソフトウェアはAdobeのような高価で専門的なソフトウェアが多いです。もちろんネット上にフリーソフトもありますが、Webサービスは難しいインストールなどをしなくてもアカウントをメールアドレスを登録して作成すれば、どのパソコンでも簡単に使うことができます。アカウントが必要ないサービスもあります。こうした「MS以外の会社の技術」が増えていくことで、この世界は進歩していくと思います。特にGAFA(Google, Amazon, Facebook, Apple)などの会社がこれに当たります。
サーバーサイドプログラミングでは、Perl, PHP, Python, Rubyなどの軽量スクリプト言語と呼ばれる言語が良く使われます。これらの動的なプログラム言語から、マークアップ言語であるHTMLを出力し、CSSで飾り付けを行います。
データベースにはMySQL/MariaDBやPostgreSQLなどのOSSデータベースが使われることが多いです。もちろんOracle DBなどの商用も使われます。AWSは最近自前のデータベースに移行しましたが、以前はOracle DBを使っていました。
また、WebサイトをホストするWebサーバーには、ApacheやNginxが使われることが多く、ApacheにおけるCGIとしてPerlを実行したり、Apacheモジュールのスレッドを用いてPHPを実行したり、JavaのサーブレットコンテナであるTomcatなどを用いてJavaサーブレット/JSPを使うこともあります。
また、サーバーサイドでは、Rails, Django, CakePHP, LaravelなどのWebフレームワークを使います。最近はJavaの亜種であるScalaなどの言語を使うことも増えています。そして、開発の現場では、Dockerを使った仮想サーバを構築し、開発環境と本番環境で、「実際の現場でどう動くかを仮想環境で試す」ことができます。
クライアントサイドではJavaScriptを中心に、jQueryやTypeScriptなどのさまざまなJavaScript用のソフトウェア(JavaScriptフレームワーク)を使うほか、サーバーサイドでJavaScriptを実行できるNode.jsなどがよく使われています。また、Vue.jsやReactやAngularのようなJavaScriptフレームワークが使われることもあります。
クライアントのブラウザはIE, Mozilla, Chrome/WebKitなどのブラウザがありますが、スマホのアプリからサービスを提供することも最近は多く、スマホではJavaやKotlinのような言語を使います。
このように、サーバーサイドにはたくさんのソフトウェア技術があり、熾烈な競争と、時に混迷を極めています。
Webの大きな特徴として、「HTMLとリンク」が挙げられます。
HTMLでは、出力される文字列に「リンク」を含めることができます。このリンクは、単に別のページの場所を指すだけではなく、Webアプリケーションでは、「トリガ」となって再度同じWebサイトの別のページにアクセスする「新しいアクセスの要求」に使うことができます。
HTMLの文字列は、単に情報を表示するためだけのものではなく、リンクをクリックすることで「次はこんな情報が欲しい」という情報を、Webサービスに伝えることができます。
これは、UNIXのシェルにおける出力とコマンド入力に相当しますが、違うのは、HTMLではページの特定の部分にトリガを伴うリンクを複数表示し、「この中から選んでね」という「自分からアクセス手段を発信する」ことができるのです。
Webサービスでは、PHPやRubyなどのスクリプト言語でプログラムを記述しますが、HTMLのリンクタグに「GET」でオプションを指定してどれかのプログラムを動かすことで、Webサーバー側に要求をリクエストすることができます。これは、シェルで言えばコマンドライン引数に当たります。
また、Webは一種の分散システムです。ひとつのWebサーバーに複数のクライアントが接続でき、「POST」でフォーム入力を投稿することで、さまざまなユーザーのメッセージを共有することができ、その投稿はリアルタイムで更新されます。これによって、「最新の情報を不特定多数で自由に閲覧し、自らも発信する」ことができます。
また、HTMLのリンクは、別のWebサイトにアクセスするためにも用いられます。これは一種の「ネットワークとネットワークを繋ぐ地図」であり、たとえて言えばルーターのルーティングテーブルのようなものです。ですが、場所をただ指定してアクセスするだけではなく、「こんな情報があるよ」といった草の根の情報からそのサイトを見つけ出す、「みんなで探る迷宮の地図」のようなものです。それらは、Webサイト管理者とユーザーの「手動によるコンテンツの作成」で行われますが、その処理は上手く「手動と自動のバランスを取ったもの」になります。
こうしたテキスト出力・トリガシステムと、分散共有・地図作成環境を、WebはHTMLというページの形式言語と、WebサーバーというHTMLやHTMLを出力するプログラムを保管するサーバーと、WebブラウザというHTMLを整形して表示しリンクに反応するクライアントだけで、簡単に実現したのがWeb(World Wide Web)です。
ユーザーがHTMLを工夫して書き、工夫してリンクすることで、HTMLは「分かりやすい分散オペレーティング環境」を作り出しました。何度も言うように、Webは極めて手動の分散システムです。Webサイトの運営者が分かりやすいHTMLを書くことが前提となっています。
Webの問題があるとすれば、誰かが一元管理することが極めて難しいということ。犯罪やウィルスのようなWebサイトがあったとしても、それを強制的になくすことが極めて難しいのです。これは、スパムメールを大量に送ることのできるメールシステムと同様、Webの大きな問題です。Webには犯罪があふれています。
Web系のマークアップ言語と、そのデザインを行う言語。
CGIやJavaScriptも参照のこと。
Webサーバーを参照のこと。
WebブラウザやWebKitやWebブラウザ開発を参照のこと。
以下のページが参考になります。