独習PHP 第4版

twitterで散々呟いているとおり、私はphpが大好きだ。Webだけでなく、CLIスクリプトとしても大いに使っている。

phpは、pythonと同じぐらい好き嫌いが分かれる言語ではないかと思う。まず、その普及率の高さ、そして、良くも悪くも「C言語とシェルスクリプトといった、多くの人が知っている知ってる構文で書ける」タイプのインタプリタだからだ(こう言いきってしまうと各所よりマサカリが飛んできそうだが)。誰でも簡単に書けるが故に、私のようなにわかプログラマーがクソコードを量産したせいで、少なくないプログラマーから敬遠される言語の一つになってしまったが、これはphpが悪いのではなく私たちクソプログラマーのせいである。(一方、pythonは、逆の意味で好みが分かれそうだ。)

そんなことはさておき、本書を語る上で最も象徴的だった部分を紹介する。なお、このレビューを読んでいるという事は、phpを多少なりとも(たとえば、バーション 5.4あたりで)使ったことがあると思う。以下のコードを見て欲しい。

$bool = ( ‘X’ == 0 ); // true or false?

この条件式はどうなるだろうか。実はこの「==」演算子の挙動は、php7.4で変更されている。

php7.4やphp8で追加されたり変更されたりした箇所は多く、こうしたエッセンシャルな部分にも及んでいる(このあたりが第4版での主たる加筆分のようだ)。本書は、こうした「最新のphp」を、入門書よりも深く学べるように書いてある。

phpは公式リファレンスが充実しており、また、構文も非常にわかりやすい(と思う)ので、このような本は必要無いと思う方も多いかもしれない。実を言うと、私もこの本を手にするまで、自分のphpの知識では、この本から学ぶことはそう多くはないのではないかと高をくくっていた。本書を手に取ってパラパラとめくった感じでは、その予感は的中したかに思われた。しかし、一から読んでいくうちに、その認識は変わっていった。php7.4やphp8で、結構、知らない拡張や変更が多く成されていたのだ。

phpはハードルが低い反面、なかなか綺麗なコードが書きにくいという裏の面もあるため、本書が紹介する「最新のphp」を学び直し、よりコンパクトで安全なコーディングができるようになると素晴らしい。特にphp8はJITを搭載して実行速度が一段と速くなっており、最新のphpを知る事で「速い・短い・わかりやすい」プログラムが書けるようになる。


もちろん、プログラムは、コンパクトに書けば良いというものではなく、これは本書でも「こうも書けるがオススメはしない」という紹介の仕方もされている。人によっては二項演算子の使用すら拒む人も居るので、どこまでコンパクトに書けば分かりやすいかはその時々で変わるが、私は標準的な記法内であればコンパクトな書き方が好みである。ただ、このあたりは参加するプロジェクトによっても基準が異なるため、実践では色々な書き方を熟知しておけば、どんなプロジェクトに参加しても困らないようになる。

「phpを書ける」から「phpを仕事に使える」までステップアップされてくれるのが、この「独習php 第4版」だ。本書の導入部分にはモダンな環境構築にページが割かれており、標準クラスライブラリでは、豊富なライブラリをきちんと管理する方法も紹介されている。また、データベース連携の章ではMySQL(MariaDB)の基本的な知識を、RESTクエリの章ではHTTP通信の基本的な知識を紹介するなど、入門書よりはより実務レベルの知識を教えてくれる。もちろんこれだけで幅広いphpの周辺技術を理解することはできないが、phpから使う上で必要な仕組みは理解できるレベルで書かれている。より深く学びたい場合は、本書で得た知識をとっかかりに専門書を揃えたら良い。

「オブジェクト指向」の章では「phpは必ずしもオブジェクト指向で書かなくても良い」としながら、多くのページを割いて説明しており、これも実務レベルで非常に役に立つ知識であった。phpのクラスはC++のそれと似通った構造をしているが、phpならではの部分を詳細に紹介してあるので、他の言語でclassの使い方を覚えて、phpでもなんとなくでclassを使えてる人には、特に得るものが大きい。

