Amazon LightsailでVPS始めました

自腹ですw
Lightsailは簡単に始められるVPS
個人の学習および開発のためのサーバーとして活用できると思います。
また、その手軽さから試験的な試みをする時にも手軽に利用できるのではないかと思います。

今回のエントリーはLightsailの導入からsshアクセスまでの内容になります。

インスタンスイメージを選択する。

f:id:yasay:20170102211428p:plain
インスタンスイメージは、最初からWordpressRedmineなどの
アプリケーションが使えるイメージも選択できますが、
それだと学習にならないので、素のインスタンスイメージを選択します。
今回は「Amazon Linux」を選択。

ちなみに、2017年1月時点でリージョンはバージニアしか選択できません。
バージニアオレゴンのほうが東京リージョンよりは安かったりするので
個人で使う分にはこれでよいと思います。

インスタンスプランを選択する。

f:id:yasay:20170102212321p:plain
5ドル構成にしました。1TBのデータトランスファーは充分な気がする。
メモリ、CPUは心許ないので、
使用状況に合わせてスケーリングしていきたいと思う。

Createボタンを押すだけで、インスタンスの作成が始まります。

f:id:yasay:20170102213639p:plain
3分程待つとインスタンスが起動し使用できるようになります。速いですね!

ブラウザからインスタンスに接続することができる。

f:id:yasay:20170102213737p:plain
インスタンスのメニューから「Connect」を選択。
f:id:yasay:20170102213916p:plain
上記のようにブラウザからコンソールにアクセス可能です。

管理コンソールを使ってみる。Connectタブ

f:id:yasay:20170102214133p:plain
管理コンソールからインスタンスの停止やリブートも可能。
Connectタブでは、パブリックIPの確認や、ブラウザからインスタンスに接続などができる。

Metricsタブ

f:id:yasay:20170102214524p:plain
Metricsタブでは、CPUやネットワークなどの利用状況が
グラフで表示される。Lightsail用の機能のようだ。

Networkingタブ

f:id:yasay:20170102214717p:plain
NetworkingタブではパブリックIP、プライベートIP、
ファイアウォールの設定などが確認できる。
VPCによるクラウドネットワーク環境の構築が不要なので、
手軽に始められる

Snapshotsタブ

f:id:yasay:20170102215035p:plain
インスタンスのSnapshotsを取得することができる。
環境を大きく変更する前には、Snapshotを取得したほうがよいだろう。

Historyタブ、Deleteタブ

Hisotryタブはインスタンスの起動・停止などに関する履歴や
Snapshot作成の履歴などを確認することができます。

Deleteタブはインスタンスを削除します。
簡単にインスタンスを作り、簡単に削除できます。この手軽さがいいですね。

ssh接続してみる。もちろんうまくいきます。

f:id:yasay:20170102220112p:plain
Connectタブでデフォルトのキーペアをダウンロードし
ssh接続してみました。もちろん成功します。
マクロもいろいろ組めそう!?

Lightsailでやりたいこと

いろいろあります。


などなど。楽しいおもちゃを手にいれた気分です。
Amazon Prime会員になるよりこっちにお金払ったほうが楽しそう。

IntelliJ IDEA UltimateとCommunityの違い:アプリケーションサーバへのデプロイ機能について

IntelliJ IDEAの「Ultimate Edition」と
「Community Edition」の違いについてのエントリーになります。
今回は、Community EditionでローカルのTomcatサーバにデプロイ可能かを調べてみました。

調べた日 2016.12.14
Ultimate Edition Version 2016.3.1
Community Edition Version 15.0.4

結果:Communityエディションではアプリケーションサーバーへのデプロイ機能が提供されていない。

Ultimateの場合は「Run」→「Edit Configurations...」からTomcatのデプロイを追加できるのですが、
Communityの場合はEdit Configurationsに存在しませんでした。

↓画像はUltimate Editionの例です。
f:id:yasay:20161214171730p:plain

Eclipseでもできるのに残念です。
回避策としては、

  • Mavenでライブラリ追加できればいける・・らしい
  • 直接Tomcatにデプロイして起動する


