プログラマになりたい

おっさんになっても、プログラマでありつづけたい

今どきのサーバ/インフラの構築の仕方。"サーバ/インフラ徹底攻略 (WEB+DB PRESS plus) "

f:id:dkfj:20141028062740j:plain

 10/30発売の「サーバ/インフラ徹底攻略 (WEB+DB PRESS plus) 」を、@imai_factoryさんに献本頂きました。ありがとうございます。まだパラパラめくっている状態ですが、最近のサーバ/インフラの構築・運用方法の潮流について、これ1冊で解る内容になっていて面白いです。

サーバ/インフラ徹底攻略とは?



 WEB+DB PRESSに掲載されたサーバ/インフラ関連記事を再編集したものです。2013年後半から2014年の記事が中心となっているので、取り扱うトピックスとしてもホットなものが多いです。かつ、ある程度時間が経っていることもあり、数ある類似の技術の中で定着しつつあるものが選ばれている印象です。

章ごとの感想


[入門]コードによるインフラ構築

 入門Chef SoloによってInfrastructure as Codeの概念を一気に普及させた@naoya_itoさんによるコードによるインフラ管理の話です。ChefとVagrant、Serverspecを利用して、実践例を解説しています。適度な難度のものを丁寧に説明されてるので、初めての人にちょうど良いと思います。私も、入門Chef Solo片手に動かしながら覚えました。
 ちなみに、この本は章ごとに技評の本の宣伝がされています。この章の末の紹介書籍は、この2冊です。納得です。

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

Amazon Web Services最新活用

 この章は、Amazonが誇るソリューションエンジニア(SA)陣による、AWSの紹介です。25ページ程の枠の中で、AWSのサービスの概要と概念、主要なサービスの紹介をポイント抑えて説明しているところは流石です。あらには、構築自動化という本書のテーマに沿って、CloudFormationとChefの組み合わせなど実践的な内容まで載っています。これからAWSをやってみようという人には、30分くらいでだいたい解るという内容になっています。流石です。
 章末の紹介書籍は、下記の2冊です。クラウドを支える技術は、Googleのクラウドの話なので苦渋の選択だったのではと思います。意外なことに、技術評論社さんからAWS関係の書籍でてないっぽいですね。

クラウドを支える技術 ―データセンターサイズのマシン設計法入門 (WEB+DB PRESS plus)

クラウドを支える技術 ―データセンターサイズのマシン設計法入門 (WEB+DB PRESS plus)

  • 作者: ルイス・アンドレ・バロッソ(Luiz André Barroso),ジミー・クライダラス(Jimmy Clidaras),ウルス・ヘルツル(Urs Holzle),Hisa Ando
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/09/26
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (1件) を見る
コンピュータアーキテクチャ技術入門 ~高速化の追求×消費電力の壁 (WEB+DB PRESS plus)

コンピュータアーキテクチャ技術入門 ~高速化の追求×消費電力の壁 (WEB+DB PRESS plus)

 ちなみに最近のAWSのお勧め本は、「Amazon Web Services 基礎からのネットワーク&サーバー構築」です。同じくAmazonのSA陣による執筆で、AWSのみならずネットワークやサーバ構築の考え方が解る1冊になっています。

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

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


テスト駆動インフラ&CI最前線

 この章は、ServerSpecの宮下さんによるテスト駆動開発とCIの話です。インフラのテスト自動化は構築の自動化とセットで、もしくはテスト自動化の方こそ先に導入すべきと考えています。その中で、ServerSpecは一番よい感じのテスト自動化ツールです。振る舞いをチェックするだけなので、ChefやPuppetまたは手作業で作ったサーバにも中立的にテストできます。
 あとGitHub Flowをベースとしたワークフロー変革の話もよいです。「バージョン管理は開発者のしつけ」から「バージョン管理ツールは開発者のコミュニケーションの中心」に変わりつつあるように思えます。その流れの中で、ワークフローどうするのというのが色々なところで議論されています。その中でGitHub Flowは、GitHubを中心としたワークフローのベストプラクティスの一つです。いちど読んでおいたほうがよいですよ。
 
 章末の紹介書籍は、下記の2冊です。GitHub実践入門をこちらにもってきた方が良かったのでは?

フロントエンド開発徹底攻略 (WEB+DB PRESS plus)

フロントエンド開発徹底攻略 (WEB+DB PRESS plus)

  • 作者: cho45(さとう),五十嵐啓人,伊野亘輝,須藤耕平,片山育美,池田拓司,高津戸壮,石本光司,竹迫良範,伊藤直也,若原祥正,沢渡真雪
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/07/16
  • メディア: 大型本
  • この商品を含むブログを見る
Ruby徹底攻略 (WEB+DB PRESS plus)

Ruby徹底攻略 (WEB+DB PRESS plus)

  • 作者: 角征典,成瀬ゆい,そらは(福森匠大),田中哲,笹田耕一,村田賢太,まつもとゆきひろ,松田明,後藤大輔,浦嶌啓太,高橋健一,柴田博志,近藤宇智朗,大和田純,白土慧,原悠(yhara),伊藤直也,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/06/12
  • メディア: 大型本
  • この商品を含むブログ (1件) を見る

実践Immutable Infrastructure

 はてなのCTOの田中さんによるImmutable Infrastructureの話です。2013年くらいから話題になってきたImmutable Infrastructureですが、クラウドの台頭で大量のサーバを増減させながら運用するようになって、サーバがどうあるべきかという姿の話だと思います。サーバを上げたり下げたりしていると、ステートレスにしておかないと面倒くさいことこの上ないんですね。10台規模くらいだったら手動でも何とかなるけど、数百台規模になると仕組みから考えないといけないという世界なのだと思います。Blue-green Deploymentなど、最近のデプロイ方法の実例など面白いです。

データベース徹底攻略 (WEB+DB PRESS plus)