他方、各章のおわりに「練習問題」があるのだが、資格試験の勉強ならまだしも、実務レベルを目指す本書にはややそぐわない印象を受けた。もちろん邪魔になるわけではないので、好みに合う人は確認がてら解いてみるのも良いかもしれない。私は、この本は入門書ではないので、一度読んだ後、自分なりに実務レベルを想定したコードを書きながら、リファレンスとして必要な箇所を読み返す使い方のほうが、より強力なバイブルとなる。


総じて、本書は650ページ近くあり、かなり分量が多い。しかし、読みやすくわかりやすい文章で、意外とさらさらと読める。ところが、サンプルコードから学べることも多く、サンプルコードもしっかり読み解きながらとなると、それなりにまとまった時間が必要だ。冒頭に挙げたようにphpはクソコードでも動いてしまう柔軟性があるため、綺麗なコードをじっくり見ることも実務レベルにステップアップするためには重要だ。命名や記法など、本書のサンプルコードは公式規約に則って書かれているため、これを真似て自分のコードバリエーションの幅を広くし、現場で活躍する基礎知識として欲しい。本書は、それを「独習」できる良書だ。

独習PHP 第4版


花房孟胤「予備校なんてぶっ潰そうぜ」

自分のサービス(仕事)で社会を変えてやる。そう本気で思って行動したことがありますか?

これは、コミュニティ型電子予備校のさきがけであった「manavee」の立ち上げと成長に纏わる、学生起業の顛末を生々しく本人が語った本でした。manavee は、継続不能が宣言された今でも、日本の教育格差を根本から変えうる素晴らしいサービスアイデアだと思います。また、この本を読んでも、その立ち上げや運営に相当な落ち度があったとは思えません。ただただ、こうした思想型ベンチャーと「収益化」の難しさ、「収益化のプロと一緒に立ち上げる難しさ」を感じました。

学生だから考えが甘かった、とも言えるかもしれませんが、アイデアを思いついて実装していく段階では、企業であっても似たようなものだと思います。むしろ、経営体力のある大手企業の方が、最初の採算性など考えずに始められるのではないでしょうか。資金力も無い中で突き進んだ彼の行動力は一流です。そして、教育格差を解消するという大義名分も非常に素晴らしいものです。学生のうちは2~3年費やしてもまだまだ若いので、こういう事を思いついて、行動力があるなら、生まれ変わってもまたやるべきだと思います。

講義をする先生もボランティア、視聴する生徒も無料で視聴できる、ある意味理想の経営ですが、収益化する道筋が見えません。これは、私もビジネスコンペでよく言われることなので、自分のことのように思えました。しかし、大きな理念があるなら、しばらくはそれで突き進めますし、ついてきてくれる人もいます。しかし、規模が大きくなって固定費が大きくなり、参加者のモチベーションもそれぞれとなってくると、これは、ビジネスとして企業体にまとめる段階がやってきます。ここで大事になってくるのが収益化です。収益が上がるから色々な人をまとめることができ、継続可能なビジネスとなります。色んな困難にうまく対処しつつも、こうした変化に対し消極的でありすぎたのかもしれません。

視聴者・ボランティア講師・コアスタッフ・その他関係する方々を、もっとうまく「巻き込む」こと、方々の意見をもっともっと取り込むことの重要性を改めて認識させられました。私も、今までのプロジェクトの中で、うまく力を生かし切れなかった、うまく巻き込めなかった「協力的な人たち」が沢山いましたし、こと、お金に関しては決断できなかったこともありましたので、このあたりは非常に共感できるものがありました。成功している人は、このフェーズで早々と資金を調達し(或いは親が出資したり)ているように思えます。しかし、彼のようなスモールスタートは、決して悪手ではないはずです。

