Pythonでできる!株価データ分析 – 森北出版

「Pythonでできる! 株価データ分析」という本を読んだので、ここでレビューする。私自身、Pythonと株価データ解析については初歩的な知識を持っていたため、この本は私にとってはサクサクと読み進めることができた。ただ、未経験者向けのPythonの入門書ではなく、Pythonの基本的な知識は省かれているため、Pythonが初めての方には入りにくいかもしれない。プログラミングが初めてという方は、不厚くない入門書か入門サイトを読んだ方が良いかもしれないが、Pythonは公式サイトが充実しているので、別の言語の経験があれば、公式サイトを都度引きながら本書を読み進めることもできると思う。

本書は、特に、株価データ解析に関するテクニカル指標やグラフの描画方法などをわかりやすく解説している。実際に株価データを使って解析するプログラムのサンプルコードも豊富に掲載されているため、自分でコードを書いて実践的な学びができる。株価の読み解き方は基礎から紹介してあるため、株価のテクニカル分析についての知識がなくても、本書で学びながら読み進めることができる。また、株価に関する知識が豊富な方にとっても、テクニカル分析の用語の厳密な意味や定義を、コンピュータが理解できるプログラミングコードで書くことができるようになり、より高度なデータ解析にも応用できる内容となっている。逆に、Pythonができてデータ解析を学びたい人にもオススメできる。

総じて、Pythonと株価データ解析に興味がある方には、初歩的な知識があれば理解できる内容であり、高度なデータ解析を目指す方にも応用できる本だと思う。

この本は「Pythonで株価データ解析をするための実践的な手法」というテーマで書かれた本で、株価のテクニカル解析についても詳しく解説されている。そのため、プログラミング初心者でも株式投資初心者でも、両方の分野に興味がある方には特に役立つ内容になっている。株式投資の基本を学び、Pythonを使って株価データを収集して、分析して、可視化するまでの手順が紹介されている。特に、株価のテクニカル指標をPythonで計算する方法については、かなり詳しく説明されているので、株式投資初心者でも理解しやすい。

本書では、プログラミングをGoogle Colaboratory上で実行している。Google Colaboratoryを使うことで、プログラミングの初心者でも簡単に始めることができ、同時に最新のサービスを学ぶことができる。Google Colaboratoryを使用すると、ブラウザ上で簡単にPythonを動かすことができる。その上、Colaboratoryの実行環境では、GPUを用いた高速演算を行う事もできる。これが無料で使えるのはとてもお得だ。

本書では「売買シミュレーション」までしか紹介されていないが、GPUを用いた高速演算の話が出たので脱線させて貰うと、この書籍で紹介されているテクニカル分析と売買シミュレーションの延長線上には、アルゴリズム自動売買が念頭にあるように思う。特に、Pythonは、最近注目されているAI(深層学習)技術との相性が抜群に良い。私の理解では、AI技術単独では、テクニカル分析から株価の予想を行うよりも、多くの指標と組み合わせることによりファンダメンタルズ分析を可能にし、複雑な戦略を学習から導く手法だと思う。脱線が続くが、私が考える自動売買の利点には、次の3つがある。

1番目に、自動売買による戦略のパフォーマンスは、過去のデータを使ってシミュレーションで評価できる。この方法により、将来的に実際に取引を行った場合のリスクやリターンを予測することができる。また、過去のデータを使ってシミュレーションを行うため、人間の感情や誤った判断によるトレードのミスを避けることができる。

2番目については、自動売買システムはプログラムに従って取引を行うため、人間の感情的な判断やトレードのミスを回避することができる。また、プログラムが失敗した場合にも、その原因を特定し改善することで、自分の戦略を系統的に強化し続ける事ができる。

3番目については、含み益を得ることよりも含み益を確定することが難しいという問題に対して、自動売買システムは機械的に売買判断を行うため、含み益を確定するタイミングを逃さない。

これらの利点は、もちろん本書で紹介されている「アルゴリズム売買のシミュレーション」にも共通する。そして、このような利点があるため、自動売買は現在、投資家やトレーダーの間で広く使用されている。

言うまでもなく、自動売買にはリスクがあることを理解し、慎重に取り組む必要があるが、適切な戦略を構築し、細心の注意を払いながらプログラムを作成することで、自動売買によって利益を生むことも可能である。プログラミングには熟練が必要だが、実践を重ねながら学習することで、自分にとって最適な戦略を見つけ、自動売買によって損失を避け、利益を生み出すことができるようになるだろう。

