無限大な夢のあと

テニスとアニメが大好きな厨二病SEのブログ

【書評】10日でおぼえるJSP&サーブレット入門教室 第4版 -WINGSプロジェクト( @yyamada ) 

今回もWINGSプロジェクト様( @yyamada )で書籍レビュアーに応募させていただき書評を書かせていただくことになりました。
WINGSプロジェクトの皆様、著者の山田様ありがとうございます。
今回は表題にもある以下の書籍を献本していただきましたので、こちらのレビューをさせていただきます。

10日でおぼえるJSP&サーブレット入門教室 第4版

10日でおぼえるJSP&サーブレット入門教室 第4版

まず、書籍を読む前の前提知識に関しては、以下のレビューをご参照してください。
【書評】サーブレット&JSPポケットリファレンス -WINGSプロジェクト( @yyamada ) - スーツとギークのはざまで

それでは、書籍についてのレビューをさせていただきます。
まず、本書の特徴としては、プログラム初心者およびJava初心者であってもJSP/サーブレットを使って、Webアプリケーションを作れる点にあります。
ターゲットとしては、以下の3つがあげられると思います。
・プログラム初心者の方
サーブレット/JSPを使用したことがないJavaを少し書ける方
・新人研修でJavaのWebフレームワークを覚えたけれど、内部がどんな仕組みで動いているかわからない方

私が本書を読んでみた感想として、新人研修時代にJSP/サーブレットの部分に関して学んだこと+αを学べる内容であり、良い復習になりました。
上記であげたターゲットの方に取っては、中身のあるかなり勉強になる内容であることは間違いないです。

以下の書籍と同様に図が豊富に使用されていることもあり、とてもおすすめです。

サーブレット&JSP ポケットリファレンス

サーブレット&JSP ポケットリファレンス

図のサンプルをいくつか転載します。

JDBCの仕組み
f:id:noimpslmtbrk:20150502171635j:plain

・コネクションプーリングの説明
f:id:noimpslmtbrk:20150502171709j:plain

JDBCドライバーとデータベース接続
f:id:noimpslmtbrk:20150502173501j:plain

JDBCドライバーの種類
f:id:noimpslmtbrk:20150502173449j:plain

最後に、WINGSプロジェクト様のページからの転載になりますが、
目次についても記載させていただきます。
もし、本レビューで書籍について興味をお持ちの方は、まずは書店にて中身を読んでみることをおすすめ致します。
また、JSP/サーブレットを学ぶにあたって、Webの基礎知識を押さえたいという方は以下の書籍も併せて読んでみることをおすすめ致します。

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

目次参考URL
10日でおぼえるJSP&サーブレット入門教室 第4版 - WINGS

CHAPTER 01 JSPの基本
LESSON 01 JSPサーブレットの環境を準備しよう
LESSON 02 おぼえようJSPの基本
LESSON 03 繰り返し処理を実行しよう(1)
LESSON 04 フォームからの入力を受け取ろう
LESSON 05 繰り返し処理を実行しよう(2)
CHAPTER 02 ブラウザーからの入力を処理しよう
LESSON 06 クエリ情報を活用しよう
LESSON 07 ヘッダー情報を取得しよう
LESSON 08 クッキー情報を活用しよう
LESSON 09 セッション機能を活用しよう
CHAPTER 03 クラスで拡がるJSPの世界
LESSON 10 HTMLの予約文字をエンコードしよう
LESSON 11 日付の計算をしよう
LESSON 12 連想配列を活用しよう
LESSON 13 テキストファイルを読み取ろう
LESSON 14 カスタムログを記録しよう
LESSON 15 正規表現検索に挑戦しよう
SUPPLEMENTARY LESSON Commons Emailでメールを送信しよう
CHAPTER 04 JDBCでカンタン データベース連携
LESSON 16 MySQLをインストールしよう
LESSON 17 MySQLの基本的な操作を理解しよう
LESSON 18 アプリケーションからデータベースに接続しよう
LESSON 19 データベースに新規データを登録しよう
LESSON 20 データベースを検索しよう
LESSON 21 データベースのデータを更新/削除しよう
LESSON 22 データベースからデータをダウンロードしよう
CHAPTER 05 サーブレットの基本的な構造を学ぼう
LESSON 23 おぼえよう! サーブレットの基本
LESSON 24 JSPからサーブレットを呼び出そう
LESSON 25 サーブレットから初期化パラメーターを引用しよう
CHAPTER 06 JavaBeans導入でWeb開発の効率化
LESSON 26 サーブレットからJavaBeansを呼び出そう
LESSON 27 JavaBeansからサーブレットにデータを渡そう
LESSON 28 JSPサーブレット/JavaBeansの連携を学ぼう
CHAPTER 07 JSTL+式言語でスクリプトレスJSPページに挑戦
LESSON 29 JSTL+式言語の基本を学ぼう
LESSON 30 JSTL活用でデータベース連携
LESSON 31 JSPページからスクリプティング要素を取り除こう
CHAPTER 08 カスタムタグ、フィルタによる開発/運用の効率化
LESSON 32 オリジナルのタグを作成しよう
LESSON 33 タグファイル活用でカスタムタグ作成を効率化
LESSON 34 フィルターでログ収集をしよう
LESSON 35 デプロイメントディスクリプターでアプリケーション管理を学ぼう

