かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

Windows 7 PC → Windows 10 PC へ移行する ( Docker for Windows のインストール )

概要

記事一覧はこちらです。

Windows 10 に移行したので Docker for Windows をインストールします。また IntelliJ IDEA で Docker をサポートしているはずなので、その機能を試してみます。

参照したサイト・書籍

目次

  1. Windows の Hyper-V を有効化する
  2. Docker for Windows のインストール
  3. IntelliJ IDEA に Docker integration plugin をインストールする
  4. Docker の「Exposed daemon on tcp://localhost:2375 without TLS」の設定を有効にする
  5. IntelliJ IDEA の Docker 用の設定をする
  6. 動作確認

手順

WindowsHyper-V を有効化する

BIOS に Virtualization Technology (VTx) の設定が見つからなかったので、Hyper-V の有効化からやります。

  1. Window メニューから「設定」をクリックします。

    f:id:ksby:20180819132853p:plain

  2. Windows の設定画面が表示されます。"Hyper-V" で検索して表示された「Windows の機能の有効化または無効化」を選択します。

    f:id:ksby:20180819133136p:plain

  3. Windows の機能」ダイアログが表示されます。「Hyper-V」をチェックした後、「OK」ボタンを押して Windows を再起動してインストールします。

    f:id:ksby:20180819133322p:plain

Docker for Windows のインストール

  1. https://store.docker.com/editions/community/docker-ce-desktop-windows から Docker for Windows Installer.exe をダウンロードします。

  2. Docker for Windows Installer.exe を実行します。

  3. 「Installing Docker for Windows」画面が表示されます。何も変更せずに「Ok」ボタンをクリックします。

  4. インストールが実行されます。完了すると画面中央にボタンが表示されるのでクリックします。ただしクリックすると強制的にログオフさせられるので、作業中のものがあれば先に終了させます。

  5. Get started with Docker for Windows を見ながら hello-world image を実行します。

    f:id:ksby:20180819142239p:plain

IntelliJ IDEA に Docker integration plugin をインストールする

  1. IntelliJ IDEA を起動し、「File」-「Settings...」を選択します。

  2. 「Settings」ダイアログが表示されます。画面左側のリストで「Plugins」を選択し、画面中央下の「Browse repositories...」ボタンをクリックします。

  3. 「Browse Repositories」画面が表示されます。”Docker" で検索して、表示されたリストから「Docker integration」を選択し「Install」ボタンをクリックします。インストール後、IntelliJ IDEA を再起動します。

Docker の「Exposed daemon on tcp://localhost:2375 without TLS」の設定を有効にする

  1. Docker の設定を変更します。Windows の通知領域に表示されている Docker アイコンのコンテキストメニューを表示し、「Settings」メニューを選択します。

    f:id:ksby:20180819145557p:plain

  2. 「Settings」ダイアログが表示されます。「General」の中にある「Exposed daemon on tcp://localhost:2375 without TLS」をチェックした後、ダイアログを閉じます。

    f:id:ksby:20180819151119p:plain

IntelliJ IDEA の Docker 用の設定をする

  1. IntelliJ IDEA の「File」-「Close Project」を選択して、「Welcome to IntelliJ IDEA」画面に戻ります。

  2. 画面下から「Configure」-「Settings」を選択します。

  3. 「Settings for New Projects」ダイアログが表示されます。画面左側で「Build, Execution, Deployment」-「Docker」を選択し、画面中央上の「+」ボタンをクリックします。

    f:id:ksby:20180819152023p:plain

  4. 中央のリストに「Docker」が追加されるので、"tcp://localhost:2375" と入力されているところにカーソルを当てて "Connection successful" と表示されることを確認してから「OK」ボタンをクリックします。

    f:id:ksby:20180819152151p:plain

  5. Spring Initializr で何かプロジェクトを作成してみると、IntelliJ IDEA の画面下に「Docker」が表示されます。

    f:id:ksby:20180819152658p:plain

  6. 「Docker」をクリックすると Docker Tool Window が表示されて、「Connect」ボタンをクリックすると Docker 内の Container, Image が表示されます。

    f:id:ksby:20180819153039p:plain f:id:ksby:20180819153336p:plain

動作確認

  1. hello-world のコンテナを作成して実行してみます。「hello-world:latest」でコンテキストメニューを表示し「Create container」を選択→「Create...」を選択します。

    f:id:ksby:20180819154542p:plain f:id:ksby:20180819154654p:plain

  2. 「Create Docker Configuration」ダイアログが表示されます。「Container name」に "hello-world" と入力し、「Run」ボタンをクリックします。

    f:id:ksby:20180819155122p:plain

    コンテナが生成・実行されて "Hello from Docker!" が出力されました。

    f:id:ksby:20180819155316p:plain

  3. 今度は nginx のイメージを取得して実行してみます。https://hub.docker.com/_/nginx/ の Docker Image を使用します。

  4. Docker Tool Window 上でコンテキストメニューを表示し、「Pull Image...」を選択します。

    f:id:ksby:20180819155929p:plain

  5. 「Repository」に "nginx" を入力し、「OK」ボタンをクリックします。

    f:id:ksby:20180819160714p:plain

    nginx の Docker Image が Pull されて、「Images」の下に「nginx:latest」が表示されます。

    f:id:ksby:20180819160924p:plain

  6. 「nginx:latest」でコンテキストメニューを表示し「Create container」を選択→「Create...」を選択します。

  7. 「Create Docker Configuration」ダイアログが表示されます。以下画像の赤枠の部分を入力し、「Run」ボタンをクリックします。

    f:id:ksby:20180819161505p:plain

  8. nginx のコンテナが生成・起動されて、

    f:id:ksby:20180819161729p:plain

    ブラウザから http://localhost:8090/ にアクセスすると「Welcome to nginx!」のページが表示されました。

    f:id:ksby:20180819161922p:plain

  9. 作成したコンテナは全て削除します。