データベース徹底攻略 (WEB+DB PRESS plus)

  • 作者: 松信嘉範,羽生章洋,ミック,奥野幹也,松下雅和,桑野章弘,青木峰郎,ひろせまさあき,小林篤,島田慶樹,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/03/15
  • メディア: 大型本
  • この商品を含むブログ (2件) を見る
Webサービス開発徹底攻略 (WEB+DB PRESS plus)

Webサービス開発徹底攻略 (WEB+DB PRESS plus)

  • 作者: 勝間亮,石田忠司,杉谷保幸,江口滋,上谷隆宏,青木俊介,久保達彦,池邉智洋,谷口公一,田淵純一,伊野友紀,西岡拓人,吉田俊明,古旗雅史,木野瀬友人,かなだまさかつ,牧本慎平,成田一生,舘野祐一,濱崎健吾,鈴木慎之介,齊藤宏多,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/01/26
  • メディア: 大型本
  • 購入: 6人 クリック: 65回
  • この商品を含むブログ (3件) を見る

[詳解]nginx

 本全体の流れの中で、少し唐突感があるのがnginxの特集です。ただ、最近Apacheとnginxの使い分けが増えてきたので、さらっと抑えておくには良い特集です。未だに字面をみてnginx(エンジンエックス)の読み方が解らなくなります。どこをどうやったら、この読み方になるのでしょうか?

Web開発の基礎徹底攻略 (WEB+DB PRESS plus)

Web開発の基礎徹底攻略 (WEB+DB PRESS plus)

  • 作者: 小飼弾,田籠聡,近藤宇智朗,並河祐貴,赤松祐希,井上誠一郎,ミック,天尋左石,和田裕介,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/07/23
  • メディア: 大型本
  • この商品を含むブログ (6件) を見る
JavaScript徹底攻略 (WEB+DB PRESS plus)

JavaScript徹底攻略 (WEB+DB PRESS plus)

  • 作者: 沖林正紀,吾郷協,高橋征義,名村卓,桜井雅史,縣俊貴,太田昌吾,天野祐介,飯塚直,佐藤鉄平,冨田慎一,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/01/26
  • メディア: 大型本
  • 購入: 7人 クリック: 69回
  • この商品を含むブログ (6件) を見る

メンテナンス本格入門

 いちばん面白いなぁと思ったのが、この章です。サーバーエージェントの技術者陣によって、運用や障害対応など実際の現場での対応方法が紹介されています。こういった情報は勉強会でたまに聞くことが出来ますが、本で読める機会というのは中々ないです。そういった意味で、かなり貴重な資料でしょう。読んでいるとあるあるが多すぎて、いろいろ苦労してきてインフラを支えているのだなと想像でき、胃が痛くなってきます。運用を踏まえての設計は、先人の知恵の結晶です。是非、先人の屍を乗り越えていきましょう。

全体の感想



 この本読んで、WEB+DBの連載陣のレベルの高さは凄いなと思います。毎月読んでたら、だいたいのトレンドは抑えられます。といっても、雑誌なのでテーマカットで掲載するのは難しいので、こういった総集編は良い切り口だなと思います。個々の内容については入り口のところまでの紹介なので、そんなに時間が掛けずに目が通せるので一度読んでおくと良いのではないでしょうか。

サーバ/インフラ徹底攻略 (WEB+DB PRESS plus)

サーバ/インフラ徹底攻略 (WEB+DB PRESS plus)

  • 作者: 伊藤直也,片山暁雄,平山毅,舟崎健治,吉荒祐一,今井雄太,八木橋徹平,安川健太,宮下剛輔,田中慎司,久保達彦,道井俊介,飯田祐基,桑野章弘,松浦隼人,中村俊之,福永亘,杉山仁則,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/10/30
  • メディア: 大型本
  • この商品を含むブログ (2件) を見る

サーバ/インフラ徹底攻略の目次



 念のため、目次つけておきます。

巻頭企画
[入門]コードによるインフラ構築
サーバ構成管理の自動化を実現するる……伊藤 直也
第1章 ChefとVagrantによるインフラのコード化
設定の一元管理で作業を省力化する
第2章 Serverspecによるテスト駆動インフラ構築
設定変更の反映を確実なものにする
特集1
Amazon Web Services最新活用
レイヤ別比較,構築の定石,構成管理の自動化る
第1章 Amazon Web Servicesレイヤ別比較
各サービスの特徴を理解し,うまく使い分ける……片山 暁雄,平山 毅
第2章 EC2とVPCによるシステム構築
セキュアで可用性を高めたインフラの作り方……舟崎 健治,吉荒 祐一
第3章 RDSによるデータベースの活用
作成,デプロイ,バックアップ……今井 雄太,八木橋 徹平
第4章 CloudFormationによる構築の自動化
テンプレートの作成からミドルウェア構築設定まで……安川 健太
特集2
テスト駆動インフラ&CI最前線
Infrastructure as Codeがもたらすワークフローの刷新る……宮下 剛輔
第1章 インフラのテストとその重要性
「インフラのコード化」による開発手法の応用
第2章 テスト駆動インフラの実践
VirtualBox,Vagrant,Puppet,Serverspecによるテスト自動化
第3章 インフラCIの実践
GitHub,Wercker,DigitalOceanによる継続的テスト
第4章 インフラの継続的改善の実践
GitHub Flowをベースとしたワークフロー変革
特集3
実践Immutable Infrastructure
使い捨てサーバによる運用の変革る……田中 慎司
第1章 Immutable Infrastructureとは何か
不変なサーバ,Blue-green Deploymentとそれらの利点
第2章 Immutable Infrastructureで利用するツール/サービス
比較・整理と,システム全体での組み合わせ
第3章 コンテナ型仮想化とクラウドによる実践
Docker+HAProxy,Amazon EC2+ELB
第4章 クラスタ管理ツールによる実践
Apache Mesosでリソース管理の自動化
特集4
[詳解]nginx
設定の柔軟性と優れたスケーラビリティ
第1章 nginxの世界へようこそ
アーキテクチャ,用途,メリット,デメリット……久保 達彦
第2章 はじめてのnginx
インストール,起動と終了,基本設定……道井 俊介
第3章 一般的なWebサーバの構築
バーチャルホスト,アクセス制御,SSL通信,基本認証……飯田 祐基
第4章 実践的なWebアプリケーションサーバの構築
Unicorn/RailsやPHP-FPMと連携させる……道井 俊介
第5章 大規模コンテンツ配信システムの構築
キャッシュ,ロードバランシングを活用する……飯田 祐基
第6章 拡張モジュールのしくみと作り方
nginxを自由にカスタマイズするための基礎知識……久保 達彦
特集5
メンテナンス本格入門
緊急対応,計画停止,メンテフリー化
第1章 メンテナンスとは
種類と手法を整理する……桑野 章弘
第2章 計画メンテナンスの流れ
事前準備,作業のチェック,振り返り……松浦 隼人
第3章 緊急メンテナンスの流れ
普段から備えるべきこと,障害時の対応……松浦 隼人
第4章 メンテフリーへのアプローチ【インフラ編】
省力運用を実現するインフラ,データベース設計と障害検知……松浦 隼人,中村 俊之
第5章 メンテフリーへのアプローチ【アプリケーション編】
ダウンタイムを減らすリリース手法とアプリケーション設計……福永 亘,中村 俊之,松浦 隼人
第6章 ガールフレンド(仮)とアメーバピグの事例
現場でどう実践し,どう障害を切り抜けたか……福永 亘,杉山 仁則
一般記事
Dockerで軽量な仮想環境
Linuxコンテナでインフラを瞬時に構築する……伊藤 直也