スッキリわかるサーブレット&JSP入門

スッキリわかるサーブレット&JSP入門

独習Javaサーバサイド編 第2版

独習Javaサーバサイド編 第2版

スッキリわかるJava入門 第2版

スッキリわかるJava入門 第2版

【書評】サーブレット&JSPポケットリファレンス  -WINGSプロジェクト( @yyamada ) 

今回もWINGSプロジェクト様( @yyamada )で書籍レビュアーに応募させていただき書評を書かせていただくことになりました。
まずは、前回、前々回に引き続き応募を受けて下さったWINGSプロジェクトの皆様、著者の山田様ありがとうございます。
今後もどうぞよろしくお願い致します。

今回は表題にある以下の書籍を献本していただきましたので、こちらのレビューをさせていただきます。

サーブレット&JSP ポケットリファレンス

サーブレット&JSP ポケットリファレンス

まず、レビューの前に、前提として、私のサーブレットあるいはJSPを用いたWebシステム開発経験についてお話させてください。
経験としては約2年前の新人研修の課題作成時(サーブレット/JSP)、2014年12月から始まった現在のプロジェクト(サーブレット)のみで、とても短い期間となります。
それまでの間は、Webシステムではなく、画面がないIFシステムやSwingで画面を作っているようなプロジェクトばかり経験してきました。

よって、経験はかなり少ない中でのレビューとなりますので、内容についてはご容赦ください。

それでは、書籍についてのレビューをさせていただきます。
まず、リファレンスとしてやりたいことがすぐ見つかるという点では、現在行っている業務の中で使う分にはとても活用できています。
ターゲットとしては、以下の3つがあげられると思います。
サーブレット/JSPを使用しているプロジェクトで仕事をされている方
サーブレット/JSPを使用しているSpringFW当を使用しているプロジェクトで仕事をされている方
JavaでWeb開発の経験が少ない方

経験が長い方でも、リファレンスという点でかゆいところに手が届く内容なので手元においておくと便利だと思います。

個人的に使用していてうれしい点として、あまりWeb開発をしてこなかった身としては、イントロダクションという章を設けてあり基礎知識の確認ができたり、以下のコラムの内容などをはじめ、周辺技術についての補足がある点です。

コラムの目次
  Tomcat Web Application Manager
  Jasper JSP Engineの設定方法
  デフォルトサーブレットの設定
  JSPファイルの初回起動を高速化したい
  クラスローダーの仕組み
  サーブレットJSPをより深く学ぶための参考書籍

また、リファレンスではありますが、図がふんだんに使用されており、リファレンス以外の用途でも理解の再確認という用途でも使える内容となっています。
特に私は新人研修以来、Webシステム開発に携わっていなかったため、内容的に忘れている部分も多くとても助かりました。

以下、例として1つリファレンス本書にある画像を転載させていただきます。
※転載に問題がございましたら、ご指摘お願い致します!

コンパイルが必要なサーブレットコンパイル不要のJSP
f:id:noimpslmtbrk:20150207210607j:plain


最後に、WINGSプロジェクト様のページからの転載になりますが、
目次についても記載させていただきます。
もし、本レビューで書籍について興味をお持ちの方は、まずは書店にて中身を読んでみることをおすすめ致します。
また、JSP/サーブレットを学ぶにあたって、Webの基礎知識を押さえたいという方は以下の書籍も併せて読んでみることをおすすめ致します。

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか



目次参考URL
サーブレット&JSPポケットリファレンス - WINGS

CHAPTER 1 イントロダクション
概要
  サーブレットJSPとは何か
  サーブレットJSPとを使い分ける意味
  Java技術の構成
環境の準備
  JSPサーブレット利用に必要な環境
  開発/実行環境のインストール
プログラミングの基本
  サーブレットJSP活用のための基礎知識
CHAPTER 2 サーブレット API
概要
  サーブレット APIとは
基本
  サーブレットクラスを定義する
  サーブレットクラスの初期化/終了処理を定義する
  サーブレットクラスの情報を取得する
  コンテナーにログ情報を記録する
  サーブレット固有の初期化パラメーターを取得する
  サーブレット名を取得する
