Home > book

book Archive

「サーバ/インフラエンジニア養成読本 DevOps編」にて Ansible 2 について書きました。

この記事の所要時間: 06

http://shin1x1.hatenablog.com/entry/gihyo-devops-ansible2

  • コメント (Close): 0
  • トラックバック (Close): 0

2015年の技術本執筆環境

この記事の所要時間: 07

http://shin1x1.hatenablog.com/entry/environment_for_writing_books

  • コメント (Close): 0
  • トラックバック (Close): 0

Laravel 5.1(LTS) を解説した「Laravelリファレンス」を執筆しました

この記事の所要時間: 07

はてなブログお試し中。

http://shin1x1.hatenablog.com/entry/laravel-reference

  • コメント (Close): 0
  • トラックバック (Close): 0

一冊まるごと Laravel な「Laravelエキスパート養成読本」が出ます

この記事の所要時間: 335

Laravelエキスパート養成読本」が、2015/04/21に出版されます。この本の執筆に参加しました。

laravel-expert-guide-book

昨今、話題のフレームワーク Laravel ですが、ようやく日本語での書籍が登場します。これまで、和訳された電子書籍の本はあったのですが、紙の書籍としては、国内初となります。

目次

目次は、下記のようになっています。バージョンは、Laravel 4 をベースにしており、新機能紹介として、Laravel 5 の内容を加えています。

Chapter1. Laravel をはじめよう
Chapter2. MVC モデルが基礎からわかる
Chapter3. IoC コンテナ、ファサード、サービスプロバイダ、Eloquent
Chapter4. Laravel 5 新機能紹介!
Special. PHP フレームワーク最新事情
Chapter5. 実践!REST API アプリケーション

Laravel 公式のドキュメントは、丁寧に書かれており、知りたい機能の解説が分かりやすく書かれています。

ただ、リファレンスとしては分かりやすいドキュメントなのですが、これから Laravel を始める人が網羅的に各機能を知っていくには、やや足りない部分があります。

本書では、Laravel とは、から始まり、Laravel を使って、Webアプリケーションを作る流れを見ていきます。それをベースに、より深いフレームワークの機能や最新版である Laravel 5 の新機能を学んでいきます。さらに、Laravel 以外のフレームワークを見て、Laravel の立ち位置を知ります。最後に、応用編として、REST API アプリケーションを題材に、現場での活用方法を知るという流れです。

この本で、Laravel でアプリケーションを作るという概念を理解していけば、より深い部分は、公式ドキュメントやフレームワークのソースから学んでいけるでしょう。

実践!REST API アプリケーション

私は、「Chapter5. 実践!REST API アプリケーション」を担当しました。

5-1. Laravel で作る REST API アプリケーション
5-2. ルーティング
5-3. コントローラ
5-4. サービス、モデル
5-5. テスト

Laravel の基本的な内容は、他の章で解説されているので、機能の紹介というよりは、実際のアプリケーション開発では、どのように機能を利用していくかという視点で書いています。私自身、Laravel 4で、AngularJS やスマートフォンアプリと連携する REST API を開発した経験を元に書いているので、現場で活用してもらえると嬉しいです。

以前、書いた自分流 Laravel 4 アプリケーションアーキテクチャをベースにしており、独自ディレクトリ構成や、レイヤードアーキテクチャを紹介しています。PHPUnit を使ったファンクショナルテストにも触れており、Laravel でテストを書く際は参考になると思います。

本章では、サンプルアプリケーションを元に解説しており、アプリケーションのコードは、Github 上で公開しています。

https://github.com/shin1x1/gihyo-laravel-book-reservation

Vagrantfile と Ansible によるプロビジョンファイルを同梱しているので、Virtualbox と Vagrant があれば、サンプルアプリケーションが動かすことができます。

予約お待ちしています!

すでに、Amazon でも予約受付が開始されています。

これから、Laravel を触ってみようかなという方はもちろんのこと、現在 Laravel を利用している方にも参考になる内容だと思いますので、ぜひ手に取って頂ければ嬉しいです!

Laravelエキスパート養成読本[モダンなPHP開発を実現するノウハウ満載!] (Software Design plus)

