Windows Server環境でJava開発を行う前の知識～より理解するために編～

概要
--
WindowsServer環境でJava開発を行う前に知っておいて損ないことをまとめる。

自分自身が始める前に理解するために記載したものですので、間違っていたらご指摘いただけると幸いです。

また、調べたり教えていただいたことをそのまま記載しているところもありますのでご了承ください。

対象
--
WindowsServer環境でJava開発をこれから始めようとする人。

目次
--
（０）はじめに
（１）WindowsServer環境でJava開発をする際に必要なスキル
（２）WindowsとLinuxとJavaの関係性について
（３）Windows系とLinux系の連携はC++やC#で行われている
（４）Webサービスの技術を使っても連携が行える
（５）時代はWebサービスへ！
（６）Webサービスが普及し始めてどうなっているか？
（７）おわりに




---
（０）はじめに
--
■ WindowsServer環境で**単純にJava開発を行うだけなら**Windows　Serverを使うメリットはない。

■ 一般にはJavaのユーザーシステムの作成では、Unix(Linux系のOS)を使うことが多い。

では、いつ使うのか？？

【**Windows系とLinux系との機能を利用したJava系プログラムの開発を行うとき**に使用する。】

---
（１）WindowsServer環境でJava開発をする際に必要なスキル
--
[１] **EclipseでJavaを使いこなせること。**

[２] **EclipseでのJavaでWebサービスによるサーバーシステムが作れるようになること。**
　　⇒Javaの環境構築ができる。
　　⇒DBの環境構築ができる。
　　⇒※Tomcat,Apacheの設定ができる。

　　　※プロトコルがHTTPではなくSOAPに替わっているので、一部異なるところもある。(後述)

[３] **MicrosoftでのC++技術やC#技術を使って、WinndowsやLinuxの技術を使いこなせること。**
　　⇒そこそこでもこれは大丈夫(らしい)。


（２）WindowsとLinuxとJavaの関係性について
--
◆ライバル企業通しのMicrosoftとLinux Foundationが手を組んだ。ここにJavaも混ぜてほしいとお願いする。
![01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491501/edd51805-5ec9-8d19-9601-d7382266c31e.png)

【WinndowsとLinuxの共存について】
■ WinndowsServerやWinndows10では、**Winndows Subsystem for Linux(略称：WSL)**というプログラムを使えば、共存が可能である。

■ **WSLの最初のバージョンでは**、疑似的なLinux機能をWinndowsで実現するものだったので、Winndowsのカーネル(OSの中枢部分)を使って、**疑似的なLinuxを実現するもの**だった。

■ これに対して**バージョンアップしたWSL2では**、本物のLinuxを搭載している。即ち、**Windowsのカーネル(NTカーネル)とLinuxカーネルが共存**している。

⇒この結果、Linuxで作られた技術やツール等がそのままWindowsでも使えるようになった！

---
（３）Windows系とLinux系の連携はC++やC#で行われている
--
■ Windows系とLinux系の**連携はC++やC#で行われている**。

■ また、C#系とC++系の**仲介を行うC++/CLIというプログラミング言語もC#及びC++の開発をやる人は重要**。（Java開発の人はそこまで重要でないのかな？）

■ C#系でJavaとの連携を行えるため、**Windows系の技術とJava系技術は連携が行える**。この連携は統合開発環境Eclipseを使って行える。

■ Windows系の機能を扱うC#をEclipseでのJavaで制御する。

---
（４）Webサービスの技術を使っても連携が行える
--
【Webサービスとは？】
**インターネット上でプログラム部品を公開する技術のこと**
また、そのプロトコル(通信用の規格)は**【SOAP】**と呼ばれる。

詳しくみていこう。

Visual Basicであろうが、Visual C#であろうが、ASPであろうが
コンパイル後のプログラムの規格を標準化すれば、言語違いに依存することなく互いに総合運用することが可能である。
これを**【CLI】**(共通言語基盤)という。


はい・・・？？？（；・-・）
大丈夫、図を追って理解しよう。

