Slide 1

Slide 1 text

デプロイか ら 考 え る 僕 の WEBアプリ開発 JJUG-CCC 2019 Spring #ccc_m2a 株式会社アーチ 井上 和宏 2019-05-18(土) 11:00~11:20

Slide 2

Slide 2 text

名前 : 井上 和宏 所属 : 株式会社アーチ システム部 ・業務システム保守エンジニア(33歳) ・入社以来10年ほど開発と保守に携わる 日課 : 息子と『ピタゴラスイッチ』を見ること 2 自己紹介

Slide 3

Slide 3 text

目次 1.WEBアプリ開発のきっかけ 2.デプロイから考える 3.ビルドから考える 4.そのほか 3

Slide 4

Slide 4 text

WEBアプリ開発のきっかけ 4

Slide 5

Slide 5 text

東京公共交通オープンデータチャレンジ HTTPS REST API 鉄道、バス、飛行機のデータを使ったアプリコンテスト アプリケーション JSON 例えば,駅時刻表 路線運行状況 列車走行位置 5

Slide 6

Slide 6 text

「デプロイから考える僕のWEBアプリ開発」 <はなすこと> WEBアプリのフレームワークとビルドツールについて 選んだ理由とその経緯をご紹介します <おことわり> ・個人的な試行錯誤の経験に基づく私見です ・クラウド と データベース はノータッチです ・このセッションでは 「デプロイ」を本番リリースに近い意味で使います 本日のテーマ 6

Slide 7

Slide 7 text

7 全体像 本日のセッションでは 黄色 近辺の話をします CentOS 7 Java12 CDN firewalld VPS API Gradle build SSH SCP Java11 TeraTerm

Slide 8

Slide 8 text

目次 1.WEBアプリ開発のきっかけ 2.デプロイから考える 3.ビルドから考える 4.そのほか・まとめ 8

Slide 9

Slide 9 text

サーバーの構築は大変な手間なので極力少なくしたい 9 Apache WEB Tomcat DBMS AP DB Java 開発の課題(1)

Slide 10

Slide 10 text

そのものずばりの資料が2014年に発表されていました 「Spring Bootで変わるJavaアプリ開発!」 槙 俊明さん(@making)のスライド 2014-08-13 日本スプリングユーザ会 勉強会 https://www.slideshare.net/makingx/spring-boot-java-jsug 開発の課題(2) 10

Slide 11

Slide 11 text

スライド引用(1) 11 68 of 114

Slide 12

Slide 12 text

スライド引用(2) 12 70 of 114

Slide 13

Slide 13 text

APサーバーのインストールが不要になります 構成変更のイメージ Javaアプリケーション APサーバー マシン・OS 13 Javaプログラム フレームワーク 組込APサーバー

Slide 14

Slide 14 text

スライド引用(3) 14 73 of 114

Slide 15

Slide 15 text

<メリット> (1) Javaコマンドのみで実行できます (2) SpringBootならではの多くのメリット <デメリット> (1) SpringFramework と実行可能jar (2) 個人的な事情 SpringBoot 15

Slide 16

Slide 16 text

そこでマイクロフレームワーク 16

Slide 17

Slide 17 text

(Apache Sparkじゃない方です) 組込APサーバーとしてJettyを同梱し パスルーティング機能に特化したWEBフレームワーク 作成者:Per Wendelさん(@perwendel) 2014-05-11リリース ~ 2019-03-27リリース http://sparkjava.com/ Spark(1) 17

Slide 18

Slide 18 text

<メリット> (1) Javaコマンドのみで実行できます (2) ドキュメントが大変わかりやすく簡潔でした <デメリット> (1) わりとクセがあります Spark(2) 18

Slide 19

Slide 19 text

Quick start 19

Slide 20

Slide 20 text

目次 1.WEBアプリ開発のきっかけ 2.デプロイから考える 3.ビルドから考える 4.そのほか・まとめ 20

Slide 21

Slide 21 text

実行可能jar を使用しない場合 ⇒依存ライブラリのクラスパス指定が必要です 依存といえばビルドツールで解決です Maven or Gradle デプロイの課題 21

Slide 22

Slide 22 text

Maven Gradle 設定ファイルがXML 素直に Maven難しいな と感じました 設定ファイルがGroovy コメントも書きやすい Linux用の実行スクリプトを 生成できる ビルドツール 22

Slide 23

Slide 23 text

実行スクリプトとすべての依存ライブラリ(.jar)が 圧縮ファイルにまとめて出力されます C:¥workspace¥net.shirokin.odpt¥build¥distributions ┣ net.shirokin.odpt.tar ┗ net.shirokin.odpt.zip ┣ bin ┃ ┣ net.shirokin.odpt ・・・Linux用shell ┃ ┗ net.shirokin.odpt.bat ・・・Windows用bat ┗ lib ┣ spark-core-2.9.0.jar ┣ jetty-servlet-9.4.15.v20190215.jar ┣ ・・・ 実行スクリプト生成(1) 23

Slide 24

Slide 24 text

実行するコマンドは自前で作成します tarを展開してバックグランドで起動します(&, exit) $ tar –xvf net.shirokin.odpt.tar $ export JAVA_OPTS=-Xmx4000m $ export EXEC_SH=net.shirokin.odpt/bin/net.shirokin.odpt $ export LOG_FILE=`date "+%Y-%m-%d"`_std.log $ sh $EXEC_SH < /dev/null >> $LOG_FILE 2>&1 & $ exit 実行スクリプト生成(2) 24 1 2 3 4 5 6

Slide 25

Slide 25 text

モジュールパス指定での実行形式には未対応です とはいえアプリ自体もモジュール未対応です ■クラスパス指定 > java --class-path %APP_HOME%/lib/* net.shirokin.odpt.ApplicationMain ■モジュールパス指定(の想定) > java --module-path %APP_HOME%/lib/* --module net.shirokin.odpt/ApplicationMain Gradle:実行スクリプト生成(3) 25

Slide 26

Slide 26 text

目次 1.WEBアプリ開発のきっかけ 2.デプロイから考える 3.ビルドから考える 4.そのほか 26

Slide 27

Slide 27 text

あと何分で次の列車が出発するか一覧表示するアプリ https://odpt.shirokin.net/ 開発成果 27

Slide 28

Slide 28 text

サーバー1台 さくらのVPS 972円 /月 ドメイン取得 さくらのドメイン 1,852円 /年 無料のDNS さくらのVPS 0円 SSL証明書 Let’s Encrypt 0円 外形監視 さくらのVPS 0円 モニタリング Mackerel 0円 維持コスト 28 CDN さくらのクラウド 0円 インバウンド側トラフィック 0円 アウトバウンド側トラフィック 5円 /GiB

Slide 29

Slide 29 text

29 全体像 CentOS 7 Java12 CDN firewalld VPS API Gradle build SSH SCP Java11 TeraTerm

Slide 30

Slide 30 text

<開発の所感> 世の中のソフトウェアはたくさんの人の尽力により 成り立っていると実感しました。 一人でできることには限界がある 仲間を見つけて一緒にやると楽しくなる、と思います 開発の顛末 30

Slide 31

Slide 31 text

おわりに 31 https://tokyochallenge.odpt.org/