See Also:
Statelessなサーバについて 〜クラウド時代のサーバの在り方
何故、fluentdなのか?
Immutable InfrastructureとChefと冪等性の話
手動でサーバの設定をすることを禁ずる。入門Chef Solo

クローラーとAWSが出会ったら?第3回Webスクレイピング勉強会@東京

 2014/10/26に開催された第3回Webスクレイピング勉強会@東京に参加して、発表してきました。今回は、スクレイピングと少し離れてAWSを使ってクローリングするという話です。クローラー/スクレイピングとAWSは相性が良いというのは、昔から思っていたのでテーマとして扱うことは早めに決めていました。しかし、話の構成を、具体的なテクニックの話にするか、概念的な話にするか、少し悩みました。なるべき多くの人に伝わるように、概念的な話をしたつもりです。具体的な部分についてはRubyによるクローラー開発技法を読んで頂ければと思いますw

発表資料



Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス

 資料の構成としては、クローリングする際の悩みをあげた上で、AWSを使えばどう解決できるのかという構成にしています。AWSのサービスの簡単な紹介と、クローラーを作成する上で便利なサービスを3つ挙げています。EC2とS3,SQSです。前の2つのサービスについては納得すると思いますが、SQSについては何故と思う方もいるかもしれません。その辺りを構成含めて、簡単に紹介しています。
 

他の方の発表資料



 今回は、オープニングを含めて7人の発表がありました。どれも面白く、参考になりました。

Webスクレイピング勉強会@東京 オープニングトーク (第3版) #東京スクラッパー


クローリングしにくいものに挑戦 公開用
 @luminさんは、本職でスクレイピングしているプロとあって非常に濃い内容でした。スクレイピングの上級編は、プロトコル解析から始まるとのことです。なかなか到達できない世界ですね。


ソーシャル・スクレイピング(2014年10月Webスクレイピング勉強会資料)
 @YuzoAkakuraさんは、マスコミで働いているシステムエンジニアとのことです。データジャーナリズムという未知の分野を垣間見せて頂けました。データジャーナリズムとは、「データからニュースを発見し、わかりやすく伝える手段」とのことです。凄く合点がいきました。


第3回Webスクレイピング勉強会@東京 happyou.info

 @shogookamotoさんは、自作のスクレイピングサービスの紹介でした。上場企業や政府機関をスクレイピングしてRSSで配信するという素敵なサービスです。紹介としては1行でさらっと言えるないようですが、取得対象を解析して、それぞれに対応するというのは並大抵の労力ではなかったと思います。凄いサービスです。

20141022 リサーチ向け・ブラウザだけでスクレイピング(浅野)
 @hirosuke_asanoさんは、コピペで出来るスクレイピングを紹介しています。これも規模によっては、よくやります。スクレイピングは手段にすぎないので、用途や個人のスキルに応じて、適切なものを選べばよいのですよね。

実践Excelスクレイピング
 @h_sinoharaはネタっぽく語られていましたが、非常に共感がいく内容でした。Perlで苦労した話とか、Excelでスクレイピングするとか、いろいろ通った道ですね。特にExcelスクレイピングについては、もっと多くの人に知って貰えればと思います。web::queryは必殺技

Togetter



 Togetterのまとめも作っています。ハッシュタグ #東京スクラッパー から抽出しています。

第3回Webスクレイピング勉強会@東京のまとめ - Togetterまとめ


感想



 どれも見応えのある内容で、非常に楽しかったです。私の発表については、AWSの便利さが伝わったようです。ただ、懇親会等で話を聞いていると、まだまだクラウド破産を恐れる人が沢山いるということが解りました。これは、長年使っていると、全く気にならなくなります。ただ、外から見るとそのような恐れがあるというは、改めて認識できるようになりました。同じカテゴリーの人と話していては気がつかないことですね。ありがたいです。
 また、Pythonのクローラー本に対するリクエストが多かったです。しばらく動けそうにないので、誰かやりたい人がいたらご連絡くださいw


See Also:
RubyでWebスクレイピングの話をしてきました。第1回Webスクレイピング勉強会@東京
「第2回Webスクレイピング勉強会@東京」に参加&発表してきました
『Rubyによるクローラー開発技法』を書きました
Rubyによるクローラー開発技法の目次
個人ブログの存在感は、自分が思っているより大きいのかもしれない。或いは書籍の流通の話
『Rubyによるクローラー開発技法』の増刷決定しました
本を書く前に準備したこと、執筆中にしていたこと


