「Webアプリケーションを開発する」とは? 第01回 20年05月 / 最終更新:2020.05.26

初めまして、の方もいらっしゃるかと思いますので、簡単にまずは自己紹介をしていきたいと思います。
古庄道明、と申します。Web上ですと gallu というハンドルを使う事が多いです。
普段は実際に現場でエンジニアをやったりPMをやったり専門学校で教鞭をとったりしております。

さて早速ですが。
「実務として」「Webアプリケーション」を開発する時に必要な最低限の知識はなんだろう? と考えてみると、実は割と多岐にわたります。
個人的には「専門学校で、学年の浅い生徒さんに教える」時に特に痛感するのですが。

「Webアプリケーション」は、概ね「バックエンド」と呼ばれるサーバ側と「フロントエンド」と呼ばれるクライアント側の2つに分かれます。
Webアプリケーションの作成において、サーバ側だけの実装である事は稀で、表示部分であるHTMLやCSS、昨今ですとJavaScriptも「ほぼ、欠かせない」要素として存在するか、と思います。
HTTPを利用したゲームなんかですとフロントエンド側はアプリで作成する事も多いかと思いますが、その場合でもバックエンドは必要になります。

まずいずれにしても最低限「プログラム」の知識が必要です。
筆者はバックエンドが主な守備範囲なので、個人的にはPHPを使う事が大変に多いのですが。
PHP1つをとっても「PHPの文法」はもとより、実務であるからには多くの場合「オブジェクト指向プログラミング(≒クラス)」、昨今ですと高確率で「フレームワーク」、それらを理解するために必要な「プログラミング」としての基本的な知識、等々。
それに加えてサーバやネットワークといったいわゆる「インフラ」の知識も最低限必要ですし、DBを使わないものはほぼ存在しないので、RDBMS、及びSQLの知識もある程度は必要になってきます。
そのあたりを踏み込み出すと、HTTP(Hypertext Transfer Protocol)に対する理解なども、多少なり必要になってきあmす。

一方で。
フロントエンドは専門ではないのであまり踏み込みませんが、あちらも「JavaScript」という言語自体の知識以外に、「タスクランナー(ビルドツール)」や「フレームワーク」「モジュールバンドラー」等々、色々と学習するべき「必須科目」は少なからず存在します。

また、お仕事で開発をする場合は一人で全てをやる訳では無い事も多く、そうすると「マネジメント手法」や「開発手法」「マーケティング」なども、ある程度知っておかないと「個々の戦闘力は高いのに敗北する」事が、これもまた少なからずあります。
昨今だと「(ユニット)テスト」等も非常に重要視されているように思われます。

もう一つ、お仕事としての開発で個人的に昔から重要視しているのは「運用」です。
昨今……というには幾分古い単語になってしまったような気がしなくもありませんが、DevOps という単語が一時期、業界を賑わせていたのを記憶している方もいらっしゃるのではないか、と思います。
「実務 / ビジネス」としてWebアプリケーションを捉えた場合、やはり「運用コスト」というのはとても重要で、この話しも随所で顔を出してきます。

これについては、Learning Standard C++as a New Language( http://www.stroustrup.com/new_learning.pdf )という文章がありまして、定期的に引用をさせていただいております。
この文章の「1   Introduction」と「5   Summary」の二つの場所で、ほぼ同じ文章が出てきます。

> We want our programs to be easy to write, correct, maintainable, and acceptably efficient.

programsの所が、SummaryだとC++programsになっていますが、それ以外は同じです。
日本語訳を書いてくださっているサイト( http://www.libjingu.jp/trans/new_learning-j.html )の訳をのせてみましょう。

> プログラムは書きやすく、正確で、保守可能であり、受け入れられる程度に 効率的であることが望ましい。

お話をさせて頂くケースによって「どこを重点的に話させていただくのか」は異なるのですが、今回は「保守可能(maintainable)」です。
どんなに素晴らしいコードも「保守されていない」ものであれば、いつかは沈んでいきます。流れの速いビジネスの世界であればなおのこと、です。個人的にはqmailを思い出します。
また「保守されない」には「保守出来るが保守しない」と「保守すること自体が困難」の2つの可能性があり、もし後者になってしまうと「二進も三進も行かない」状況にすら、なり得てしまいます。

そして、「保守が難しい」はなにもプログラムだけの世界の話しではなく、DBもサーバもネットワークも、フロントエンドのJavaScriptもCSSもHTMLも、全てにおいて「その視点のない開発」をすれば、ジェンガのように「段々と保守が難しくなっていってしまう」のです。

ただ、初めに書いた通り「Webアプリケーション」の「把握しておくべき知識の領域」は、本当に広大なので。
本稿では、その「様々な領域」を、時には少し深く掘り下げつつ、時には縦断してゼネラリストのような観点で横串を刺すように様々な知識を紐付けつつ、といった内容でお届けできれば、と思います。

それではしばらくの間、お付き合いをいただければ、と思いますのでよろしくお願いいたします。