うまくやれば、うまくいったかもしれません。しかし、これを進めれば、やがては既存の予備校グループに組み入れられてしまう結果に終わったように思います。視聴者からも最小限の費用は取ろう、最小限と言っても少しは利益を上げないと継続できない、そうしているうちに、潰そうと思っていた予備校そのものになってしまう未来だった様にも思います。教育格差をなくすのか、教育格差を少し縮めるのか、これは大きな選択です。よく考えてみれば、格差をなくすことはできないので、「どの程度縮められるか」という落としどころを探るしかないのですが、「教育格差をなくす」にこだわり「予備校をぶっ潰そうぜ」と突き進んだのは潔くもあります。

また、支えてくれる女性の存在が、いかに大事なものかも教えてくれます。彼女は、彼を、というよりもmanaveeを好きだったのだと思いますが、彼にとっては大きな存在だったのだと思います。無条件で支えてくれる人が一人いれば、人間は結構がんばれるものです。ただ、先頭を行く人間とは孤独なもので、もっと色んな人の力をうまく借りる努力を、最初のうちからもっと組み込まないといけませんでした。

文体も読みやすく、一気に読める分量です。運営者と共感者の人間関係を中心に、組織の成長と成熟が生き生きと(生々しく?)書かれている良本です。


技術評論社さんより、書籍「改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで」を頂きましたので、ここでレビューを書きます。

知ってるようで知らない JavaScript こと ECMAScript。AngularJS などがでてきてから、もうブラウザのおもちゃではなくなっていましたが、それでも本格的な開発には、TypeScript などの、もう少し厳密な上位言語を使うことが多かったと思います。しかし、それも今年でおしまいになりそうです。この本で紹介されている、ECMAScript2015(JavaScript6)が規格として定まり、既に最新のブラウザの多くが対応しているからです。

この本では、ECMAScript2015 で新たに加わった部分を強調しつつも、互換性を持ってすぐ使えるサンプルコードで紹介されています。おそらく、全てのブラウザが完全対応した暁には、このあたりも完全に最新の ECMAScript2015 で書き直された再改訂版が出版されるかも知れません。

「本格入門」と、本格的なのか入門なのか、どっち!? と思ってしまいますが、JavaScript を、HTML の飾りではなく、アプリケーション言語として使う場合の入門、という位置づけだと思います。

例えば、「http:」を「https:」に置換したいとき、

function replaceURLsecure ( str ) {
  str.replace(/http:/,'https:');
  return str;
}

なんて野暮ったい関数を作ったりしていませんか?

JavaScript では String もオブジェクトなので、String クラスを拡張して、

String.replaceURLsecure = function() {
this.replace(/http:/,’https:’);
}

と書いてやるのが、JavaScript的なオブジェクト指向なんだと思います。

もし、この関数を広く使いたいなら、String.prototype に加えてやりましょう。

この本は、各所の説明がかなり低級な所まで掘り下げて説明されています。特に、JavaScript は、C言語や C++ の出来る人にとっては、JavaScript は、わかった気にさせておいて、実はもう一段罠がある言語とも言えると思います。C言語を理解している人にとっては、この本の掘り下げた説明は、スムーズに頭に入ってくると思います。そして、この Number オブジェクトこそ、JavaScript は全てがオブジェクトなんだという基本構造への入口だと思います。

この本では、JavaScript できちんとクラスを書く、きちんとオブジェクト指向のプログラムが書けるように、「本格入門」の名に恥じない基本がしっかり書かれています。プログラミング入門ではないので、何か言語を知っている人、特に、C++ や Java のクラスを知っている人向けに書かれているように思えました。JavaScript も Java のように書けたら、と思っている人には、この本で、JavaScript でもちゃんと書けますよ! と言えると思います。オブジェクト指向の実装は C++ のクラスの概念とは大きく違いますが、その違いをうまく説明してくれています。オライリーの分厚い本(サイ本)にももちろん同じ事がきちんと書いてありますが、私にはこちらの説明が非常にわかりやすかったです。この本を読んだ上で、オライリーの本を脇に置いて、AngularJS などに挑戦していけば、最短距離で本格的な JavaScript 開発が始められそうです。