参照:
第3回Webスクレイピング勉強会@東京(最終回)

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

『Rubyによるクローラー開発技法』関連書評・イベントまとめ

 Rubyによるクローラー開発技法の発売から2ヶ月くらいが経ちました。ニッチすぎるとの予想を覆し、かなり好調な売れ行きです。既に2回目の増刷を迎えております。筆者としては、ありがたい限りです。最近、いろいろな方が書評を書いてくれています。自分用の整理を兼ねて、ピックアップしてみました。是非、ご覧ください。

書評


 
 沢山の書評ブログを頂いています。どれも参考になります。抜けているものも多数あると思うので、指摘して頂ければ幸いです。

書評:Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例 - Togetterまとめ

 @k5okadaさんによるTweetのToggeterまとめ。学ぶべきことの定義がきっちりとされていて、それに沿って行くと効率が良いとのお言葉頂きました。執筆の際に編集者さんに、何に対しての説明なのか常に意識して書けと、繰り返し指摘されていました。この書評を読んで、その部分が読み手に伝わったようでありがたい限りです。

[review] 『Rubyによるクローラー開発技法』 KeN's GNU/Linux Diary(2014-10-14)

 Windowsのライブラリをちゃんと取り上げていることを評価して頂きました。執筆中はWindowsのRuby環境に四苦八苦しながら、発狂しそうになっていたので、報われた思いです。また、まったく関係ないのですが、短いながら非常に重厚感漂う文章で、凄い文章力だと思いました。

クローラー開発技法のPython版 #Python #Ruby #クローリング - 或阿呆のブログ

 クローラーに関する熱い思いと、Python版に対する言及です。個人的には、自然言語処理とか分析系についてはPythonが優勢なので、クローラーもPythonでという流れになるのではと考えています。誰かPython版で書いてくれないかなぁ。

Rubyによるクローラー開発技法を読んだ - エロサイトの作り方

 クローラー作成経験者からみた、本書の感想です。概念的なところの整理が出来たとのことです。ありがたいです。余談ですが、エロ系サービスとクローラーの相性は、おそらく抜群です。需要高いだろうなぁと思いつつ、そのものずばりを題材にする鉄の心臓は持っておりませんでした。

Rubyによるクローラー開発技法 読了 - rochefort's blog

 上級Rubyistによる感想です。丁寧に読んで頂いて、個別に本文中のコードの誤りなども指摘頂きました。ありがとうございます。まさかり投げられないように、精進します。ちなみに、コードの改行等は、編集段階で意図しないところで変わったりするんですね。よくチェックしとけば良かったです。(改定のタイミングで直せるところは、直していきます。)

Webサービスのプログラミングに必要なことのだいたいは、スクレイピングに学んだ - Line 1: Error: Invalid Blog('by Esehara' )

 直接の書評ではないのですが、スクレイピングとは何なのか、簡潔に解りやすく説明されています。いろいろな技術要素があるし、面白いので、勉強するには良い題材だと思います。使いこなせば、楽できますしね。

Amazonのレビュー


Amazon.co.jp: カスタマーレビュー: Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例
 Amazonにも沢山のレビューを頂いています。2014/10/24時点で、24個のレビューで平均4.5と非常に高い評価を頂いています。また、指摘事項も参考になることが多く、読者がどういった視点で読むか、非常に参考になります。技術書を書く場合は、Amazonのレビューを事前に沢山読んで、評価のポイントを把握しておくと良いかもしれませんね。

実践編&連載中



 読んで触ってみての感想も多数頂いています。試行錯誤の過程がみえるのは、非常に参考になります。また解りにくい場所も洗い出せて、助かります。

278日目-「Rubyによるクローラー開発技法」を読み始める - 17826日間Webをがんばる日記

 ほぼ毎日クローラー本を読みながら、その進捗や感想をあげて頂いています。著者としては、読み手がどのように受け止めるのか、どこの部分で詰まるのか、直接知る機会があって非常にありがたいです。訂正すべきところは増刷の際に修正をはかりますし、さらには今後の執筆に活かしたいと思います。
 ちなみに新婚旅行まで持って行ったそうですが、間違いなく怒られると思うのでほどほどが良いと思います(笑)

rubyのクローラー本買いました - 死狂い

amazonランキングクローラー作り1日目
 Amazonのランキングを収集して、グラフ等で可視化するサイトを構築中の模様です。私も前回、Amazonランキングの不思議というエントリーを書いて、データを収集して分析してみたいと思っていたところです。最終的にどのようなものなのか、楽しみです。

Twitterのテキストマイニングによるゴールデンボンバー『ローラの傷だらけ』の「ギャルエンタリズム」 - 5日と20日は歌詞と遊ぼう。

 自然言語処理・テキストマイニングを利用して、歌詞の分析をしようというテーマです。データ収集の部分に、クローラー本を参考にして頂いたようです。この発想は非常に面白いなと思います。あとがきにも書きましたが、クローラーでデータを収集する部分は、何かをするための準備段階です。是非、集めたデータに統計処理や可視化をして、次の一歩につなげて欲しいです。自然言語処理のさわりの部分も書いてるので、興味を持つ人が増えればと願っています。

イベント関係


読書会

9月27日 Rubyによるクローラー開発技法 読書会 第1回(兵庫県)
11月1日 Rubyによるクローラー開発技法 読書会 第2回(兵庫県)
 Amagasaki.rbの方々による読書会が開催中です。おそらく全部で3回。初回に参加させて頂きましたが、Rubyのスペシャリストたちによんで頂けるので、いろいろ指摘事項があり大変勉強になります。出版する前に、レビューしてもらう機会があればなぁと思いました。コミュニティ巻き込んで、出版前の先行読書会というのもありなのかもしれませんね。

 ちなみに、テーマが合いそうな勉強会などありましたら、発表していきたいと思います。直近では、10/26の第3回Webスクレイピング勉強会@東京(最終回)で発表予定です。この勉強会は、第1回、第2回と全て発表の機会を頂きました。よい場を作って頂いて、ありがたい限りです。

