Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

Maven + Eclipseでマルチモジュールプロジェクトを作成する

f:id:fa11enprince:20190723093752j:plain 良く忘れるのでメモ
様々な事情でプライベートリポジトリを立てられなかったりする場合や、 そもそもプライベートリポジトリ立てるまでもないよねというときに便利なマルチモジュールプロジェクトの構成を作ります。 お題目は、Spring Boot + MongoDB + PostgreSQLにしましょう。

最近のEclipseはコメントの日本語の先頭がなぜか文字化けするのでFontをMyrica Mに設定します。 STSもいれるのが本当はいいのですが、面倒なので割愛します。 ちなみにWindows前提です。Mac/Linuxも大して変わらないと思います。

書いてて思ったんですが、Maven手書きしたほうが早いっすね…。

ソフト バージョン 備考
Java 1.8
Maven 3.6.1
lombok 1.18.8
Eclipse 2019-06
Font Myrica M
PostgreSQL 10.9 Docker利用
MongoDB 3.6.13 Docker利用
Spring Boot 2.1.6

あと、Docker for WindowsとHyper-V(Windows 10 Pro)が必要です。 なければ、直接入れるなどしてください。

最終系

今回作成するものの完成品です。 github.com 下記は具体的な手順です。まさかのJavaのインストールから書いてます。

Javaのインストール

Adopt Open JDK等をインストールします。 インストーラーが準備されているので方法は割愛します。
AdoptOpenJDK - Open source, prebuilt OpenJDK binaries
Java 8のHotSpotがおすすめです。

Mavenのインストール

https://maven.apache.org/download.cgi
よりapache-maven-3.6.1-bin.zipダウンロードします。
ダウンロードしたものを解凍しapache-maven-3.6.1をC直下に移動します。
Cに移動した後、binの位置が下記のようになっていればOKです。
C:\apache-maven-3.6.1\bin
環境変数を設定します。
M2_HOME%USERPROFILE%\.m2
さらに今回はシステム環境変数のほうに上記binのパスを設定します。
C:\apache-maven-3.6.1\bin

Proxy環境で虐げられている人は、まぁ調べてくださいというところですが、
ヒントはやり方は2通りあって、%USERPROFILE%\.m2\settings.xmlを作成するのが一番お手軽です。

念のためコマンドプロンプトにmvn -vを打って下記が表示されればOKです。

>mvn -v
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T04:00:29+09:00)
Maven home: C:\apache-maven-3.6.1\bin\..
Java version: 1.8.0_192, vendor: Azul Systems, Inc., runtime: C:\Program Files\Zulu\zulu-8\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

私の環境ではZuleのJDKを使っていますが、たぶん、Adopt Open JDK HotSpotのほうがおすすめです。

フォントのインストール

プログラミングフォント Myrica / Estable | Myrica (ミリカ)は、フリーなプログラミング用 TrueType フォントです。
よりフォントをダウンロードして展開します。
展開したフォルダが下記のようになっているので、 f:id:fa11enprince:20190728203324p:plain

Myrica.TTCを右クリックし、インストールします。 f:id:fa11enprince:20190728203259p:plain

PostgreSQLのインストール

PostgreSQL Database Download | EnterpriseDB よりダウンロードしてインストールしてもいいのですが、 docker-composeで入れることにします。 GitHubのReadMe.mdを参照してください。
docker-composeは見よう見まねで書いているのでおかしいところがあったら教えてください。 (initdbがうまくいってないです) とおもったら、この問題だった。 docker-entrypoint-initdb.d内のファイルがdocker composeを使用しても実行されない - コードログ うまくいかない場合は…

$ docker volume ls
$ docker volume rm docker_postgresql

として、この後docker-compose up -dをし直せばちゃんと動く。
にしてもDocker For Windowsでvolumeが簡単にマウントできない問題とか
初回一発再起動しないとまともに動かない問題ってどうにかならないんだろうか。

MongoDBのインストール

MongoDB Download Center | MongoDB より3.6.13をダウンロードしてもいいのですが、 docker-composeで入れることにします。 GitHubのReadMe.mdを参照してください。

Eclipseのインストール