なお、共著者である @hirokws さんの呼びかけで、本書の印税の一部を Laravel プロジェクトへ寄付するつもりです。ありがとう、Laravel。

  • コメント (Close): 0
  • トラックバック (Close): 0

[書評] CakePHPで学ぶ継続的インテグレーション

この記事の所要時間: 939

著者の @kaz_29 さんから「CakePHPで学ぶ継続的インテグレーション」を献本して頂きました。日頃から関心のある分野なので、早速読ませて頂きました。

PHP で学ぶ継続的インテグレーション

本書のタイトルは「CakePHPで学ぶ継続的インテグレーション」です。実際、本書の中では、CakePHPアプリケーションを題材に継続的インテグレーションを行う手法が解説されています。

ただ、ここで紹介されている継続的インテグレーションの手法は、CakePHP 固有のものではなく、他のフレームワークでも転用可能なものです。

勝手なお世話ですが、書籍のタイトルとしては、「PHPで学ぶ継続的インテグレーション」の方が、良かったかもしれませんね:D

分散された情報がこの一冊に

継続的インテグレーション(CI)を行うには、あるツールさえ入れておけばできるというものではなく、多くのツールを組み合わせる必要があります。

数年前、自社で CI 環境を構築した際は、Jenkins のインストールからはじまり、PHP向けのビルドタスクの組み込み、Git リポジトリの連携、自動テストの実行、結果レポートの出力、検証など、多くの手間がかかりました。一つ一つのツールについては、公式サイトのドキュメントなどで情報はあるのですが、それらを組み合わせて、自分達の開発プロセスに合うように一つのビルドプロセスとして、インテグレートするのが大変でした。

特に、PHP プロジェクトで CI を行う際に参考となる情報が少なく、Template for Jenkins Jobs for PHP Projects が、数少ないお手本というような状況でした。

本書では、こうした CI 環境を構築するのに必要なツール群について多くの解説があります。ざっと書きだしただけで、下記のようなツールに触れられています。

  • Vagrant
  • VirtualBox
  • Chef
  • CakePHP
  • Jenkins
  • Behat
  • PHPUnit
  • PHP_CodeSniffer
  • PHPCPD
  • PHPMD
  • PHP_CodeCoverage
  • phpDocumentor
  • Composer
  • Phing
  • Capistrano

さらに加えて、CakePHP のプラグインもいくつか紹介されています。これらは、単にインストールして動かすということではなく、CI の流れで、それぞれのツールをどのように使うか、という視点で書かれています。

これまで、自分で細切れになった情報をかき集めて、ビルドプロセスを組み上げていく必要があったのですが、本書では、こうしたインテグレーションの一つの解法が記載されており、これから PHP プロジェクトで CI を行うには大いに参考になります。

すでに CI 環境を構築している場合も、それらを振り返り、改善していくための一つのパターンとして本書を参考にすることができます。

紹介されているツールを眺めてみるのも一つの面白さで、私は vagrant-chachier プラグイン をこの本を読んで使ってみようと思いました。

自分で CI 環境を作って、開発プロセスを実践

本書では、Vagrant を使って、自分の PC の中に仮想ホストを 3 つ、そして Github をアプリケーションコードのリポジトリとして利用するようになっています。

こうした環境構築では、実践する環境を作るのに手間がかかっていたのですが、Vagrant のおかげで仮想環境が楽に使えるようになったので、手軽に書籍の内容が実践できるようになりました。良い時代です。

仮想ホストは、開発環境(develp)、CI サーバ(ci)、本番環境(deploy)とそれぞれ役割が割り当てられていて、それぞれが Github のリポジトリをハブにして、アプリケーションのビルドやデプロイを行うようになっています。

全く同じ構成で良ければ、実際のプロジェクトにそのまま生かすこともできるでしょう。また、異なる構成でも CI として大まかな流れは似たものになるでしょうから、本書で得たノウハウを持って、自分のプロジェクトに CI を導入することができます。

実際に自分で手を動かして、CI 環境の構築、実践を行うことで、各ツールの役割や動きなどが実感として知ることができます。昨今は、Travis など SaaS のビルドサービスを使う場合も多いですが、自分で環境を作ってみることで、こうしたサービスもより理解が深まるのではないでしょうか。

サンプルコードの動かし方