リクエスト情報
  リクエストデータの文字エンコーディングを設定する
  リクエストパラメーターを取得する
  複数値のリクエストパラメーターを取得する
  すべてのリクエストパラメーター名を取得する
  すべてのリクエストパラメーターを名前/値のマップとして取得する
  リクエストヘッダー情報を取得する
  リクエストヘッダー情報を取得する(専用メソッド
  複数のヘッダー値を取得する
  すべてのヘッダー名を取得する
  クッキー情報を取得する
  リクエストデータをバイナリデータとして取得する
  ファイルをアップロードする
  リクエスト属性を取得/設定/削除する
  認証情報を取得する
  セッションに関わる諸情報を取得する
  現在のセッションIDを変更する
  リクエストされたパスの情報を取得する
  リクエスト本体をReaderオブジェクトとして取得する
  独自の認証機能を実装する1
  ログアウト機能を実装する
  独自の認証機能を実装する2
  リクエスト情報を転送する
  外部ファイルをインクルードする
  サーブレットを非同期に実行する
レスポンス
  出力のためのPrintWriterオブジェクトを生成する
  HTTPヘッダーが出力済みかを判定する
  コンテンツタイプ/文字コードロケール情報を取得する
  コンテンツタイプ/コンテンツサイズ/文字コードロケール情報を設定する
  クッキーをクライアントに送信する
  応答ヘッダーを発行する
  HTTPステータスコードを発行する
  HTTPステータス/レスポンスヘッダーを取得する
  ページをリダイレクトする
  バッファーの内容を参照/制御する
  クッキーが使えないブラウザーにセッションIDを渡す
  バイナリデータを出力する
  HTTPリクエスト/レスポンスの処理をカスタマイズする
セッション情報
  セッション属性を取得/設定/削除する
  セッションを破棄する
  セッションに関わる諸情報を取得する
  セッションのタイムアウト時間を設定する
コンテキスト情報
  複数ユーザー間でコンテキスト情報を共有する
  ほかのアプリケーションコンテキストを取得する
  アプリケーション共通の初期化パラメーターを取得する
  アプリケーション共通の初期化パラメーターを設定する
  コンテナー/アプリケーションの情報を取得する
  ファイルのMIMEタイプを取得する
  指定されたフォルダー配下のすべてのファイルを取得する
  仮想パスを絶対パスに変換する
  外部リソースを取得する
  別のサーブレットJSPに処理を転送する
  JSPページの構成情報を取得する
  セッションクッキーの設定情報を取得/設定する
  サーブレットの登録情報を取得する
  フィルターの登録情報を取得する
  サーブレット/フィルター/リスナーをインスタンス化する
  サーブレットをアプリケーションに登録する
  フィルターをアプリケーションに登録する
  リスナーをアプリケーションに登録する
  Jarファイルのサーブレット/フィルター/リスナーをアプリケーションに登録する
フィルター
  フィルタークラスを定義する
  フィルターチェーン上の次のフィルターを起動する
  フィルター名/初期化パラメーターを取得する
リスナー
  アプリケーション開始/終了時の挙動を定義する
  コンテキスト属性の追加/削除/更新時の処理を定義する
  セッション生成/破棄時の処理を定義する
  セッション属性の追加/削除/更新時の処理を定義する
  セッションIDが変更されたときの挙動を定義する
  オブジェクトがセッションにバインド/アンバインドされたときの処理を定義する
  リクエスト処理開始/終了時の処理を定義する
  リクエスト属性の追加/削除/更新時の処理を定義する
アノテーション
  サーブレットの基本情報を宣言する
  フィルターの基本情報を定義する
  サーブレット/フィルターの初期化パラメーターを定義する
  リスナークラスを定義する
  アップロードファイルの上限/一時保存先を設定する
  アクセス規則を定義する
CHAPTER 3 JSP基本構文
概要
  JSPの基本
ディレクティブ
  ディレクティブとは
  ページ出力時のバッファー処理を有効にする
  ページのコンテンツタイプ/出力文字コードを宣言する
  .jspファイルの文字コードを宣言する
  エラーページを設定する
  パッケージをインポートする
  式言語を利用するかどうかを指定する
  セッション機能を利用するかどうかを指定する
  ディレクティブ宣言による空行の出力を抑制する
  ページに関する説明を記述する
  外部ファイルをインクルードする
  タグライブラリをページに登録する
  タグファイルをページに登録する
  タグファイルの基本情報を定義する
  タグファイルで利用可能な属性を宣言する
  タグファイルで動的属性を利用する
  タグファイル内で利用可能な変数を宣言する
  スクリプティング変数の名前を.jspファイルで設定する
スクリプティング要素
  変数/定数/ユーザー定義メソッドを宣言する
  JSPページの初期化/終了処理を定義する
  JSPページ内にコードを埋め込む
  コメントを定義する
式言語
  式言語とは
  Expression Languageで式を出力する
  式言語からJavaクラスの静的メソッドを呼び出す
アクションタグ
  アクションタグとは
  ページの処理を転送する
  外部ファイルをインクルードする
  JSPページでJavaBeansをインスタンス化する
  JavaBeansのプロパティを設定する
  属性値をタグ本体に記述する
  タグファイルからフラグメントを実行する
  タグ本体を定義する
  タグファイルからタグ本体を実行する
CHAPTER 4 JSP API
概要
  JSP(JavaServer Pages) APIとは
出力
  クライアントに文字列を出力する
  改行文字を出力する
  出力バッファーを制御する
コンテキスト情報
  タグハンドラークラスで暗黙オブジェクトを利用する
  エラー情報を取得する
  スコープ属性を取得/設定する
カスタムタグ
  処理すべき本体を持たないカスタムタグを定義する
  本体付きのカスタムタグを処理する
  シンプルなカスタムタグを定義する
  上位タグへの参照を取得する
  タグ本体をフラグメントとして取得する
  フラグメントを実行する
  動的属性の値を処理する
  タグハンドラークラスで利用する値を取得/設定/削除する
  タグ配下のテキストを操作する
  カスタムタグの妥当性を検証する
  タグライブラリの妥当性を検証する
CHAPTER 5 デプロイメントディスクリプタ
概要
  デプロイメントディスクリプターとは
アプリケーション
  アプリケーションの基本情報を定義する
  初期化パラメーターを設定する
  ウェルカムページを指定する
  エラーページを設定する
  特定のフォルダーに対して認証を設定する
  特定のHTTPメソッド以外のアクセスを禁止する
  認証方法を定義する
  セッションに関する挙動を設定する
  MIMEタイプを設定する
  アプリケーションの構成情報を.jarファイルに分離する
サーブレットJSP
  サーブレットクラスの設定を定義する
  JSPページの基本設定を宣言する
  JSPページで利用するタグライブラリを登録する
フィルター/リスナー
  フィルターを有効化する
  アプリケーションイベントのリスナーを登録する
CHAPTER 6 タグライブラリディスクリプタ
概要
  タグライブラリディスクリプターとは
タグライブラリ
  タグライブラリの基本情報を定義する
  タグライブラリを含んだJSPページの妥当性を検証する
タグ/関数
  カスタムタグの情報を定義する
  遅延評価の式言語を利用する
  遅延評価式でメソッドを受け渡す
  タグファイルの情報を定義する
  Function(関数)の情報を定義する
CHAPTER 7 JSTLJSP Standard Tag Library)
概要
  JSTLとは