Windows 7 PC → Windows 10 PC へ移行する ( PostgreSQL、Redis、Erlang/OTP+RabbitMQ のインストール+ksbysample-webapp-lending の動作確認 )

概要

記事一覧はこちらです。

以下のソフトをインストールして、ksbysample-webapp-lending で動作確認します。

参照したサイト・書籍

目次

  1. PostgreSQL のインストール
  2. Redis のインストール
  3. Erlang/OTP+RabbitMQ のインストール
  4. ksbysample-webapp-lending で動作確認する

手順

PostgreSQL のインストール

  1. https://www.postgresql.org/download/windows/ から postgresql-10.5-1-windows-x64.exe をダウンロードします。

  2. postgresql-10.5-1-windows-x64.exe を実行します。

  3. 「Setup」ダイアログが表示されます。「Next >」ボタンをクリックします。

  4. 「Installation Directory」画面が表示されます。D:\PostgreSQL\10 に変更した後、「Next >」ボタンをクリックします。

  5. 「Select Components」画面が表示されます。何も変更せずに「Next >」ボタンをクリックします。

  6. 「Data Directory」画面が表示されます。何も変更せずに「Next >」ボタンをクリックします。

  7. 「Password」画面が表示されます。好きなパスワードを入力して「Next >」ボタンをクリックします。

  8. 「Port」画面が表示されます。何も変更せずに「Next >」ボタンをクリックします。

  9. 「Advanced Options」画面が表示されます。「Locale」で「Japanese, Japan」を選択した後、「Next >」ボタンをクリックします。

  10. 「Pre Installation Summary」画面が表示されます。「Next >」ボタンをクリックします。

  11. 「Ready to Install」画面が表示されます。「Next >」ボタンをクリックします。

  12. 「Installing」画面が表示されインストールが始まります。

  13. インストールが完了すると「Completing the PostgreSQL Setup Wizard」画面が表示されます。画面中央の「Stack Builder ...」のチェックを外した後「Finish」ボタンをクリックします。

  14. 環境変数 Path に D:\PostgreSQL\10\bin を追加します。

Redis のインストール

  1. https://github.com/MicrosoftArchive/redis/releases から Redis-x64-3.0.504.msi をダウンロードします。

  2. Redis-x64-3.0.504.msi を起動します。

  3. 「Redis on Windows Setup」ダイアログが表示されます。「Next」ボタンをクリックします。

  4. 「End-User License Agreement」画面が表示されます。「I agree the terms in the License Agreement」をチェックした後、「Next」ボタンをクリックします。

  5. Destination Folder」画面が表示されます。D:\Redis\3.0.504 に変更し、「Add the Redis installation folder to the PATH environment variable.」をチェックした後、「Next」ボタンをクリックします。

  6. 「Port Number and Firewall Exception」画面が表示されます。何も変更せずに「Next」ボタンをクリックします。

  7. 「Memory Limit」画面が表示されます。「Set the Max Memory limit」をチェックした後、「Next」ボタンをクリックします。

  8. 「Ready to install Redis on Windows」画面が表示されます。「Install」ボタンをクリックします。

  9. インストールが完了すると「Completed the Redis on Windows Setup Wizard」画面が表示されます。「Finish」ボタンをクリックします。

  10. D:\Redis\3.0.504\redis.windows-service.conf の以下の点を変更します。

    • slave-read-only yesslave-read-only no に変更します。
  11. D:\Redis\3.0.504\redis.windows-service.conf をコピーして D:\Redis\3.0.504\redis2.windows-service.conf を作成し、以下の点を変更します。

    • port 6379port 6380 に変更します。
    • logfile "Logs/redis_log.txt"logfile "Logs/redis2_log.txt" に変更します。
    • dbfilename dump.rdbdbfilename dump2.rdb に変更します。
    • slaveof 127.0.0.1 6379 を追加します。
  12. サービス画面を開き「Redis」を再起動します。

  13. 2台目の Redis をサービスとして登録・起動します。

    f:id:ksby:20180818204229p:plain

  14. D:\Redis\3.0.504\redis.windows-service.conf をコピーして D:\Redis\3.0.504\redis-sentinel.windows-service.conf.org を作成し、以下の点を変更します。

    • logfile "Logs/redis_log.txt"logfile "Logs/redis-sentinel_log.txt" に変更します。
    • ファイルの最後に以下の4行を追加します。
      • sentinel monitor mymaster 127.0.0.1 6379 2
      • sentinel down-after-milliseconds mymaster 1500
      • sentinel failover-timeout mymaster 90000
      • sentinel parallel-syncs mymaster 1
  15. D:\Redis\3.0.504\redis-sentinel.windows-service.conf.org を元に redis-sentinel1.windows-service.conf, redis-sentinel2.windows-service.conf, redis-sentinel3.windows-service.conf の3ファイルを作成し、以下の点を変更します。

    • redis-sentinel1.windows-service.conf
      • port 6379port 6381 に変更します。
      • logfile "Logs/redis-sentinel_log.txt"logfile "Logs/redis-sentinel1_log.txt" に変更します。
    • redis-sentinel2.windows-service.conf
      • port 6379port 6382 に変更します。
      • logfile "Logs/redis-sentinel_log.txt"logfile "Logs/redis-sentinel2_log.txt" に変更します。
    • redis-sentinel3.windows-service.conf
      • port 6379port 6383 に変更します。
      • logfile "Logs/redis-sentinel_log.txt"logfile "Logs/redis-sentinel3_log.txt" に変更します。
  16. Redis Sentinel の管理プロセスをサービスとして登録・起動します。

    f:id:ksby:20180818205607p:plain

  17. Spring Boot で書籍の貸出状況確認・貸出申請する Web アプリケーションを作る ( その13 )( Spring Session を使用する2 ) の記事を参考に Redis Sentinel が正常に稼働しているかチェックします。結果は問題ありませんでした。