書籍を読んで、記載されている手順を順に試すことで、CI 環境を構築することができます。はじめて、こうした環境を作るという方は、順に読み進めていくのが良いでしょう。

すでに CI 環境を利用している人は、公開されているサンプルコードを利用して環境構築を行うこともできます。私は、公開されているサンプルコードを使って、環境構築を行ないました。手順を記載しておきますので、参考まで。

事前準備

必要なツールです。以下は最低限必要になります。

  • Vagrant
  • vagrant-omnibus
  • VirtualBox

ChefDk インストール

Berkshelf を使うために、ChefDk をインストールしました。これは、Berkshelf や Knife など Chef 関連のツール群をパッケージングしているツールで、ダウンロードして、パッケージをインストールするだけでツールを使うことができます。Berkshelf を gem で入れると、すんなり行けば良いのですが、環境によってエラーが発生したりするので、こうした手間を省くために利用しました。

OSX であれば、brew cask でインストールすることができます。

$ brew cask install chefdk

サンプルコード取得

サンプルコードは、アプリケーションと環境構築でリポジトリが分かれています。

はじめに、自分で push できるように両リポジトリを fork します。

そして、環境構築のリポジトリを cakephp_ci ディレクトリに git clone します。cakephp_ci ディレクトリに移動して、アプリケーションのコードをリポジトリから、application ディレクトリに展開します。

$ git clone 環境構築リポジトリ cakephp_ci
$ cd cakephp_ci
$ git clone アプリケーションリポジトリ application

Berkshelf でクックブック取得

Berkchelf でクックブックを取得します。下記は、brew cask でインストールした ChefDk に含まれる berks コマンドを利用しています。

$ /opt/chefdk/bin/berks vendor cookbooks

vagrant up で仮想マシンを起動

cakephp_ci ディレクトリには、Vagrantfile があるので、vagrant upで起動します。3 つのホストについて、起動、プロビジョンを行うので、しばらく待ちましょう。

$ vagrant up
Bringing machine 'develop' up with 'virtualbox' provider...
Bringing machine 'ci' up with 'virtualbox' provider...
Bringing machine 'deploy' up with 'virtualbox' provider...

Composer の実行

develop にログインして、composer install を実行します。

$ vagrant ssh develop
vagrant@develop: cd /var/www/application/current/app
vagrant@develop: composer install

データベースの構築

各ホストにログインして、データベースとユーザを作成します。構築手順は、書籍の「4-3-2. データベースの作成」に記載があります。

vagrant@develop: mysql -uroot -ppassword

GRANT ALL PRIVILEGES ON *.* TO 'webapp'@'%' identified by 'passw0rd' WITH GRANT OPTION;
FLUSH PRIVILEGES;
CREATE DATABASE blog default character set utf8;
CREATE DATABASE test_blog default character set utf8;

データベーススキーマの構築

データベーススキーマは、CakePHP のプラグイン「CakeDC Migrations Plugin」を使って、構築します。マイグレーションファイルは、用意されているので、下記のように実行します。

vagrant@develop: cd /var/www/application/current
vagrant@develop: ./app/Console/cake migrations.migration run all

これで、delvelop ホストで、フィーチャのテストとユニットテストが通るようになります。

vagrant@develop: cd /var/www/application/current
vagrant@develop: ./app/Console/cake Bdd.story
vagrant@develop: ./app/Console/cake test app

さいごに

継続的インテグレーションの環境を構築して運用していくには、それなりにノウハウが必要です。これまで自力で何とかするしかなかったのですが、本書があれば、まずベーシックな構成については、構築することができます。正直、これから CI 環境を構築する人は、羨ましいです:D

できれば、データベースの構築などもプロビジョンで行うようになっていると、より自動化できて良いと思いましたが、これは読者への課題ということなのでしょう。

また、PHPCPD や PHPMD で算出される数値をベースにコードを改善していく内容がもっとあると嬉しかったです。(やや本書の範囲からはずれていきますが)

読んでいくにあたっては、その内容がどのホストで実行すべきものなのかをイメージしながら進むようにしましょう。これは実際の現場でも同じで、このタスクはどこでやるべきことなのかは常に意識する必要があります。