2019-06版を入手します。 https://www.eclipse.org/downloads/ ダウンロードした後、インストーラーを立ち上げて、
Eclipse IDE for Enterprise Java Developersを選択します。 f:id:fa11enprince:20190728203002p:plain

いろいろAcceptを聞いてくるので受け入れます。

lombokのインストール

Java開発ならもはや必須です。標準に取り込んでほしいくらいです。
単なるGetter/Setterを書かなくていいばかりでなく、それ以上の恩恵があります。
https://projectlombok.org/download
よりlombok.jarをダウンロードし、jarをダブルクリックします。 しばらくするとecliseを検知するので、Install/Updateをクリックします。 そのあと、Eclipseを再起動します。

Maven Projectの作成

Eclipseを立ち上げて、
File > New > Maven Projectを選択します。
ひとまずNextを押します。 f:id:fa11enprince:20190728215501p:plain ArtifactIdがmaven-archetype-archetypeのを選びます。
実はどれでもいいです。あとで書き換えるので。
(実はいらないものが含まれてて後でEclipseからビルドパスを消したりしてます。
他にいいもの知っている方がいたら教えてください) f:id:fa11enprince:20190728215737p:plain

Group Id: com.example.multi-module
Artifact Id: multi-module-project-sample
Version: 0.0.1
Package: com.example.multiModule

としFinishを押下します。 f:id:fa11enprince:20190728223147p:plain

pom.xmlをダブルクリックし、開きます。
Spring Boot用に次のように編集します。 Spring Bootに加えよく使うものを依存関係に含めます

<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>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
    </parent>

    <groupId>com.example.multi-module</groupId>
    <artifactId>multi-module-project-sample</artifactId>
    <version>0.0.1</version>
    <packaging>pom</packaging>
    <name>Archetype - multi-module-project-sample</name>
    <url>http://maven.apache.org</url>
    
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
    </dependencies>
</project>

このとき、packagingpomになっていることが重要です。
いらないフォルダができるので消しておきます。
(src/main/resourcesなど…)

共通モジュールの作成

commonという名前でモジュールを作成します。
プロジェクトエクスプローラーのmulti-module-project-sampleを右クリックし、
New > Other > Maven > Maven Moduleを選択します。
f:id:fa11enprince:20190728221559p:plain
multi-module-commonとModule Nameに入力します。 f:id:fa11enprince:20190728223336p:plain ArtifactIdがmaven-archetype-archetypeのを選びます。
f:id:fa11enprince:20190728221816p:plain 下記を入力します。

Group ID: com.example.multi-module-common
Package: com.example.multiModule.common

そしてFinishを押下します。 f:id:fa11enprince:20190729002139p:plain こうすると、親のpom.xmlに

  <modules>
        <module>multi-module-common</module>
    </modules>

が追加されます。 ここでmulti-module-project-commonのpom.xmlを次のように書き換えます。

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.example.multi-module</groupId>
        <artifactId>multi-module-project-sample</artifactId>
        <version>0.0.1</version>
    </parent>
    <groupId>com.example.multi-module-common</groupId>
    <artifactId>multi-module-common</artifactId>
    <name>Archetype - multi-module-common</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
    </dependencies>
</project>

一旦ここで親プロジェクトから右クリック > Maven > Maven Installを実行します。

共通モジュールのソースコードを書きます。

最後に貼ってあるGitHubを参照してください。

メインのモジュールを作成

ここは実際にはWebAppだったりBatchだったりすると思うのですが、サンプルなので単純なバッチとします。 例によって、親プロジェクトを右クリックしてサブモジュールを追加します。 New > Other > Maven > Maven Moduleを選択します。
multi-module-batchとModule Nameに入力します。 f:id:fa11enprince:20190729003706p:plain ArtifactIdがmaven-archetype-archetypeのを選びます。
f:id:fa11enprince:20190729003823p:plain
下記を入力します。

Group ID: com.example.multi-module-batch
Package: com.example.multiModule.batch

f:id:fa11enprince:20190729003948p:plain pom.xmlからバージョンのみ消して下記のようになっていればOKです

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.example.multi-module</groupId>
        <artifactId>multi-module-project-sample</artifactId>
        <version>0.0.1</version>
    </parent>
    <groupId>com.example.multi-module-batch</groupId>
    <artifactId>multi-module-batch</artifactId>
    <packaging>pom</packaging>
    <name>Archetype - multi-module-batch</name>
    <url>http://maven.apache.org</url>