Erlang/OTP+RabbitMQ のインストール

  1. まずは Erlang/OTP からインストールします。http://www.erlang.org/downloads から otp_win64_21.0.1.exe をダウンロードします。

  2. otp_win64_21.0.1.exe を実行します。

  3. Erlang OTP 21 Setup」の「Choose Components」画面が表示されます。「Next >」ボタンをクリックします。

  4. 「Choose Install Location」画面が表示されます。「Destination Folder」を D:\ErlangOTP\21.0.1 に変更した後、「Next >」ボタンをクリックします。

  5. 「Choose Start Menu Folder」画面が表示されます。「Do not create shortcuts」をチェックした後、「Install」ボタンをクリックします。

  6. インストールが完了すると「Close」ボタンがクリック可能になるのでクリックします。

  7. 次に RabbitMQ をインストールします。https://www.rabbitmq.com/install-windows.html から rabbitmq-server-3.7.7.exe をダウンロードします。

  8. rabbitmq-server-3.7.7.exe を実行します。

  9. 「RabbitMQ Server 3.7.7 Setup」の「Choose Components」画面が表示されます。「Next >」ボタンをクリックします。

  10. 「Choose Install Location」画面が表示されます。「Destination Folder」を D:\RabbitMQ\3.7.7 に変更した後、「Install」ボタンをクリックします。

  11. インストールが完了すると「Next >」ボタンがクリック可能になるのでクリックします。

  12. 「Completing the RabbitMQ Server 3.7.7 Setup Wizard」画面が表示されます。「Finish」ボタンをクリックします。

  13. 以下のコマンドを実行して、いくつかのプラグインを有効化します。

    f:id:ksby:20180818225620p:plain

  14. ブラウザを起動して http://localhost:15672/ へアクセスし、管理機能のログイン画面が表示されることを確認します。

ksbysample-webapp-lending で動作確認する

これで ksbysample-webapp-lending が動作するはずなので、確認します。

  • IntelliJ IDEA を起動し、ksbysample-webapp-lending をオープンする。
  • 「File」-「Project Structure」を選択して「Project Structure」ダイアログを表示し、「Project Settings」-「Project」の「Project SDK」「Project language level」の設定を変更する。
  • Gradle Tool Window の「Refresh all Gradle projects」ボタンをクリックして更新する。
  • ユーザとデータベースを作成する。 f:id:ksby:20180819081436p:plain
  • clean タスク → Rebuild Project → build タスクを実行してエラーが出ないことを確認する。
    • 最初に boot-npm-geb-sample で修正した以下の点を反映する。
      • build.gradle に [compileJava, compileTestGroovy, compileTestJava]*.options*.encoding = "UTF-8" を追加。
      • build.gradle の bootRun、tasks.withType(Test) の jvmArgs に以下の値を追加。
        • -ea
        • -Dfile.encoding=UTF-8
        • -Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP
    • BUILD SUCCESSFUL が表示された。 f:id:ksby:20180819082035p:plain
  • Tomcat を起動して画面を表示できるかも確認します。

Windows 7 PC → Windows 10 PC へ移行する ( Git、SourceTree、IntelliJ IDEA、nodist+Node.js+npm、windows-build-tools のインストール+boot-npm-geb-sample の動作確認 )

概要

記事一覧はこちらです。

以下のソフトをインストールして、boot-npm-geb-sample で動作確認します。

参照したサイト・書籍

目次

  1. Git for Windows のインストール
  2. SourceTree のインストール
  3. IntelliJ IDEA 2018.2.1 のインストール
  4. nodist+Node.js+npm のインストール
  5. windows-build-tools 3.1.0 のインストール
  6. boot-npm-geb-sample で動作確認する

手順