CI を実践するにあたって必要な情報が、ぎゅっと、まとまった 1 冊です。CakePHP に限らず、PHP プロジェクトで継続的インテグレーションを行うなら、ぜひ一度手にとってみて下さい。

「CakePHPで学ぶ継続的インテグレーション」ハンズオン

2014/11/01 に大阪で本書を題材にしたハンズオンが開催されます。講師には、著者の @kaz_29 さんにお願いしています。私もヘルプで入るつもりなので、みんなで CI を体験してみましょう。

http://devlove-kansai.doorkeeper.jp/events/15073

  • コメント (Close): 0
  • トラックバック (Close): 0

MSX Z80アセンブラでゲームが作れるようになった話

この記事の所要時間: 323

Shin x blog Advent Calendar 2013 の 12 日目です。

msx

写真の本は「MSXマシン語入門講座」という本です。この本を買ったのはもう 20 年以上前のことになります。

私にとっては、プログラムを学ぶ上で、また、何かにチャレンジする上で良い教訓を得た一冊です。

BASIC でゲームを作る

中学生の頃、ファミコンのゲームが好きだったので、その延長線上で MSX2(FS-A1)というパソコンを購入しました。

当初は、ファミコンとは違うゲームができるもの程度の認識しか持っていなかったのですが、なんとなくプログラムには興味があったので、付属していたBASICの入門書を片手にプログラムを作るようになりました。

サンプルソースを入力して、動かしてを繰り返す内に、少しづつBASICが分かるようになったきたので、次はBASICでゲーム作りにチャレンジするようになりました。

Z80 アセンブラへの挑戦

BASICで小さなゲーム(ほんと小さなゲーム)が作れるようになると、もっとちゃんとしたゲーム、販売されているようなゲームが作りたくなってきます。

そこで次にチャレンジしたのが、Z80アセンブラです。

当初触っていたBASICはインタプリタ型の言語(コンパイル不要の言語。まあPHPとかもそうですね。)で、書いてすぐ動かせるのが特徴です。入門としてはすごく良いのですが、いかんせん当時のMSXはリソースが少なく(メインメモリが64KBしかない。MB じゃないですよ。ちなみにこれ書いてる MacBook Air は、8GB です。)、凝ったことをするとBASICでは厳しくなります。

そこで、より速いプログラムが書けるように Z80(MSXのCPU)のマシン語を覚えたいと思うようになりました。

まずは勉強を、と思って買ったのが冒頭にある本です。

ワクワクして本を開いてみると、

「全く分からん。。。」

びっくりするくらい分からない。書いてある事自体はなんとなく理解できますが、それがどうなってゲームが作れるのかが全く分からない。

その後、何度か通読してみましたが、やっぱり分からない。最後には「ああ、自分にはプログラムの才能が無いんだ。」などと思い、半ば諦めて放置していました。

氷解、そして専門誌への掲載

諦めたものの、何だか分からないままというのは悔しい。しかも買ってきたのは入門の本。そして、やっぱりゲームは作りたい。

期間は開けながらですが、たまに開いて、諦めてを繰り返す内に、ある日からだんだんとうっすらとですが、イメージができるようになってきました。

何がきっかけだったかは、もう忘れてしまったのですが、いつしかすんなりと理解できるようになり、Z80マシン語(というかアセンブラですが)でゲームが作れるようになりました。

その後はゲーム作りに没頭して、またまた何度かの挑戦を経て、当時あったMSX専門誌へ掲載されるゲームが作れるようになりました。(読者投稿のコーナーがあって、みんながこぞって自作ゲームを送るのが流行りだった。掲載料も出たので、プログラムを書いてお金を貰ったのは、これが初めて。)

あとで分かったのですが、あれだけ理解できなかった冒頭の本は、本当に入門の本で、書けるようになったあとは逆に読み返さないような内容でした。

さいごに

これは無理!と思っていた事にチャレンジしてみて、やっぱり上手くいかず、でも諦めず何度もチャレンジして、そしていつか成し遂げる。

どんな事柄(難易度は主観)でも、一度でもそういった経験を持っていると、次の困難に遭遇した時も「いつかはできるようになるかも」と思って立ち向かうことができます。

その後、何度もこういった場面がありましたが、いくつかの事は実際にできるようになりました。考えてみると、いま普通にやっているようなことも、はじめはできなかったことばかりです。