</project>

ちなみに書き忘れてましたが、いらないフォルダができるので消しておきます。
(`src/main/resourcesなど…)
またこのモジュールもpomのpackaging指定にします。

さらにサンプル用モジュールを作成します。

先程作ったcom.example.multi-module-batchの配下にサンプル用のモジュールを作成します。 例によってこの配下にMaven Moduleを作成します。 キャプチャは飽きたと思うので

Module Name: sample-db-access
Group Id: com.example.sample-db-access
Package: com.example.multiModule.sampleDbAccess

とします。 pom.xmlからバージョン指定を消します。さらにdependencyに先程作成したcommonを追加してあげます。

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.example.multi-module-batch</groupId>
        <artifactId>multi-module-batch</artifactId>
        <version>0.0.1</version>
    </parent>
    <groupId>com.example.sample-db-access</groupId>
    <artifactId>sample-db-access</artifactId>
    <name>Archetype - sample-db-access</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>com.example.multi-module-common</groupId>
            <artifactId>multi-module-common</artifactId>
            <version>0.0.1</version>
        </dependency>
    </dependencies>
</project>

この辺りでMavenが文句を言ってくるのでプロジェクトを右クリックして
Maven > Update Maven Project
を実行しますと黙ります。

ソースコードを書きます

前述のGitHubを参照してください。

おまけ Ecliseの設定

プロジェクトとパッケージを階層表示にする

インストール直後だとデフォルトでいろいろ嫌なところがあるので変更します。
トップの親プロジェクトをProject Explorerで選択し、▽マークのアイコンを押します。
Project Presentation > Hierarchical さらに
Package Presentation > Hierarchical にします。

空白、Tab、改行などを表示する

Window > Preferences > General > Editors > Text Editors
Show whitespace charactersをチェックしてOKを押下します。

フォント

このままだと日本語コメントが文字化けしてしまうのでフォントを設定します 日本語コメントは今回書いてませんが…。 気が向いたら書きます。

参考リンク

Eclipseでコメントの前の方だけ文字化けする - Qiita
3. Maven 入門 (7) | TECHSCORE(テックスコア)
GitHub - spring-projects/spring-data-examples: Spring Data Example Projects
GitHub - mbogner/spring-boot-multiple-databases
Compose ファイル・リファレンス — Docker-docs-ja 17.06.Beta ドキュメント
Docker for Windowsでpostgresのデータマウントができない人へ - Qiita
MongoDB + mongo-expressをDocker Composeでお手軽構築 - Qiita

Vue.jsでテーブルソートを作ってみた

f:id:fa11enprince:20190517072518j:plain Vueの練習を兼ねてVueでテーブルソートを作ってみました。
気が向いたらPagerも作るつもり(気が向いたら)。
SPAは最近興味がないので(大半のケースでオーバースペックなので…)
単純にscriptタグでVueを入れてるケースです。 Vueをあえて選ぶ勢ってたぶんですが、
何らかのフレームワークで
サーバサイドでレンダリングしたページにそこそこ複雑な動きを付けたい…
ってユースケースだと思うのです。
いや、TypeScript + Vuex勢もそこそこいるのはもちろんだと思いますが…。
全部JavaScriptでSPAにするニーズは逆にあまりないんじゃないかと
Angularをつかうとこのあたり強制的にSPAになってしまうんで、
(その代わりコードの統制が取れて綺麗になります。開発メンバーが一定以上のレベルがあればそれでいいが…)
いろいろ辛いですよね。

話がそれましたが、JQuery Pluginにあるような、 シフトを押しながらヘッダーをクリックすると優先順位付きソートができるようにしました。
JavaScriptのソートって安定ソートじゃないから辛いっすね…。
何かいいライブラリ知ってる方がいたら教えてください

github.com

レジストリの右クリック関連メモ

f:id:fa11enprince:20190427161451j:plain Explorerで右クリックしたときのコンテキストメニューは簡単に編集できる
レジストリをいじればOK
例えばVS Codeの場合、インストール時にVSCodeで開くのメニューを出すチェックを入れ忘れた場合など、次のようにして追加することができる

Win + Rキー
regedit
コンピューター\HKEY_CLASSES_ROOT\Directory\shell\
右クリック > 新規 > キー
VSCodeを作る
 値: VSCodeで開く(&C)
VSCodeのところで右クリック > 新規 > キー
commandを作る
 値: "C:\Program Files\Microsoft VS Code\Code.exe" %1
※%1は右クリックしたときの引数(クリックしたときのファイル/フォルダ)が入る

雑な説明なので詳細は参考リンクを見ていただいたほうがいいと思われる この辺りを調べると、 コンピューター\HKEY_CLASSES_ROOT\Directory\shell\VSCode\command
以外にもいろいろキーが登録されていて、邪魔なやつは消せばよい
あと似たようなのに
コンピューター\HKEY_CLASSES_ROOT\Directory\Background\shell\...
というのが存在する
このBackground有り無しはフォルダ/ファイルの上で右クリックするか、
何もないところで右クリックするかの違いである
ITエンジニアの方なら、単なるデータベースだと直感的にわかるので、
邪魔だ…と思うのはこの辺を消してしまうとよい
(自己責任でお願いします。よほど思い切った消し方しなければ大丈夫だと思うけど) この辺りの情報まとまってないかなーとおもったら、まとめてくれているところがありました
stakiran.hatenablog.com

参考URL

https://qiita.com/cielrion/items/21d064b47cad21e2c7e0 https://boukenki.info/migi-click-menu-shortcut-key-registry-settei-houhou/

Windows 10 ProでWordPressをDocker Composeで10分以内で構築してみる

f:id:fa11enprince:20190420105826j:plain Docker for Windowsが入っていれば30秒以内です。
Java大好き人間ですがPHP系の話題を書いてみます。
Dockerは既に入ってるよって人はdocker-composeのための設定から読んでください。

前提条件

Dockerが使える環境であること前提となります。
やや語弊がありますが、ほぼWindows Nativeで使いたい場合、
Windows 10 Professional Edition (64bit)である必要があります(=要Hyper-V)。
もしくはmacOSかLinuxであることが前提になります。
どうしてもWindows Home Editionでdockerを使う場合、 通常はVirtual Box/VMware上にUbuntu/CentOS等をインストールしてそのうえでDockerを使うことになります。
一応Windows Subsystem for Linuxでも可ですが、少し環境構築のハードルは上がると思います。
あとは…Docker Tool Boxなるものがあったのでそれでも良いです。

今回はWindows 10 Professional Editionの場合のみ説明します。

Hyper-Vの有効化

管理者権限で以下のコマンドを入力した後に、Windowsを再起動します。

bcdedit /set hypervisorlaunchtype auto

このあたりは上記コマンドラインでなくてもググるといろいろやり方が書いてあるので、どの方法でやっていただいても結構です。

Docker for Windowsのインストール

https://docs.docker.com/docker-for-windows/install/
よりDocker for Windowsをダウンロードします。
Docker Hubのアカウントが必要ですが、無料ですので作ってしまいましょう。
あとはインストーラーを起動するだけでOKです。

docker-composeのための設定

Win+Rでcmdと入力します %USERPROFILE%になっている(通常C:\Users\[ユーザ名])ことを確認します。
docker-wpディレクトリを作成し、そのディレクトリ内に移動します。

> mkdir docker-wp
> cd docker-wp

docker-compse.ymlのファイルを作ります。
まずはstartコマンドでカレントディレクトリを開きます。

> start .

Explorerが立ち上がるので右クリック等で新規ファイル(テキストドキュメント)を作成し、 F2キー等でdocker-compose.ymlにリネームし、メモ帳等で開き、次の内容を記入します(コピペ) お試し環境のためパスワード等は脆弱な設定になっています。

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: root
       MYSQL_DATABASE: wp_db
       MYSQL_USER: wp_user
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8080:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_NAME: wp_db
       WORDPRESS_DB_USER: wp_user
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data: {}

簡単に記載していることを説明しますと、
データベースであるMySQLとWordPressを入れるようにするのと、
それぞれデータベースのユーザ名とパスワードを指定しています。
また、HTTPでアクセスするときのポートをデフォルトの80から8080へ変更しています。
あとPC再起動のときなどrestart: alwaysで必ず勝手に立ち上がるようにしています。 それが嫌な場合は毎回手動でdocker-compse up/downをする必要があります。

MySQLは5.7系を使うこととします。WordPressは最新版を使います。

docker-compose.ymlのあるディレクトリでdocker-compose up -dを実行します -dはバックグラウンド実行を意味します。

> docker-compose up -d

このとき、右下にクジラが出てきてShare itってのが出てくるのでそれを押します(押さないとエラーになってしまいます) docker pullコマンドが自動的に実行され、最終的にMySQLとWordPressのプロセスが立ち上がります。 確認のため下記のコマンドを実行します

> docker container ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
1a19e6e913ad        wordpress:latest    "docker-entrypoint.s…"   54 seconds ago      Up 52 seconds       0.0.0.0:8080->80/tcp   docker-wp_wordpress_1
4d4964e58524        mysql:5.7.26        "docker-entrypoint.s…"   55 seconds ago      Up 54 seconds       3306/tcp, 33060/tcp    docker-wp_db_1

このように表示されていればOKです。

Chrome等のブラウザにてhttp://localhost:8080 を押します。

WordPressの初期設定画面に行くはずです。

以降、PCの電源をOFFにしても上記URLをブラウザで入力するとWordPressを使うことができます。
それをやめたい場合はymlファイルを編集するか、下記のコマンドを入力すればOKです。

docker update --restart=no [CONTAINER-ID]

PC再起動時の補足

再起動後、 Docker desktop is running ... と出るまで待ってあげましょう。
横着な人は、タスクバーに隠れてるDocker for WindowsのアイコンのSettingsをみて
Docker is runningになっているのを確認しましょう。
結構起動するまで待たされます。

その後、 http://localhost:8080
と打ってあげるとうまくいきます。

参考リンク

https://docs.docker.com/compose/wordpress/
https://qiita.com/shimisunet/items/1406e33e1eeb36665f2c
https://qiita.com/koyo-miyamura/items/a760dd57160155d3b764

次回はUbuntuでの環境構築を書きたいと思います…(あくまで予定)

GitHubで2段階認証を利用していてhttpでgit cloneできなくなった際の対処法

f:id:fa11enprince:20180728223008j:plain 何台かマシンを所有していて、たまに使うマシンでgit cloneするとユーザ名とパスワードを聞かれて、しかもパスワードを正しいのを入れても

$ git clone https://github.com/foo/private_reop_bar.git
fatal: Authentication failed for 'https://github.com/foo/private_repo_bar.git

となってしまって、何故だと思ったのでメモ。
ところが一方

$ git clone git@github.com:foo/private_repo_bar.git

のsshプロトコルではうまくいきます。
ちなみに2段階認証だけでなく公開鍵認証を使っています。

公開鍵認証が失敗している

そもそも公開鍵認証が失敗している可能性もある方もいると思うのでまずはそちらを疑ってみましょう

ssh -T git@github.com
Hi foo! You've successfully authenticated, but GitHub does not provide shell access.

となればOKです。
ダメな場合は次を疑ってみましょう。

GitHubに公開鍵を登録してない

複数台マシンを使っているとやりがちです。
あれ登録してなかったっけ・・・となります

秘密鍵が読めてない

秘密鍵をいくつかある場合、デフォルトの秘密鍵の名前から変えていることがあり、デフォルトでは

~/.ssh/id_rsa

です。これを~/.ssh/github_id_rsaとかに変えている場合は~/.ssh/configファイルに設定を書いてやらねばなりません。
パーミッションが0600になっていないケースもあります。

ssh-addしてない

Windowsマシンで起こりがちです。
Git Bashなどで

$ eval $(ssh-agent)
$ ssh-add ~/.ssh/id_rsa

を~/.bashrcなどに仕込んでやりましょう

2段階認証でhttpsが使えない

本題のこちら。こちらの場合はPersonal access tokenが必要なようです。
GitHubでProfileページから辿れるDeveloper Settingsの中にあるPersonal access tokensのページにてtokenを設定します。

そうすると40文字のアクセストークンが1度だけ作成時に表示されるのでそれを使いましょう。

参考情報

Githubに接続できない時の対処法 - Qiita
Githubの2段階認証を実施してgitコマンドが使えないときにやったこと - Qiita