まずは、こんな背景があったのか！ということから見ていこう。

（登場人物の名前とは何も関係はないですがここら辺に遊び心を入れさせてください）

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491501/8bf4861b-03f9-1be7-9d60-17e8533cee99.png)

A会社　のび太：
「よし、プログラムが完成したぞ！コンパイルしてっと。。よし部品化もできたぞ！」
※この部品化する技術が**【コンポーネント】**という

B会社　スネ夫：
「ぼくちゃんも完成した！コンパイルしてっと。。」

C会社　ジャイアン：
「俺様も完成した！コンパイルするぞ！」

D会社　しずかちゃん：
「私も完成したわ！コンパイルしましょ！」

C会社　ジャイアン：
「やい！のび太！のび太のプログラム使わせろ！なにい？！何で”ハートマーク”なんだよ！コンパイルしたら”葉っぱマーク”だろ！」

A会社　のび太：
「えぇぇぇ、そんなこと言ったってぼくのところではコンパイルしたら”ハートマーク”なんだもん」

D会社　しずかちゃん：
「あら、私のところは”木のマーク”よ」

B会社　スネ夫：
「ぼくのところは、”炎のマーク”だぞ！」

D会社　ジャイアン：
「うっせ、うっせ！やい、のび太何とかしろ！！」

A会社　のび太：
「そんなこと言ったって、、ドラえも～ん」

Microsoft社　ドラえもん：
「じゃあコンポーネントの技術を標準仕様化して、仕様を統一しようか」

A会社　のび太：
「そんなことできるの？！」

Microsoft社　ドラえもん：
「えーっと、【.NET】！！」

A会社　のび太：
「何それ？」

Microsoft社　ドラえもん：
「コンポーネントの技術は他のプログラムを部品単位で使用することができる素晴らしい機能だよ！」

A会社　のび太：
「うん、けどそれぞれの会社でコンポーネントのマーク(仕様のこと)がちがうんだ」

Microsoft社　ドラえもん：
「それを統一すればいいんだよ！その統一化(標準化)するものが、**【CLI】(共通言語基盤)**！」

A会社　のび太：
「さすがドラえもん！」

Microsoft社　ドラえもん：
「インターネット上でプログラム部品を公開することができれば、ジャイアンものび太君の作った部品を使えるようになるだろ？」

A会社　のび太：
「そうか！でもどうやって？」

Microsoft社　ドラえもん：
「【Webサービス】！！」

A会社　のび太：
「Webサービス？？」

Microsoft社　ドラえもん：
「Webサービスとは、インターネット上でプログラム部品を公開する技術のことだよ。この時のプロトコル(通信用の規約)は**【SOAP】**っていうんだ。」

A会社　のびた：
「え？んー？？」

Microsoft社　ドラえもん：
「のび太君には難しかったっか。これを見てごらん」

![04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491501/e18aecc7-4467-3b13-d0ee-07002ffc93f0.png)

A会社　のび太：
「そうか！コンパイル後の規格を**CLI**に沿って**.NET**で標準化して、**SOAP**というプロトコルを使ってインターネット上に部品を公開する、これが**Webサービス**ってことだね！」



いかかですか？
なんとなくご理解いただけましたか？？

これが、Webサービスを使って連携するってことらしいです。
流れとしてはいたって自然な誕生の仕方ですね。

---
（５）時代はWebサービスへ！
--
【なぜ、Webサービスが進んでいるのか？】

順を追っていこう。。

【CORBA】というものが・・・

ちょっと待って嫌にならないで。説明するから。

■ Windowsの最大の特徴である**【イベントドリブン】**
　これはいたってシンプル！！

　検索画面に、キーボードで「A」を押したら？
　もちろん、「a」or「あ」とか表示されますよね？

　そうです、これのことをイベントドリブンと言います。

　通常、イベントドリブンを活用したシステムを作りたいときは一般的にWindowsを使います。
　でも、**イベント(出来事・事象のことを言います)**の活用が可能なのはの他に分散システム**【CORBA】**があります。