Intellij IDEAはとてもクールなIDEですよね。
Darculaテーマが気に入っています。
使いこなせるようになりたい。

re:Growth 2016 TOKYOに行ってきました!

エントリー遅くました・・。
re:Growth 2016に行ってきました!
classmethod.connpass.com


ビュッフェの料理が唐揚げしかなかったクソワロタwww(画像なし)
f:id:yasay:20161223082028j:plain
そしてめそ子・・・クラスメソッド様はどこに向かうのでしょうか。いや、可愛いけどね。

書き殴っていきます!
まずは、AWS日本法人のエコシステムソリューション部の方による、
re:Inventで発表されたサービスの紹介。

20分でわかる re:Inventで発表された最新AWSサービスの全て!2016年版

  • 去年よりサービスの量が多かった。
  • プレミアムパートナーは日本は5社から7社に増えた。NRINTTデータが追加。

以下、トピック別に記述します。

インスタンスタイプの拡充

新サービスAmazon Lightsailを発表

  • 仮想専用サーバVPSのように使い始めることができるサービス
  • データ転送量を含めた定額

Amazon Athenaを発表

  • GCPのBig queryみたいなもの

→東京リージョンはまだ。海外ならすぐ試せる。

Amazon AIの発表

  • 画像認識、音声認識などを使えるようになる。

Amazon AuroraPostgreSQL対応

  • 9.6.1互換のAurora

Oracleからの移行にニーズがある。
→東京リージョンはまだ。

AWS Greegrassを発表

→IoTデバイスゲートウェイバイスAWS上のリソースとの連携を容易にする新サービス

AWS Snowball Edgeを発表

→100TBの容量を備えた新型Snowballアプライアンス

AWS Snowmobileを発表

→トラックで100PBのキャパシティを移行www
→半分ネタみたいな機能だけど、アメリカだとそういう要望があるらしい。

EC2 Systems Managerを発表

  • OSのパッチの自動適用だったり、自分でやっていたものを自動的に実行。

→結構便利じゃね?EPで需要ありそう。

AWS Code Build

  • ビルドとテストが実行可能なマネージドサービス

AWS X-Rayを発表

  • アプリケーションにSDKやAgentを入れるとトレースデータを補足できるサービス

BlackBoxだったのをより見やすくする運用監視ツール

AWS Personal Health Dashboardを発表

  • 突然リブートの連絡がきたりして、困ることがある。

ダッシュボードでそういった連絡を一見化することができるようになる。
→運用がしやすく。全てのリージョンで使用可能。

AWS Shieldを発表

  • マネージドDDoSプロテクションサービス
  • 無償版と有償版を用意。

AWS Pinpointを発表

  • モバイルアプリケーション向けターゲットプッシュ通知サービス

→使ってない人にだけ促したりとか、セグメンテーションをカスタマイズすることができる。
→Mobile Hubに連携して組み込んでいる。

AWS Glueを発表

  • データカタログの作成と、データの加工・ロード(ETL)が実現可能なマネージドサービス

→巨大なデータを管理しながらETLができる。

AWS Batchを発表

AWS Step Functionを発表

  • ワークフローの管理、ステップ管理ができるサービス

Lambda@Edgeの発表

  • Lambdaベースの処理をCloudFrontのエッジロケーションで実行し、リアルタイムにヘッダー、URLなどの編集が可能なサービス


「10年間、AWSは進化し続けてきた。だから、これからの10年も進化し続けるだろう。」





次にクラスメソッド社員の方によるセッション

Step Funcitonの紹介

ビジュアルなワークフローにて、アプリケーションのコンポーネント
一連のステップとして実行できる。
Lambda以外も動く。
→何ができるのか→ワークフローをステートマシンとして利用できる。
→Lambda連携が大きい。Lambda Function同士が疎結合でメンテナス性がよくなる。

バッチジョブのフロー定義
AWS Batchとの住み分けがまだ分かってない。

中身はAmazon Stets Languageという記述ルールがある。
→これを覚えるのが少し大変そう?
→エクスポネンシャルバックオフ!

