サーバーサイドのWebプログラミング入門におすすめの言語を紹介
スマートフォンが普及し、多くの人々がインターネットに触れている現在、ウェブサイトやスマートフォンアプリを作りたいと思っている方は潜在的にはかなり多いのではないでしょうか。
世界各国では義務教育でもプログラミングが必修化され、日本でも2020年までの必修化される見通しになるなど、これからますますプログラミングは身近な存在となっていきます。
そこでこの記事では、初めてWebプログラミングに触れようとしている人がどんなことをすれば良いのか、理解してしてもらうことを目的としています。
始めに断っておきますが、ここでは細かい定義などは省略し、最短で理解してもらうことを狙いとしています。
そのため厳密には異なる表現などあるかもしれませんが、ご了承ください。
目次
そもそもWebサイトはどのようにしてできているのか
そもそもウェブサイトは「HTML」と呼ばれるマークアップによって成り立っています。マークアップとは何かというと、一定の形式によって形式された文字列のことで、HTMLは自分が好きな様に書くのではなく、ルールに沿って記述する必要があります。
またHTMLはそれ自体はデザインするものではなく、文書構造を記述するものです。そのためHTMLを正しく記述しただけでは無機質なウェブサイトになってしまうので、何か装飾をしたいと思うでしょう。
そこで、「CSS」と呼ばれるスタイルを指定する言語を使用することでウェブサイトを装飾することができます。
皆さんが普段目にしているウェブサイトは全てこのHTMLとCSSによって構築されており、実際にこのHTMLとCSSだけでおっと驚くようなウェブサイトも作成することも可能です。
もちろん可能というだけで、覚えればすぐにできるというわけではありません。基本ルールを覚えて、応用方法をトライアンドエラーで徐々に身につけるのでどうしても時間はかかってしまいます。
しかしHTMLとCSSだけではウェブサイトが一度表示された後は、動的に変更されることがありません。例えばTwitterのサイトでは、ツイートを投稿するとページを再読込しなくとも、最新のツイートが表示されますが、このような動的な処理は「JavaScript」によって行われています。
JavaScriptを適切に使うことでユーザーはそのページの中で、様々な動作が可能になり、リッチな体験をもたらすことができます。
上に挙げたHTMLとCSS、そしてJavaScriptはウェブサイトを制作する上で最もベースになる言語です。
動的なデータを扱うにはどうすれば良いのか
しかしHTML・CSS・JavaScriptを習得してもSNSサービスのような複雑なものはおろか、掲示板のようなシンプルなウェブシステムを制作することはできません。
なぜならこれらの言語を利用しても、そのページに表示したデータを、そのユーザーが利用する限りにおいてはカスタマイズ可能ですが、他人のユーザーが起こしたアクションを自分のページに反映させるようなことはできないからです。
例えば掲示板システムをもとに考えてみましょう。
掲示板にはトピックを示すスレッドがあり、スレッドにはいくつかの返信がつけられます。
例えば自分以外の誰かがスレッドを作成し、同じく誰かしらが返信をしたものがあったとして、そのスレッドを閲覧した際には返信された状態で表示されます。
これは掲示板を管理しているサーバーと呼ばれるコンピュータに、スレッドの情報、返信の情報が保存されており、サーバーが保存されたスレッド、返信の情報を適切に返すことで、他の人からもスレッドや返信を閲覧することができるのです。
ここで重要なのは、掲示板システムは自分のコンピューターだけで完結せず、他者のアクションを反映するものだということです。
そして、プログラム自体に変更を加えなくても、そのページに表示されるデータがどんどん追加されていったりとダイナミックな動作を実現できるので、このようなサイトのことを「動的なサイト」と呼びます。
先程説明したHTML・CSS・JavaScriptだけでは動的なサイトを作ることができず、自分のコンピューターだけで完結する仕組みしか作れないのです。
そのため、掲示板システムのようなものを作りたいのであれば動的な仕組みを提供するプログラミング言語が必要になります。
ちなみにこの動的な仕組みを提供するプログラミングを「サーバーサイド(プログラミング)」と呼びます。反対に一人ひとりのコンピュータを制御するJavaScriptのことは「クライアントサイド(プログラミング)」と呼びます。
全体のデータを管理する”サーバー"を制御するのが「サーバーサイド」で、個々のコンピュータを生業するのが「クライアントサイド」ということです。
サーバーサイドプログラミングの仕組み
例えば掲示板システムにおいて、あるスレッドに返信をつけて、そのページを再読込すると返信が新たについた状態で表示されています。
これはどのようにもたらされているのかというと非常に単純で、サイバーサイドプログラミングにおいて「新しい返信がついた状態のHTMLをそのまま返す」だけで、ユーザーから見れば新しい返信がついているフレッシュなページに見えるのです。
そのページに対応するデータを取り出し、それをそのまま追加した状態のHTMLで返すだけで、基本的な掲示板のシステムは作成することができるのです。(もちろん複雑なページを作成する場合はこれほど単純ではありませんが)
もちろんデータの取り出しだけでなく、およそ人間がルーティン化できるような処理は全てプログラミング言語によって実現することができます。
具体的にどのような事ができるのかと言えば、皆さんがウェブサイトやアプリを通じて提供されているような機能のほとんど全てがプログラミングによって実現されているので、既に享受している体験は理論上は全て可能なのです。(もちろん商用のサービスは難しい技術が使われていることが多く、一朝一夕に身につけることはできませんよ!)
なぜプログラミング言語は何でも良いのか
ここの項目は学習する上で必ずしも必須ではないので読み飛ばしてしまっても構いません。
しかし、なぜHTML・CSS・JavaScriptは既定言語なのに、サーバーサイドのプログラミング言語は何でも良いのかということに疑問を感じる人がいるかもしれません。
それについて軽く説明したいと思います。
皆さんがウェブサイトを表示する時には、Webブラウザーというものを利用していると思います。(もしかしからスマホアプリ内のWebビューで見ているかもしれませんが、これも原理的には同じです)
そしてWebブラウザーにはSafari、Google Chrome、Internet Explorer、Firefox、Operaなど様々なものが存在しており、基本的にはどのWebブラウザーを利用しても同じようにウェブサイトを閲覧できます。(実際にはブラウザごとに処理が異なっていることがあるのですが、開発者が同じように見せるように努力しています)
もしもHTML・CSS・JavaScriptといったプログラミング言語がブラウザごとに使用できたりできなかったりしたら、特定のブラウザでは見られるけれども別のブラウザでも見られない、ということになります。
しかし利用者としてはウェブサイトが見られないブラウザを使いたいとは思いませんよね? ですからブラウザは暗黙の了解としてHTML・CSS・JavaScriptに対応することで、どのブラウザを使っても等しくウェブサイトを表示することができるのです。
逆に言うと、特定のURLにアクセスした時に、開発者が思った通りのHTML(およびCSS・JavasScript)を出力さえできていればよく、その手段は何でも良いのです。
どんな言語を使っても同じHTMLが返っていればユーザーからすれば全く同じページに見えるわけで、手段が何であろうと利用者の体験に影響はなく、その手段こそサーバーサイドプログラミングにあたります。
プログラミングは言語がたくさん存在していますが、基本的にはどんな言語を使っても大抵の処理を実現する事ができます。ですから、HTMLを出力するという目的を達成するのは、実は大抵の言語で可能なことなのです。
どんな基準でおすすめの言語が決まるのか
ではどんな言語でも実現可能だからといって、実際に制作するにあたって多様な言語が使われているのかというとそうではありません。特に初心者に使われる言語というのは実はかなり限定的なのです。
ここでは深く説明しませんが、実はウェブサイトにアクセスしてから、適切なデータが返ってくるまでには内部で膨大な処理が行われており、それらを説明するとそれだけで本1冊分かけて説明しなければならないようなものです。
凄く簡略化して説明すると、とあるユーザーがウェブサイトにアクセスした時に、そのURLに該当するウェブサーバーに「こういう人からこんなアクセスが来た」というデータが受信され、サーバーはその情報を元に、適切なURLを返すという処理を行います。
具体的に言うと、「http://◯◯.com/contact」というURLにアクセスした時にお問合わせのページではなく、トップページが帰ってきたら困りますよね? サーバーは「contact」という文字列から、ユーザーがお問合わせのページをリクエストしていると検知して、しっかりとお問合わせのページを返してあげる必要があります。
しかしこれらの仕組みを一人の開発者がゼロから作るのはほぼ不可能です。
先人たちが長い年月と膨大な時間をかけて作った仕組みがあり、それを利用することで、開発者は簡単に動的なウェブサイトを作ることができるのです。
ですから初心者にとっておすすめの言語とは、それらの資産を使ってより簡単に思った通りのウェブサイトを作れるものということになります。
実は上級者になるほどパフォーマンスを追求したりして、必ずしも簡単なものが使われるわけではないのですが、初心者のうちは過度にパフォーマンスを意識することなく、より少ない労力で自分の作りたいものが作れるものを使ったほうが良いのです。
PHPが最もおすすめ
まず断っておきますが、おすすめの言語というのは人によって順位が変わったりします。私はPHPという言語をここで一番におすすめしていますが、人によっては別の言語をおすすめしているかもしれません。
とはいえ言語の候補が膨大にあるわけでなく、ある程度少ない候補の中から選ばれています。
では本題に戻ります。
PHPは動的なウェブサイトを作ることに特化した数少ない言語で、現存するウェブサイトの中で最も多く利用されているという実績があります。
特徴としてはPHPのプログラミングは特別なことをしなくても、プログラミング以外の箇所はそのままHTMLとして出力されるということです。
ですからHTMLを理解している人にとっては、HTMLの知識をそのまま活かすことができて、そこにPHPの知識を折りませれば、簡単に動的なサイトを作ることができます。
実はPHP以外の言語では、HTMLとプログラミングを混在させた"単一のファイル"だけで動的なサイトを作ることができないので、プログラミングとHTMLを合体させるにはPHPが最も手っ取り早いのです。
もちろん多少の環境設定は必要ですが、PHPは利用しているユーザーが多く、簡単にウェブアプリケーションに必要な環境を一度にインストールできる「XAMPP」と呼ばれるソフトもあったりと、初心者でもハマらなければすんなり環境構築することができます。(実はプログラミングでは自分の環境だけで何故か動かない”ハマる”ということが相次ぐのが厄介なのですが…)
またプログラミングでは英語が公用語のように使われており、自分の知りたい情報が日本語で見つからないことが上級者になるほど相次ぎます。マイナーな言語の場合は入門時でさえ英語情報しか見つからないこともしばしばあるほどです。
その点PHPは日本人のプログラマーが多いため、当面の間は日本語情報だけで上達することができるというのも利点です。
これらのことを勘案すると、やはりPHPが最も初心者にとってとっつきやすく、応用しやすい言語であると考え、PHPを一番のおすすめとしました。
Rubyが二番目におすすめ
実はPHPが一番というのは結構主流な見解なのですが、Rubyを二番目にするかどうかはかなり意見が割れる所ではあります。
PHPと違ってRubyは単体の一つのファイルだけで動的なサイトを作ることができず、またコマンドラインと呼ばれる、初めての人にはちょっとマニアックな画面をいじらないといけないので、特に独学でやる場合は挫折しやすいのが難点です。
なので初見かつ独学でRubyを選ぶというのはかなりチャレンジャーです。最近はプログラミングスクールなどではいきなりRubyを教わることもあるようですが。
Rubyの良いところとしては日本発のメジャー言語であり、日本語情報が豊富なことです。
またウェブサイトを制作するためのフレームワークという枠組みがしっかりしていて、初心者でも比較的とっつきやすいSinatraというフレームワークがあるからです。
ただしSinatraを使ったとしても、完全なRubyだけのプログラムを書く必要があり、HTMLから入ってきた人にとってはちょっと取っつきづらいと感じるかもしれません。PHPならHTMLにちょっとプログラムを付け足すだけで動的な仕組みを作れるのですが、Rubyの場合はなかなかそうはいきません。
そしてPHPよりもスマートにプログラミングができるという利点があります。何らかの処理をプログラムにする場合、多くの場合でPHPよりもRubyの方が短い行数で書くことができるので、長期的にはRubyを使ったほうが生産性が高くなると言われています。
これだけ読むとRubyは上級者向けの言語に思われるかもしれませんが、全くそんなことはなく、言語自体の習得難易度は最も低い部類です。なによりプログラマーが気持ちよくプログラムを書くことを目的として作られているくらいですので。
しかし全くの初心者がウェブサイトを作る目的でやるとなると…少しハードルが高いかなと思うため、二番目のおすすめとさせていただきました。
とにかく手を動かそう
先程も言ったように、実はどの言語を選べばよいのかということに統一的な見解はなくて、人によっては別の言語をおすすめするかもしれません。
ですが、個人的にはこの2つの言語以外は最初に選ばないほうが良いと思います。
そしてどの言語をやるかを決めたら、本なり入門サイトを見ながらとにかく手を動かして学習するのがおすすめです。
最初は「写経」と行ってサンプルのコードをそのまま自分で一語一句写し取る作業がおすすめです。写経をしていくうちに、何となく勝手がわかっていって、どんなことをすればどんな処理が行われるのか、という法則性が見えてくるのです。
そういった法則性が見えてきたら自分なりにちょっとカスタマイズしてみたりして、もちろんそれが上手く行かないことも多いのですが、自分なりに試行錯誤したいと思えてきたら、やればやるだけ上達していくと思います。
むしろ最初の写経の作業の方が退屈で辛いかもしれません。
何はともあれ、プログラミングは座学で学ぶよりも手を動かしながら学ぶのがおすすめです。
もちろん慣れてきたら「そもそもこの仕組みはどうなっているのだろうか」といった疑問を解決するために本を読むことも重要ですが、本当に初心者のうちは細かいことは気にせず、とにかく手を動かしてプログラミングという作業に慣れていきましょう。
困ったらググろう!
本を読んでいたり、入門サイトを参照していても、どういうわけか自分のPCでだけ動作しないという厄介なことはよく発生します。それは他のソフトと競合してしまったりと、自分のPCだけに発生する問題だったりするのですが、その解決法は参照しているところには大抵乗っていません。
それをどのように解決するのかというと「とにかくググる!」です。
それっぽいフレーズをGoogle検索にかけると、多くの場合は解決法が見つかります。
稀にそれでも解決しないことがありますが、その場合はteratailのようなQ&Aサイトを使って、直接プログラマーに聞いてしまうのがおすすめです。
こういった「ハマる」という現象は、プロのプログラマでも頻繁に遭遇することで、その解決だけに丸一日費やすことすら良くあります。原因がわからず、先に進めないという状況におそらく誰もがストレスを抱えますが、ここはグッとこらえてとにかく原因を究明しましょう。
何だかんだでGoogleから答えが見つかる事が多いのですが、最初は検索の仕方もわからないかもしれません。慣れてくると何となくそれっぽいフレーズを並べることで直ぐに解決できるようになるのですが、最初のうちは数撃ちゃ当たるで、色々な検索方法を試してみましょう。
だんだん見つかりやすいフレーズの法則が見えてきて、ググり力もアップしてきます。
慣れてきたらフレームワークを使おう
世の中で稼働している多くのサーバーサイドのプログラミングには「フレームワーク」と呼ばれる枠組みが使われています。
なぜこれが利用されているのかというと、ウェブサイトを制作するにあたって汎用的な機能がフレームワークに備わっていたり、フレームワークのルールに沿うことで、悪い意味での「自己流」を防ぐことができ、一般に良いとされている作法に沿ってプログラミングすることができるからです。
全くの初心者の状態で書いたプログラミングというのは多くの場合、熟練した人からしたらひどいもので、それを商用のサービスに使うのはリスキーです。(もちろんひどいコードであることを最初から気にする必要はなく、最初はとにかく手を動かしていくことが重要です)
そのためフレームワークを開発チームに導入することで、誰が書いてもフレームワークの法則に沿うことになり、プログラムの書き方にバラつきが出にくく、チームで開発しやすくなるという利点があります。
ですからある程度熟練してきたらフレームワークの導入を検討するのが一般的なのですが、厄介なことにこのフレームワーク選びも情報がないうちは難しいものがあります。
幸いこのサイトではフレームワークのおすすめランキング記事がありますので、そちらを参照していただければより良い選択ができるかと思います。もしフレームワークの導入を検討するフェーズであればこの記事も是非読んでみてください。