基本機能
  変数を出力する
  変数を設定する
  変数を破棄する
  処理を分岐する
  複数の条件で処理を分岐する
  指定回数だけ処理を繰り返す
  配列/コレクションを順番に処理する
  文字列を指定された区切り文字で分割する
  外部ファイルをインポートする
  ページをリダイレクトする
  URL文字列をエンコードする
  例外を処理する
データベース
  データベースへの接続を確立する
  データベースから結果セットを取得する
  データベースの内容を登録/更新/削除する
  トランザクションを定義する
  JSTLで利用するデフォルトの接続を定義する
  データベースから取得する最大レコード数を設定する
国際化
  リクエスト情報の文字コードを設定する
  ロケールを設定する
  デフォルトのロケールを宣言する
  タイムゾーンを設定する
  配下で有効なタイムゾーンを設定する
  デフォルトのタイムゾーンを宣言する
  数値データを決められたパターンで整形する
  数値データをユーザー定義の書式で整形する
  文字列を数値に変換する
  日付データを決められたパターンで整形する
  日付時刻値をユーザー定義の書式で整形する
  文字列を日付時刻値に変換する
  ロケール設定に応じてプロパティファイルを読み込む
  ロケール設定に応じてメッセージを切り替える
  リソースの共通の接頭辞を宣言する
  デフォルトのプロパティファイルを宣言する
  指定されたロケールが存在しない場合の代替ロケールを宣言する
XML
  XML文書を解析する
  XML文書からノード値を取得する
  取得したノード群を順番に処理する
  XPath式によって処理を分岐する
  XPath式によって処理を多岐分岐する
  XML文書をXSLTスタイルシートで整形する
文字列操作
  文字列を大文字⇔小文字に変換する
  文字列に含まれるXML予約文字でエスケープする
  文字列に部分文字列が含まれているかを確認する
  文字列の前後から空白を除去する
  文字列の登場位置を検索する
  文字列が指定された部分文字列で始まる/終わるかを判定する
  指定された文字列を置き換える
  文字列を指定された区切り文字で分割する
  文字列から部分文字列を取得する
  配列要素を指定された区切り文字で連結する
  コレクション/配列のサイズや文字列の長さを取得する
APPENDIX Server.xml
概要
  Server.xmlとは
構成要素
  サーバー/クライアント間の接続を管理する
  仮想ホストを定義する
  アプリケーションの構成情報を定義する
  データソースを定義する
  ユーザー/ロール情報の保存先を定義する
  リクエスト時に独自のフィルターを実行する

JavaScript逆引きレシピ jQuery対応 (PROGRAMMER’S RECiPE)

JavaScript逆引きレシピ jQuery対応 (PROGRAMMER’S RECiPE)

10日でおぼえるJSP&サーブレット入門教室 第4版

10日でおぼえるJSP&サーブレット入門教室 第4版

スッキリわかるサーブレット&JSP入門

スッキリわかるサーブレット&JSP入門

基礎からのサーブレット/JSP 第3版 (基礎からのシリーズ)

基礎からのサーブレット/JSP 第3版 (基礎からのシリーズ)

TypeScript+Underscore.jsで関数型プログラミング 第1回 ワードカウント問題

altJSであるTypeScriptと関数型でのプログラミングをサポートするUnderscore.jsを使い、関数型プログラミングについての理解を深めていくために、様々な問題を解いていく記事を定期的に記載していきたいと思います。

TypeScriptについて簡単に知りたい方はこちらを参照してください。
公式ページ
Welcome to TypeScript

参考になる記事
TypeScriptで学ぶJavaScript入門:第1回 TypeScriptの概要 (1/4) - @IT

Underscore.jsについて簡単に知りたい方はこちらを参照してください。
公式ページ
Underscore.js

参考になる記事
Underscore.jsの入り口:連載|gihyo.jp … 技術評論社


さて、第1回はワードカウント問題を解いていきたいと思います。
※ワードカウント問題などの例は下記のかとうじゅんいちさんの問題例から拝借させていただきました。
https://gist.github.com/j5ik2o/7210762

私は下記のように解いてみました。

ここからはコードの解説をしていきたいと思います。

  • 1行目

下記のコードでUnderscore.jsを読み込んでいます。

/// <reference path='typings/tsd.d.ts' />