VUIとAlexaによるちょっと未来の体験

→alexa最高じゃん。めっちゃ欲しい。なんだこの未来大好き。
→ハードウェアはAmazon Echo。ソフトウェアがalexa。
→IoT発展によるSmart Homeの可能性
→「alexa、おやすみ」の一言で複数の設定を行うことが理想
 →それがコンテキスト。文脈を読み取り、適切なプログラムを起動することがコンテキスト。
 →Alexa Skills Kit, Alexa Voice Service
  →お金高くつきそう・・・
→Raspbelly piでも使えるらしい。
→Polly, Lex

AWS Glue

→フルマネージドなデータカタログとETL処理を提供するサービス
→背景:DWH構築作業の70~80%がETL処理
→ETL処理の70%が手組みのプログラム
Brittle, Error-prone, Laborious

Data Catalog
→データ検索と型定義を自動化するサービス
・Hiveメタストア互換のメタデータリポジトリ
パーティション情報の自動検知と更新

Job Authoring
→データ連携のロジックを自動生成
→データ連携のためのPythonコードを自動生成(PySpark)
→任意のIDEで改造し、Gitで共有したりできる。

連携のスケジュールも組める。

Job Execution
→スケーラブルなジョブ実行
→lambdaのコードと連携させて、イベント単位で実行させることもできる。

スライドが共有されています。
www.slideshare.net

AWS Personal Health Dashboardの可能性

AWSの障害情報を見れるダッシュボード
 →今まではサービス情報を見てた。大量のサービスの内容から障害情報見るの大変。
 →「Open issues」タブで自アカウントで使用しているサービス、リソースの障害情報のみ一覧で見れる。
 →各Issueに対する詳細でどのように対処すればよいかまとめられている。
→問題発生したら自動で○○したい場合・・・
 →いままではRSなどの収集方法もあったが・・・
  →CloudWatch Eventsと連携してアクション可能。Lambdaも後ろで動かせる。
  →Health APIが提供されているので、CLIで操作できる。→リージョン指定はちゃんとしてください。
→Business/EnterpriseサポートのアカウントのみHealth APIを使用可能

VPSサービス Amazon Lightsailを使いこなす

→とにかくシンプルにサーバーをローンチできる。
→機能・柔軟性は削られている。
→分かりやすい価格設定。
→EC2起動に必要な操作は大変だった。(自分もやったことあるからわかる。)
 →それがシンプルに使い始めることができる。
→社内のシステムのLightSailにするのもありなんじゃないの?
→ブラウザからのSSHアクセスが可能。すぐその場で使える。22番ポートで出て行かないので、プロキシに邪魔されにくい!
→制約はいろいろあるので、EC2への移行をしたい場合は考慮する必要があり。
FirewallでソースIP制限不可能

AWS Lambda@Edgeについて

・どんな課題があったのか
→リクエストの内容によって動的な処理をしたい場合はある。
 →この処理はオリジン側でないと実装が難しい。

CloudFrontの各種イベントに基づきLambda関数をエッジロケーションで実行させ、
リクエスト・レスポンスオブジェクトを動的に処理できる機能
→エッジロケーションで実行されるので低レイテンシを実現

AWS Batchを使う想像してみた

以下のような内容の紹介など
1.コンピューティング環境の作成
2.ジョブキューの作成
3.ジョブ定義の作成
4.ジョブの作成

EC2 Systems Managerはいいぞ

→EC2との付き合い方を変えるサービス
・中心機能はRun Command
→対象のインスタンスを指定することで、Run CommandでOS上の操作をすることができる。
→大量のOSを運用する場合に効果を発揮するのでは。

・重要なコマンドドキュメント
AWS-RunShellScript
AWS-RunPowerShellScript
AWS-InstallSpecificWindowsUpdates

・SSMと何が違うの?
→大きな違いはなかったらしい・・

・新機能
→インベントリ
 →EC2の情報を定期取得(AWSコンポーネント、ネットワーク情報、Windowsアップデートとか)
 →Aws Configで追従可能(AWSリソースの変更履歴)
→ステートマネージャ
 →OSとアプリケーションの一貫した構成を維持