まだまだできないことだらけですが、少しづつ、少しづつで良いので、やっていきたいものです。

  • コメント (Close): 0
  • トラックバック (Close): 0

Vagrantをはじめてみたい方へ「Vagrant入門ガイド」を書きました

この記事の所要時間: 337


vagrant_beginners_guide

「Vagrant入門ガイド」という電子書籍を技術評論社さんから出版しました。Kindle ストアGihyo Digital Publishing にて購入できます。

Vagrantは、まだエンジニアが中心に触っている状況ですが、いずれはWebデザイナーやコーダーの方など、サーバ構築を自分ではやらない人にも、制作するWebサイト、システムの動作検証を行う環境として利用する場面が増えていくと思います。

blog エントリなども多数あるのですが、断片的な情報も多く、また、Vagrant自身の進化が早いため、最新の環境だと上手くインストールできなかったり、動かないということがままあります。(このblogの過去エントリも。。。)

もちろん、じっくりと調べていけば解決できる問題なのですが、できれば、はじめの一歩くらいは、まとまった情報が日本語であると良いなと思い、本書を書きました。

目次

本書は、Vagrantはじめの一歩ということで、vagrantコマンドの使い方が中心となっています。順に進んでいけば、自分のPCにVargrantとVirtualBoxをインストールして、仮想マシンを起動する流れが出来上がります。

本書の内容をベースに、自らVagrant上で仮想サーバを構築していくならVagrantfileやプロビジョニングを習得していくと良いでしょう。また、誰か作ったVargrantfile(Githubに公開されているものやチームのエンジニアが作ったものなど)を使うだけなら、これでVargrantを活用することができます。

基本は入門者向けの内容ですが、すでにVargrantを使っている人向けということで、vagrantコマンドの各サブコマンドの引数や実行例を付録に収録しています。(正直これを書くためにはじめて知ったオプションもあり、個人的にも勉強になりました:D)

Vagrantの使い方は人それぞれだと思うのですが、特にWeb制作の現場では、エンジニアで無い人にも広く使ってもらえる可能性のあるソフトウェアだと思います。本書がVagrantを触るきっかけになれば嬉しいです。

なおVagrantの対象バージョンですが、今週リリースされたばかりの Vagrant 1.3.1 に対応しています。(さすが電子書籍!)

1.Vagrantとは
プロバイダ(Provider)
プロビジョニング(Provision)
Boxファイル
Vagrantfile
vagrantコマンド
まとめ

2.環境設定
VirtualBoxのインストール
Vagrantのインストール

3.設定ファイルの準備
Boxes(Boxファイル)のインストール
Boxファイルの追加
Boxファイルの確認
Boxファイルの削除
Vagrantfileの作成
Vagrantfileの生成

4.仮想マシンの起動と操作
仮想マシンを起動
仮想マシンへSSHログイン
仮想マシンの状態を確認
仮想マシンを停止
仮想マシンを削除

5.仮想マシンでWebサーバを構築

6.プラグインで拡張
saharaプラグインをインストール
saharaプラグインを使う
まとめ

7.応用(複数の仮想マシン)
複数の仮想マシンを起動
仮想マシンのエクスポート

Appendix:vagrant サブコマンド
box
destroy
halt
init
plugin
plugin uninstall
provision
reload
resume
ssh
ssh-config
status
suspend
up

PHPカンファレンス2013でVagrantについてお話します

今週末(2013/09/14)に東京で開催されるPHPカンファレンス2013で、Vargrantに関するセッションを行ないます。このセッションは本書の内容を超えて、PHPの開発現場でVargrantを活用するお話をしたいと思っています。

ちなみに「PHPエンジニア養成読本」も明日発売だったりするので、本書と合わせてよろしくお願いしますm(_ _)m

  • コメント (Close): 0
  • トラックバック (Close): 0

いまどきのPHPが分かる「PHPエンジニア養成読本」が出ます

この記事の所要時間: 142

PHPengineer_hyoshi

2013/9/13に「PHPエンジニア養成読本」というムック本が技術評論社から出ます。