TypeScriptでJavaScriptのライブラリを読み込む際にはHTMLでライブラリ自身を読み込む他に、別途方定義ファイルを読み込むことが必要となります。
型定義ファイルについて、詳しくはこちら。

TypeScriptの型定義ファイルを共有しよう! - Qiita
JavaScript - WebStorm で TypeScript を始めよう!《Advent Calendar 2014》 - Qiita
TypeScriptの型定義ファイル(d.ts)をTSDを用いて管理する。 | Developers.IO

  • 4行目

ここでは関数定義をしていますが、ここではTypeScriptのアロー関数式を使用しています。
ここのアロー関数式では{}を使わない記法を用いているため、関数定義ですがreturnを書く必要がありません。
値を返すことを前提としている関数型っぽい書き方を実現できるわけです。

var countFruitsFromLines = (list:string[]) =>

アロー関数式については下記を参考にしてください。
Playground - Welcome to TypeScript

  • 5行目

ここではUnderscore.jsを使用し、chainメソッドを使用しています。
Underscore.jsは_.メソッド名という形で使用します。
chainメソッドは、チェーン記法で連続処理を行うメソッドです。
チェーン内のそれぞれの関数はchainメソッドの引数で渡されたオブジェクトを処理した結果をラッパーオブジェクトに格納して、チェーン上の次のメソッドに渡します。
チェーン内のメソッドにはラッパーオブジェクトが渡され、メソッドの1つ目のパラメータは省略されます。

__.chain(list:string[])

chainメソッドについて、説明がわかりにくかった場合は下記の記事を参考にしてください。
第3回 underscore.jsの関数とユーティリティとChaining:Underscore.jsの入り口|gihyo.jp … 技術評論社

  • 7行目

ここでは、mapメソッドを使い、mapメソッドの引数にmapメソッドで実行されるメソッドの定義をアロー関数式で記述しています。
mapメソッドは、第1引数で渡される配列/オブジェクトのそれぞれの要素に対して、第2引数で定義された関数に渡して、実行した結果を配列で返します。
また、第1引数がオブジェクト型であっても戻り値は配列となります。
そして、今回はchainメソッドにより、mapメソッドに渡される第1引数は省略されています。
splitメソッドは、JavaScipt自体のメソッドで、引数で渡された文字列を区切り文字とし、レシーバの文字列を配列にして返すものです。

   .map((_list:string[]) => _list.split(' '))

mapメソッドについて、説明がわかりにくかった場合は下記の記事を参考にしてください。
第2回 Underscore.jsのコレクションと配列とオブジェクトの機能:Underscore.jsの入り口|gihyo.jp … 技術評論社

  • 9行目

ここでは、flattenメソッドを使い、ネストされている配列に関して、ネストを解いて平坦な新しい配列にして返しています。

   .flatten()

flattenメソッドについて、説明がわかりにくかった場合は下記の記事を参考にしてください。
第3回 underscore.jsの関数とユーティリティとChaining:Underscore.jsの入り口|gihyo.jp … 技術評論社

  • 11行目

ここでは、配列の要素をカウントし、それぞれの要素とその出現回数をキー値として格納したオブジェクトを返します。

   .countBy()

この関数の存在を知る前には下記のようなコードを記述していました。

   .reduce(function (counts, word) {
    counts[word] = (counts[word] || 0) + 1;
     return counts;
        },  {})

ちなみにreduce関数は第1引数に渡された配列/オブジェクトに関して、それぞれの要素を左から順番に第2引数で定義された関数に渡して実行し、その結果を結合することで単一の値まで煮詰めると言ったようなものです。
すごく簡単に言えば、再帰関数をこの関数で置き換えできるようなイメージです。
reduceの引数で定義している関数については、JavaScriptでよく使うイディオムを使用していますので初めて見た方は調べてみてください。

reduceメソッドについて、説明がわかりにくかった場合は下記の記事を参考にしてください。
第2回 Underscore.jsのコレクションと配列とオブジェクトの機能:Underscore.jsの入り口|gihyo.jp … 技術評論社

  • 13行目

このvalueメソッドは、chainメソッドの最後に記述するもので、ラッパーオブジェクトからchainメソッドの処理結果を抽出して返します。

  .value();

いかがでしたでしょうか。
関数型がまだあまりよくわかっていなくてコードを記述しているので、もっと良いやり方があるなど突っ込み等ありましたら、コメントしてくださると嬉しいです。

JavaScriptで学ぶ関数型プログラミング

JavaScriptで学ぶ関数型プログラミング

関数プログラミング 珠玉のアルゴリズムデザイン

関数プログラミング 珠玉のアルゴリズムデザイン

TypeScriptリファレンス Ver.1.0対応

TypeScriptリファレンス Ver.1.0対応

TypeScript実践プログラミング (Programmer's SELECTION)

TypeScript実践プログラミング (Programmer's SELECTION)

グラフDB「Titan」について(2015/1/11時点)

昨日執筆した以下の記事について、今だと「Titan」っていうグラフDBもあるよというお話を聞いたので、今回を機会に少し調べて見ました。

まず、以下が公式ページ。

そして、以下が公式ドキュメント。
Titan Documentation

検索で引っかかった内容などは以下にまとめておきます。
※動かすにあたって、ハマってしまったため、今日は備忘録で記事のみまとめておきます。。。。

2013年時点の記事ではありますが、日本語の記事の中ではTitanについてわかりやすくまとめられています。

・グラフDBについてのInfoQの記事
ビッグデータ技術を用いたグラフ処理


・同じくグラフDBの記事ですが、内容にTitanが含まれています。
Facebookが重大な関心を寄せる「グラフデータベース」とは何か?

AWS上でTitanを利用したレコメンデーションの例に関してまとめられています。


近日中にインストール手順およびサンプルを動かすまでの手順をまとめる予定です。

NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)

NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)

