Web技術の昨今の動向2点 10/2
今日は以下の2つの技術を紹介する。
(各自で詳しく調べてみたり試用してみたりして、結果を報告下さい)
- ハイブリッドアプリケーション
- スクレイピング

ハイブリッドアプリケーション
- 特徴: 1つのプロジェクトで複数のプラットフォームで
動作するプログラムが作れる
- <=> ネイティブアプリケーション
- 性能の要求されるアプリケーションには不向き
(スピードや精細な描画を求められるゲームなど)
Cordovaについて
- Web技術(HTMLとCSSとJavaScript)で
アプリケーションを記述する。
- ほぼ同機能の技術として PhoneGap がある
- オンラインで使えるサイトもある(monacaが有名)
- 様々な開発プラットフォームで動作する
- Node.js が動くところならOK
- npm でインストールできる

- 様々なTargetにも対応
- ここでは、とりあえず androidを中心に話をする。
- Target毎に、以下のような下流工程を支援するための
補助的プログラムを用意する必要がある。
- 当該Target用のバイナリ(実行形式)生成
- 転送やテスト実行
Android(をTargetとした)開発について
- Android-SDKが必要
- 以前はSDKを単独で入手できたが、
- 今はAndroid-Studio(IDEの形をとる大きなソフトウェア)の一部分として提供されており、
IDEを使わないとしても全体を入手してインストールする必要があるようだ。

- SDKの中に、各種の仮想デバイスを想定した「エミュレータ」
も含まれていて、
- 実機(スマホやタブレット)が手元になくても
エミュレータ上で動作テストは可能
- 実機に接続して実機での実行もできる。
- android-studio は chocolateyでもインストール可能
準備
手順

スクレイピング
- (言葉の意味は各自で調べてみて)
- スクレイピングの目的も右図のようにいろいろあるようだ。
(様々な用途での活用を試みてください)
背景

- Webでの、ボタン(や、リンク)の意味が(Webの初期の頃と
比べて)変容した。
- 昔:
<A>
タグや、formの中の<input type=submit>
パラメータとして、ジャンプ先が書かれていた
- 昨今:Javascriptのプログラムが呼び出される。
そのプログラムの中で、ページ遷移を、したりしなかったり。
(Ajax呼び出しでページの一部が書き換わることも多い)
クローリング技術の諸相
右図のように4つに大別できる。
- (GUIアプリケーションとしての)ダウンローダー
- (文字によるコマンドとしての)ダウンローダー
- スクレイピングのためのライブラリ
- プログラミング言語ごとに用意されている(ことが多い)。
- キーワード「スクレイピング」に、言語の名前を付加して
ググってみるといいだろう。
- 有名なものとしては、たとえば、
- ruby では mechanize
- 「Ruby スクレイピング」で nokogiriが多数ヒットするが、
nokogiriは、HTMLパーサ(主なスクレイピングライブラリの内部で必ず使われているようだ)
- node.js では cheerio-cli
- ブラウザを外からコントロールするアプローチ
今回はその4のアプローチを紹介する。
- 前述の様相変化により、1.~3.で対応できないサイトが増えたのがその理由。
(ページ内に書かれたJavaScriptのコードを実行できるような
スクレイピングライブラリが整備されていない)
原理

- 我々はブラウザを通じてWebを閲覧する。
- その際にマウスやKBから指示(クリックなど)を与えて、
ページでの(Webアプリケーションの)動作を引き起こしている
- それを代行するプログラムを用意してやれば、
自動化が実現できるだろう。
そのとき、制御される側のブラウザとしては、
+ 一般のブラウザをそのまま使う
+ 自動化のための専用ブラウザ
という選択肢があるだろう。特に、後者のものは、
画面の状態を表示する必要は特にないことから、
表示のない「ヘッドレスブラウザ」と呼ばれる。
主な製品(フリーのものとして)
- PhantomJS + CasperJS
- Selenium Webドライバー
各自で試用してみてください。