本書では、AIや自動売買については紹介されていないが、自動売買に繋がる基本的な知識や技術を紹介しており、自動売買に興味のある方にとっても、導入として役立つ情報が詰まっている。


この本は技術サイトに連載されていた記事を書籍化したようだ。そのおかげで、各章節ごとに話が完結していて、小さな目標を達成しながら読み進められるようになっている。コードも詳細に解説されており、初心者でも理解しやすいようになっている。

最終的には、ローソク足と5日・25日平均線のグラフを自分で描くことができるようになる。また、pythonには多くのライブラリがあり、それらを使うことで、本書で紹介されている手法より高度な分析を行うことも可能だ。

本書で紹介されているフレームワークやライブラリは、現在のPythonの主要ライブラリであるため、実践的にまとめて習得することは非常に有益だ。NumPyは数値計算用のライブラリであり、高速な行列演算などの数値計算を行うことができる。Pandasはデータ分析用のライブラリ(フレームワーク)であり、データの読み込み、整形、集計などを簡単に行うことができる。TA-LIBは、ローソク足を含むさまざまな種類のグラフをブラウザ上で描画することができるライブラリである。このTA-LIBは王道とは少し外れたライブラリかも知れないが、株価データのプロットにはとても便利だ。このほかに、データの可視化に便利なライブラリとしてMatplotlibなどがある。これらのライブラリを組み合わせることで、かなり強力な株価データ分析や機械売買戦略を組むためのグラフを自在に描画することができる。この延長線上にあるのはPyTorchやTensorflowといった深層学習ライブラリであろう。これらとの組み合わせには、より高度なスキルが必要になるため、本書で基礎を学んでから、挑戦してみることをおすすめする。

TA-LIBで可視化したNTTの株価推移と平均移動線

この図を描くためのPythonコードはGitHubで公開しておく。


本書ではGoogle Colaboratoryを利用することで、Windowsでも簡単にpythonの開発環境を構築することができた。Google Colaboratoryはクラウド上のPython実行環境で、ブラウザ上でPythonコードを実行できるため、自分のパソコンにPythonをインストールする必要がない。Google Colaboratoryを使うためにはGoogleアカウントが必要だが、無料で利用できる。

もちろん、このGoogle Colaboratory も大変便利なのだが、より本格的にプログラミングを学習していくには、手元のパソコン上にプログラミングに特化した環境を整えた方が良いかもしれない。Visual Studio Code (以下、VSCode)は、マイクロソフトが開発した、オープンソースかつ高機能なコードエディタである。VSCodeは、シンタックスハイライトや自動補完・デバッグ支援など、プログラミングを効率よく行うための基本的な機能を備えているだけでなく、拡張機能を導入することで、様々な言語に対応した高機能プログラミング環境として使うことができる。

また、VSCodeはリアルタイムにプレビューを確認できるLive Serverという拡張機能があるため、HTMLやCSSを書く際にも非常に便利である。こうした技術と組み合わせることで、グラフや文字などを高度に組み合わせたり、あるいは、独自のアプリを構築することも可能になる。これも本書の範囲外だが、本書で紹介したTA-LIBは、こうした応用にも便利なようだ。

さらに、VSCodeはGitやGitHubとの連携も非常に簡単にできるため、バージョン管理やチーム開発にも向いている。これらの機能は、パソコンでのプログラミングにおいては必須であるため、VSCodeを利用することでより便利に、効率的にプログラミングを行うことができる。

もちろん、初めての人にとっては、VSCodeの使い方を覚えるまで少し手間がかかるかもしれない。ここに時間を掛けるぐらいなら、本書で紹介されているGoogle Colaboratoryをブラウザから利用して今日からプログラミングを始める方が良いだろう。しかし、VSCodeは使い方を覚えることで、長期的なプログラミング学習や開発において非常に大きな利益をもたらすと思う。私も長年emacsという伝統のエディタ(環境)を愛用してきたが、最近はすっかりVSCodeの便利さに浸ってしまった。このVSCodeからGoogle Colaboratoryを使うこともできるし、パソコン上に(ローカルに)開発環境を構築することも可能だ。ただ、Windows での TA-Lib 導入は若干面倒だ。このサイトから Python のバージョンを調べて、該当する whl ファイルをダウンロードし、pip install でダウンロードしたファイルをインストールする。ただし、最新の Python 用のパッケージは出ていないかもしれない。