Git for Windows のインストール

  1. https://gitforwindows.org/ から Git-2.18.0-64-bit.exe をダウンロードします。

  2. Git-2.18.0-64-bit.exe を起動します。

  3. 「Git 2.18.0 Setup」ダイアログが表示されます。「Next >」ボタンをクリックします。

  4. 「Select Destination Location」画面が表示されます。D:\Git に変更した後、「Next >」ボタンをクリックします。

  5. 「Select Components」画面が表示されます。「Git LFS (Large File Support)」以外のチェックを外した後、「Next >」ボタンをクリックします。

  6. 「Select Start Menu Folder」画面が表示されます。画面下の「Don't create a Start Menu folder」をチェックした後、「Next >」ボタンをクリックします。

  7. 「Choosing the default editor used by Git」画面が表示されます。「Use Vim (the ubiquitous text editor) as Git's default editor」が選択された状態で [Next >]ボタンをクリックします。

  8. 「Adjusting your PATH environment」画面が表示されます。中央の「Use Git from the Windows Command Prompt」が選択されていることを確認後、[Next >]ボタンをクリックします。

  9. 「Choosing HTTPS transport backend」画面が表示されます。「Use the OpenSSL library」が選択されていることを確認後、[Next >]ボタンをクリックします。

  10. 「Configuring the line ending conversions」画面が表示されます。一番上の「Checkout Windows-style, commit Unix-style line endings」が選択されていることを確認した後、[Next >]ボタンをクリックします。

  11. 「Configuring the terminal emulator to use with Git Bash」画面が表示されます。「Use Windows'default console window」を選択した後、[Next >]ボタンをクリックします。

  12. 「Configuring extra options」画面が表示されます。「Enable file system caching」以外のチェックを外した後、[Install]ボタンをクリックします。

  13. インストールが完了すると「Completing the Git Setup Wizard」のメッセージが表示された画面が表示されます。中央の「View Release Notes」のチェックを外した後、「Finish」ボタンをクリックしてインストーラーを終了します。

  14. Rapid Environment Editor を起動して環境変数 Path を見ると D:\Git\cmd だけが追加されていますので、D:\Git\usr\bin\D:\Git\mingw64\bin\ を追加します。

  15. ConEmu を起動し、「Create new console」を開いて以下の画像の内容を入力して「Start」ボタンをクリックします。

    f:id:ksby:20180818002018p:plain

    git-cmd.exe が起動するので、日本語の表示・入力が問題ないかを確認します。

    f:id:ksby:20180818003013p:plain

  16. ConEmu のコマンドプロンプトから git --version を実行し、git のバージョンが git version 2.18.0.windows.1 になっていることを確認します。

    f:id:ksby:20180818003239p:plain

SourceTree のインストール

  1. https://ja.atlassian.com/software/sourcetree から SourceTreeSetup-2.6.10.exe をダウンロードします。

  2. SourceTreeSetup-2.6.10.exe を起動します。

  3. ダイアログが表示されます。「ライセンスに同意します」をチェックした後、「次へ」ボタンをクリックします。

  4. 「Regist account」画面が表示されます。「Atlassian アカウント」ボタンをクリックして以前登録したアカウントでログインした後、「次へ」ボタンをクリックします。

  5. 「Pick tools to download and install」画面が表示されます。「Mercurial」のチェックを外した後、「次へ」ボタンをクリックします。

  6. SSH キーを読み込みますか?」ダイアログが表示されます。「いいえ」ボタンをクリックします。

  7. SourceTree のメイン画面が表示されるので、「オプション」ダイアログで必要そうな設定を行った後、終了します。