ECMAScript2015 は最新の言語ですが、それでも JavaScript そのものは古い言語なので、色んな互換性を引きずっています。過去、様々なブラウザが群雄割拠していたときの名残か、同じような事を複数の書き方で表現でき、その振る舞いが僅かに異なるケースが結構あります。この本の中では、こうした書き方のバリエーションと、その際についても逐次書かれていたり、今ではお薦めできない書き方も教えてくれるので、JavaScript をきちんと書きたい人、いや、きちんと書いて欲しい人(私だ!)に読ませるべき一冊だと思います。特に、C言語はポインタのポインタまで扱えるのに、JavaScript も長大な main 関数でしか書けない人は、この本を読めば、今日からクラスライブラリを書けるようになるはず。

この本の中でメインに使われているブラウザは、新しめの Chrome(バージョン51以降)で、読んでいるうちに開発者ツールの使い方も自然に分かる様になります。コードエディタも Visual Studio Code を用いるなど、これを機に最新の開発環境を整えたい方にもお薦めの内容になっています。最新のテスト環境やドキュメント文法など、大規模なチーム開発や github での共同開発では避けて通れないモダンな開発スタイルも紹介されているので、vi で html ファイルに <script> を直書きして、若いエンジニアから顰蹙を買っている方(私だ!)には本当にお薦めです。

初_改訂新版JavaScript本格入門_オビ
改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで


AngularJSアプリケーションプログラミング技術評論社さんより出版されている「AngularJS アプリケーションプログラミング」を、WINGSプロジェクトさんの書籍レビュアーに応募し、献本頂きましたので、レビューいたします。私はWebシステム開発の専門家ではないので、間違いがあればご指摘頂ければ助かります。

最近のリッチなWebサイトは、もれなく何らかのフレームワークを用いて作られています。言語とフレームワークが一体となっているJavaとは違い、perlやphpなどの柔軟なスクリプト言語においては、その柔軟さ故に大規模なシステムを一貫したルールに則って開発していくのには不向きでした。そのうち、サーバ側の処理能力も高くなってLAMP(perからphp)が台頭してきたこともあり、コンテンツを一貫した見栄えで供給できるCMS(XoopsやWordpress等)が登場し、より複雑なコンテンツを体系定期に設計・実装していくためのフレームワーク(CakePHPやFuelPHP等)が登場しました。

このAngularJSは、こうした大規模システムを構築するためのフレームワークの一つです。ただし、これまでのフレームワークと違い、クライアント、つまりブラウザ上で動作するJavaScriptのフレームワークです。JavaScriptは、多くのブラウザ上で動く唯一の言語ですが、私から見るとかなり癖の強い言語で、ある意味柔軟ではありますが、とても大規模なシステムを構築するには向いているとは言えません。ですから、登場からかなり長い期間、JavaScriptは不遇の時代を過ごしましたし、2010年代になって脚光を浴びた際も、jQueryのような、ピンポイントの利用に限られていました。

ところが、その後スマートフォンの普及によって、クライアントサイドで動くアプリケーションでも、複雑で洗練された処理が求められるようになってきました。当然、Webシステムに対してもその価値観が及びはじめ、とても生産性が高いとは言えないJavaScriptで、大規模で系統だったシステム開発への要求が高まってきました。

こういったなかで登場したのが、このAngularJSです。(大きく分類すれば)サーバサイドのフレームワークに広く使われているMVC型のフレームワークをJavaScriptに導入したもので、多くの処理をクライアント側でやってしまおうという、大胆な試みです。このあたりの基礎的な背景も1章で触れられています。類似のフレームワークの中ではやや後発ですが、シリコンバレーでは確実に本命視されているフレームワークです。特にAngularJSはフルスタック(必要な全ての機能を体系的に提供する)フレームワークですので、サンプルコードの中には、非力なマシンだと若干重い事もありました。幸い、プロセッサの処理速度や、ブラウザの実行エンジンの高速化、データ回線の高速化は日進月歩で進んでおり、かなり高度でリッチなシステムも、クライアント側で処理出来るようになっていくと思われます。むしろ、旧来のように、入力を反映させるために「送信」ボタンを押し、POSTをサーバでの処理を経て結果が返ってくるほうが、利用者にとって不便を感じる時代になってきています。また、ブラウザの開発者ツールも充実してきたので、場合によってはクライアントサイドで構築する方がデバッグがやりやすい時代に入ってきています。