ビッグデータを征す クラウドの技術 Hadoop&NoSQL

ビッグデータを征す クラウドの技術 Hadoop&NoSQL

7つのデータベース 7つの世界

7つのデータベース 7つの世界

Neo4jについてを導入するにあたって参考にした記事まとめ(2015/1/11更新)

プロジェクトで採用する技術で、いわゆるNoSQLと言われる分類に当たる「Neo4j」というグラフDBを使用することになり技術調査を致しました。

Neo4j, the World's Leading Graph Database

その中で導入にあたって、調査した内容や有用な記事を備忘録としてまとめておきたいと思います。
[前提]
・Neo4jのバージョン:「2.1.6」(2015/1/10時点での最新バージョン)
・実行環境 : Windows7 Professional 64bit Service Pack1 

まず、グラフDBを使うと何が嬉しいかという疑問に関しては以下のスライドが参考になります。

Neo4jの公式ドキュメントはこちら。

上のスライドに続き、Neo4jについて使えるかというのは以下の記事/スライドが参考になります。

グラフDBのNeo4jを1日触ってみた - Wantedly Engineer Blog

Neo4jでグラフ問題を効果的に取り扱おう | Tech-Sketch

グラフDBのNeo4jを1日触ってみた - Wantedly Engineer Blog

次に、グラフDBに関して詳しく知りたいという点とどんな種類があるかに関して調べるにあたって、以下のスライドがとても参考になりました。

いかがでしたでしょうか。
今回は概要についてまとめました。
実際に性能テストを実施した際のはまりどころ等は別途記載致します。

[追記]
以下、分散させようとしたらどうするかなどを調べた時にわかりやすい図を使用していた記事があったので、追記致します。

また、以下の記事についても参考にしたので、記載致します。
igreque :: Info -> Neo4jについてちょちょいと調べたまとめ
グラフデータベース、NOSQL、Neo4j
Neo4jで学ぶGraph DB入門 - omotenashi-mind

NOSQLの基礎知識

NOSQLの基礎知識

7つのデータベース 7つの世界

7つのデータベース 7つの世界

Neo4j in Action

Neo4j in Action

  • 作者: Aleksa Vukotic,Nicki Watt,Tareq Abedrabbo,Dominic Fox,Jonas Partner
  • 出版社/メーカー: Manning Pubns Co
  • 発売日: 2014/12/21
  • メディア: ペーパーバック
  • この商品を含むブログを見る
Graph Databases

Graph Databases

NoSQLデータベースファーストガイド

NoSQLデータベースファーストガイド

NoSQLプログラミング実践活用技法 (Programmer’s SELECTION)

NoSQLプログラミング実践活用技法 (Programmer’s SELECTION)

書籍「Amazon Web Services 基礎からのネットワーク&サーバー構築」

皆様あけましておめでとうございます。
今年もどうぞよろしくお願い致します。

今年の目標の一つにアウトプットを増やすことを挙げたので、
情報発信としてどんどんブログを書いていきたいと思います。

さて、今年1発目の内容は書籍「Amazon Web Services 基礎からのネットワーク&サーバー構築」についての書評です。

Amazon Web Services 基礎からのネットワーク&サーバー構築

Amazon Web Services 基礎からのネットワーク&サーバー構築


本書を選んだ理由は下記の3つです。
 1.クラウドインフラとしてのAmazon Web Services(以下、AWSとする)がアプリケーションエンジニアとして無視できないほど注目されている技術になってきているため。
 2.現在のプロジェクトでネットワークについての基礎知識が必要であるため。
 3.現在のプロジェクトでOpenStackという技術を使用するにあたって、「AWSで言うと○○」という文脈で語られることが多く、その会話についていくために必要と感じたため。

今回のレポートでは本書について以下の3つの内容を紹介致します。
 1.対象ターゲットについて
 2.本書で学ぶことができる内容の全体像について
 3.私自身がこの本書で学ぶことができたネットワーク/サーバー構築の知識について

1.対象ターゲットについて
私見にはなってしまいますが、本書の対象ターゲットについてご紹介致します。
下記の図のように、対象ターゲットは以下です。
 ・AWSの基本的な使用方法を学びたい人
 ・ネットワーク/サーバ構築の基礎を学びたい人

私自身は上記のターゲットでいうと、両方に当てはまります。
もし、上記のターゲットに当てはまる方がいらっしゃいましたら、ぜひこの書籍をご購入されることをおすすめ致します。