IntelliJ IDEA 2018.2.1 のインストール

  1. https://www.jetbrains.com/idea/download/#section=windows から ideaIU-2018.2.1.exe をダウンロードします。

  2. ideaIU-2018.2.1.exe を起動します。

  3. IntelliJ IDEA Setup」ダイアログが表示されます。「Next >」ボタンをクリックします。

  4. 「Choose Install Location」画面が表示されます。「Destination Folder」を D:\IntelliJ_IDEA\2018.2.1 に変更した後、「Next >」ボタンをクリックします。

  5. 「Installation Options」画面が表示されます。何もチェックしていない状態で「Next >」ボタンをクリックします。

  6. 「Choose Start Menu Folder」画面が表示されます。何も変更せずに「Install」ボタンをクリックします。

  7. 「Installing」画面が表示されてインストールが始まりますので、完了するまで待ちます。

  8. インストールが完了すると「Completing IntelliJ IDEA Setup」画面が表示されます。「Finish」ボタンをクリックしてダイアログを閉じます。

  9. D:\IntelliJ_IDEA\2018.2.1\bin\idea64.exe を実行します。起動時に「Complete Installation」ダイアログが表示されるので、「Do not Import settings」が選択された状態で「OK」ボタンをクリックします。

  10. IntelliJ IDEA User License Agreement」ダイアログが表示されます。「Accept」ボタンをクリックします。

  11. 「Data Sharing」ダイアログが表示されます。「Send Usage Statistics」ボタンをクリックします。

  12. 「Customize IntelliJ IDEA」画面が表示されます。「Darcula」が選択された状態で「Next Default plugins」ボタンをクリックします。

  13. 「Tune IDEA to your tasks」画面が表示されます。何も変更せずに「Next Feature plugins」ボタンをクリックします。

  14. 「Download feature plugins」画面が表示されます。「Scala」「NodeJS」の2つの「Install」ボタンをクリックして Install した後、「Start using IntelliJ IDEA」ボタンをクリックします。

  15. IntelliJ IDEA License Activation」ダイアログが表示されます。JetBrains Account を入力後、「Activate」ボタンをクリックします。

  16. 「Welcome to IntelliJ IDEA」画面が表示されます。画面右下の「Configure」から以下のメニューを選択し、設定します。

    • Plugins
      • 以下の Plugin をインストールします。
        • AWS CloudFormation
        • CheckStyle-IDEA
        • Doma Support
        • Grep Console
          • 今回 Plugin を見直していて見つけた Plugin です。Console に出力されるログをタイプ別に色づけしてくれます。 f:id:ksby:20180818124956p:plain
        • IntelliJ-Haskell
        • JRebel for InetlliJ
        • Lombok Plugin
        • Prettier
        • Rainbow Brackets
        • Request mapper
        • Spock Framework Enhancements
        • Sql Generator
          • 今回 Plugin を見直していて見つけた Plugin です。Database Tools のテーブルのコンテキストメニューに「Sql Generator」というメニューが追加されて、SQL文を自動生成してくれます(生成された SQL 文はクリップボードにコピーされます)。 f:id:ksby:20180818175128p:plain
        • String Manipulatin
        • ToolWindow Colorful Icons
        • .env files support
    • Settings
      • Editor - Color Scheme - General
        • 画面中央のリストで「Line Coverage」-「Full」を選択後、画面右側の「Foreground」を 48584800FF00 に変更。
        • 画面中央のリストで「Line Coverage」-「Uncoverred」を選択後、画面右側の「Foreground」を 715353FF0000 に変更。
      • Editor - Color Scheme - Language Defaults
        • 画面中央のリストから「Semantic highlighting」を選択後、画面右側の
      • Editor - Color Scheme - Color Scheme Font
        • 「Use color scheme font instead of the default」をチェックし、「Font」を MonospacedSource Code Pro に変更。
      • JRebel
        • Activate する
      • Other Settings - Grep Console
        • 「Highlighting & Folding」の以下の設定を変更する。
          • ERROR の 「Background」の色を 690000 へ変更。
          • WARN の「Background」の色を 696900 へ変更。
          • DEBUG の「Fourground」の色を 878787 へ変更。
          • TRACE の「Fourground」の色を 5F5F5F へ変更。
    • Edit Custom VM Options...
      • 以下の値に変更して「Save」ボタンをクリックします。
        • -Xms128m-Xms1024m
        • -Xmx750m-Xmx8192m
    • Project Defaults - Settings
      • Editor - Code Style - Javascript
        • 「Tabs and Indents」タブ
          • 「Tab size」「Indent」「Continuation indent」の値を 4 → 2 に変更。
      • Editor - Inspections
        • 「Serializable class without 'serialVersionUID'」をチェック。
      • Editor - File Encodings
        • 「Project Encoding」を <System Default: windows-31j>UTF-8 に変更。
        • 「Default encoding for properties files」を <System Default: windows-31j>UTF-8 に変更。
      • Build, Execution, Deployment - Build Tools - Gradle
        • 「Gradle VM options」に -Dfile.encoding=UTF-8 を入力。
      • Build, Execution, Deployment - Compiler - Annotation Processors
        • 「Enable annotation processing」をチェック。
      • Language & Frameworks - JavaScript
        • JavaScript language version」を ECMAScript 5.1ECMAScript 6 に変更。
    • Project Defaults - Project Structure
      • Project Settings - Project
        • 「Project SDK」に 1.8.0_181 (D:\Java\jdk1.8.0_181)を登録。
        • 「Project language level」を SDK default (8 - Lambdas, annotations, etc.) に設定。
    • Project Defaults - Run Configurations
      • Project Settings - Project
        • Templates - JUnit
          • VM Options」に -ea -Dfile.encoding=UTF-8 -Dspring.profiles.active=unittest -Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP を入力。
        • Templates - Spring Boot
          • VM Options」に -ea -Dfile.encoding=UTF-8 -Dspring.profiles.active=develop -Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP を入力。
  17. 一旦 IntelliJ IDEA は終了させます。

nodist+Node.js+npm のインストール

  1. https://github.com/marcelklehr/nodist/releases から NodistSetup-v0.8.8.exe をダウンロードします。

  2. NodistSetup-v0.8.8.exe を実行します。

  3. 「Welcome to Nodist Setup」画面が表示されます。「Next >」ボタンをクリックします。

  4. 「License Agreement」画面が表示されます。「I Agree」ボタンをクリックします。

  5. 「Choose Install Location」画面が表示されます。「Destination Folder」を D:\Nodist に変更した後、「Install」ボタンをクリックします。

  6. インストールが実行されます。完了すると「Completing Nodist Setup」画面が表示されますので、「Finish」ボタンをクリックします。

  7. コマンドプロンプトを起動し、nodist -v コマンドを実行してバージョン番号が表示されることを確認します。

    f:id:ksby:20180818132436p:plain

  8. Node.js をインストールします。https://nodejs.org/ja/ を見ると推奨版は 8.11.4 LTS でしたので、8.11.4 をインストールします。

    f:id:ksby:20180818132935p:plain

  9. npm をインストールします。https://docs.npmjs.com/ の一番下を見ると 6.4.0 と書かれていましたが、https://github.com/npm/npm/releases の Latest release は 6.1.0 でしたので 6.1.0 をインストールします。

    f:id:ksby:20180818134029p:plain

  10. コマンドプロンプトから npm config set scripts-prepend-node-path true コマンドを実行します。

    Spring Boot + npm + Geb で入力フォームを作ってテストする ( その5 )( Bootstrap, AdminLTE, Font Awesome, Ionicons のインストール ) 参照。

windows-build-tools 3.1.0 のインストール

  1. npm 以外に global インストールしている windows-build-tools をインストールします。https://www.npmjs.com/package/windows-build-tools を見ると最新バージョンは 3.1.0 でしたので、管理者モードで Powershell を起動した後 npm install --global --production windows-build-tools@3.1.0 を実行します。

    f:id:ksby:20180818135351p:plain

boot-npm-geb-sample で動作確認する