→オートメーション
 →自動化。デプロイメントの自動化など
→パラメータストア
 →ドキュメントで参照するパラメータを定義

無料、東京リージョン対応

新サービス:Athena

Athenaとは
→ビックデータのデータ分析は大量作業、大量な知識必要
 →ETL、データロードが不要
 →S3上データへ対話的SQLクエリ
 →複数フォーマット対応
→特徴
 →サーバーレス、早い、コスト効率がよい、ツール連携

Amazon AI兄弟の世界

Deep LearningのノウハウをAmazon以外の開発者も使えるようにした。
→Recognition
 →顔認識とか。
→Polly
 →同型異義語の前後の文脈を理解して発音を変える
→Lex
 →Alexaの設計が元になっている。

以上です。

「世の中を変えるような技術が簡単に使えるような時代。
この技術を使って、世の中を変えていくシステムを作っていきましょう!」

クラスメソッドの横田社長様から熱いメッセージを頂き、終了となりました。

早速LightSailでVPS始めたいと思います!

Spring BootでWebアプリケーションを作りたい! 環境構築 + Hello World編 STS3.8.2(Eclipse) + Gradle(Buildship) + JSP

巷では流行っているSpring Boot。
どうしてもSpring Bootを使いこなしたい私です。
仕事のプロジェクトも全部Spring Bootになってしまえばいいのに(ぉぃ)

今回は、下記の環境でSpring BootによるMVCJSPで作っていきます。
Thymeleafはまた今度。

IDE STS 3.8.2
Gradle Buildship Gradle Integration 1.0(Plugin)

Gradleプラグインのインストール

初っ端からはまった。Eclipse Market Placeからインストールってどのサイト見ても書いてるんだけど、
「Gradle (STS) Integration for Eclipse」なんてプラグイン見つかりません。
どれをインストールしてよいのか分からず。

とりあえず、Gradle IDE Packをインストールしてみた。
f:id:yasay:20161209151209p:plain

再起動したらなんか警告でた。
f:id:yasay:20161209151235p:plain

訳:
STS gradleプラグインは最小限のメンテナンスであり、今後中止される可能性があります。
STS GradleからBuildshipへの移行プロセスを説明する文書がここにあります。

・・・つまりもうメンテしないから違うプラグインに移行してってことかな。

どうやら、Buildshipに移行してくれとのことです。
Migration guide from STS Gradle to Buildship · eclipse/buildship Wiki · GitHub

このPluginか!
f:id:yasay:20161209152009p:plain

Eclipseがエラーを検知したらしいけど、Enableにしようとしたらポップアップが消えちゃった・・。まぁいいや。
f:id:yasay:20161209153121p:plain

これでやっとGradleプラグインのインストールが完了。

demoプロジェクトを作ってみる。

Typeに"Gradle (Buildship)"を選択。
f:id:yasay:20161209153247p:plain

とりあえずWebプリケーションを作ってみたいので、Webを選ぶ。
f:id:yasay:20161209153834p:plain

雛形が作成されました。
f:id:yasay:20161209154211p:plain

ControllerとJSPファイルを追加する。

詳しくは分からないのですが、JSPを利用すると
Spring Bootの恩恵を最大限に受けられないらしく、
Thymeleafを使うことを推奨されています。
ということは、Spring MVCからSpring Bootへの移行って
あまり需要ないのかもしれないですね?

Spring Legacy Projectで作られるコードを元にして、
HomeControllerとJSPファイルを作成していきます。

  • HomeController.java
// HomeController.java
/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home";
	}
	
}


JSPは"src/main"ディレクトリ配下に下記のディレクトリ構成を作って配置します。
f:id:yasay:20161209184505p:plain

<!-- home.jsp -->
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<P>  The time on the server is ${serverTime}. </P>
</body>
</html>
application.propertiesを修正する

jspファイルを読み込めるよう、設定を記述します。

  • application.properties
spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .jsp
Gradleでtomcat-jasperライブラリを取得するよう変更する

Gradleをごにょごにょ記述するのはmavenより好きになれそう。

  • build.gradle
