『基本からしっかり学ぶSymfony2入門』を読んだ

基本からしっかり学ぶ Symfony2入門

本書は、PHPフレームワークSymfonyの入門書。

Symfonyとは

Symfonyは、PHP製のWebアプリケーション・フレームワーク。PHPのフレームワークの中でも、PHPコミュニティに対する影響力の大きさという点で特筆に値する。コンポーネントの疎結合化とDIコンテナによるコンポーネントの統合、Composerによる各コンポーネントの管理など、PHP 5.3以降のPHPフレームワークの多くで取り入れられている要素は、Symfonyに端を発している(※)。

※:Symfonyが採用している設計思想はSymfonyオリジナルのものではないけれど、Symfonyはこれらの設計思想に基づいたコンポーネントを使いやすい形で提供することで、コミュニティに影響を与えている。

また、コンポーネント単位の再利用が可能であることから、Drupal等のCMSや、コマンドラインツール、さらにはSymfonyコンポーネントの上に作ったフレームワーク(Laravel)まで、Symfonyコンポーネントを利用したプロダクトも多数登場している。

Symfonyの難しさ

Symfonyは、上述したように、影響力の大きさや、コンポーネント単位での再利用のしやすさ等の良さがある一方で、重量級のフルスタックフレームワークにありがちな、機能が多いがゆえの難しさもある。

Symfonyのドキュメントはかなり充実しているが、元々の機能が多い上、柔軟性を高めるために複雑になっている機能もあり(特にSecurityコンポーネント)、初心者が簡単に使い始められるようにはなっていない。

自分としては、Symfonyを学ぶ最短ルートは以下のようになると思っている。

  1. The Symfony Bookを通読する
  2. Symfony Best Practicesを通読する

これらの分量を合わせると約250ページ程度で、フレームワークの入門資料としては適度な分量のように思える。ただ、日本人の開発者にとって問題なのは、これらのドキュメントが全て英語で書かれていることである。日本語ドキュメントは存在するが、対応バージョンが古いのが難点。少なくとも、ドキュメントを読んで理解できる程度の英語力が無いのであれば、Symfonyを採用すべきではない。悩ましいのは、たとえ英語が読める人でも、日本語を読むのに比べると英語を読む速度はかなり落ちるということ。

入門段階から英語力が必須になる点が、Symfonyを学ぶ上での大きな課題だと感じていたところに、『基本からしっかり学ぶSymfony2入門』が出た。

『基本からしっかり学ぶSymfony2入門』の概要

『基本からしっかり学ぶSymfony2入門』は、日本語で書かれた、Symfony 2.7の入門書。主著者の後藤 秀宣(@hidenorigoto)氏は、知る人ぞ知る日本Symfonyユーザ会のグル(導師)。そんな後藤さんの本ということで、事前の期待度は高かったのだけど、期待は裏切られなかった。

対応バージョンについて

Symfonyはつい先日2.8と3.0が出たばかりなので、「2.7なんて古いバージョンじゃん!」と思うかもしれないが、Symfonyの最近のバージョンは安定してきているので、2.7と3.0では、メジャーバージョンアップとしてふつうイメージするほどの違いはない。そうはいっても、3.0では一部のディレクトリ構造が変わっていたりするので(app/consoleがbin/consoleに移動する等)、本書の「写経」をする場合は、2.7の利用をおすすめする。

なお、Symfony 2.7はLTS(Long Term Support)と呼ばれるバージョンであり、そのサポートは2018年5月まで続く。本書の「賞味期限」も、同じくらいは持つのでは、と思っている。

構成

Symfony製のWebアプリケーションの作成を通して、Symfonyの使い方を学べるようになっている。Symfony公式ドキュメントにはWebアプリケーションを作るようなチュートリアルが存在せず、非公式の「ブログチュートリアル」の類も、対応バージョンが古いという問題を抱えているものが多かった。

その点、本書は2.7という十分に新しいバージョンで、丁寧なチュートリアルが行われている。

項目の面からも、初心者がまず知るべきトピックは網羅されている。

  • ルーティングとアクション
  • テンプレートエンジンTwig
  • ORマッパーDoctrine
  • ログイン機能
  • Form
  • 外部プラグイン(SymfonyではBundleと呼ぶ)
  • DIコンテナ(Symfonyではサービスコンテナと呼ぶ)
  • 設定ファイル
  • コンソールアプリケーション
  • ユニットテスト・機能テスト