ここまでインストールが終われば boot-npm-geb-sample が動作するはずなので、確認します。

  • IntelliJ IDEA を起動し、boot-npm-geb-sample project をオープンする。
  • 「File」-「Project Structure」を選択して「Project Structure」ダイアログを表示し、「Project Settings」-「Project」の「Project SDK」「Project language level」の設定を変更する。
  • Gradle Tool Window の「Refresh all Gradle projects」ボタンをクリックして更新する。
  • clean タスク → Rebuild Project → build タスクを実行してエラーが出ないことを確認する。
    • エラーが出たので以下の点を変更した。
      • build.gradle に [compileJava, compileTestGroovy, compileTestJava]*.options*.encoding = "UTF-8" を追加。
      • build.gradle の bootRun、tasks.withType(Test) の jvmArgs に以下の値を追加。
        • -ea
        • -Dfile.encoding=UTF-8
        • -Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP
    • BUILD SUCCESSFUL が表示された。 f:id:ksby:20180818154935p:plain
  • コマンドプロンプトから npm install コマンドを実行してエラーが出ないことを確認する。 f:id:ksby:20180818155852p:plain
  • コマンドプロンプトから npm test コマンドを実行してエラーが出ないことを確認する。 f:id:ksby:20180818160337p:plain
  • コマンドプロンプトから npm run build コマンドを実行してエラーが出ないことを確認する。 f:id:ksby:20180818160522p:plain
  • npm run springboot コマンドで Browsersync を起動し、IntelliJ IDEA から Tomcat を起動して、画面が表示されることを確認する。 f:id:ksby:20180818160808p:plain f:id:ksby:20180818160919p:plain f:id:ksby:20180818161308p:plain
  • gebTest タスクを実行する前に以下のファイル内の C:\D:\ に変更する。
    • src/test/resources/GebConfig.groovy
    • D:/geckodriver/0.19.0/geckodriver.bat
  • gebTest タスクを実行してエラーが出ないことを確認する。 f:id:ksby:20180818171341p:plain

Windows 7 PC → Windows 10 PC へ移行する ( ツール類のインストール+ディレクトリのコピー )

概要

記事一覧はこちらです。

Windows 10 PC を半年くらい前に購入していましたが、忙しくなったのでしばらく放置していました。Spring Boot + npm + Geb で入力フォームを作ってテストする の記事も一段落ついたので、PC を切り替えることにします。

以前の PC は C ドライブしかありませんでしたが、今度の PC は C, D に分かれているので開発用ソフトのインストールや作業用ディレクトリの作成は D ドライブへ行うことにします。

参照したサイト・書籍

目次

  1. 「テキスト、アプリ、その他の項目のサイズを変更する」の設定を 150% → 125% に変更する
  2. ツール類のソフトをインストールする
  3. ディレクトリをコピーする

手順

「テキスト、アプリ、その他の項目のサイズを変更する」の設定を 150% → 125% に変更する

「テキスト、アプリ、その他の項目のサイズを変更する」の推奨値が 150% になっていました。確かに見やすいのですが、個人的にはもう少し文字が小さくても画面上に表示される情報量が多い方が好みなので、設定を変更します。

f:id:ksby:20180815011250p:plain f:id:ksby:20180815011348p:plain f:id:ksby:20180815011520p:plain

※100% はさすがに文字が小さくて疲れそうに思えたので止めました。

ツール類のソフトをインストールする

以下のソフトをインストールします。

以下のソフトはインストールはしましたが、使用するのを止めました。

ディレクトリをコピーする

以下のディレクトリを Windows 7 PC から Windows 10 PC へコピーします。コピー元は C ドライブですが、コピー先は D ドライブです。

Windows 7 PC → Windows 10 PC へ移行する ( 大目次 )

  1. ツール類のインストール+ディレクトリのコピー
  2. Git、SourceTree、IntelliJ IDEA、nodist+Node.js+npm、windows-build-tools のインストール+boot-npm-geb-sample の動作確認
  3. PostgreSQL、Redis、Erlang/OTP+RabbitMQ のインストール+ksbysample-webapp-lending の動作確認
  4. Docker for Windows のインストール
  5. 最後にメモ書き

Spring Boot + npm + Geb で入力フォームを作ってテストする ( その78 )( PMD を 6.5.0 → 6.6.0 へバージョンアップする+gradle-processes を導入する )

概要

記事一覧はこちらです。

