社内でやってみたことを記録

#経緯
　8月17日から入社2日後にアサイン先が決定し、入場日が9月1日までなので、入場までの期間を使って、現場で使用するSpringFramework（Spring4）をあらためて環境構築をすることにしました。
##概要
　社内に検証用のサーバがあったので、検証用のサーバから環境を構築。ローカル側で実装を行い、サーバ側にデプロイ（配置）するための個人作業メモになります。

##環境・主な使用ツールなど
【ローカル】
OS : Windows10
ツール :
WinSCP（ファイル転送用）
TeraTerm（サーバアクセス用）
Eclipse + STS（SpringToolSuite）
⇒Eclipseインストールしてからのプラグイン導入（STS）で行う。
  
【サーバ】
OS : Red Hat Enterprise Linux 7.2(評価版) x86_64
Webサーバ : Tomcat + Apache
⇒インストールされていなかったので、導入から実施。

##動作環境
###Red Hat Enterprise Linux(RHEL)
バージョン7.2（既にインストール済み）
　スタンドアロン環境なので、パッケージのインストールは、DVDから取得。
⇒yumリポジトリ設定が必要だが、既に設定済。

###Apache(httpd)
バージョン2.4系
インストール～設定～動作確認までを記録する
参照リスト記入

<参考サイト一覧>
[Apache httpd 2.4 を CentOS 7 に yum でインストールする手順](http://weblabo.oscasierra.net/apache-installing-apache24-yum-centos7-1/)


###Tomcat
今回は、バージョン8.0系(8.0.30)をインストール
Tomcat動作するためにJavaが必要なため、インストールおよび設定
１．Javaインストール

・以下のリンクからLinux用のファイル(rpm)をダウンロード
  [Java SE Development Kit 8 Downloads] (http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)

・ダウンロードしたファイルをSCP転送ツールにて、サーバにアップロードした後
以下のコマンドでインストール実行。
```$ sudo rpm -ivh jdk-[8uversion]-linux-x64.rpm
```
・ダウンロードしたSDKに切り替える```
$ sudo alternatives --config java
```
コマンド打つと以下の選択画面が表示。[3]を選択する

```
3 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/bin/java
   2           /usr/java/jdk1.8.0_101/jre/bin/java
   3           /usr/java/jdk1.8.0_101/bin/java
```
・切り替わったかどうか。以下のコマンドで確認。
```$ java -version```

２．Tomcatインストール
yumからインストール。動作確認までの手順を書く。
<参考リンク>
[Tomcatインストール・設定](http://www.bnote.net/linux/tomcat8_install.shtml)

３．Apacheとtomcat連携
WebサーバとしてApache(httpd)で行い、APサーバとしてTomcatで行うためのモジュール設定方法を書く。
<参考リンク>
[ApacheとTomcat連携](http://www.bnote.net/linux/a_ajp_t.shtml)


##フレームワーク
ローカル(Windows)にて製造・動作確認を行い、サーバ環境にデプロイ。
まずは、ローカルでの開発環境を整える。　　
 書籍などでSpringFramework4を体系的に実施。  
<参照書籍>
[SpringFramework4プログラミング入門](https://www.amazon.co.jp/SpringFramework4%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798041564)
[[改訂新版]Spring入門 ――Javaフレームワーク・より良い設計とアーキテクチャ](https://www.amazon.co.jp/dp/4774182176/ref=pd_lpo_sbs_dp_ss_3/351-3202737-6884138?pf_rd_m=AN1VRQENFRJN5&pf_rd_s=lpo-top-stripe&pf_rd_r=YS5JX3NDHCAR5AEHGQMM&pf_rd_t=201&pf_rd_p=187205609&pf_rd_i=4798041564)
###Spring Framework
　統合開発環境ツールとしてEclipseを使用。
1. 専用のSTSをダウンロード
2. Eclipseのマーケットプレイスでプラグインをインストール
⇒Eclipseからプラグインをインストールする方法でやってみる。


####1. Eclipseインストール
[Pleiades All in Oneダウンロードサイト(http://mergedoc.sourceforge.jp/)](http://mergedoc.osdn.jp/)
⇒日本語対応版（4.6　Java、Standard）をインストール

ダウンロードしたフォルダを(C:\Eclipse_4.6)置く。

・プラグインのインストール
「ヘルプ」→「マーケットプレイス」選択
![マーケットプレイス.png](https://qiita-image-store.s3.amazonaws.com/0/138012/7d15a7e3-5ce5-4089-ac1d-566f5c77946d.png)

検索ボックスに「STS」入力すると、上記の画面からSTSインストール選択。

####2. Java環境設定

・以下のリンクからWindows用(32bit or 64bit)のファイルをダウンロード
  [Java SE Development Kit 8 Downloads] (http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)

・環境変数の追加
「コントロールパネル」→「システム」→「システムの詳細設定」→「環境変数」

・「システム環境変数」の変数の編集
変数名：JAVA_HOME
変数値：C:\Program Files\Java\jdk1.8.0_101（SDKインストール先）　　
新規追加を行う。

・Pathを編集：「新規」→　%JAVA_HOME%\bin を入力

以下のコマンドをプロンプトで入力し、確認。```
 java -version
```
####3.Maven
・以下のリンクからMaven(3.3.9)をダウンロード
[https://maven.apache.org/download.cgi](https://maven.apache.org/download.cgi)

・ファイルを解凍し、C:\直下に配置する。

「システム環境変数」の変数の編集
・変数名：M3_HOMEの新規作成
　　変数値：C:\apache-maven-3.3.9
・Pathを編集：「新規」→　%M3_HOME%\bin を入力

以下のコマンドをプロンプトで入力し、確認。```
 mvn -v
```
####4.SpringBootによるアプリケーション開発
Springベースでのアプリケーション開発を簡単に作成するためのフレームワーク。
作成したアプリケーションを別のサーバにデプロイする手順を記録。

・SpringBootでサンプルアプリ作成

- mavenで雛形を作成。 

```   
mvn -B archetype:generate -DgroupId=com.sueno -DartifactId=sueno -Dversion=1.0.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quickstart
```

- 上記で作成したフォルダをEclipseでインポートし、フォルダ内のpom.xmlを編集  

```
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.buoyancy</groupId>
  <artifactId>sueno</artifactId>
  <packaging>war</packaging>
  <version>1.0.0-SNAPSHOT</version>
  <name>sueno</name>
  <url>http://maven.apache.org</url>
     <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.0.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>
</project>

```
***作成ポイント***
1. `<packaging>war</packaging>`
パッケージをwarに修正
2.　`<scope>provided</scope>`　
spring-boot-starter-tomcatのscope項目をprovidedを追加。


- フォルダ内のApp.javaを編集。  

```
package com.buoyancy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class App extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(App.class);
    }

    @RequestMapping(value = "sueno", method = RequestMethod.GET)
    public String getSomething() {
        return "something";
    }
}

```  

***作成ポイント***
・SpringBootServletInitializerを継承する
・configureメソッドをOverrideする

-  一度、Ecplipse上で動作確認。
 フォルダ上で右クリック。「実行」→「SpringBootアプリケーション 」を押す。  
サーバ実行後に以下のアドレスにアクセスする。  
http://localhost:8080/sueno/  
ブラウザ上で「something」と表示されたら、アプリ作成完了。  


・別のTomcatサーバでデプロイしてみる

・SpringBootで作成したアプリをwarファイルで作成。 
インポートしたプロジェクト上で右クリック。
「実行」→「Maven Build」を押す。
ゴールの項目に「package」と入力→実行を押す。
「target」フォルダ配下に「sueno-1.0.0-SNAPSHOT.war」が生成される。
（表示されない場合は、一度、リフレッシュ「F5」を実行）

・tomcat配下のWebappにデプロイ(配置)。
作成したwarファイルをファイル転送ツール（WinSCP）で
デプロイしたいtomcatのwebapp配下に貼り付ける。

・動作確認
アドレスは、サーバ名後に「warファイル名/sueno」を入力(下記はサーバ名は例)
http://localhost:8080/sueno-1.0.0-SNAPSHOT/sueno
ブラウザ上で「something」と表示されたら、OKです。

以上になります。

##まとめ
すごく雑な感じで書いてみましたが、SpringBootやSTSを実務で動かしたことがなかったので、この期間にやってみました。
　ローカル環境では、アプリ実行しても、サーバ環境でデプロイすると、Javaのバージョン違いやTomcatバージョンが異なっていたことで動かないことがありました。
　もう少し、データアクセスも絡めたアプリをデプロイすることが目標だったので、進捗が遅くなり、期間まで試せなかったのが残念です。