■ 分散システムとは？
　サーバーシステムを作るための本格的な技術のことで、Java系のCORBAを使ったサーバーシステムの作成は結構有名である。

　このCORBAには**イベントチャンネル**という機能があり、簡易的にイベントを発生させる仕組みが作れる。

　JavaだけでなくC++にも対応している

　まあ、サーバーシステムの作成においては重要な技術。(今回は知識程度で。。)

■ Webサービスによるサーバーシステムの作成！
　はい、でた！Webサービス。

　CORBAはUNIX系(Linuxとか)でもWindows系でも使える。

　しかし。。。CORBAは完ぺきではありません。
　いくつかのプログラム言語に対応しているが、その対応した範囲に限定されています。

　その結果、標準技術によるもっと広く通用したサーバーシステム作成の技術が作られました、その名も**【SOAP】**である。

　はい、出たSOAP！もう分かるよね！！

～ここからこの章の本題である、Webサービスい時代は進んでいるということ～
■ SOAPとWebサービスは、
　Microsof
　IBM
　BEAシステムズ
　SAP
　ORACLE
　富士通、
　Hewlett Packrd
　Intel
　が手を組んで作られた。

　やべぇ名の知れた会社がずらり。。。

　⇒**Microsoftは**各種標準技術を**C#**を使って作った。

　⇒**Microsoft以外**の企業は**Java**を使って作った。

　その結果、Webサービス系のシステムはJavaやC#が中心的な存在になっている。
　　　　　　　　↓
　Webサービスのシステムを作れる開発環境は、2002年に一斉に正規版が登場し、**企業向けのビジネス系システムでは普及した。**
　　　　　　　　↓
　しかし、**一般ユーザ向けのシステムでは失敗した。**
　（※一般向けのシステムとは音楽、ゲーム、ファッション等の様々な分野でのシステムのこと。）


　そして偉い人たちは考えた。
　**「ええ、、Webサービスせっかく作ったし普及させたいなあ。。。。。」**

　
■ 各社Webサービス普及に尽力する。
　 IBM：Eclipseを自社管理下から手放し多くの企業に技術開発を参画させた。
　 ORACLE：Webサービスの普及に反対したSun Microsystemを買収した。
　 Microsoft：ライバル企業であるLinux Foundationと手を組んだ。(これは一番最初に言ったやつだね！だからWindows10から使えるようになったんだね！)

　 Google：Microsoftのクラウドコンピューティング対応のスクリプト言語であるTypeScriptを採用。
　 SONY：Microsoftと連携してクラウドゲーム等の共同開発をしている。

　　　　　　　↓
　このとんでもない動きがあったので、業界自体がWebサービスに移行している。

　その結果、**Java系技術とLinux系技術とWindows系技術を活かしたWebサービス系のシステムが主流になっている**

　【なぜ、Webサービスが進んでいるのか？】
　もう分かりますね、Linux FoundationとMicrosoftと手を組んだことをきっかけに、IT全体でWebサービスへの移行がはじまったんですね！

---
（６）Webサービスが普及し始めてどうなっているか？
--
■ Tomcat (Java Servletを動かすときに必要なソフト)
　 Java系のWebサービス(SOAP)ではTomcatが使用可能。
 　2002年の当初でのJava系のWebサービスではTomcatを重要視した為。

　 Java系のWebサービス(SOAP)の大半がJavaサーブレットとJSPとJavaを使った
　 MVCモデル。
　　⇒M：Java
　　　V：JSP
　　　C：Javaサーブレット(Servlet)

■ Apache (Webサーバ)　 
　WebサービスでのJava系では前述の通りApacheを使用する。

 ただし、このApacheはApache SOAPで、名前の通りApacheをSOAP対応させたもの。
　⇒その後、ApacheAXISに移行。
　　その後、ApacheAXIS2に移行。
　　その後、ApacheCXFになった。

■ DBについて
　ORACLE、IBM、MicrosoftはSOAPとWebサービスを作った組織WS-Iのメンバーでもある。

　ってことは使えますね。