感想



 沢山の人に読んでいただき、非常に嬉しいです。またブログやTwitterなどのお陰で、感想をダイレクトに受けられて、非常に参考になります。今、次回作の執筆を開始した所なので、今回得られたフィードバックを盛り込んでいこうと思います。(内容は、クローラー関係ではありません。)
 また、ほぼ毎日TwitterやGoogleで書名をキーワードに検索しています。何か疑問点あれば、気軽に呟いてください。

See Also:
『Rubyによるクローラー開発技法』を書きました
Rubyによるクローラー開発技法の目次
個人ブログの存在感は、自分が思っているより大きいのかもしれない。或いは書籍の流通の話
『Rubyによるクローラー開発技法』の増刷決定しました
本を書く前に準備したこと、執筆中にしていたこと

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Mac miniを買ったった! (Late 2014 MGEN2J)

mac

APPLE Mac mini (2.6GHz Dual Core i5/8GB/1TB/Intel Iris) MGEN2J/A

 2014/10/16に、Mac miniの最新機種が発表されました。1年近く待ち続けていたので、小躍りして買いました。

Mac mini Late 2014のラインナップ



 まず最初に、2014年版のMac miniのラインナップは何があるのでしょうか?松竹梅の3モデルがあるので、それぞれ仮にハイエンド、ミドルエンド、ローエンドと呼ぶことにします。カスタマイズ前の状態で、スペックを較べてみます。

  ローエンド ミドルエンド ハイエンド
型番 MGEM2J/A MGEN2J/A MGEQ2J/A
CPU Core i5 1.4GHz Core i5 2.6GHz Core i5 2.8GHz
メモリ 4GB 8GB 8GB
グラフィックス Intel HD Graphics 5000 Intel Iris Graphics Intel Iris Graphics
ストレージ 500GB HDD 1TB HDD 1TB Fusion Drive
値段 52,800円 74,800円 106,800円

 まず目に付くのが、ローエンドのCPUスペックの低さです。しかし、Macbook Airと同じといえば同じです。ブラウジングや多少の文章作成などがメインであれば、充分でしょう。ミドルとハイエンドも価格差大きいですが、主にストレージがHDDかFusion Driveの違いによるところが大きいです。
 2012年モデルと比べると、グラフィックス機能の強化とインターフェースが今どきのものに更新されたというところでしょう。また、ノンカスタマイズのデフォルトの状態でも、充分使えるスペックに仕上がっています。その点、なかなか評価できるかと思います。

Mac miniの用途



 Mac miniの用途としては、リビングのメディアサーバ兼お家サーバです。今までApple TV+iPad もしくはApple TV+Macbook Proで、メディアサーバの役割を果たしておりました。しかし、iPadだと容量不足、Macbook Proの場合は、用意するのが面倒くさいと思っていました。その辺りをMac miniで集約しようと考えています。結果的にApple TV経由でTVやスピーカーにつなぐか、Mac miniを直結するか、どちらが操作性が良いかを試そうとしています。
 後は、家庭のデータの遠隔地バックアップの為に、24時間動いているサーバが欲しいと常々考えていました。家庭内のデータバックアップであれば、それほど時間は掛かりません。しかし、Amazon S3などクラウドにデータを持って行こうとすると、それなりに時間が掛かります。ということで、中継用として24時間動いているお家サーバを必要としていました。

どのモデルを買ったのか



 そんな用途なので、それほど高スペックなものは必要ありません。ローエンドモデルでも充分です。その為、逆にどのモデルを買うか、結構悩みました。将来用途が変わった時にでも、ある程度は使えるようにしておきたいという望みと、無駄に高スペックなものを買いたくないという、2つのせめぎ合いです。2014年度版のMac miniの注意点としては、メモリがオンボードになったために交換が出来ない点です。つまり、後からのメモリ増設が不可です。一方で、ストレージは変更可能な模様です。
 結局、ミドルエンドのモデルに、メモリを16GBに増設して購入しました。5年くらいは利用する想定なので、メモリは積めるだけ積くことにしました。用途的には、ストレージをFusion Driveにしておいた方が良さそうだけど、後からでも変更できるのでとりあえずデフォルトのHDDにしています。遅さが気になるのであれば、ハイブリッドHDDに交換します。1TBでも1万円くらいで購入できるので、不満に思った時に交換で充分でしょう。

f:id:dkfj:20141019010858p:plain

感想



 Mac miniの後継機は、もう出ることがないのかと心配していました。そういった意味で、今回の発売は嬉しかったです。内容的には、入出力のインターフェース周りの刷新というのが一番の目玉と考えると、もう完成された製品なのかもしれませんね。そうなると、2年間出てこなかった理由も理解出来ます。個人的には、家庭のメディアサーバとしてのMac miniを、いろいろ楽しんでみます。

APPLE Mac mini (2.6GHz Dual Core i5/8GB/1TB/Intel Iris) MGEN2J/A

APPLE Mac mini (2.6GHz Dual Core i5/8GB/1TB/Intel Iris) MGEN2J/A

Amazonのランキングの不思議

 2014年8月末発売の「Rubyによるクローラー開発技法」が好調です。1ヶ月半くらい経過した今でも、Amazonのランキングで1000〜2000位くらいを維持しています。また2回目の増刷も決まり、望外の売れ行きです。
 ところで、自分で本を出して疑問に思うことがあります。それは、Amazonのランキングの謎です。在庫数や順位の変動、アフィリエイト経由の売上を見ていると、意外な疑問が出てきました。それは、トップヒット以外は、殆ど売れていないのではないかという疑惑です。Amazonといえばロングテールという新しいモデルの旗手ですが、実はテール部分の売上が想像以上に小さいのではという気がしてきました。理由としては、次の3点です。

  • 1日100冊程の売上で、ランキング100〜200位
  • 1日10冊程の売上で、ランキング1,000〜2,000位
  • 100,000位以降は、在庫数(残り何冊)の変動がなくても殆ど順位が変わらない

 Amazonのランキングの仕組みを調べたら面白そうだと思ったのですが、既にそのテーマの本があるのを思い出して読みました。その名も、「Amazonランキングの謎を解く」とズバリの内容です。以前、本屋で見かけて読んでみたいと思いつつスルーしていた本です。