AngularJSは、包括的なフレームワークで、jQueryやjQueryUIのような機能なども含めて、アプリケーションに必要なフレームワーク一式を提供します。そのため、その機能は多岐に及んでおり、この本もかなりの分量になっています。正直に言うと、最初の方で簡単なフォームを操作するだけで、なぜこんなに面倒な事をしなければならないのか、jQueryならもっと簡単に、直感的に書けるじゃないか、と思ってしまいました。しかし、それはAngularJSの表面しか見えてなかったからでした。「JavaScriptできちんとしたモダンなプログラミングモデル(例えばMVCモデル)を採用して大きなシステムを構築する」という、素人目には無理難題に挑戦しているのがAngularJSなので、コーディングルールが多いです。本書も見た目の分量は多い(本文で497ページ)ですが、それを一つずつ過不足がなく、無駄なく分かりやすい説明が成されているのが本書でした。これを一冊読めば、かなり高度なサイトも構築できるようになる基礎を身につけられるようにできています。

一方で、JavaScriptは癖が強く、あまり馴染みの無い特徴を多く持っています。jQueryの時代は、そこまで高度な設計はプラグインの作者に任せておいて、利用者はワンラインのおまじないを書いて目的を達することもできました。ですが、AngularJSを使うほどのシステムになると、JavaScriptの細かな動作仕様について知っておかなければ、なぜこういう動作をするのか、なぜこういう「迂回路」のような書き方をしなければならないのか、理解できない部分が多くありました。また、JavaScriptによる制約なのか、AngularJSの設計思想による制限なのかも分からない箇所もありました。もちろん、これは私の勉強不足が原因ですし、そこから説明してたらとても紙面が足りません。言うなれば、本書を読むための「JavaScript入門」がもう一冊あっても良いレベルだと感じました。もちろんJavaScriptの入門書やリファレンスは沢山ありますが、AngularJSの思想は、JavaScriptそのものの思想とはかなり違っていて、むしろそこを埋めるためのフレームワークであると思いますので、本書を理解するための入門書から読みたいと感じました。

本書は「コピペでHello Worldがつくれるよ」という表面上の話だけでなく、フレームワークの構造から、暗黙で動いてるコネクタの仕組みまで詳しく説明している専門書であると言うことです。テーマごとに整理されているので、最初のうちはリファレンスとしても使えるでしょう。本質的な部分を「ここはこういうものです」と誤魔化さずきちんと説明してあるので、フレームワークの裏の挙動をきちんと理解したい、そう思わせる技術書です。

また、後半では、今や必須とも言える「テスト駆動型開発」に必要なユニットテストの自動化や、多くのプラグインによるリッチなUIの実装まで紹介されております。このあたりまで読んでいくと「jQueryでやれば良いじゃん」とは思わなくなってきます。また、本書は入門書から実践書の範囲をしっかりカバーしており、その思想や動作原理を誤魔化すことなくきちんと説明しています。きちんと説明されたら、きちんと理解したい、と思ってしまうのは当然で、それだけ作り込まれた内容であると言えます。JavaScript中級者が、本格的なシステムを構築する際の最初の書籍としてとても良い本です。

同じJavaScriptをベースにしたサーバサイドのnode.jsの開発の勢いは衰えることなく、ECMAScript6 も制定されました。こうしている間にも、AngularJS2 がアルファ版をリリースしていますし、JavaScriptの欠点を補うため、TypeScriptを採用しています。WebSocketのような、粒度の小さい逐次通信技術も発展していますし、AngularJS2とTypeScriptは、今後の大規模Webサイトの本命になるかも知れません。ですが、これはもう少し先の話になりそうですので、ここでAngularJSの基礎を押さえておいて、来たるべき事態に備えておくのは悪くないと思います。