　**現在のSQLは静的なので動的処理ではない。**
　 ⇒静的：プログラマーがSQL文を書いたときに全ての構成が決まる。
　　動的：実行時の条件(ユーザーの操作内容や実行時の環境条件)に
　　　　  よって、実行時に構成を柔軟に決めていくこと。
　
　 ⇒今後は、動的処理を行えるXML-DBに替わる可能性あり。

■ Java構築の件について
　Java系については、基本的にWebサービスが登場する前からの構成。
　⇒よって、ApacheやTomccat、DBを使う構成であることは同じ。
　　ただし、プロトコルがHTTP→SOAPに替わっているので一部異なる。

　前述したように、Webサービスは企業向けのビジネス系システムの普及に成功はしているが、**一般ユーザー向けでは失敗している。**
　⇒そこで従来からのHTTPでWebサービス的なことを実現させる技術**【REST】**が誕生した。

　※HTTP：ホームページのファイルを受け渡しするときに使うプロトコル。

　RESTはSOAPに比べると高機能ではないが**従来技術を重要視しているという長所がある。**

　なので！！
　Webサービス技術を調べると、Webサービス(SOAP)とRESTの2種類が出てくる。
　　RESTも**Webの高機能化が目的**なので、従来の技術と違う面もあるがRESTのほうが**従来技術を重要視している**ということ。

　RESTと聞いたら、
　　・Webの高機能化が目的
　　・従来の技術(HTTP)を重要視している
　と連想できればOK！！

■ クライアントサーバーシステムの件について
　 Webサービス(SOAP)によるシステムでは、**Web系技術に非Web系技術を合併させてWebを高機能化させる。**
　 ⇒Web系技術：JSP、JavaScript、Python、Ruby等
　 　非Web系技術：C++、Java、C#等

 　よって、C言語やC++、JAVA、C#で作られたクライアントサーバーシステムのイメージに近い。

　 ただし、実際のWebサービス(SOAP)によるシステムでは、**【クライアントサーバー】の2要素の方式**と、**※【MVCタイプ】の3要素の方式**の2パターンが存在する。

　 ※MVCタイプ：
　　　⇒モデル（Model）：処理するところ
　　　⇒ビュー（View）：表示されるところ
　　　⇒コントロール（Control）：MとVを制御するところ
　　　**即ち、役割分担して制御するよ！**っていうもの。

　　　MVCタイプの長所は、**従来のWebの構成が行えること**なので、Webへの意識が高い場合はMVCタイプを選択する。

　　　クライアントサーバーの長所は、**クライアントとサーバーを分離して考えられること。**
　クライアント側のプログラム作成は、**プログラム言語を自由に選べる。**

　・Microsoftの**C#系**のWebサービス(SOAP)は**クライアントサーバーを中心**にして、MVCタイプも取り入れた。

　・IBMやORACLEの**Java系**Webサービス(SOAP)は**MVCタイプを中心**にしてクライアントサーバーを取り入れた。



**（６）のまとめ！**
・Webサービス(SOAP)もRESTもApacheやTomccatやDBを使う構成は基本的に従来技術と同じです。(SOAPとRESTは一部異なる機能あり)

・RESTは**簡易的なWebサービス**であって、Webサービス(SOAP)に比べると高機能ではないということが欠点。

・実際のWebサービス(SOAP)によるシステムでは、**【クライアントサーバー】の2要素の方式**と、**【MVCタイプ】の3要素の方式**の2パターンが存在する。


---
（７）おわりに
--
Windows Server環境でJava開発を行うのは、
**WindowsとLinuxが共存するWebサービスが普及している流れだから**ってことだね。

スキルはここから身に着けるとしてまずは誕生の流れや、どんな機能が取り巻いているのか少しでも分かってもらえればいいかな。


この記事、まとめるのに16時間はかかった。。
多分、間違えている箇所もあると思います。その際は優しくサルにも分かるくらいで教えていただけると嬉しいです。

この記事に書いてあることは、とても親切丁寧に教えてくれた親切な方に感謝しながら投稿します。本当にありがとうございます。

これが誰かの役に立てば幸いです。