2.この本書で学ぶことができる内容の全体像について
まず、本書の目次を下記に記載致します。

 ≪CHAPTER 1≫システム構築をインフラから始めるには
 ≪CHAPTER 2≫ネットワークを構築する
 ≪CHAPTER 3≫サーバーを構築する
 ≪CHAPTER 4≫Web サーバーソフトをインストールする
 ≪CHAPTER 5≫HTTP の動きを確認する
 ≪CHAPTER 6≫プライベートサブネットを構築する
 ≪CHAPTER 7≫NAT サーバーを構築する
 ≪CHAPTER 8≫DB を用いたブログシステムの構築
 ≪CHAPTER 9≫TCP/IP による通信の仕組みを理解する
 ≪Appendix A≫パケットキャプチャで通信をのぞいてみる
 ≪Appendix B≫ネットワークの管理・運用とトラブルシューティング

本書で実際に構築する内容は下記となります。
f:id:noimpslmtbrk:20150104160952j:plain

3.私自身がこの本書で学ぶことができたネットワーク/サーバー構築の知識について
約8時間くらいで読むことができましたが、本書を通して新たに学ぶことができた内容は下記となります。

3-1.AWSの基本的な使用方法
  ・Amazon EC2の使用方法について
  ・Amazon VPCの使用方法について
3-2.ネットワーク/サーバ構築の基礎
  ・ルーティングプロトコルについて
  ・ルーティングテーブルの設定例とパケットの流れについて
  ・HTTPプロトコルの改行コードについて
  ・NATサーバーの構築について
  ・ファイアウォールの種類について
  ・DNSが名前解決するまでの仕組みについて
  ・ARPIPアドレスを解決する際の範囲について

上記の個々の項目は図も必要であることもあり長くなるので説明致しませんが、実際に手を動かすことで学べることが本当に多いと実感できた本書でした。
各項目についても丁寧に説明してくれていたのが読み手に親切だと感じました。
また、手順ごとにキャプチャーが載っているため、迷わず手順を進めることができました。
加えて、初めてAWSを使う方に取っては1日で本書の内容を実施すれば、料金は一切かからないということにも注目です。
※構築が終わった後すぐにEC2/VPCを破棄する必要はあります。
また、EC2インスタンスが一つであれば、以下にあるようにずっとインスタンスが起動しっぱなしでも無料のようです。
以下のURLページを参照すると、AWS の1年間の無料利用枠には毎月 750 時間分の Linux および Windows の t2.micro インスタンスが含まれることがわかります。
料金表 - Amazon EC2(スケーラブルなクラウド上の仮想サーバー) | アマゾン ウェブ サービス(AWS 日本語)




以下、3つの内容を紹介致しましたがいかがでしたでしょうか。
 1.対象ターゲットについて
 2.この本書で学ぶことができる内容の全体像について
 3.私自身がこの本書で学ぶことができたネットワーク/サーバー構築の知識について


今回は私のプロジェクトで必要となる内容と感じたため本書を読みましたが、
SIer系の普段のプロジェクトではすぐには必要となる内容ではないとは思います。
しかし、新しいプロジェクトにアサインされた際に技術検証や環境構築などでサーバー構築の仕事を任された際に前提となる知識でもあると思いますので、ぜひお時間ある時に本書を読んでみてください。
また、AWSクラウドデザインパターンシリーズは2015/02/19に第2版が出るそうなので、
こちらも併せて購入することをお勧め致します。
私も購入した後には書評を書く予定です。

Amazon Web Services クラウドデザインパターン 設計ガイド 改訂版

Amazon Web Services クラウドデザインパターン 設計ガイド 改訂版

Amazon Web Services クラウドデザインパターン 実装ガイド 改訂版

Amazon Web Services クラウドデザインパターン 実装ガイド 改訂版

Amazon Web Services 徹底活用ガイド (日経BPムック)

Amazon Web Services 徹底活用ガイド (日経BPムック)

Ruby on Rails 4 アプリケーションプログラミング 書評 -WINGSプロジェクト( @yyamada ) 

Ruby on Rails 4 アプリケーションプログラミング」の書評になります。

Ruby on Rails 4 アプリケーションプログラミング

Ruby on Rails 4 アプリケーションプログラミング

今回はWINGSプロジェクト様( @yyamada )で書籍レビュアーに応募させていただき書評を書かせていただくことになりました。
まずは、前回に引き続き応募を受けて下さったWINGSプロジェクトの皆様、著者の山田様ありがとうございます。
今後もどうぞよろしくお願いいたします。

さて、ここから本題の書評に入らせていただきます。

はじめに本書の内容を簡単に説明させていただきます。

まず、本書の内容は一言で言えば、今後Ruby on Rails4(以下、Rails4とする)で開発をしていく方は絶対に買うべきだと言えるものになっています。
理由としては、各項目がかなり詳細に説明されていて、機能の仕組みをはじめ、その機能の落とし穴までをふんだんに図を使用して説明してくれていて理解を助けてくれる内容になっているからです。

また、現時点(2014/04/30)でRails4に関しての日本語の書籍は発売されていないので、初めてRails4で開発をする人にとっては入門書であり、Ruby on Rails3(以下、Rails3とする)開発経験者にとっては前回の「Ruby on Rails 3 アプリケーションプログラミング」と同様の辞書的にも使える書籍として必須になるでしょう。

加えて、今までRails3での開発経験があった人にとってはRails4との比較等が随所に記載されていて、どうしてそのような構成になったかの理由の記載もあり、とても親切な内容になっています。
ただ、前のバージョンとの大きな変更点などを把握できる章がないので、以下の書籍の「詳解 Rails4」で確認できると全体像が掴めてより理解が進むと思います。
※Rails4.1からデフォルトで組み込まれた、コマンド実行を高速化する「Spring」についても以下の書籍に記載されています。本書ではRails4.0.2が動作確認バージョンのため記載がなかったと考えられますが、気になる方は確認してみてください。