このような理由で、Pythonのバージョンをこまめに調整したいことは多い。Pythonのバージョン管理を行うのに便利な pyenv だが、Windowsで利用するには多少面倒だ。

GitHub から pyenv-win をダウンロードしインストールするには、以下のコマンドを PowerShell で実行する。

Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"

このコマンドが about_Execution_Policies の制約で実行出来ない場合、一時的にポリシーを緩和する必要がある。上のコマンドの前に

Set-ExecutionPolicy RemoteSigned -Scope Process

を実行すると良い。もちろん、ご利用は自己責任で。

Pythonでできる!株価データ分析 – 森北出版

独習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年代に適用できるのかどうか、深く考える必要があるとも述べています。

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

 

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


PHPライブラリ&サンプル実践活用[厳選100]

この書籍は、WINGSプロジェクトが技術評論社を通じて出版した、php の技術書です。

まず、php というスクリプト言語を知っていることが前提で書かれているので、php の入門書としては不向きかもしれませんが、初心者から中級者にレベルアップする段階で非常に役立つ一冊であるのではないかと思います。使い方としては、困ったときのリファレンスというよりは、予め読んでおきたい種類の本ですね。

この本では、php でできる様々なこと 100項目が、簡単なサンプルと共に紹介されています。php といえば、「お手軽に色々な事ができる Web 用スクリプト」というふうに認識されていると思いますが、まさに、その「色々なこと」をシンプルなサンプルコードで100種類紹介されています。
外部ライブラリのインストールなど、一般的な知識は冒頭部分で説明されており、各ライブラリの説明ではインストールよりも使い方にページが割かれています。インストール部分は同じようなことの繰り返しになるため、無駄を削って要点がまとめられていて、ライブラリのカタログ、リファレンスのリファレンスのような使い方ができます。また、紙面では省略されているフルサイズのサンプルコードは、Webサイトからダウンロードできるので、すぐに動かしてみたい場合も、ファイルをダウンロードしてサーバに設置するだけで動かしてみることが出来ます。

紹介されているライブラリは定番の物が中心です。「php でこんなことができる」「こんな外部サービスがある」という発見もあるので、php を使って色々遊んでみたい人、また、初心者の域を超えて実用的なサービスを始めたい人には最初に一読しておくと、今後の php の活用の幅が広がると思います。php 本来の「手軽に色々出来る」が実感できると思います。

Part 2 の Webサービス編では、php の機能というよりは、様々な Web API の紹介がなされていて、また、それを php で簡潔に使うためのサンプルが用意してあります。それぞれの API については、基本的な API の紹介と利用に留まりますが、別途 API やライブラリのリファレンスを読めば、その他の機能も同じように使えるので、この本で興味を持って、その API を勉強し始めるといったパターンもあると思います。また、php には用途のよく似たライブラリが多数存在する場合もあるので、どれを使ったら良いか分からない場合も、本書で紹介されている定番のライブラリを選ぶ、と言う使い方も出来ます。

Part 4 のユーティリティ編では、中級者でもちょっと困ってしまうような問題を簡単に解決できるライブラリが多数紹介されています。これらの存在を知っていれば、少し本格的なサービスを書く際に使える定番の小技を身につけられます。

最後の Part 6 では、もっと本格的なプログラムを書くための、現代的なプログラミングモデルを導入するためのフレームワークが幾つか紹介されています。php の「簡単に動く物が書ける」という利点は、使い手によっては構造的で分かりやすいプログラミングモデルの導入機会を逃してしまうことにもなりかねない罠ですが、ここで紹介されているフレームワークを用いれば、php でも現代的なプログラミングモデルを、共通の形で導入できます。できるはずです。
これらのフレームワークについては、それぞれが一冊の本になるぐらいの内容であるため、本書で紹介されているのはほんの導入部分だけですが、これをきっかけに、業務にも使える php の書き方を勉強してみてはいかがでしょう。
私も、これを機会に FuelPHP の使い方を勉強してみようと思います。

この本は、php を使い始めた人にお薦めの一冊です。