Spring Boot + npm + Geb で入力フォームを作ってテストする ( その77 )( RequestAndResponseLogger クラスの Cookie ログは name, value だけ出力するように変更する+SESSION Cookie の secure 属性を true にするには? ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • build 時の警告ログが出なくなるような記事を見かけたので、PMD を 6.5.0 → 6.6.0 へバージョンアップしてみます。
    • Gradle 4.6 以降に対応した gradle-processes 0.5.0 がリリースされていましたので、正式に導入します。

参照したサイト・書籍

目次

  1. PMD を 6.5.0 → 6.6.0 へバージョンアップする
  2. gradle-processes を導入する
  3. 最後に

手順

PMD を 6.5.0 → 6.6.0 へバージョンアップする

build.gradle の以下の点を変更します。

pmd {
    toolVersion = "6.6.0"
    sourceSets = [project.sourceSets.main]
    ignoreFailures = true
    consoleOutput = true
    ruleSetFiles = rootProject.files("/config/pmd/pmd-project-rulesets.xml")
    ruleSets = []
}
  • toolVersion = "6.5.0"toolVersion = "6.6.0" に変更します。

変更後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。

clean タスク実行 → Rebuild Project → build タスクを実行してみますが、出力されるログはほとんど変わりませんでした。

f:id:ksby:20180813102536p:plain f:id:ksby:20180813102827p:plain

  • 以前は出ていなかった Could not determine ant log level, no supported build listeners found. Log level is set to FINEST というメッセージが表示されていました。
  • This analysis could be faster, please consider using Incremental Analysis: https://pmd.github.io/pmd-6.6.0/pmd_userdocs_incremental_analysis.html が2行出力される点は変わらず。

Could not determine ant log level, no supported build listeners found. Log level is set to FINEST の方は調べると以下の Issue を見つけました。PMD 6.7.0 待ちのようです。

gradle-processes を導入する

https://mvnrepository.com/artifact/gradle.plugin.com.github.jengelman.gradle.plugins/gradle-processes を見ると 0.5.0 がリリースされていました。

f:id:ksby:20180813135702p:plain

Not compatible with gradle 4.8.1 due to changes in gradles internal api の Issue が反映されたバージョンのはずなので、正式に導入してみます。

build.gradle の以下の点を変更します。

buildscript {
    ext {
        group "ksbysample"
        version "1.0.2-RELEASE"
    }
    repositories {
        mavenCentral()
        maven { url "https://plugins.gradle.org/m2/" }
    }
}

plugins {
    id "java"
    id "eclipse"
    id "idea"
    id "org.springframework.boot" version "2.0.4.RELEASE"
    id "io.spring.dependency-management" version "1.0.6.RELEASE"
    id "groovy"
    id "net.ltgt.errorprone" version "0.0.14"
    id "checkstyle"
    id "com.github.spotbugs" version "1.6.2"
    id "pmd"
    id "com.moowork.node" version "1.2.0"
    id "com.gorylenko.gradle-git-properties" version "1.5.1"
    id "com.github.johnrengelman.processes" version "0.5.0"
}
  • buildscript block に repositories { ... } を追加します。
  • plugins block に id "com.github.johnrengelman.processes" version "0.5.0" を追加します。

変更後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。

次に build.gradle に Web アプリの自動起動、自動停止のタスクを追加します。build.gradle の以下の点を変更します。

buildscript {
    ext {
        group "ksbysample"
        version "1.0.2-RELEASE"
        mainClass = "ksbysample.webapp.bootnpmgeb.Application"
    }
    ..........
}

..........

// for Geb + Spock Integration Test
task startServer(type: com.github.jengelman.gradle.plugins.processes.tasks.JavaFork) {
    jvmArgs = [
            '-Dspring.profiles.active=develop',
            '-Dlogging.level.root=OFF',
            '-Dlogging.level.org.springframework.web=OFF',
            '-Dlogging.level.jdbc.sqlonly=OFF',
            '-Dlogging.level.jdbc.sqltiming=OFF',
            '-Dlogging.level.jdbc.audit=OFF',
            '-Dlogging.level.jdbc.resultset=OFF',
            '-Dlogging.level.jdbc.resultsettable=OFF',
            '-Dlogging.level.jdbc.connection=OFF'
    ]
    classpath += sourceSets.main.runtimeClasspath
    main = "${mainClass}"
    doLast {
        Thread.sleep(15000)
    }
}
task stopServer {
    doLast {
        startServer.processHandle.abort()
    }
}
def drivers = ["chrome", "firefox"]
drivers.each { driver ->
    task "${driver}Test"(type: Test) {
        // 前回実行時以降に何も更新されていなくても必ず実行する
        outputs.upToDateWhen { false }
        systemProperty "geb.env", driver
        exclude "ksbysample/**"
        dependsOn startServer
        finalizedBy stopServer
    }
}
task gebTest {
    dependsOn drivers.collect { tasks["${it}Test"] }
    enabled = false
}
  • buildscript block に mainClass = "ksbysample.webapp.bootnpmgeb.Application" を追加します。
  • startServer, stopServer タスクを追加します。
  • drivers.each { driver -> task "${driver}Test"(type: Test) { ... } } 内に以下の2行を追加します。
    • dependsOn startServer
    • finalizedBy stopServer

変更後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。

まずは clean タスク実行 → Rebuild Project → build タスクを実行してみます。BUILD SUCCESSFUL が出力されて、startServer と stopServer タスクは実行されませんでした。

f:id:ksby:20180813151831p:plain

gebTask を実行してみます。startServer → chromeTest, firefoxTest → stopServer の順に実行されて、BUILD SUCCESSFUL が表示されました。

f:id:ksby:20180813153717p:plain f:id:ksby:20180813153838p:plain

chromeTest タスクだけを実行しても startServer → chromeTest → stopServer の順に実行されて、テストは全て成功しました。

f:id:ksby:20180813154726p:plain

firefoxTest タスクだけを実行しても startServer → chromeTest → stopServer の順に実行されて、テストは全て成功しました。

f:id:ksby:20180813155415p:plain

最後に

やりたいことが一通り終わりました。「Spring Boot + npm + Geb で入力フォームを作ってテストする」は以上で終わりです。

次は以下のことを書くつもりです。

  • Windows 10 PC を購入したので、まずは今の環境(Windows 7)から移行します。
  • その後に ksbysample-webapp-lending の Spring Boot 1.5 → 2.0 バージョンアップを行います。
  • 気がむいたら Spring Integration ネタをしばらく書いていないので、何か書くかもしれません。あるいは最近覚えている AWS 関連で何か試したいネタを見つけて書けるといいかな。。。

履歴

2018/08/13
初版発行。

Spring Boot + npm + Geb で入力フォームを作ってテストする ( その77 )( RequestAndResponseLogger クラスの Cookie ログは name, value だけ出力するように変更する+SESSION Cookie の secure 属性を true にするには? )

概要

記事一覧はこちらです。

Spring Boot + npm + Geb で入力フォームを作ってテストする ( その76 )( Spring Boot Actuator を導入する ) の続きです。

参照したサイト・書籍

目次

  1. 現在の状況を確認する
  2. サーバから Cookie の domani 属性が未セットの状態で返されると、ブラウザはアクセスした時のドメインをセットする?
  3. Spring Session では SESSION Cookie の httponly 属性をデフォルトで有効にしている?
  4. RequestAndResponseLogger クラスの Cookie のログでは name, value しか出力しないように変更する
  5. SESSION Cookie の secure 属性を true にするには?

手順

現在の状況を確認する

Spring Boot + npm + Geb で入力フォームを作ってテストする ( その75 )( コネクションプーリング用ライブラリを Tomcat connection pool → HikariCP に切り替える ) で、ksbysample.webapp.bootnpmgeb.aspect.logging.RequestAndResponseLogger が出力しているログを見ると SESSION Cookie の domain 属性が null だったり、httponly 属性が false だったりしていたのですが、

[req][cookie] name = SESSION, value = MThlNDQ3NGUtNmQ0Mi00Y2Q2LTlmNTYtMDA4ZDZlYjg3NTQ3, domain = null, path = null, maxage = -1, secure = false, httponly = false

Chrome の Develper Tools で SESSION Cookie を確認すると domain 属性も httponly 属性もセットされていました。

f:id:ksby:20180812153719p:plain

Develper Tools で SESSION Cookie を削除してから再度リクエストを送信し、Fiddler で SESSION Cookie が最初に返される時の HTTP ヘッダを確認したところ以下の文字列が返ってきており、domain 属性はありませんが httponly 属性はセットされていました。

Set-Cookie: SESSION=ZDIyYThlZTctZDg1Yi00MGYyLTgwZmEtNzA4N2U4Y2E1YTY4; Path=/; HttpOnly

今度はリクエストの送信時に Cookie をどのように送信しているかを見てみると以下の文字列が HTTP ヘッダで送信されており、Cookie はキーと値しか送信されていませんでした。

Cookie: SESSION=ZDIyYThlZTctZDg1Yi00MGYyLTgwZmEtNzA4N2U4Y2E1YTY4

ということは、

  • サーバから Cookie の domani 属性が未セットの状態で返されると、ブラウザはアクセスした時のドメインをセットする?
  • Spring Session では SESSION Cookie の httponly 属性をデフォルトで有効にしている?
  • request 時のデータを ksbysample.webapp.bootnpmgeb.aspect.logging.RequestAndResponseLogger で出力しているが、request では Cookie は name と value しか送信されないので、それ以外の属性を出力しても意味がない。

サーバから Cookie の domani 属性が未セットの状態で返されると、ブラウザはアクセスした時のドメインをセットする?

調べたら CookieのDomain属性は 指定しない が一番安全 という記事を見つけました。内容が分かりやすく納得しました。domain 属性はセットしてはいけないんですね。

Spring Session では SESSION Cookie の httponly 属性をデフォルトで有効にしている?

org.springframework.session.web.http.DefaultCookieSerializer を見ると private boolean useHttpOnlyCookie = true; と実装されていました。デフォルトで httponly 属性を有効にしていました。

f:id:ksby:20180812160620p:plain

RequestAndResponseLogger クラスの Cookie のログでは name, value しか出力しないように変更する

src/main/java/ksbysample/webapp/bootnpmgeb/aspect/logging/RequestAndResponseLogger.java の以下の点を変更します。

    private void loggingRequestCookies(HttpServletRequest request) {
        if (request.getCookies() != null) {
            Arrays.asList(request.getCookies()).forEach(cookie -> {
                StringBuilder sb = new StringBuilder();
                sb.append("name = ")
                        .append(cookie.getName())
                        .append(", value = ")
                        .append(cookie.getValue());
                logging(LOG_REQUEST_COOKIE, null, sb.toString());
            });
        }
    }
  • loggingRequestCookies メソッド内の .append(", domain = ") ... .append(cookie.isHttpOnly()); を削除します。

これで SESSION Cookie をログに出力すると以下のように name, value しか出力されません。

[req][cookie] name = SESSION, value = OTk1MmIzZDktMjQwMi00NDEyLTgwZWItYWQyOTQ5MGYyMmUx

SESSION Cookie の secure 属性を true にするには?

Spring Session - Custom Cookie に記述がありました。

src/main/java/ksbysample/webapp/bootnpmgeb/config/ApplicationConfig.java に cookieSerializer Bean を定義し、その中で cookieSerializer.setUseSecureCookie(true); を呼び出して secure 属性を有効にします。独自の cookieSerializer Bean を定義すると Spring Session でこちらが使用されるようになります。

    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
        cookieSerializer.setUseSecureCookie(true);
        return cookieSerializer;
    }

動作確認してみます。bs-springboot-config.js に https: true, を追加して Browsersync で https を処理できるようにします。

  ..........
  serveStatic: [],
  https: true,
  ghostMode: {
    ..........

Tomcat を起動した後、npm run springboot コマンドを実行します。

Chrome の Developer Tools で SESSION Cookie を削除した後、https://localhost:9080/inquiry/input/01/ にアクセスします。

画面が表示された後、Developer Tools で SESSION Cookie を見ると secure 属性が有効になっていることが確認できます。

f:id:ksby:20180812201647p:plain

履歴

2018/08/12
初版発行。