内容

詳しさでは、The Symfony Bookには一歩譲るし、Symfony Best Practicesの内容が全て網羅されているわけでもない。そういう意味で、公式ドキュメントの代替になるわけではない。

しかし、公式ドキュメントの通読に比べて、本書は圧倒的に速く読める。それでいて、Symfonyを使いはじめるのに必要な点はきっちり網羅されているので、Symfony入門の敷居を劇的に引き下げている。

自分がSymfonyを学び始めた今年の7月頃に、この本が出ていれば…と思わざるをえない。これからSymfonyを学ぼうとしている人には、本書を強くおすすめする。

Windowsフォームを丁寧に学べる本(ただしC#既修者に限る) – 書評:『10日でおぼえるC#入門教室』

10日でおぼえるC#入門教室 (10日でおぼえるシリーズ)

本書はC#とWindowsフォームの入門書。Windowsフォームというのは、Windowsデスクトップアプリを作るための技術の1つ。もう1つ新しい技術としてWPF(Windows Presentation Foundation)があり、実はWindowsフォームは既に新規機能の追加は(公式には宣言されていないが、事実上)停止している。

では、Windowsフォームを学ぶ必要がないのか、というとそうでもなく、Windowsフォーム製の既存資産を流用するにはWindowsフォームの知識が必要だったりする。

本書はWindowsフォームでGUIを作る→GUIを制御するC#コードを書くというレッスンの繰り返しで学習していくスタイルになっている。C#のコードの部分はそれなりに解説があるけれど、『スラスラわかるC#』のように、言語仕様だけに的を絞って解説している本に比べると、ややわかりづらい点は否めない。

また、内容的にも、単に言語仕様を解説するだけでなく、適切なクラス設計へのリファクタリングや、堅牢なアプリケーションを作るためのユニットテストの書き方などが含まれている。ユニットテストの書き方などはとてもありがたいが、C#入門の1冊目でここまでやるのは結構つらいのでは。

『スラスラわかるC#』の書評でも書いたけど、1冊目は言語仕様に的を絞った本を読んで、本書のようなGUIの作り方を解説している本は2冊目以降に読むのがおすすめ。

Amazonのレビューを見ると、「難しい」という意見が多いが、C#の基礎を身に着けてからだと、「Windowsフォームの操作の説明が丁寧でわかりやすかった」という印象が強い。ただ、確かにコード部分はレイアウトの問題もあって、若干読みづらい。あと、これはC#の標準的なスタイルなのかわからないが、フィールドを定義するより先にそのフィールドを操作しているメソッドが結構あって、C#の言語仕様的にはOKなんだけど、読みづらいコードだなあと感じる。

レッスンごとに新しくプロジェクトを作る、というスタイルは、必然的に操作に慣れることになるのでとてもよかった。

C#の入門書としてはおすすめできないが、Windowsフォームの入門書としては(他にライバルがいないというのもあるけど)おすすめ。

C#5.0入門書の決定版 – 書評:『スラスラわかるC#』

スラスラわかるC# (Beginner’s Best Guide to Programmin)

一通り読み終えたので、感想も兼ねて書評を。

タイトルでも書いた通り、本書は、C#5.0の入門書として、日本語で読めるものの中ではベストだと思う。C#は結構言語仕様が大きくて、便利機能がたくさんある反面、覚えることも多い。

C#入門者の多くはWindowsでデスクトップアプリが作りたくて学び始めると思うけど、GUIの作り方とC#の書き方を並行して覚えるのはかなり大変。急がば回れで、まず言語仕様を押さえてから、GUIの作り方を学んだほうがよいと思う。

本書『スラスラわかるC#』の良いところは、解説を言語仕様に絞って、適切なボリュームで、十分なサンプルコードとともに説明しているところ。

言語仕様解説のコンパクトさなら『パーフェクトC#』のほうが上だけど、コンパクトすぎてサンプルコードが少ないという問題がある(その割に結構詳しいことまで解説しているので、行間を補いながら読む必要があり、プログラミング経験者でも、C#未経験の場合は読みこなすのが難しい)。

なお、表紙を見ると「プログラミング知識ゼロでも大丈夫」的なことが書いてあるが、鵜呑みにしないこと。これでプログラミング入門は相当難しい。逆に、ifとかforとかいった制御構造にやたら分量をとっていたり、オブジェクト指向とは…的な内容を延々語ってたりすることがないので、プログラミング経験者でも無駄なく学ぶことができる。

今年にはC#6.0が出るけど、それほど大きな言語仕様の変更があるわけではないので、あと2, 3年は本書の価値は失われないはず。

.NET Frameworkのクロスプラットフォーム戦略は、Javaが20年前に通った道をこれから歩むのか…って感じでちょっとつらそうだけど、C#にはUnityという強力なサポーターが生まれたし、C#の言語仕様は静的型付けのオブジェクト指向言語の中ではかなり先進的(Java8には2014年に入ったラムダ式を、C#は2007年のC#3.0でサポートしていた)。Windows環境があるなら、学んで損はない。

『自分のペースでゆったり学ぶ TCP/IP』を読了

[改訂新版] 自分のペースでゆったり学ぶ TCP/IP

3分間ネットワーク基礎講座』シリーズの網野衛二氏が、『3分間ネットワーク基礎講座』よりもさらに初心者向けにやさしく書いた入門書。

タイトルには「TCP/IP」とあるけど、物理層からアプリケーション層まで、OSI参照モデルの全レイヤーを扱っている。1冊を通して読むことで、TCP/IPでデータがネットワーク上を流れる際の「流れ」を概観することができる。

具体的には、以下のような流れ(HTTPの場合)。

  1. クライアントがHTTPのプロトコルに基づいたリクエストを発信する
  2. トランスポート層でリクエストに宛先と送信元のポート番号がつけられ、スリーウェイハンドシェイクのデータが用意される
  3. インターネット層でデータに宛先と送信元のIPアドレスがつけられ(IPパケット)、LAN内のルータに送信される
  4. インターフェイス層で宛先と送信元のMACアドレスがつけられ(イーサネットフレーム)、宛先のルータに送信される
  5. ルータにデータが届くと、イーサネットヘッダが外される
  6. ルータはインターネット層でIPヘッダを確認し、自分が宛先でない場合はルーティングを行って新しいMACアドレスをつけ、別のルータに転送する
  7. 宛先のルータにデータが届くと、イーサネットヘッダ・IPヘッダが取り外され、スリーウェイハンドシェイクのレスポンスを返す
  8. スリーウェイハンドシェイクが完了すると、サーバはリクエストされたデータを返す

逆に言えば、上に書いたような流れがすでに理解できている人は読む必要がない。第6章で流れがまとめられているので、読むかどうか迷っている人は、まず第6章を読んで、知っていることしか書いてないようなら別の本を読んだほうがいい。また、プロトコルやヘッダの実際については書いていないので、具体的なヘッダの中身等が知りたい人にも向かない。

ターゲットがきっちり定まってて、対象読者なら読めば学びがあるし、読む必要が無い人は読まずに済ませられるという点で、かなり良書だと思う。

また、随所に「○○を忘れてしまった人はxxページ参照」というリンクがちりばめられているので、ゆっくり読んで前に学んだ内容を忘れてしまっても大丈夫。本の作りは、技術書というよりも学習参考書に近い。

『AngularJSアプリケーション開発ガイド』を読了した

AngularJSアプリケーション開発ガイド

AngularJSの開発メンバーが書いているだけあって、「なぜ、AngularJSを使うのか」という部分の動機付けはばっちり。また、2章まで読めばAngularJSの全体像がつかめる構成になっていて、ここも非常に良い。一方、フロントエンド技術という移り変わりの激しいものを扱っている書籍という限界から、2014年12月現在、既に古くなっている部分も結構ある。第3章のyeoman関係は、現在では全く役に立たない。

そういった事情から、良い点もあるのだけど、他人にお勧めはしづらい。会社に1冊置いておいて、AngularJS入門者にはまず2章まで読ませ、その後『AngularJSリファレンス』を渡す、といった使い方が良いのでは。

ちなみに、本書の改訂版(?)である『AngularJS: Up and Running』も既に発売されている。本書の内容をアップデートし、さらに加筆したものらしい(ページ数が200→300に増えている)。