この本の巻頭記事を執筆させて頂きました。巻頭記事では本書のイントロダクションとして、PHP5.3/5.4/5.5の新機能と「いまどき」のPHP開発を紹介する2章構成になっています。

PHPを取り巻く環境は大きく変わっていっています。普段からそういった変化を追いかけている人は良いのですが、日常の開発に没頭しているとついそういった動きに気づかないままということがあります。また、昔のPHPのままのイメージで止まっている人も多いかもしれません。

そこで、PHP が大きく変化した 5.3(名前空間、クロージャ、LSB)から、5.4(トレイト、配列の短縮構文、ビルトインサーバ)、最新の 5.5(ジェネレータ、finally、パスワードハッシュ関数)を第1章で紹介しています。

第2章では「いまどきのPHP開発」ということで、環境構築やフレームワークの活用、Xdebug、OPcache、PSRなど、PHP開発の現場で活用している技術や方法を書いています。

この記事をベースに、以降の各特集記事に進んでいきます。

各特集記事についてもここでご紹介したいのですが、それぞれの著者の方がblogを書かれると思うので、キーワードだけ。

Composer、フレームワーク、PHPUnit、PhpStorm、Vim、コード品質、クラウド、基礎知識といったところです。内容が気になりますね:D

ムック本なので、この一冊で全てが分かるというわけではないですが、いまどきのPHP、開発現場でのPHPを手軽に知ることができる内容になっていると思いますので、一度読んで頂ければ嬉しいです。

なお今年のPHPカンファレンスは、なんと本書発売日の翌日(2013/09/14)です!私もPHPカンファレンスに参加しますので、もし会場でお会いできれば、感想など教えてください:D

  • コメント (Close): 0
  • トラックバック (Close): 0

PHPer が「JUnit実践入門」を読んだ

  • 2012-11-20 (火)
  • book
この記事の所要時間: 62

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)」を献本して頂いたので読んでみました。

普段は PHPUnit でテストを書いているので、その本家とも言える JUnit の本は興味津津でした。

実は、今でこそ PHP 三昧の日々ですが、数年前(JDK1.3 とか 1.4 の時代ですが)は Java で開発していたこともあったので、いまどきの Java、JUnit がどうなっているか知りたくもあり、興味深く読み進めることができました。

読んでみて感じた点を挙げてみます。

1. 圧倒的なボリューム

まず目次をざっと見た時に感じたのがカバーしている範囲の広さです。正直よく一冊に収まってるなあと:D

JUnit の解説からはじまり、JUnit を使ったテストの書き方、ソフトウェアテスト・テスト技法、ユニットテストのパターン、そして JUnit のより発展的な利用方法とつづきます。

さらにより実践的な内容として、モックやスタブ、スパイ(Mockito)、データベース(DbUnit)そしてAndroidアプリのテストの書き方があります。これで十分 JUnit の本となる気がしますが、まだ終わりません。

この後、継続的テストを行うために、Mavenや 各種 VCS 連携、Jenkinsと来ます。

もうお腹いっぱいと思ったところで、とどめにテスト駆動開発、振舞駆動開発が来て、さらに18問にも及ぶ演習問題と開発環境のセットアップやEclipseの便利機能が含まれる付録で締めとなります。

450P でこれだけの内容がギュッと詰まってます。

さらに本書でカバーできない、より深い内容については、ちゃんと参考文献が紹介されています。

いや、ほんとすごい。

2. Eclipse + JUnit 環境構築の解説が嬉しい

日頃、Java を書いてない人間からするとまず面倒なのが環境構築。

本書では JDK から、Eclipse、JUnit、そして QuickJUnit などのインストール方法が付録にまとめられています。たまにしか Java を触らないので、こういうステップバイステップで環境が構築できる解説は嬉しいですね。

迷うこともなく簡単に環境構築ができました。

本書には書いてませんが、Vim 派の人は「Vrapper」を入れると幸せになります。

3. 演習内容が多い

テストの概念や用語の解説といった基礎的な解説はもちろん書かれていますが、それは必要最小限に抑えられており、それよりも実際にテストを書きながら学んでいくということに重点がおかれているように感じました。

普段テストを書いているので、概念的なことはおさらいとしてざっと読んで、実践的な箇所を試して学習していくという流れで読んでいきました。