WEB+DB PRESS Vol.73

WEB+DB PRESS Vol.73

  • 作者: 設樂洋爾,白土慧,はまちや2,大和田純,松田明,後藤大輔,ひろせまさあき,小林篤,近藤宇智朗,まかまか般若波羅蜜,Mr. O,川添貴生,重国和宏,柳澤建太郎,奥野幹也,佐藤鉄平,後藤秀宣,mala,中島聡,堤智代,森田創,A-Listers,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/02/23
  • メディア: 大型本
  • 購入: 12人 クリック: 131回
  • この商品を含むブログ (7件) を見る

次に本書の読み進め方について簡単に説明します。
本書はページの初めから最後まで順に読んでいくタイプの書籍ではないため、全体像を掴む1-3章まで読んだ後には、以下のコンテンツ等で手を動かしつつ、該当箇所を4-7章の(ビュー/モデル/コントローラ開発、ルーティング)の内容を確認していく方法をお勧めします。
※いきなり4-7章の細かいレベルを読んでいくのは、Ruby on Railsの開発経験の無い方は挫折してしまうと思います。

ドットインストール Ruby on Rails 4入門 (全28回)
http://dotinstall.com/lessons/basic_rails_v2

一橋大学 社会科学における情報技術とコンテンツ作成( @igaiga さん)
https://github.com/igaiga/hitotsubashi-ruby-2013

Ruby on Rails チュートリアル 実例を使ってRailsを学ぼう
http://railstutorial.jp/chapters/beginning.html?version=4.0



実際の開発では8-10章(テスト、クライアントサイド開発、Railsの高度な機能)も押さえていくべき内容なので、随時読み進めていく必要があります。

個人的には8-10章の内容はテストの章があったことやクライアントサイド開発の章にそれなりにページが割かれていたことから、最近の業界の流れをきちんと反映して作られたんだなと感じました。

この書籍を活用し、まずはRailsで自分のWebサービスを開発していきたいと思います。

以上、書評とさせていただきます。

※以下、参考までに本書のおおまかな構成を載せておきます。
第1章 イントロダクション
 1.1 Railsというフレームワーク
 1.2 Railsを利用するための環境設定
第2章 Ruby on Railsの基本
 2.1 アプリケーションの作成
 2.2 コントローラの基本
 2.3 ビューの基本
 2.4 モデルの基本
 2.5 Railsの設定情報
第3章 Scaffolding機能によるRails開発の基礎
 3.1 Scaffolding機能によるアプリケーション開発
 3.2 一覧画面の作成(indexアクション)
 3.3 詳細画面の作成(showアクション)
 3.4 新規登録画面の作成(new/createアクション)
 3.5 編集画面の作成(edit/updateアクション)
 3.6 削除機能の確認(destroyアクション)
 3.7 準備: 本書で使用するデータベース
第4章 ビュー開発
 4.1 フォーム関連のビューヘルパー
 4.2 文字列/数値関連のビューヘルパー
 4.3 リンク関連のビューヘルパー
 4.4 外部リソース指定のためのビューヘルパー
 4.5 その他のビューヘルパー
 4.6 ビューヘルパーの自作
 4.7 アプリケーション共通のデザインを定義する - レイアウト
 4.8 テンプレートの一部をページ間で共有する - 部分テンプレート
第5章 モデル開発
 5.1 データ取得の基本 - findメソッド
 5.2 より複雑な条件での検索を行う - クエリメソッド
 5.3 データ取得のためのその他のメソッド
 5.4 レコードの登録/更新/削除
 5.5 検証機能の実装
 5.6 アソシエーションによる複数テーブルの処理
 5.7 コールバック
 5.8 マイグレーション
第6章 コントローラ開発
 6.1 リクエスト情報
 6.2 レスポンスの操作
 6.3 HTML以外のレスポンス処理
 6.4 状態管理
 6.5 フィルタ
 6.6 アプリケーション共通の挙動を定義する - Applicationコントローラ
第7章 ルーティング
 7.1 RESTfulインターフェイスとは
 7.2 RESTfulインターフェイスのカスタマイズ
 7.3 非RESTfulなルートの定義
第8章 テスト
 8.1 テストとは
 8.2 テストの準備
 8.3 Unitテスト
 8.4 Functionalテスト
 8.5 Integrationテスト
第9章 クライアントサイド開発
 9.1 JavaScriptスタイルシートのインポート
 9.2 Asset Pipeline
 9.3 CoffeeScript
 9.4 Sass(SCSS)
 9.5 Ajax開発
 9.6 Turbolinks
第10章 Railsの高度な機能
 10.1 電子メールを送信する - Action Mailer
 10.2 キャッシュ機能の実装
 10.3 アプリケーションの国際化対応 - I18n API
 10.4 Rails の機能拡張
 10.5 本番環境への移行

※詳細は以下のURLにてご確認ください。
http://www.wings.msn.to/index.php/-/A-03/978-4-7741-6410-6/


実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング

Ruby on Rails環境構築ガイド

Ruby on Rails環境構築ガイド

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)