buildscript {
	ext {
		springBootVersion = '1.4.2.RELEASE'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

jar {
	baseName = 'demo'
	version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
	mavenCentral()
}

dependencies {
	compile('org.springframework.boot:spring-boot-starter-web')
	testCompile('org.springframework.boot:spring-boot-starter-test')
	compile('org.apache.tomcat.embed:tomcat-embed-jasper:8.5.6')
}

tomcat-embed-jasperのバージョン指定を変数に変更しようと思ったんですが、
うまくいきませんでした。これはGradle文法を学ぶ必要あり。もしよければプルリク下さい。

ライブラリを再インポートする

プロジェクトを右クリック「Gradle」→「Refresh Gradle Project」を実行
f:id:yasay:20161209191615p:plain

実行する

プロジェクトを右クリック「Run As」→「Spring Boot App」を実行
f:id:yasay:20161209191730p:plain

画面が表示されました!

f:id:yasay:20161209191818p:plain

GitHubソースコードを置きました。

備忘録がてらGitHubに置きました。
github.com


結論:Spring Boot使ってて楽しい!
次は下記のようなことにチャレンジしていきます。

  • Thymeleafを使う
  • ロギングの設定を行う
  • IntelliJ IDEAで同じことをやってみる
  • Jarファイルのデプロイ



おまけ:GradleのZipを直接ダウンロードして環境変数を通してみる。

Gradleのインストール

公式サイトからZipファイルをダウンロードしてきて、お好きな場所に保存
Gradle Build Tool

Gradleの環境変数の設定

GRADLE_HOMEにGradleのホームディレクトリを設定する
f:id:yasay:20161209144006p:plain

Pathに"GRALE_HOME\bin"を設定する
f:id:yasay:20161209144512p:plain

動作確認

無事にパスが通りました↓
f:id:yasay:20161209150041p:plain


JJUG CCC 2016 Fallに行ってきました!

JJUG CCC 2016 Fallにボランティアとして参加してきました!
幹事会の皆様、今回私は初参加でしたが、
暖かく迎えてくださりありがとうございました!
http://www.java-users.jp/ccc2016fall/www.java-users.jp
JJUG主催の大規模イベントです。
場所はベルサール新宿グランドコンファレンスセンターです。
セッションで使う部屋が大きく、トイレもたくさんあり収容力のある会場です。
これはSpring Day 2016よりよかった点だと思います。
f:id:yasay:20161206232543j:plain
今回は905人以上の方が参加し、記録更新したようです。
初めての参加者が多く、30代の参加が多くを占めますが、
20代の参加者も意外と多いみたいです。

www.slideshare.net

今回はボランティアとしてお手伝いに参加しました。
f:id:yasay:20161206232330j:plain
イベントのTシャツを着て参加です!
自分は後半からのお手伝いでしたので、前半はセッションを見ました!
見たセッションの感想を書いていきます。↓

10:00 ~ 10:50 : Prepare for Java 9 : Java 9 に備えよう

参考になりすぎて、社内でも情報共有したいレベルのセッションでした。
プロパティファイルがUTF-8に対応したことや、
JShell、Jigsawで何ができるかを学びました
JShellはPythonとかにあるターミナル形式のコーディングですね。
これは使ってみたい!教育用にいいらしい。
普段意識しづらいパッケージの依存関係ですが、
注視してみると結構闇の領域な気がします。
この依存関係の管理をしやすくなるのが、Jigsawらしい。

スライドが公開されています。↓

www.slideshare.net


11:00 ~ 11:50 : SIerもはじめる、わたしたちのDevOps

登壇者の方が二人いらっしゃいました。
最初は大手SIerによるDevOpsの取り組みが紹介されていました。
デプロイ1分で完了する仕組みとか真似したい。
次に主にDockerを活用したDevOpsについて紹介されていました。

スライドが公開されています。↓

www.slideshare.net

Githubで資料が公開されています。↓
GitHub - kawasima/rascal-scheme: ふつうの受託開発のやりかた
GitHub - kawasima/mentr: ソフトウェアエンジニアに対するメンタリングを考えるリポジトリ

Demoが公開されています。↓
www.asa.yokohama – このドメインはお名前.comで取得されています。


13:30 ~ 14:20 : Event Driven MicroServices with Spring Cloud Stream

かなり上級者向けの内容でした。イベントドリブンである
Spring Cloud Streamをマイクロサービスで活用することについて学びました。
スライドが公開されています↓

www.slideshare.net


14:30 ~ 15:20 : Spring CloudでDDD的なマイクロサービスを作ってみる

ドメイン駆動設計によるマイクロサービスの
デモおよびソースコードの解説がメインのセッションとなります。
↓のようなキーワードがありました。
・境界づけられたコンテキスト
ユビキタス言語
リポジトリ
上記DDDのキーワードを実現する上での実践的なヒントは参考になりました。
デモアプリが回転寿しの注文システムであったり、
スライドの内容が基本手書きなのがとても印象に残りました。
また、マイクロサービスで開発する時はチームを分けたほうがよいという話もありました。
登壇者は楽天の方でした。
f:id:yasay:20161206234605j:plain



この後、
16時からはボランティアで主にKブースと懇親会の準備などを担当しました。
KブースはAtlassian様、Samuraism様そして、elastic様がブースを設置していて、
LTのタイムキーパーを担当しました。
懇親会と飲み会に参加した後、終電ギリギリで帰宅です。
セッションの登壇者の方とお話する機会を頂けたりで、充実した1日でした!

↓ちなみに会場の近くに神社がありました。
どう見てもピンクw
f:id:yasay:20161206235708j:plain

お疲れ様でした!

WindowsでもBashを使う!Bash On Ubuntu On Windowsのrsyncを使って自動バックアップ!Slackとの連携も♫

以前、下記のエントリーで複数のPCをMac miniに集約しました。
xblood.hatenablog.com

この時に、自動バックアップをBunBackUpからrsyncスクリプト
移行したので、エントリーを残しておきます。

何故ツールを移行したのか。

BunBackUpはWindowsで使える便利で強力なバックアップツールです。
nagatsuki.la.coocan.jp
ですが、最近はMacで開発することが多く、
いつMacに乗り換えるか分からないような状況です。
なので、WindowsでもMacでもLinuxでも動くバックアップツールを作ることが
今回の目的です。

rsyncは古くからある強力なLinuxコマンド

ノウハウも多く検索すればたくさん情報が出てきます。
以前Macでバックアップしていた時もrsync使ってました。

役に立った「Bash On Ubuntu On Windows

Windows 10にはAnniversary Updateで「Bash On Ubuntu On Windows」が導入できます。
これは、Windows環境下でBash環境を実現するための公式ツールになります。
今回は、「Bash On Ubuntu On Windows」を使って、rsyncコマンドによる自動バックアップを構築します。
※なんかいい略し方ないですかね・・BOUOWだと分かりづらい気がする。


それでは、やっていきます。
そんな難しいことはしていないです。
要するにBash自動起動する仕組みを作るだけです。

バッチファイルでBashを起動する。

Bash.exeは下記ディレクトリにあります。

C:\Windows\System32\

Bash.exeの場所が特定できれば簡単です。Bashを起動するバッチファイルを作ります。
↓以下コマンド例

cmd /c ""C:\Windows\System32\bash.exe" --login -i -- /mnt/c/rsync_scripts/runRsyncBackup.sh"
バッチファイルをタスクスケジューラーから呼び出す。

Windowsにはタスクスケジューラーが用意されているので今回はこれを使います。
f:id:yasay:20161130223150p:plain
毎日1時間毎に処理を実行します。
スクリプトは成功ファイルを生成して、当日に一度でも処理が成功すれば
空振りするように仕組みます。


Slackと連携する。

成功メッセージをSlackに送信して通知するようにします。
方法はいろいろありますが、今回は「Incoming Webhooks」を使って実現します。
api.slack.com
Slack連携用スクリプトにメッセージを送ってあげるだけ。

echo "Successful backup process with rsync script.
Log File Name : ${fileName}
Success File Name(=Date) : ${successFileName}
Mount Status : e=${e}, g=${g}, h=${h}, z=${z}" | bash sendResultToSlack.sh

メッセージの送信に成功しました!↓↓
f:id:yasay:20161130223210p:plain

GitHubスクリプトファイルを置きました。

具体的な処理内容については、GitHubを参照してみてください。
github.com
いけてないコードのプルリク歓迎です。


これでバックアップの仕組みが構築できたので一安心です。
大事な家族の写真も自動的にバックアップされます。

もしこの記事を見て実践したいのでしたら、
rsyncコマンドの間違いにはくれぐれも注意してください。
大事なファイルを失う可能性があります。

"--dry-run"を実行してバックアッププレビューを行い、
何度も正しいか確認してから、rsyncコマンドを実行することを
おすすめします。


今後は下記のような改善をしていきたいです。

  • Successファイルの自動削除
  • 前回のバックアップから1週間以上経過している場合に、Slackにメッセージを送信


■参考情報とか
【シェル芸人への道】Bash on Windowsを探検する - Qiita
[10分で出来る]シェルスクリプトの結果をslackに投稿 - Qiita
dateコマンドでバックアップファイル作成時にファイル名に日付_時間を付ける (LinuxとWindows用) - Qiita
rsyncの使い方 | server-memo.net
windows環境の git で改行コードの自動変換に注意 - Qiita

「Spring3入門 Java フレームワーク・より良い設計とアーキテクチャ」を読了しました。

今から本書を手に取りたいと思ってらっしゃる方は、
改訂新版が出ているのでこっちがおすすめです↓↓
honto.jp


私が今回読了した本はこちら↓
honto.jp
今更Spring3と思うかもしれませんが、買った本は読了したいのが私。
所感を残しておきます。

- 本書のターゲット
本書は今までにJavaのWebアプリケーションのフレームワークに触れてきた人のほうが理解しやすい内容になっています。フレームワークに触れてこなかった人が読んだら当たり前のように出てくる用語につまづくかもしれません。

- 250ページまでは確実に理解しておくべき内容
250ページまではSpringおよびSpring MVCの入門編になっています。
ここまでの内容はSpringで開発をする上で最低限必要となるベースの知識のため
Springを使って開発をしている方は理解することをオススメします。

特にコントローラーとビジネスロジックを分離し依存しない凹型モデルを作りアプリケーションの修正の容易さを確保することや、
システムのライフサイクルを意識したクラス構成にするという考え方は理解しておくと確実に為になる内容だと思います。

- 251ページ以降はさらっと目を通すだけでもよい内容
251ページ目以降は、Spring Web Flowの入門やStrutsとSpringの連携、
そしてデータベースアクセスのための各種ミドルウェアとSpringの連携が主な内容です。
全部読みましたが、他のフレームワークと連携する機会ってそこまであるのかなぁと疑問に感じました。
それならSpringで作り直せばいいんじゃないかと。
Spring MVCは柔軟にできているので、Strutsからの乗り換えも
ハードルが高いわけではないと思えるので。

また、Spring Web Flowも便利っちゃ便利なのですが、
主要なSpring MVCを覚えておけば基本的には大丈夫なので、
認証回りのSpring Securityとか、バッチ処理のSpring Batchとかの解説が欲しかった。
→新改訂版には盛り込まれているようです。

データベースアクセス・ミドルウェアとSpringの連携はとても参考になりました。これはミドルウェアの選定時に、蓄えた知識が発揮できると思います。
251ページ目以降は目を通すだけでもよいと書きましたが、
親切なことに、本書は連携するフレームワークミドルウェアの概要まで
しっかり解説してくれています。なので、知らなかったフレームワーク
仕様を知る機会にはなります。(Struts2とか使ったことなかった。)

本書に書かれているフレームワークミドルウェアなどを使用する機会が出来た時に、内容をもう一度振り返ることができる良書だと言えます。


Spring Frameworkの学習を始めたいのでしたら、
こちらの書籍も評判が良いので、おすすめです。
honto.jp

読みたい本はたくさんあるので、次の本いくぞーw