やっぱりテストは書いて習得していくものだと思うので、これは大事です。

4. いまどきの JUnit

私が知っている JUnit が古いということもあるかもしれませんが、最新の JUnit4 の記法を用いて解説が書かれているので、いまどきのテストの書き方を知ることができました。

これまで大きく変わっていると感じたのは以下です。もしかすると PHPUnit もいずれはこういった変更が行われるかもしれませんね。

4.1. TestCase クラスを継承しない

テストクラスでは、TestCase クラス(PHPUnit なら PHPUnit_Framework_TestCase クラス)を継承するのが当たり前だと思っていましたが、本書のサンプルではどのクラスも継承しておらず、POJO となっていました。

これによりどんなクラスでもテストクラスとして実行することが可能になったので、より柔軟にテストが書けますね。

4.2. assertThat によるアサーション

これまでアサーションメソッドといえば、assertEquals や assertTrue などでしたが、本書では、汎用的に利用できるアサーションメソッドとして assertThat が使われていました。

変わったと感じたのは引数の順番です。

従来(PHPUnit)のアサーションメソッドでは下記のように「期待値」「実際の値」という順番で引数をセットしていました。

$this->assertEquals($expected, $actual);

これが assertThat では一見すると「実際の値」「期待値」という逆の順番になります。(さらに期待値はMatcherオブジェクトを指定します。)

assertThat(actual, is(expected));

これは「assert that actual is expected」という英文となるように、だそうです。

4.3. @Rule アノテーション

JUnit4.7 から追加された @Rule アノテーションについても解説されています。各テストの前処理や後処理などを共通処理として定義できる機構です。

例えば JUnit で提供されている TemporaryFolder を使うと下記のような記載をするだけで、テストメソッド内で利用できる一時フォルダが作成され、テストが終了すると自動でフォルダが削除されます。

これもいずれ PHPUnit に欲しい機能です。

@Rule
public TemporaryFolder tmpFolder = new TemporaryFolder();

5. 18問の演習問題

実際にテストを書いて学べる18問の演習問題が付録に付いています。

この演習問題には、問題だけではなく、テスト対象クラスの設計方法やテストケース、そして実際のソースコード、最後に解説と丁寧に書かれています。

それぞれの問題をこなしていくと JUnitや周辺ライブラリを1つづつ試せるような構成になっているのが心憎いです:D

実際に JUnit で書いてみるのはもちろんですし、さらにこの問題を PHPUnit で書くならどうするか、というような発展的な使い方もできそうです。(そんな勉強会をやっても良いかも)

何問かやってみたのですが、最後の「Hello World のテスト」は下記のように書くと簡潔に書ける気がしました。

ユニットテスト書くなら一読の価値あり

本書は JUnit を題材にした本なので、Java を書く人がメインターゲットだと思うのですが、テストを書くという行為や考え方はどの言語でも共通なので参考になる人は多いと思います。

ここまでテストについてまとまっている日本語の本は少なくとも PHP には無い(あったら教えて下さいm(_ _)m)ので、普段 Java を書かない人も本書でいまどきの Java や JUnit を試してみてはどうでしょう。

あ、Java な人は必読で:D

  • コメント (Close): 0
  • トラックバック (Close): 0

いまどきの技術本執筆環境 – 「CakePHP2実践入門」

この記事の所要時間: 525

共著で執筆に参加した「CakePHP2 実践入門」が2012/09/29に出版されました。



2007年に執筆した「CakePHPガイドブック(共著)」から数えて4冊目の書籍執筆となるのですが、執筆の方法やコラボレーションのツールも大きく変わりました。執筆を終えて一息ついた今、執筆環境を振り返ってみたいと思います。

2007年と今回の執筆環境をざっくりと比較するとこんな感じでした。

原稿執筆 原稿提出 連絡 issue管理 CI
2007年 Word FTP ML ML なし(Wordで確認)
2012年 Vim + Marked Github Facebookグループ Github Githubリポジトリをpollingして、Markdown+独自マークアップをHTMLにコンバートなど。

原稿執筆

原稿は Vim で書いて、Marked のプレビューを確認するという形で進めました。

Vim

原稿の形式は、Markdown+独自マークアップのプレーンテキストだったので、執筆陣は各自好きなツールを使うことができました。

