javaを使ってWebアプリを作るまでに結局なにが必要なのか。仕組みと学習に必要なものをザックリ説明

Javaの学習を始めたが、実際どこまでやればWebアプリになるのか？どんな技術を覚える必要があるのか？先が見えなくて不安な人はいないだろうか。
![1190907.jpg](https://qiita-image-store.s3.amazonaws.com/0/235933/aab7df9a-d513-3da2-1ee0-948c802cbcb5.jpeg)
私は、やってもやってもjavaがコマンドライン上で動くイメージから発展せず、Webで公開できるイメージが沸かず、不安だった時期がある。
同じようにjavaの学習に不安を覚え、挫折しかけている人に、Webアプリ完成までの全容をザックリ説明しようと思う。

##ザックリ図で見るとコレ！
Webアプリの中身を図で見るとこんな感じ。
※あくまでイメージをつけるための例であるので、サーバを１台で立てた場合を想定し、また細かいとこは省いています。
[![Image from Gyazo](https://i.gyazo.com/41431332f41e06ad4cef5cebdd50cde1.png)](https://gyazo.com/41431332f41e06ad4cef5cebdd50cde1)
左の人がWebアプリを使う利用者。その利用者がWebアプリの機能の実行(リクエスト)をして、それがサービスを提供するサーバに渡る。サーバの中には、サーバを制御するOSがまず土台にあり、Webページは、Apache TomcatというWebサーバソフトウェアの中で動く。その中でアプリケーションが動き、矢印のようになんやかんや処理があり、データベース(DB)から情報を引き出し、その処理結果が返ってきて、ブラウザに表示(レスポンス)される。
細かいところは置いといて、大まかな動きは分かっただろうか。

##Java入門書などの学習はどこで活用されるのか
まずJavaの学習を始めると、例のようなHelloWorldであったりコマンドライン上で出力をさせながら処理の方法を学習していく。
[![Image from Gyazo](https://i.gyazo.com/92e4b560f4dd6cf09a14ecd3a996ac7e.png)](https://gyazo.com/92e4b560f4dd6cf09a14ecd3a996ac7e)
これがWebサービスでいうところのどこに当たるのかというと、ザックリすると以下の赤丸をしてある箇所。
[![Image from Gyazo](https://i.gyazo.com/7f529a87de87a28f4eaf4bffbd17df31.png)](https://gyazo.com/7f529a87de87a28f4eaf4bffbd17df31)
サービス利用者から「こんな計算してほしい」「こんな情報がほしい」とリクエストが渡ってきたものの動的な処理を行う。いわゆるサーバサイドと言われるもの。Javaの学習を進めていて、Webアプリになるイメージが付かないのは、サーバサイドであるアプリの中身の学習をしている為だ。
htmlなどブラウザで表示させるものの方が、パーツを使うことで上達までのスピードは早いし、成長したのを見た目で実感しやすい。そういった意味ではJavaを最初は地味に感じてしまう人もいるのではないかと思う。
だが、デザイン側の流行りや手法は移り変わりが早いと聞くし、時間は掛かってもアプリで必要な核になる部分であるロジカルな思考や仕組みを先に学んでしまえば、後の学習はだいぶ楽だと私は思う。

##利用者からどう情報が届くのかを少し詳しく
「ザックリ図で見るとコレ！」で説明していた```その中でアプリケーションが動き、矢印のようになんやかんや処理があり```の部分がザックリし過ぎてたので少し詳しく。
先ほどの例で言うと、まず利用者がリクエストする際に、最初に開いていたボタンを押下するページがJSPだ。
[![Image from Gyazo](https://i.gyazo.com/8f30a2ad313f82778cdda76faf940e76.png)](https://gyazo.com/8f30a2ad313f82778cdda76faf940e76)
JSPは、JSPファイルというものを使うJavaの処理も書けるhtmlのようなもの。
例えば、ブラウザからhtmlを指定して確認するときのようにhttp://localhost/TestWorkspace/ ```test.jsp```のように指定して使うものだ。
ボタン押下する際にページに入力された情報が送られ、送信先に指定されたサーブレットというJavaファイルが指示役として動き、そこから必要な処理はjavaが行う。そしてまた、サーブレットからJSPに結果が渡されて利用者にレスポンスされているという仕組みになっている。

##じゃあ何からどう学んでいくの？
だいたいの仕組みが分かったところで、じゃあ何から学んでいくと良いのか。私の経験から思う学習内容と順序を説明する。
###1．Java学習
まずはJava入門書でJavaで何が出来るのかを学ぶ。カプセル化、継承、多態性あたりが分かってくると、サーバサイドの処理のイメージが出来てくると思う。
####参考資料
私も使っていた入門テキスト
→***[スッキリわかるJava入門](https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BJava%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%B8%AD%E5%B1%B1-%E6%B8%85%E5%96%AC/dp/484433638X/ref=sr_1_1?ie=UTF8&qid=1544333892&sr=8-1&keywords=%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8B+java+%E5%85%A5%E9%96%80)***

###2.サーバ、データベース構築を行い、JDBC処理を学ぶ。
Javaの学習が終わったら、Javaを使ってデータベースとの連携を学んでいくと良いと思う。
サービスを作る上で、データの書き込みや取り出しは必要なスキルであり、そこを学んでほしいがその上では是非図で丸をしている部分のOSを入れてサーバを立ててDB環境を構築して欲しい。
[![Image from Gyazo](https://i.gyazo.com/56f948f2cc071e819aab6a93ce22b51c.png)](https://gyazo.com/56f948f2cc071e819aab6a93ce22b51c)
ローカル環境(Windows上)で開発練習を進める人は多いが、サーバの仕組みや構築方法が分かっていなければ、現場で活きる力にならないと思う。ローカルの環境に慣れている為にサーバの階層構造の仕組みが理解できず「アプリをどこに配置するのか分からない」「サーバでのパスの指定方法が分からない」という方を何人か見てきているし、現場に入ってきた若手がサーバ内の階層移動の方法も知らないようでは、１から教えることが多すぎて仕事をもらうチャンスを逃す場面が増えてしまうのではないだろうか。サーバに構築するといっても自学では物理サーバは必要ないので、VMware等に仮想サーバを立てて自身のPC内に構築出来る。
####参考資料
手順だけであれば仮想サーバ構築やPostgreSQLのデータベース構築方法は以下のリンクの記事で構築出来る。
→***[【初心者向け】サーバに構築したPostgreSQLをWindowsからツールで使えるようになるまでを一から説明します。](https://qiita.com/shimatter/items/18b32b238139d7b5b1ff)***

また、サーバの基礎知識については、私はこの書籍で学習した。いきなり、LPIC等の学習から入るよりも分かりやすく、基本はこれでなんとかなる。
→***[1週間でLPICの基礎が学べる本](https://www.amazon.co.jp/1%E9%80%B1%E9%96%93%E3%81%A7LPIC%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8C%E5%AD%A6%E3%81%B9%E3%82%8B%E6%9C%AC-%E7%AC%AC2%E7%89%88-%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%B8%AD%E5%B3%B6-%E8%83%BD%E5%92%8C-ebook/dp/B00IWNEWS8/ref=sr_1_1?ie=UTF8&qid=1544345126&sr=8-1&keywords=1%E9%80%B1%E9%96%93%E3%81%A7lpic%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8C%E5%AD%A6%E3%81%B9%E3%82%8B%E6%9C%AC)***

サーバでDB環境が構築できたら以下のサイトでJDBCの仕組みや使い方が参考になる。
→***[TECHSCORE  JDBC(java.sql, javax.sql)](http://www.techscore.com/tech/Java/JavaEE/JDBC/index/)***

###3.サーブレットとJSPの学習
この仕組みを学習することでWebアプリの仕組みが分かり、Webアプリの全体像が見える。サーバの動きの中では丸のしてあるあたりの学習。
[![Image from Gyazo](https://i.gyazo.com/0aa30477439e82bf4f9cfa9c821858b0.png)](https://gyazo.com/0aa30477439e82bf4f9cfa9c821858b0)
htmlの基本文法、Webページの公開方法、動的なページの作成方法、開発方法など、学ぶことは多い。このあたりになるとブラウザへの出力結果等、ブラウザを見ながらの開発になり、個人的にはとても楽しい。

####参考資料
私の使っているテキストはこちら。Eclipseの使用方法やWebサーバへのデプロイ方法なども載っている。
→***[スッキリわかる サーブレット&JSP入門](https://www.amazon.co.jp/dp/4844335804/ref=asc_df_48443358042545974/?tag=jpgo-22&creative=9303&creativeASIN=4844335804&linkCode=df0&hvadid=295719984664&hvpos=1o1&hvnetw=g&hvrand=10985391328792357083&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009333&hvtargid=pla-524758681562&th=1&psc=1)***


##さいごに
フレームワークについては触れなかったが必要に応じて、使いたいフレームワークも学習していくと良いと思う。
以上で、Webアプリの仕組みと学習順序の説明は終わるが、JavaでWebアプリ開発をするまでの道筋は見えただろうか。
すべてを行うまでには時間が掛かるかもしれないが、ゴールが見えているのと見えていないのとでは、気持ちの面でだいぶ違ってくる。また、技術を覚え、使えるものを作るまでには時間が掛かるものだが、時間を費やして学んだ技術こそ、現場で活きる力になるのだと思っている。

共に腐らずに続けていきましょう。
お読みいただき、ありがとうございました。