Amazonランキングの謎



 「Amazonランキングの謎を解く」は、Amazonのランキングから数理モデルの説明をするという内容です。Amazonのランキングは例題として取り上げてるだけで、本質的な内容ではないです。しかし、著者が調べたランキング変動のアルゴリズムの推定が面白いです。エッセンスとしては、次の3点です。

  • ランキングは、最後に売れた順を基本としている。先頭に跳ぶ規則

 ⇒1冊売れれば、1番になる

  • 1時間あたりの集計で、当然その間に複数のタイトルが売れる。その期間内での売上数を加味する
  • 10,000位以内と10,000位以降では、少しアルゴリズムが違うらしい

 これらの推定のもとにランキングデータを調べていると、実はAmazonはロングテールビジネスではなく、一般の書店と同じようにビックヒットに頼るモデルなのではないかという結論に達しています。


 また、著者の推定では、売上とランキングは次のような関係のようです。

上位ランキング値と注文頻度の関係

順位 平均注文時間間隔
10位 5秒/冊
100位 1.5分/冊
1,000位 30分/冊
1万位 7.5時間/冊
順位 最後に売れてから
70万位 72日
60万位 41日
50万位 26日
40万位 16日
30万位 9日
20万位 4.5日
10万位 36時間
5万位 13時間
4万位 9時間
3万位 6時間

 実際の売れ行き以上の値ではないかと思いますが、この値を導き出した考え方の方が大事なので問題ないと思います。是非、どんな発想のもとに導いたのか読んでみてください。確率統計を専門とする人の思考過程がトレース出来て面白いです。

感想



 Amazonのロングテールモデルが成立しているかどうか、実際のところは解りません。よくよく考えたら、Amazon社自身もロングテールについては特に言及していなかったと思います。そんな中で外から見えるデータで、推定していくのは面白いと思います。
 ロングテールといえば、初めてその概念を知った時に頭の良い知人に説明したことがあります。知人曰く、言わんとすることは解るけど物流とか倉庫の保存コストを考えると、中々成立させるのは難しいのではと言っていたことを思い出しました。今だとKindleあるので、よりロジックの世界に近づいてきているのかもしれませんね。世の学者にしたら、理論検証の場が増えているので、面白い限りでしょうね。
 ちなみにこの著者さん、観測データを取るために随分と長い間Amazonのページを目視で定点観測していたらしいです。後の方で自動取得するプログラムを作ったらしい。うーん、意外でした。


Amazonランキングの謎を解く: 確率的な順位付けが教える売上の構造 (DOJIN選書)

Amazonランキングの謎を解く: 確率的な順位付けが教える売上の構造 (DOJIN選書)

作って覚える転置インデックス、「検索エンジン自作入門」

 先行発売で、検索エンジン自作入門を購入しました。まだペラペラと眺めている状況ですが、これが非常に面白いです。
 「検索エンジン自作入門」は、集めた文章をいかに整理するかをテーマとして扱っている本です。整理するという意味は、検索エンジンを利用するというライフハック的な意味ではありません。整理する為の検索エンジン自体を自分で作ることで理解するという、極めて硬派な本です。
f:id:dkfj:20140920155244j:plain

「検索エンジン自作入門」とは?



 「検索エンジン自作入門」は、未踏IT人材発掘・育成事業にスーパークリエータに認定された山田浩之氏と、Senna/groongaの開発者の末永匡氏の共著です。検索エンジンについて語らせたら、日本でこれ以上の人たちはいないだろうという組み合わせです。ということで、内容は非常に濃いのですが、難しい内容を解りやすく解説されています。
 一方で、扱っている内容は非常にマニアックです。下に目次付けておくので見て頂きたいのですが、紙面の5割以上が転置インデックス(Inverted index)についてです。つまり1つのアルゴリズムについて、100ページ以上を割いていることになります。こんな有難い本は、なかなかないですね。

 そして、それを学ぶ為に、必要最小限の機能を実装した検索エンジン「wiser」を開発し、ダウンロードできるようにしているという力の入れっぷりです。この本を大学の授業なので、1年間通して教えたらかなり面白いのではないでしょうか?

転置インデックスは、検索エンジンの肝



 検索エンジン本に関わらず、ここまで転置インデックスの話しかしていません。では何故「検索エンジン」についての本の中身が、転置インデックスになるのでしょう?それは、検索エンジンの肝が全文検索であり、全文検索の実装の1つが転置インデックスであるためです。
 転置インデックスの概念は、書籍の索引と同じです。目的のページに早く辿り着く為の方法です。それをコンピュータが実行できるようにしているのが、転置インデックスです。リレーショナル・データベースにも、検索を早くする為に幾つかインデックスがありますが、基本的には一緒ですね。文章に対して比較的適しているのが、転置インデックスです。また転置インデックスの中身の技術については、RDBMSのインデックスと同じものを使っているものもあります。

 以前、Mecabの開発者の工藤拓さんの講演を聞いていたところ、「Double Array TRIEのの実装が、Mecabだ」といった趣旨のことを話されていました。その一言が非常に印象的でした。もちろんDouble Array TRIEだけが、Mecabを構成している要素ではないでしょう。しかし、どの技術がMecabの本質的な特徴かと突き詰めたら、Double Array TRIEだということと理解しました。プロダクトの優位性を決定づけるものが何か、考えさせられたものです。