AngularJS2では、双方向バインディングの見直しや、より厳密なモデル化の進化など、より洗練されたフレームワークになりそうですので、AngularJS2が登場した際には、本書のAngularJS2対応版がいち早く読みたいです。また、このレビューの中でやたらjQueryと比較してしまいましたが、本書を読めば分かる様に、本来の目的が全く違います。jQueryと合わせてAngularJSを使う事もできます。カバーする範囲が全く違うのです。また、最近流行のスマートフォンアプリなども、ManifstJS等と合わせて構築できそうな気がします。
AngularJSアプリケーションプログラミング

  • 難易度 : 中級
  • 取っつきやすさ : ★★★
  • 内容充実度 : ★★★★★
  • 読みやすさ : ★★★★
  • 最新テクノロジ : ★★★★★

シグナル&ノイズ 天才データアナリストの「予測学」
the signal and the noise  –  why so many predictions fail – but some don’t

この本は、ブルックリンの統計家 Nate Silver がまとめた、予測と予想についての本です。原題の副題である「why so many predictions fail – but some don’t」 ~ なぜこんなにも多くの予測は外れるのに、いくつかの予測は当たるのか? というメッセージが、先の読めない世界で経営判断を迫られる経営者の不安につけ込んできますね。シカゴ大学で統計学を修めた彼は、定量的な推定を得意としつつも、そのパラメータとして多くの定性的な要素を組み込むことで、MLB で活躍する選手を見出したり、アメリカ大統領指名選挙の結果を高い精度で予測することに成功しました。

なんといっても、1978年生まれの彼は、私と同い年。これが一番の驚きでした。

本書で紹介されているベイズ推定は、現在のビッグデータ解析に必ずと言って良いほど使われる基本的な統計手法ですが、本書では、このベイズ推定を予測手法の軸として使っています。この著者がうまいのは、定量的なパラメータから定量的な確率を推定するベイズ推定を、定性的にしか評価できない経済学や疫学・安全保障といった分野に応用し、彼なりの手法で成功しているところです。

統計的手法を得意とする人は、様々な相関係数から、指標と予測値を関連づけようとしますが、現在は意味のある物からあまり意味のないものまで無数の指標が氾濫し、情報の総量は増大しているが、その S/N 比は著しく低下していると述べています。1万個の指標があれば、偶然では99.9%起こりえないほどの強い相関も、偶然で10個は生じてしまいます。その中でいかに有用なシグナルを見つけ出し、推定に役立てていくのか。実験物理学をやってきた私には経験的に体感してきたことも多くあり、それらを体系的に理解することが出来ました。また、経済や災害・テロや疫病の脅威についても、物理学の熱分布やべき乗則、レビ―統計的なロングテイルが存在し、物理学の知識の応用範囲は幅広いな、と、改めて感じました。

また、経済学において興味深いのは、1950年から1990年代のおおよそ半世紀にわたって、多くの分野で様々な統計が取られるようになってきましたが、幾度かの石油危機があったとはいえ、(アメリカを中心とする)世界的な好景気が長く続いた特異な半世紀であったであろう事を忘れて、その傾向を2010年代に適用できるのかどうか、深く考える必要があるとも述べています。

ビッグデータ解析の有用さと、宿命的な欠陥を、多くの具体的事例から紹介しているこの本は、これからビッグデータ解析に乗り出そうとしている方には、一読の価値があります。抽象的な事柄を、具体的に書きくだしてくれているので、ビッグデータの扱い方の方向性を決める初期の段階でかなり役に立つとおもいます。極基本的な数学の知識が必要です。

 

英語に自信のある方は原著でどうぞ。経済用語や疫学用語など、馴染みの無い単語が多いので、章が変わるごとに少し難儀するかもしれません。