Macの環境を汚さずにJava / Tomcat / PostgreSQLをインストールする

Dockerとか仮想マシンとかでポータビリティを確保するのが主流かと思いますが、私含めて「インストールすることなく適当な場所に配置すれば動く」というのはまだまだ根強い人気があるかと思い、この記事にまとめました。

※開発環境をサクッと作るための割り切った手順です。セキュリティ的にも本番利用は厳禁です。

# 本記事の環境

- Mac OSX 10.12.6 (Sierra)
- Java 8
- Tomcat 8
- PostgreSQL 9.6
- PostgreSQL JDBC 4.2 Driver, 42.2.0
- ホームディレクトリ `/Users/username`

# 事前準備

はじめに、リソース一式を配置するディレクトリを作ります。ここではユーザーのホームディレクトリ直下に`myserver`というディレクトリを作成して、その中に全てのリソースを配置します。

# Javaのインストール
本記事の手順の中で一番ややこしいのがこのセクションです。すでにJava8がインストールされている場合はこの手順はスキップして構いません。

## Javaのダウンロード
Oracle公式サイトからダウンロードします。本記事でのバージョンはJava 8 u161です。

## パッケージからバイナリの取り出し
dmgファイルからpkgファイルを取り出して、任意の場所に配置したら、ターミナルを開いてpkgの配置先まで移動します。そこから先の手順については、以下の記事を参考にしてください。

MacでインストールせずにJava9を試す
https://qiita.com/mather314/items/8d112569d7bb0805683e

# Tomcatのインストール

次にWebアプリケーションサーバのTomcatです。あちこちで手順がみつかりますので、ご参考程度。

## Tomcatのダウンロード

プロジェクト公式サイトからtar.gzのものをダウンロード・解凍したら、tomcat8という名前に変更して冒頭のmyserverディレクトリに配置します。

https://tomcat.apache.org/download-80.cgi

## 環境の設定

環境変数で設定するのではなく、tomcat8/binにsetenv.shという名前のファイルを作成し、使用するJavaの配置先を設定します。私が今回動かしたかったアプリは1GBくらいメモリあてないとOutOfmemoryが起きるので、起動オプションも併せて設定しました。

```sh:setenv.sh
JAVA_HOME=/Users/username/myserver/java
JAVA_OPTS="-Xms1024M -Xmx1024M"
```

## Managerの設定

Tomcat Managerのために管理者ユーザーとそのパスワードを設定します。
`tomcat8/conf/tomcat-user.xml`を開いて、以下のとおり設定。ここではadmin/passとします。

```xml:tomcat-user.xml
<tomcat-users ... >
    ：
<user username="admin" password="pass" roles="manager-gui,admin-gui"/>
    ：
</tomcat-users>
```

## 稼動確認

`tomcat8/bin/startup.sh`を実行してTomcatを起動したら、ブラウザで http://localhost:8080/ にアクセスします。Tomcatの画面が表示されたら成功です。

ついでに、 http://localhost:8080/manager/html にもアクセスして、先ほど設定したユーザー/パスワードでTomcat Managerに接続できることも確認しておきましょう。


# PostgreSQLのインストール

続いてデータベースのPostgreSQLをインストールします。こちらはTomcatほど手順が見当たりませんが、とはいえご参考程度です。（記事全体がご参考の寄せ集めですね・・・）

## PostgreSQLのダウンロード

公式サイトからバイナリをダウンロードして解凍したら、pgsqlにリネームしてmyserverディレクトリに配置します。ここではバージョン9.6を使用しています。

https://www.enterprisedb.com/download-postgresql-binaries

## データベースの準備

ターミナルを開いて`pgsql/bin`に移動したら、はじめにデータディレクトリを作成します。ここにデータ一式が格納されますので、PostgreSQL本体とは別の場所に配置したい場合は任意の場所に変更してください。

```
$ ./pg_ctl initdb -D /Users/username/myserver/pgsql/data
```

今作成したデータディレクトリとログファイルを指定してデータベースを起動します。

```
$ ./pg_ctl start -l /Users/username/myserver/pgsql/pgsql.log -D /Users/username/myserver/pgsql/data
```

起動に成功したらデータベースに接続しましょう。`postgres`はデフォルトで作成されるデータベースの名称です。

```
$ ./psql -d postgres
psql (9.6.6)
Type "help" for help.

postgres=# 
```

## データベースとスキーマの作成

はじめに自身（ここではusernameというユーザー名）の所有するデータベース`mydb`を作成します。

```
postgres=# CREATE DATABASE mydb OWNER username;
CREATE DATABASE
```

作成したら、操作対象を今作成したデータベースに切り替えます。

```
postgres=# \c mydb
You are now connected to database "mydb" as user "username".
```

スキーマやテーブルの作成も任意のものをSQLで作業していきましょう。

```
mydb=# CREATE SCHEMA myschema;
CREATE SCHEMA
mydb=# CREATE TABLE myschema.mytable (name varchar(100), age int);
CREATE TABLE
```

## JDBCの配置

最後に、TomcatからPostgreSQLに接続できるようにJDBCドライバを配置します。PostgreSQLの公式サイトからダウンロードしたら、`tomcat8/lib`にjarファイルを移動して完了です。

https://jdbc.postgresql.org/download.html

# おわりに

- 今回はMacでの環境構築としましたが、WindowsでもLinuxでもだいたい同じでいけそうな気がしますので、必要に迫られ次第追記したいと思います。
- 10年近くJavaを触っておらず、「そりゃないでしょう」という手順や設定になっているかもしれません。どしどしご指摘いただけると幸いです。
- また、今回私がこの環境を作成したのはとあるフレームワークを導入するためで、自身でスクラッチのアプリケーションを作っていません。この手の記事は簡単な動作検証アプリを動かしてこそ締まるものですが、ご容赦くださいませ。