Vim は普段から使っていて慣れていますし、技術本ということでソースコードを読んだり書いたりする場面が多いので同じエディタ上でそれができるのは楽でしたね。

Markdown ということで当初は専用のエディタなども試したのですが、やはり「書く」という行為に関しては手に馴染んでいるものが一番です。

Marked

Marked は Markdown 形式で書かれたファイルをプレビューするツールです。Marked でファイルを開いておくと元ファイルが変更されるとプレビュー側も連動して更新されます。

あくまでプレビューに特化したツールなので任意のエディタと組み合わせて使用することができるのが良いですね。

実は Vim + Marked の組み合わせが気に入ったので、この blog も同じ構成で書いています。

以前は Word だったので、プレビューという点では問題無いのですが、ソースコードが書きにくかったり、差分が取りづらかったりしていました。当時はそれが当たり前だと思っていましたが、やはりプレーンテキストで書けるのは慣れてる分、楽でした。

原稿提出、issue管理

Github

原稿提出やissue管理にはGithubを使いました。

執筆陣は各々原稿を書いて、Github へ push して原稿を提出するという流れでした。

git のメリットは言わずもがなですが、こちらも日常でソースコードを push するのと同じ感覚で原稿を提出できたのは良かったです。さらに原稿がプレーンテキストということで、差分を確認したり、変更履歴を見たりというのもお手のものでした。

今回は章ごとに執筆者が決まっていたので、conflict することも無いだろうということで、ブランチ分けはせずに master へpushしていました。

原稿の修正依頼や査読結果などの issue 管理も Github で行なっています。

Github の issue 管理では、commit ログに issue no を記載することで issue チケットから commit にリンクを貼ることができるので、issue に関する修正が明示できて、これは便利でした。

本書のサンプルコードもGithub上で公開する予定ですので、書籍を購入された方はご参照下さい。

連絡

Facebook

編集の方、執筆陣との連絡には Facebook グループを使いました。

ML でも良かったのですが、メールより気軽に投稿、返信ができたのでやりやすかったです。返信するほどではないけど同意や見たことを現したい時に「いいね!(Like)」で反応できるのは手軽で便利ですね。

ただ Facebook グループだとどうしても過去の発言が流れて行ったり、一つのトッピクについてコメントが大量についたときに見づらかったりするので、もし次回があればchatworkなど別のコラボレーションツールの方が良いかもしれません。

CI

CI 的な機能もいくつか用意しました。

Githubのリポジトリをpollingしており、定期的に自動実行されます。

  • PHPコードの自動lint(安藤さん作)
  • 原稿中のソースコード自動抽出(安藤さん作)
  • 原稿をHTMLへ自動変換、変換ブラウザで閲覧可能に(鈴木さん作)
  • 原稿の規約(マークアップや一行文字数等)を検証して、エラーログを出力(鈴木さん作)

特に鈴木さんが用意してくれた原稿をブラウザで確認できるツールはかなり便利でした。書式エラーなどがログとして確認できるので、これを活用して原稿の修正を行いました。いずれ公開されると思うので乞うご期待を。

今にして思うと Jenkins でこういったツール群を管理しても良かったですね。

普段のシステム開発と同じリズムで原稿を書く

今回利用したツールはどれも普段のシステム開発で利用しているもので、ソースコードを書くのと同じリズムで執筆を進めることができました。

執筆期間中に度重なるCakePHPのバージョンアップ(2.0 -> 2.1 -> 2.2)があり、リスケを余儀なくされましたが、原稿のデグレや issue の取りこぼしもなく、無事に書店に並べることができました。

CakePHP は、公式ドキュメントである cookbook が充実しており、和訳も少しづつ進んでいるのですが、日本語で書かれたまとまった情報を望む声が多くありました。この本はそういった機運を受けて執筆されました。みなさんのCakePHP開発の一助になればと思いますので、一度手にとって頂ければ嬉しいです。

最後に、セキュリティ章について丁寧な査読、ご指摘をして頂いた徳丸浩さんにお礼を言いたいと思います。本当にありがとうございました。

  • コメント (Close): 0
  • トラックバック (Close): 0

ホーム > book

検索
フィード
メタ情報

Return to page top