転置インデックスを知ると、何が嬉しいの?



 実際のところ、9割のITエンジニアにとっては、転置インデックスなんて自分に関係ないというと思います。私も、詳しく調べて使っていた時がありましたが、直接的に関係していたのは一時期だけです。
 では、何の役にたつのか?検索エンジンであったり転置インデックスは、わりと根源的な技術の1つです。システムを設計する上で、こういった知識があるかないかで、自ずと結果が違ってきます。
 また、毎年いろいろなプロダクトやサービスが出てきますが、どういった仕組みで作られているか理解できると、その製品の将来性が解ります。技術の引き出しをつくる為にも、こういった要素技術を抑えておく必要があります。

検索エンジン自作入門と、Rubyによるクローラー開発技法。或いは感想



 自著の宣伝になりますが、最近「Rubyによるクローラー開発技法」という本を書きました。この本のテーマは、いかに文章やデータを集めるかです。文章やデータを集めているだけなので、次はどうするのというのが出てきています。本の中ではあまり書けませんでしたが、その次の技術としては、文章を整理する為の検索エンジンや、データマイニング、あるいは可視化などで、情報を整理して活用することがあります。
 そんな意味で、ちょうど良いタイミングで良い本が出たなぁと思います。また、少し前に「手を動かしながら学ぶ ビジネスに活かすデータマイニング」という本も出ています。データを集めて検索したり分析したりの学習の敷居が、ずいぶん低くなって楽しいなぁと思います。ぜひぜひ、一緒に読んで頂ければと思います。


検索エンジン自作入門 ~手を動かしながら見渡す検索の舞台裏

検索エンジン自作入門 ~手を動かしながら見渡す検索の舞台裏

手を動かしながら学ぶ ビジネスに活かすデータマイニング

手を動かしながら学ぶ ビジネスに活かすデータマイニング

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例


2014/9/25追記
Kindle版も出ている模様です。ちょっと待てば良かったw

検索エンジン自作入門?手を動かしながら見渡す検索の舞台裏

検索エンジン自作入門?手を動かしながら見渡す検索の舞台裏



See Also:
『Rubyによるクローラー開発技法』を書きました
Rubyによるクローラー開発技法の目次

検索エンジン自作入門の目次


第1章 検索エンジンはいかにして動くのか

1-1 検索エンジンの構成を理解する

検索エンジンとは
検索エンジンを構成するコンポーネント
検索エンジンに関連するコンポーネント
1-2 高速な全文検索を実現するインデックスの仕組み

全文検索の2つの方法
転置インデックスの仕組み
転置インデックスの作り方
転置インデックスで用いられる用語
1-3 転置インデックスを深く知る

転置インデックス=辞書+転置リスト
転置インデックスから単語を探す
転置リストに単語の位置情報を加える
転置インデックスからフレーズを探す
1-4 日本語文書から転置インデックスを作る

日本語の文を分割する方法
分割方法のトレードオフ
1-5 転置インデックスの実装

辞書の実装
転置リストの実装
1-6 転置インデックスを用いて検索する

ブーリアン検索
転置インデックス用いた検索処理の流れ
関連度の計算方法
情報検索における検索
1-7 転置インデックスを構築する

メモリを用いた転置インデックスの構築
二次記憶を用いた転置インデックスの構築
静的なインデックス構築と動的なインデックス構築
1-8 検索したい文書を用意する

データを集める
データを整形する
第2章 全文検索エンジンのサンプルを準備する

2-1 全文検索エンジンwiserの概要

wiserの構成
検索用の文書を用意する
2-2 wiserをセットアップする

wiserをビルドする
wiserを起動する
Wikipediaデータを展開する
2-3 wiserを動かす

転置インデックスを構築する
転置インデックスを用いて検索する
grepとwiserの実行速度を比較する
第3章 転置インデックスを作ろう

3-1 転置インデックスのおさらい

トークンを抽出する
トークンごとにポスティングリストを作る
3-2 転置インデックスを構築する

ストレージ上でポスティングリストを作る
ポスティングリストと転置リストのデータ構造
転置インデックスの構築手順をソースコードレベルで追う
ソースコードをより詳細に見る
コラム 要件に応じた検索エンジン(システム)の設計
第4章 検索しよう

4-1 検索処理のおおまかな流れ

検索処理の流れを把握する
4-2 転置インデックスを用いて検索を行う

検索処理をソースコードレベルで追う
関数split_query_to_tokens()の内部を読み解く
具体例を用いて検索処理の流れをより深く理解する
関数search_docs()の内部を読み解く
関数search_phrase()の内部を読み解く
コラム タグ検索はどのように実現されるか
第5章転置インデックスを圧縮しよう

5-1 圧縮の基本

転置インデックスにおける圧縮のメリット
コラム 圧縮の目的
転置インデックスの圧縮方法
転置リストの圧縮方法
なぜ圧縮できるのか
5-2 wiserにおける圧縮機能の実装

圧縮機能のソースコードの概要
圧縮しない場合の動作を見る
Golomb符号の概要を把握する
Golomb符号における符号化の処理を読み解く
Golomb符号における復号の処理を読み解く
第6章 wiserの改良やパラメータの調整に挑戦してみよう

6-1 検索処理を効率化する

改善のポイント
検索クエリを重複しないトークンに分割する
6-2 フレーズ検索をやめてみる

2文字の文字列を検索したときの挙動を調べる
3文字の文字列を検索したときの挙動を調べる
6-3 検索結果の出力順序を変更する

検索結果の並び替えの軸となる指標
検索結果を文書サイズの大きい順に出力する
コラム ランキングSPAM
6-4 1文字の検索クエリで検索できるようにする

特定の文字を接頭辞に持つトークンの一覧を取得する
検索して結果をマージする
コラム 類似文書検索を実現するには
6-5 転置インデックスの更新バッファ量を変えてみる

バッファサイズの違いによる効果の差を確認する
sarコマンドで負荷を調べる
6-6 英字アルファベットだけトークンの分割方法を変えてみる

英単語の検索で適合率が下がる問題を避けるには
インデックスの対象にする文字をどう判定しているか
トークンの分割を行う関数を修正する
6-7 圧縮の効果を確認する

Golomb符号の効果を見る
非圧縮時と圧縮時のインデックスサイズを比較する
コラム 全文検索エンジンの安易な利用を避ける
第7章 これからより深く学ぶために

7-1 wiserでは扱えなかったテーマ

転置インデックス以外の全文検索インデックス
大規模なデータを効率よく扱えるストレージ
キャッシュを利用した高速化
さまざな圧縮方法の利用
ランキングの改良
適合率と再現率の調整
検索結果の並び替え処理の負荷を減らす
並列処理
属性による絞り込みとの併用
ファセット検索
コラム レイテンシとスループット
7-2 全文検索エンジンGroongaでの工夫

トークンの部分一致検索による再現率の向上
メモリマップトファイルの利用
スニペット
コラム 広報活動の大切さ
7-3 利用者の意図を考慮した検索エンジンを目指して

ストップワードを導入する
形態素解析のミスに対処する
コラム ぎなた読み
組文字・全半角を扱う
ひらがな・カタカナを同一視するどうか判断する
表記のゆれを考慮する
検索クエリを正規化する
ブーリアン検索の解釈に気をつける
検索クエリを形態素解析器により適切に解析する
誤り訂正を行う
入力を補完する
関連する検索キーワードを提案する
7-4 文書の収集・抽出におけるポイント

クローラを作るうえで対処すべきポイント
テキストの抽出で対処すべきポイント
Appendix

A-1 高度な話題

近年の圧縮手法
動的なインデックス構築
インデックスの分散
A-2 wiserのテキスト抽出・保存処理

XMLを扱う2種類のAPI ~DOMとSAX
文書のタイトルと本文を取り出す
状態を把握する
文書データベースを構築する

Amazonで在庫がないので、それ以外の書籍ネット販売を見てみた

 先週の金曜日から、Amazonでは「Rubyによるクローラー開発技法」が売り切れ状態です。Amazonの予想を超えてやったぜといい気になっている反面、数少ない売れるチャンスを逃し機会損失ではないかと、喜んだり落ち込んだりしています。いつになったら入荷されるのでしょうか?ちなみに、一般の書店でも殆ど見たことがないので、ツチノコ状態なのではと気を揉んでおります。
 そんな折りにふと、他の書籍のネット通販ではどういう状態なのか気になり、ざっと見てみました。そもそも殆ど使ったことがないので、わりと新鮮な驚きがありました。

Amazon以外の書籍のネット通販



 一昔前は、Amazonと楽天だけという印象だったのですが、今はいろいろあるのですね。ざっと検索掛けただけでも、5〜6個出てきました。特化型のものを合わせれば、もっともっとあるでしょう。主なものをリストアップすると、次のとおりです。リンク先は察してください。


 各サイトを数分だけ触っただけでも、実装レベルの差を感るものがあります。例えば、検索機能のサジェストの有無。日常的にGoogleやAmazonを使っていると当たり前のように感じるこのUIも、自分で実装しようとするとそれなりに面倒くさいものがあります。サジェスト先のデータをどうするのかとか、サジェストのタイミングとか。昔に悩んだなぁとか思い出しました。単純に本だけでよければ、書誌データのタイトルを使えばよいですが、複数のカテゴリの製品を検索できる場合は、邪魔にならないサジェストするのは難しいんですよね。あと、英語日本語の問題とか。

 逆に面白いのが、ヨドバシカメラの在庫のある店舗機能。その名のとおり、店舗ごとの在庫状況を見せてくれるのですが、東京近郊で複数の店舗によれるという選択肢がある場合は便利です。私も以前出張時に、ノートパソコンのACアダプタを忘れた時に重宝したことがあります。
f:id:dkfj:20140916221526p:plain

 あとは、セブンネットやTSUTAYAのように店舗連動を前提としたものとかをみると、なるほどなと思います。Amazonと楽天の2強と戦うには、同じ土俵に乗ったら負けですね。また微妙に気になったのが、丸善&ジュンク堂とhontoの関係。トップページの説明を読むと、"hontoは丸善、ジュンク堂、文教堂などの店舗とネット通販、電子書籍が連動したハイブリッド総合書店。"とのことです。ジュンク堂にしたら、重複のチャネルじゃないかと気がしますが、書籍の流通の世界はややこしそうなので気にしないておきます。

 余計なことをつらつら書いていて、当初の目的を忘れていました。結論的には、Amazon以外全て在庫がありそうです。「Amazonでみんな買うのかすげーな」と感じるべきなのか、他の店舗を褒め称えるのかよく解りませんが、結果としてはそういう状況です。

実店舗の状況



 それでは、実店舗ではどうなのでしょうか。大型店以外は、基本的に見かけることはないです。発売以来いろいろな規模の本屋さんで探してみましたが、大型店以外無いです。その辺りは別エントリーに素人推測を書いているので、興味があれば読んでください。
 しかし、そんな中で圧倒的な存在感を放っているのが、ジュンク堂です。私の観測範囲は池袋店ですが、圧倒的な在庫量を誇っています。ついつい寄って状況をみてしまうのですが、在庫たっぷりです。発売後、半月以上経つのに未だに平置きしてくれるという有り難さです。元々好きな本屋でしたが、一気に大好きになってしまいました。

f:id:dkfj:20140916230657j:plain
f:id:dkfj:20140916230720j:plain

感想



 Amazonさん、早く在庫復活してくれ。知れば知るほど、街の本屋で普通に本が並んでいるという状況が、どれほど凄いことなのか解るようになりました。一度どこかで本屋の流通の仕組みについて、調べてみたいですね。

See Also:
『Rubyによるクローラー開発技法』を書きました
Rubyによるクローラー開発技法の目次
個人ブログの存在感は、自分が思っているより大きいのかもしれない。或いは書籍の流通の話
『Rubyによるクローラー開発技法』の増刷決定しました
本を書く前に準備したこと、執筆中にしていたこと


Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例