bar_1

contents_map

2010年12月7日火曜日

Ruby/Cygwinでrdoc-dataのgemインストールがおかしいことの対処方法


WindowsXPマシン上のCygwin環境のRubyの mechanize を、gemインストールで1.0.0 に更新したのだけど、ドキュメント関係が何かオカシイ。調べていた途中で、rdoc, rdoc-dataがインストールされていないことも、判明した。

で、例によってトラブったのだが、ググッたところどうも解説法が見つからないようなので、原因について調査を進めていった。最終的には、解決(rdocとrdoc-dataをインストールし、使用できるようにすること)にいたった。

原因はくだらないが知らなければ誰もが引っかかると思うので、ここに記す。


環境は
$ uname -srvmpio
CYGWIN_NT-5.1 1.7.7(0.230/5/3) 2010-08-31 09:58 i686 unknown unknown Cygwin
$ ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]
$ gem --version
1.3.7
である。


■忙しい人のために
解決手順は、以下の通りである:
  1. gemインストール(rdoc)
    gem install rdoc
  2. gemインストール(rdoc-data)
    gem install rdoc-data
  3. rdoc-data修正
    s/local\///
  4. 修正済みrdoc-dataの実行
    cp rdoc-data /usr/bin; rdoc-data --install
  5. gemインストールの確認
  6. rdocドキュメントの確認


■1.gemインストール(rdoc)
$ gem install rdoc -y
INFO: `gem install -y` is now default and will be removed
INFO: use --ignore-dependencies to install only the gems you list
RDoc 2.5 did not save method parameters, so you should upgrade your rdoc-data
gem to a version >= 2.5.3.
To have ri data for core and stdlib you'll need to:
gem install rdoc-data
then run:
rdoc-data --install
To have ri data for you gems you'll also need to run:
gem rdoc --all --overwrite
If you don't want to rebuild the rdoc for `gem server`, add --no-rdoc.
Successfully installed rdoc-2.5.11
1 gem installed
Installing ri documentation for rdoc-2.5.11...
Installing RDoc documentation for rdoc-2.5.11...
rdocはインストールされたらようだ。
$ gem which rdoc
/cygdrive/d/home/gems/rdoc-2.5.11/lib/rdoc.rb

■2.gemインストール(rdoc-data)
$ gem install rdoc-data
To install ri data for RDoc 2.5+ run:
rdoc-data
Successfully installed rdoc-data-2.5.3
1 gem installed
Installing ri documentation for rdoc-data-2.5.3...
Installing RDoc documentation for rdoc-data-2.5.3...

■3.rdoc-data修正
インストールしても、なぜかコマンド:rdoc-data は、/usr/bin/配下にコピー
されない。このため、手動でコピーする:
$ cd ${GEM_HOME}/gems/rdoc-data-2.5.3/bin
$ cp -i rdoc-data /usr/bin/.
だがここで、rdoc-dataを実行すると:
bash: /usr/bin/rdoc-data: /usr/local/bin/ruby: bad interpreter: Permission denied
というエラーが発生する。
そこで rdoc-data の中身をみると、6行からなる単なるrubyスクリプトである:
#!/usr/local/bin/ruby -w
require 'rubygems'
require 'rdoc/data'
RDoc::Data.run
一行目のrubyのパスが間違っている。このため、rdoc-dataの一行目を以下のように、修正する
#!/usr/local/bin/ruby -w
->#!/usr/bin/ruby -w

■4.rdoc-dataの実行
rdocインストール時のログの続き(rdoc-data --install)を実行する:
$ rdoc-data --install
$ gem rdoc --all --overwrite
Installing ri documentation for appengine-apis-0.0.16...
Installing ri documentation for appengine-apis-0.0.18...
Installing ri documentation for appengine-rack-0.0.9...
Installing ri documentation for appengine-rack-0.0.11...
Installing ri documentation for appengine-sdk-1.3.4...
Installing ri documentation for appengine-sdk-1.3.5...
Installing ri documentation for appengine-tools-0.0.13...
Installing ri documentation for appengine-tools-0.0.15...
Installing ri documentation for bundler08-0.8.5...
Installing ri documentation for google-appengine-0.0.13...
Installing ri documentation for google-appengine-0.0.15...
Installing ri documentation for jruby-jars-1.4.1...
Installing ri documentation for jruby-jars-1.5.1...
Installing ri documentation for jruby-rack-1.0.1...
Installing ri documentation for mechanize-1.0.0...
Installing ri documentation for nokogiri-1.4.4...
Installing ri documentation for rack-1.1.0...
Installing ri documentation for rdoc-2.5.11...
Installing ri documentation for rdoc-data-2.5.3...
Installing ri documentation for rubygems-update-1.3.7...
Installing ri documentation for rubyzip-0.9.4...
Installing RDoc documentation for appengine-apis-0.0.16...
Installing RDoc documentation for appengine-apis-0.0.18...
Installing RDoc documentation for appengine-rack-0.0.9...
Installing RDoc documentation for appengine-rack-0.0.11...
Installing RDoc documentation for appengine-sdk-1.3.4...
Installing RDoc documentation for appengine-sdk-1.3.5...
Installing RDoc documentation for appengine-tools-0.0.13...
Installing RDoc documentation for appengine-tools-0.0.15...
Installing RDoc documentation for bundler08-0.8.5...
Installing RDoc documentation for google-appengine-0.0.13...
Installing RDoc documentation for google-appengine-0.0.15...
Installing RDoc documentation for jruby-jars-1.4.1...
Installing RDoc documentation for jruby-jars-1.5.1...
Installing RDoc documentation for jruby-rack-1.0.1...
Installing RDoc documentation for mechanize-1.0.0...
Installing RDoc documentation for rack-1.1.0...
Installing RDoc documentation for rdoc-2.5.11...
Installing RDoc documentation for rdoc-data-2.5.3...
Installing RDoc documentation for rubygems-update-1.3.7...
Installing RDoc documentation for rubyzip-0.9.4...

■5.gemインストールの確認
$ gem which rdoc
/cygdrive/d/home/gems/rdoc-2.5.11/lib/rdoc.rb
$ gem which rdoc-data
ERROR: Can't find ruby library file or shared library rdoc-data

$ gem list
*** LOCAL GEMS ***
appengine-apis (0.0.18, 0.0.16)
appengine-rack (0.0.11, 0.0.9)
appengine-sdk (1.3.5, 1.3.4)
appengine-tools (0.0.15, 0.0.13)
bundler08 (0.8.5)
google-appengine (0.0.15, 0.0.13)
jruby-jars (1.5.1, 1.4.1)
jruby-rack (1.0.1)
mechanize (1.0.0)
nokogiri (1.4.4)
rack (1.1.0)
rdoc (2.5.11)
rdoc-data (2.5.3)
rubygems-update (1.3.7)
rubyzip (0.9.4)
gem whichで、rdoc-dataが表示されないのは、データだからだろ・・・おそらく。
■6.rdocドキュメントの確認
rdocドキュメントは、GEMのホームディレクトリ/doc/ 配下に入っている
$ gem which mechanize
/cygdrive/d/home/cygwin/gems/mechanize-1.0.0/lib/mechanize.rb
$ gem which rack
/usr/lib/ruby/gems/1.8/gems/rack-1.1.0/lib/rack.rb

である場合、rdocはそれぞれ
/cygdrive/d/home/cygwin/doc/mechanize-1.0.0/rdoc/
/usr/lib/ruby/gems/1.8/doc/rack-1.1.0/rdoc/
に格納される。
実際のファイルを確認してみよう。
$ ls -l /cygdrive/d/home/cygwin/doc/mechanize-1.0.0/rdoc/
total 348
-rw-r--r--+ 1 **** ???? 38689 2010-12-07 11:03 CHANGELOG_rdoc.html
-rw-r--r--+ 1 **** ???? 13592 2010-12-07 11:03 EXAMPLES_rdoc.html
-rw-r--r--+ 1 **** ???? 8523 2010-12-07 11:03 FAQ_rdoc.html
-rw-r--r--+ 1 **** ???? 14771 2010-12-07 11:03 GUIDE_rdoc.html
-rw-r--r--+ 1 **** ???? 27080 2010-12-07 11:03 LICENSE_rdoc.html
-rw-r--r--+ 1 **** ???? 15940 2010-12-07 11:03 Manifest_txt.html
drwxr-xr-x+ 1 **** ???? 0 2010-12-07 11:03 Mechanize/
-rw-r--r--+ 1 **** ???? 123205 2010-12-07 11:03 Mechanize.html
drwxr-xr-x+ 1 **** ???? 0 2010-12-07 11:03 Net/
-rw-r--r--+ 1 **** ???? 9274 2010-12-07 11:03 Net.html
-rw-r--r--+ 1 **** ???? 10455 2010-12-07 11:03 README_rdoc.html
-rw-r--r--+ 1 **** ???? 10620 2010-12-07 11:03 WWW.html
-rw-r--r--+ 1 **** ???? 3589 2010-12-07 11:03 created.rid
drwxr-xr-x+ 1 **** ???? 0 2010-12-07 11:03 images/
-rw-r--r--+ 1 **** ???? 38368 2010-12-07 11:03 index.html
drwxr-xr-x+ 1 **** ???? 0 2010-12-07 11:03 js/
drwxr-xr-x+ 1 **** ???? 0 2010-12-07 11:03 lib/
-rw-r--r--+ 1 **** ???? 12560 2010-12-07 11:03 rdoc.css

参考までに、rackパッケージのものも
$ ls -l /usr/lib/ruby/gems/1.8/doc/rack-1.1.0/rdoc/
total 176
drwxr-xr-x+ 1 **** ???? 0 2010-12-07 11:04 FCGI/
-rw-r--r-- 1 **** ???? 9421 2010-12-07 11:04 FCGI.html
-rw-r--r-- 1 **** ???? 9264 2010-12-07 11:04 KNOWN-ISSUES.html
-rw-r--r-- 1 **** ???? 29728 2010-12-07 11:04 README.html
drwxr-xr-x+ 1 **** ???? 0 2010-12-07 11:04 Rack/
-rw-r--r-- 1 **** ???? 31164 2010-12-07 11:04 Rack.html
-rw-r--r-- 1 **** ???? 19074 2010-12-07 11:04 SPEC.html
-rw-r--r-- 1 **** ???? 3334 2010-12-07 11:04 created.rid
drwxr-xr-x+ 1 **** ???? 0 2010-12-07 11:04 images/
-rw-r--r-- 1 **** ???? 46651 2010-12-07 11:04 index.html
drwxr-xr-x+ 1 **** ???? 0 2010-12-07 11:04 js/
drwxr-xr-x+ 1 **** ???? 0 2010-12-07 11:04 lib/
-rw-r--r-- 1 **** ???? 12560 2010-12-07 11:04 rdoc.css

■References
http://docs.rubygems.org/read/chapter/11
■余談
ところで、なぜか gem list したときにまだ、
cygwin warning:
MS-DOS style path detected: C:\Documents and Settings\All Users\Application Data/gemrc
Preferred POSIX equivalent is: /cygdrive/c/Documents and Settings/All Users/Application Data/gemrc
と出る場合があるんだよね…もう一度同じコマンド実行すると、出なかったり。
まだなにかそんな項目を使っている設定が残っている…?

2010年12月2日木曜日

Cygwin上のruby環境でgithubとgist, gistyの環境を整えてみた


■問題点
例によって、躓きまくりました。
  • nokogiriのgemインストールができない。
  • gistyのgemインストールができない。

■解決法
時間のない人のために、最初に、今回試した手順のまとめを示します:
  1. Cygwinのライブラリ(lib*)のインストール(gistyに必要とされるもの)
    Cygwinのインストーラ:setup.exeで、libxml2, libxslt, libiconv, (+libiconv2) をインストール。
  2. gemの設定1(環境変数GEM_HOME, APPDATA)
    export GEM_HOME="/cygdrive/your/gem/home"
    export APPDATA="${GEM_HOME}"
  3. gemの設定2(gemの取得先の設定追加)
    $ gem sources -a http://gems.github.com/
  4. gemインストール1(nokogiri)
    $ gem install nokogiri
  5. gemインストール2(gisty)
    $ gem install swdyh-gisty
  6. gistyの設定(GISTY_DIR)
    export GISTY_DIR="${HOME}/your/gisty/directory"
  7. githubの設定(SSH公開鍵の登録)
    github.comにログインし
    アカウントの設定>アカウントの概要>SSH公開鍵
    にて、登録。
  8. gitのローカル環境の設定(githubのidとAPIトークン)
    git config --global github.user your_id
    git config --global github.token your_APItoken
  9. gistyの設定(パスの通ったディレクトリにコピー)
    cd /cygdrive/${GEM_HOME}/gems/swdyh-gisty-0.0.14/bin
    cp -i gisty /usr/bin/.
以下は試したときの時系列ログ的書き物です。


●gemインストール1

$ gem install nokogiri
Building native extensions. This could take a while...
ERROR: Error installing nokogiri:
ERROR: Failed to build gem native extension.
/usr/bin/ruby.exe extconf.rb
checking for libxml/parser.h... yes
checking for libxslt/xslt.h... yes
checking for libexslt/exslt.h... yes
checking for iconv_open() in iconv.h... no
checking for iconv_open() in -liconv... yes
checking for xmlParseDoc() in -lxml2... yes
checking for xsltParseStylesheetDoc() in -lxslt... yes
checking for exsltFuncRegister() in -lexslt... yes
checking for xmlFirstElementChild()... yes
checking for xmlRelaxNGSetParserStructuredErrors()... yes
checking for xmlRelaxNGSetParserStructuredErrors()... yes
checking for xmlRelaxNGSetValidStructuredErrors()... yes
checking for xmlSchemaSetValidStructuredErrors()... yes
checking for xmlSchemaSetParserStructuredErrors()... yes
creating Makefile
/usr/lib/ruby/1.8/mkmf.rb:1322: warning: global variable `$preload' not initiali
zed
make
Makefile:119: *** target pattern contains no `%'. Stop.
Gem files will remain installed in d:/home/gems/nokogiri-1.4.4 for inspection.
Results logged to /cygdrive/d/home/gems/nokogiri-1.4.4/ext/nokogiri/gem_make.out

エラーログからは、なにが悪いのかさっぱり分からない。そこで、エラーメッセ
ージをぐぐってみる。
http://stackoverflow.com/questions/1225703/cant-build-gem-native-extension-build-fails-can-you-see-why
どうやら、Cygwin環境のライブラリを再インストールする必要があるようだ。。。
●足りないと思われるライブラリ
上記gemエラーログから、想像したライブラリ名は以下の通り:
  • ?libxml
  • libxml2
  • libxslt
  • ?libexslt
  • libiconv
  • (+iconv2)

��は、存在しないようだった。
Cygwinのインストーラ:setup.exe を使って、上記をReinstallした。
次に再度、gemのインストールを試す。
●再度gemインストール
また失敗。
$ gem install nokogiri
cygwin warning:
MS-DOS style path detected: C:\Documents and Settings\All Users\Application Data/gemrc
Preferred POSIX equivalent is: /cygdrive/c/Documents and Settings/All Users/Application Data/gemrc
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Building native extensions. This could take a while...
ERROR: Error installing nokogiri:
ERROR: Failed to build gem native extension.
/usr/bin/ruby.exe extconf.rb
checking for libxml/parser.h... yes
checking for libxslt/xslt.h... yes
checking for libexslt/exslt.h... yes
checking for iconv_open() in iconv.h... no
checking for iconv_open() in -liconv... yes
checking for xmlParseDoc() in -lxml2... yes
checking for xsltParseStylesheetDoc() in -lxslt... yes
checking for exsltFuncRegister() in -lexslt... yes
checking for xmlFirstElementChild()... yes
checking for xmlRelaxNGSetParserStructuredErrors()... yes
checking for xmlRelaxNGSetParserStructuredErrors()... yes
checking for xmlRelaxNGSetValidStructuredErrors()... yes
checking for xmlSchemaSetValidStructuredErrors()... yes
checking for xmlSchemaSetParserStructuredErrors()... yes
creating Makefile
/usr/lib/ruby/1.8/mkmf.rb:1322: warning: global variable `$preload' not initiali
zed
make
Makefile:119: *** target pattern contains no `%'. Stop.
Gem files will remain installed in d:/home/gems/nokogiri-1.4.4 for inspection.
Results logged to /cygdrive/d/home/gems/nokogiri-1.4.4/ext/nokogiri/gem_make.out

似たようなエラーメーセージだが、若干違うのは”MS-DOSスタイルのパス”が云々
というところ。知らない環境変数が参照されていると見当をつけ、
set | grep -i "パス"
してみた。すると、APPDATAという変数に上記ディレクトリが設定されている
●gemの設定(環境変数)
以前、GEM_HOMEを設定したが、ActiveScriptRubyのためであった。今設定しよう
としているのは、Cygwin上のRubyのためのものである。既存の設定だと、
GEM_HOMEは、ActiveScriptRubyのための環境変数の設定値(当然、こちらはWin 
形式のディレクトリ名)となっており、Cygwinとバッティングする。
また、環境変数APPDATAも、gemから同様な参照をされる。gemは、APPDATAの設定
値(ディレクトリ)からも、gemrcを読もうとしている。
だから、Cygwin上のRuby環境においては、Bashの環境変数:
GEM_HOME, APPDATA両方の設定を、POSIX形式で、行う必要がある;
これらの値の設定を.profileまたは.bashrcにでも書いておけばよかろう。
以下のようにした:
export GEM_HOME="/cygdrive/d/home"
export APPDATA="${GEM_HOME}"

ふー。
もう一度、gemのインストールから・・・(ヽ´ω`)。。。
●nokogiri のインストール
$ gem install nokogiri
Building native extensions. This could take a while...
Successfully installed nokogiri-1.4.4
1 gem installed
/usr/lib/ruby/1.8/rdoc/parsers/parse_c.rb:204: warning: method redefined; discar
ding old progress
Installing ri documentation for nokogiri-1.4.4...
No definition for get_options
No definition for set_options
No definition for parse_memory
No definition for parse_file
No definition for parse_with
Installing RDoc documentation for nokogiri-1.4.4...
No definition for get_options
No definition for set_options
No definition for parse_memory
No definition for parse_file
No definition for parse_with

インストールできたようだ。
次にgistyのgemをインストールする。
●swdyh-gisty のインストール
$ gem sources -a http://gems.github.com/
$ gem install swdyh-gisty
/usr/lib/ruby/site_ruby/1.8/rubygems/dependency.rb:88: warning: instance variable @prerelease not initialized
/usr/lib/ruby/site_ruby/1.8/rubygems/dependency.rb:88: warning: instance variable @prerelease not initialized
Successfully installed swdyh-gisty-0.0.14
1 gem installed
/usr/lib/ruby/1.8/rdoc/parsers/parse_c.rb:204: warning: method redefined; discarding old progress
Installing ri documentation for swdyh-gisty-0.0.14...
Installing RDoc documentation for swdyh-gisty-0.0.14...
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string
/usr/lib/ruby/1.8/rdoc/generators/html_generator.rb:1103: warning: too many arguments for format string

ドキュメント関連のwarningが出るが、インストールできたようだ。
■gistyの設定(GISTY_DIR)
適当なディレクトリを用意しましょう。このディレクトリに、gistyは
GISTY_DIRは、.bashrcに書
いておけばよいでしょう。
export GISTY_DIR="${HOME}/your/directory"

■githubの設定(SSH公開鍵の登録)
ssh-keygenを使って、公開鍵と秘密鍵を生成する。
次に、githubに生成した公開鍵を登録する。登録は、githubにログインして、
 アカウントの設定>アカウントの概要>SSH公開鍵
から行います。
手順の詳細は、
コピペするときに、改行が入らないように気をつけること。改行が入ってしまっ
たら、消してください。
公開鍵を登録し終わったら、ちゃんと登録できたかテスト。テストは以下のよう
な感じで:
$ ssh -T git@github.com
Enter passphrase for key '/home/masa/.ssh/id_rsa':
ERROR: Hi mephistobooks! You've successfully authenticated, but GitHub does not
provide shell access

"successfully authenticated"されれば、オッケイ。
■gitの設定(idとAPIトークン)
APIトークンは、github.com/account の
アカウントの設定>アカウントの概要>アカウントの管理>APIトークン
に表示されます。
下記のコマンドで、githubのidとAPIトークンを設定しましょう。
git config --global github.user your_id
git config --global github.token your_APItoken

■gistyの設定(パスの通ったディレクトリにコピー)
なぜなんだか、gem installしても/usr/bin/に、gistyがコピーされませんでした。
なので仕方なく手で、ディレクトリ:
/cygdrive/${GEM_HOME}/gems/swdyh-gisty-0.0.14/bin から、
cp -i gisty /usr/bin/.
した。
ふー。
■References
・README.rdoc -gisty
https://github.com/swdyh/gisty
・gistコマンドよりちょっと便利なgisty
http://d.hatena.ne.jp/swdyh/20081207/1228655198
・Gistyインストールから利用までの道のりメモ
http://d.zeromemory.info/2009/01/05/install-gisty.html
・Generating SSH keys (Win/msysgit)
http://help.github.com/msysgit-key-setup/
・WindowsでのGit環境構築とその注意点
http://sourceforge.jp/magazine/09/02/12/0530242

2010年11月29日月曜日

Cywin上のRuby環境でgitの環境を整えてみた

これらのサイト

http://sourceforge.jp/magazine/09/02/12/0530242
http://www8.atwiki.jp/git_jp/pub/git-manual-jp/Documentation/gittutorial.html

を参考にした。

もともと、Cygwin環境自体は構築済みなので、Cygwinのsetup.exeで、
  1. git
  2. git-completion
  3. git-gui
  4. git-svn
  5. subversion-perl
  6. lv
の6つパッケージをインストール。ひさびさに更新したら、今回の作業とは関係ないいろんなモノをダウンロードしてしまった。lvは昔インストールした気もするが・・・まぁいいや。
しかし、ちょっと凝ったことしようとすると、Windowsがメインを前提とすると、途端にめんどくささが上がってしまう。。。
漢字コードやらなにやらで。ま、当ブログではマゾヒスティックに、Win環境にも関わっていきます。

8月末からPVががくっと落ちていた件

以前書いていた件だけども、原因は単純で:
テンプレートから、Googleアナリティクスのコードが消えていたこと
であった。いやはや。

これは、時期的に考えて、SyntaxHilighterを導入した際に、発生したと思われる。。。が、自分じゃ消した覚えが無いんですよね。
これ以外にも、seesaaブログでは
消したコードが復活していたりするなど
不審な動作を何回か経験しているのだが、どうしたもんか・・・

いままで、
  • はてな
  • seesaa
  • fc2
などを使ってきたけど、他のサービスも試してみる時期に来ているのかなぁ。。

ちなみに、それぞれのメリット・デメリットは
  • はてな:+エントリを書きやすい。-アフィリエイトしにくい
  • seesaa:+アフィリエイトしやすい -エントリを書きにくい。(とくにHTMLで書くとき、最悪)
  • fc2: -あんまり使わなかったけど、検索ヒットしにくい・・・?
という感じ。あくまで、個人的な感想だけど。

2010年10月21日木曜日

GAE: Windows環境でRubyをつかったGoogle App Engine開発環境導入まとめとコマンドヘルプ

■本稿の目的



Googleによる App Engine のチュートリアルは、とてもわかり易く、手順をシンプルに追った記述となっている。これにより、PythonまたはJavaを使ったGAEの開発の最低限の方法について、知ることができる。



しかしながら、このチュートリアルでは、以下のような難点がある:

  • Rubyの環境については触れられていない

  • 開発用のコマンドの詳細の説明については、省かれている

  • 手順を丁寧に追っているため、記述に若干冗長な感がある




加えて、ネット上の情報を見ると、それらのほとんどはLinuxベースの環境であって、Windows+Ruby環境でのGAE開発に触れた情報は少ない(Googleでキーワード「GAE Ruby Windows dev_appserver appcfg」で検索すると、実際のページ総数はたかだか「約 244 件中 3 ページ目 (0.24 秒)」件である)。



そこで、本稿は:

  • Windows環境(ActiveScriptRuby)

  • RubyをつかったGAE開発

  • Googleのチュートリアルより記述を簡潔に

  • ただし開発用コマンドの説明は詳細まで行う

という方針で、App Engineを利用した開発の手始めについてまとめた。


■凡例


本稿の表記
Googleのチュートリアルの表記、または本稿が想定する環境等

GAEアプリ
App Engineアプリケーション
GAE SDK
App Engineソフトウェア開発キット
GAEリモート動作環境
Googleによって提供されているApp Engine (Python|Java|etc...) ランタイム
 環境。
GAEローカル環境
GAEのソースの記述、ローカルWebサーバーでテストなどをおこなうGAEリモー
ト動作環境の外、すなわちあなたのPCなどのこと。
GAEアプリID
GAEアプリのための任意のID
GAE開発用コマンド
 核となるコマンド: dev_server.rb, appcfg.rb をいう。


■Google App Engineとは



App Engineとは:

  • メールサービス

  • Webサーバー・インタフェース
    Webアプリ
    Webアプリ・開発用コンソール http://(localhost:xxxx|appid.appspot.com)/_ah/admin
     (上記Webアプリは、GAEアプリとしての特徴を有する)

  • ストレージ

を有する、Googleによるサービスの総体のことである。


これらのサービスを使って、ユーザによりGAE SDKを使って開発されるものを、本稿では、GAEアプリと呼ぶ。


GAEアプリを開発、実行する環境は、2つあり:
 GAEリモート動作環境、
 GAEローカル環境
とよぶ。
 
 



■RubyのGoogle App Engine環境



本稿では、単にApp Engineを導入するのでなくて、Rubyを用いた環境を導入する
ことを想定している。実際には、Javaの環境をベースに JRubyを介して、Rubyを
利用する形となる(一般的に提供されている、PythonやJavaによる環境ではない
��。


このRubyを利用するための環境は、 gem形式でGoogleが用意してくれている。
 



■GAEアプリ開発の一連の流れを簡潔に述べる



チュートリアルの流れを、簡潔に表にまとめた。





































ステップ用意するもの得られるものやること

1.GAE開発環境の用意

GAE SDKのダウンロード作業

GAEの開発環境

Ruby用のGAE SDKをインストールする。
方法については、

前回の記事

を参照のこと。 

2.GAEアプリのアカウントを登録

Googleアカウント、
GAEアプリID、
SMSを受信できる携帯電話

GAEアプリのURL(http://GAEアプリID.appspot.com/)

GAEアプリのアカウント登録サイトで、必要とされる情報を入力する※。


3.GAEローカル環境でのGAEアプリの開発

ソースコード

GAEアプリ

GAEアプリのソースコードを記述する。

4.GAEリモート動作環境へのアップロード

GAEアプリ、
アップロード・コマンドの実行(appcfg.rb)、
GoogleアカウントのIDとパスワード

GAEリモート動作環境でのGAEアプリの起動

アップロード・コマンドを実行し、GAEリモート動作環境にアップロードする。




※ステップ2の注意



SMSの登録内容について。電話番号の表記の仕方(81を含むのかそうでないか)、メ
ールアドレスかイマイチ判然としない。何度か試しているうちに、Googleか
らSMSが来たため、どれが正しいかわからなかった。



このサイト

でも、同様の事例をまとめているようだ。


Googleから送信されるSMSには、"Google App Engine Code: xxxxxxx"(xは数
字)という内容で、これがGoogleの GAEアカウント認証サイトによって認証
される必要がある。(当方は、ドコモの携帯電話で2010年 9月に行った。)
 
 
 
 




■GAE開発用コマンドについて



GAE SDKのをインストールすると、チュートリアルに紹介されているコマンド:
dev_appserver.rb, appcfg.rb が、ディレクトリ: %RUBY_HOME%\bin\ などに、
格納される(実際には、BATファイルからなる複数のスクリプトから構成されるが、本稿で
はここのスクリプトについての説明は割愛する)。



◆概要



●dev_appserver.rb



開発用のローカルWebサーバー兼GAEローカル環境でのGAEアプリのランチャ。
使い方:
 dev_appserver.rb [オプション] <warディレクトリ>



「warディレクトリ」にあるGAEアプリを、ローカル環境で起動する。


このローカルWebサーバーは、Googleアカウントをシミュレートしていて、独自
のログイン、ログアウト画面を有する。



●appcfg.rb



GAEアプリの管理コマンド


使い方:
 D:/PROGRA~1/ruby-1.8/bin/appcfg.rb [options] <action> <app-dir> [<output-file>]




管理とは、以下のことを指す:

  • ランタイム環境へのGAEアプリのアップロード
  • index.yamlの更新・削除
  • スケジュール・タスクの管理
  • スケジュール・タスクの管理

  • ランタイム環境へのデータのアップロード

http://code.google.com/intl/ja/appengine/docs/python/tools/uploadinganapp.html




◆GAE開発用コマンドの詳細説明




●dev_appserver.rb



開発用のローカルWebサーバー兼GAEローカル環境でのGAEアプリのランチャ。



使い方:



  <dev-appserver> [options] <war directory>

※--help オプション時も、<war directory>指定が必要



オプション:



--help, -h
 このヘルプメッセージを表示して終了。

--server=SERVER
 -s SERVER
  最新のSDKバージョンを判別に使用するサーバの指定。

--address=ADDRESS
 -a ADDRESS
  WebサーバーがバインドするローカルPC上のインタフェースのアドレスの指
  定(もしくは、0.0.0.0 で全てのインタフェース)。

--port=PORT
 -p PORT
  WebサーバーがバインドするローカルPC上のポート番号の指定。

--sdk_root=root
 格納されているSDKでオーバーライドする場合のSDK格納ディレクトリの指定。

--disable_update_check
  最新のSDKバージョンのチェックを無効に指定。




例:




D:\Program Files\ruby-1.8\usr\local\sinatra_test>dev_appserver.rb --help .
D:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/appengine-tools-0.0.15/lib/appengine-tools/boot.rb:50: warning: `*' interpreted as argument prefix
=> Skipping update check
=> Booting DevAppServer
=> Press Ctrl-C to shutdown server
Usage: <dev-appserver> [options] <war directory>

Options:
--help, -h                 Show this help message and exit.
--server=SERVER            The server to use to determine the latest
-s SERVER                   SDK version.
--address=ADDRESS          The address of the interface on the local machine
-a ADDRESS                  to bind to (or 0.0.0.0 for all interfaces).
--port=PORT                The port number to bind to on the local machine.
-p PORT
--sdk_root=root            Overrides where the SDK is located.
--disable_update_check     Disable the check for newer SDK versions.




●appcfg.rb



GAEアプリの管理コマンド。



使い方:



 D:/PROGRA~1/ruby-1.8/bin/appcfg.rb [options] <action> <app-dir> [<output-file>]




アクション:



<action>は、以下のうちいずれか 1つである必要がある:


 help
  あるアクションのヘルプを出力する
 request_logs
  リクエスト・ログをApache共通ログ形式で出力する。
 rollback
  処理中の更新をロールバックする。
 update
  新しいバージョンのGAEアプリに更新、あるいは新規作成する。
 update_indexes
  GAEアプリのインデックス(注)を更新する。
 update_cron
  GAEアプリのcronジョブを更新する。
 update_queues
  GAEアプリのタスク・キューの定義を更新する。
 update_dos
  GAEアプリの対DoS保護の環境設定を更新する。
 version
  バージョン情報を出力する。
 cron_info
  cronジョブの次回の実行までの時間を表示する。
 run
  ユーザーのGAEアプリ環境でjrubyを実行する。
 bundle
  GAEリモート環境へのデプロイのために、ローカルのGAEアプリをパッケージングする。




'run' コマンドは、カレント・ディレクトリをGAEアプリのディレクトリと、みなします。
'help <action>' で、詳細の説明を見てください。



オプション:



-h, --help            ヘルプを表示して終了。
-s SERVER, --server=SERVER
接続を行うサーバー。
-e EMAIL, --email=EMAIL
利用するユーザ名。省略時は入力待ちに。
-H HOST, --host=HOST  全てのRPCで送られるホストヘッダの上書き。
-p PROXYHOST[:PORT], --proxy=PROXYHOST[:PORT]
指定したプロクシ・サーバを介してリクエストをプロ
する。
--proxy_httpsも指定した場合、HTTPだけがプロクシ
され、そうでなければHTTPとHTTPSの両方がなされる。
--proxy_https=PROXYHOST[:PORT]
HTTPSリクエストをプロクシするプロクシ・サーバ。
--sdk_root=root       GAE SDKの格納場所を上書きする。
--passin              標準入力からログイン・パスワードを読む。
--insecure            管理コンソールとの通信ではHTTPSを使用しない。
--enable_jar_splitting
巨大なjarファイル(> 10M)を小さなファイルに分割する。
Split large jar files (> 10M) into smaller fragments.
--jar_splitting_excludes=SUFFIXES
--enable-jar-splitting が指定された場合、コンマ
区切りでSUFFIXESに指定された拡張子にマッチするファイルは、全ての
jarファイルにおいて、分割から除外される。
When --enable-jar-splitting is set, files that match
the list of comma separated SUFFIXES will be excluded
from all jars.
--retain_upload_dir
GAEリモート環境へのアップロード時に使用した一時ディレクトリを残す。
Do not delete temporary directory used in uploading.
--compile_encoding
JSPをコンパイルするときに使用する文字エンコーディングの指定
The character encoding to use when compiling JSPs.
-n NUM_DAYS, --num_days=NUM_DAYS
ログデータを入手する日数の指定。カットオフ・ポイントは、UTCで12時
である。できるだけ全てのログを得る場合は 0 を指定する。デフォルト
値は 1 である。
Number of days worth of log data to get. The cut-off
point is midnight UTC. Use 0 to get all available
logs. Default is 1.
--severity=SEVERITY ? アプリレベルログメッセージのシビア度の指定。範囲は 0
(DEBUG) から 4 (CRITICAL)である。
Severity of app-level log messages to get. The range
is 0 (DEBUG) through 4 (CRITICAL). If omitted, only
request logs are returned.
-a, --append          既存のファイルに追記する。
-n NUM_RUNS, --num_runs=NUM_RUNS
スケジュールされた計算するための実行時間の数
Number of scheduled execution times to compute




例:



D:\Program Files\ruby-1.8\usr\local\sinatra_test>appcfg.rb --help
D:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/appengine-tools-0.0.15/lib/appe
ngine-tools/appcfg.rb:51: warning: `*' interpreted as argument prefix
D:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/appengine-tools-0.0.15/lib/appe
ngine-tools/boot.rb:50: warning: `*' interpreted as argument prefix

usage: D:/PROGRA~1/ruby-1.8/bin/appcfg.rb [options] <action> <app-dir> [<output-
file>]

Action must be one of:
help: Print help for a specific action.
request_logs: Write request logs in Apache common log format.
rollback: Rollback an in-progress update.
update: Create or update an app version.
update_indexes: Update application indexes.
update_cron: Update application cron jobs.
update_queues: Update application task queue definitions.
update_dos: Update application DoS protection configuration.
version: Prints version information.
cron_info: Displays times for the next several runs of each cron job.
run: run jruby in your application environment.
bundle: package your application for deployment.
The 'run' command assumes the app directory is the current directory.
Use 'help <action>' for a detailed description.

options:
-h, --help ? ? ? ? ? ?Show the help message and exit.
-s SERVER, --server=SERVER
? ? ? ? ? ? ? ? ? ? ? The server to connect to.
-e EMAIL, --email=EMAIL
? ? ? ? ? ? ? ? ? ? ? The username to use. Will prompt if omitted.
-H HOST, --host=HOST ?Overrides the Host header sent with all RPCs.
-p PROXYHOST[:PORT], --proxy=PROXYHOST[:PORT]
? ? ? ? ? ? ? ? ? ? ? Proxies requests through the given proxy server.
? ? ? ? ? ? ? ? ? ? ? If --proxy_https is also set, only HTTP will be
? ? ? ? ? ? ? ? ? ? ? proxied here, otherwise both HTTP and HTTPS will.
--proxy_https=PROXYHOST[:PORT]
? ? ? ? ? ? ? ? ? ? ? Proxies HTTPS requests through the given proxy server.
--sdk_root=root ? ? ? Overrides where the SDK is located.
--passin ? ? ? ? ? ? ?Always read the login password from stdin.
--insecure ? ? ? ? ? ?Do not use HTTPS to communicate with the Admin Console.
--enable_jar_splitting
? ? ? ? ? ? ? ? ? ? ? Split large jar files (> 10M) into smaller fragments.
--jar_splitting_excludes=SUFFIXES
? ? ? ? ? ? ? ? ? ? ? When --enable-jar-splitting is set, files that match
? ? ? ? ? ? ? ? ? ? ? the list of comma separated SUFFIXES will be excluded
? ? ? ? ? ? ? ? ? ? ? from all jars.
--retain_upload_dir
? ? ? ? ? ? ? ? ? ? ? Do not delete temporary directory used in uploading.
--compile_encoding
? ? ? ? ? ? ? ? ? ? ? The character encoding to use when compiling JSPs.
-n NUM_DAYS, --num_days=NUM_DAYS
? ? ? ? ? ? ? ? ? ? ? Number of days worth of log data to get. The cut-off
? ? ? ? ? ? ? ? ? ? ? point is midnight UTC. Use 0 to get all available
? ? ? ? ? ? ? ? ? ? ? logs. Default is 1.
--severity=SEVERITY ? Severity of app-level log messages to get. The range
? ? ? ? ? ? ? ? ? ? ? is 0 (DEBUG) through 4 (CRITICAL). If omitted, only
? ? ? ? ? ? ? ? ? ? ? request logs are returned.
-a, --append ? ? ? ? ?Append to existing file.
-n NUM_RUNS, --num_runs=NUM_RUNS
? ? ? ? ? ? ? ? ? ? ? Number of scheduled execution times to compute




■TODO




  • gem について

  • App Engine の設定項目について

  • GAE Ruby で使用されているRuby FWについて






2010年10月7日木曜日

Ruby関連 HTML/Webスクレイピング・ライブラリ・レビュー

HTML/Webのスクレイピング処理の観点から、有名どころのRubyのライブラリについて、現状(2010年10月時点)を調査した。調査項目は凡例に示すとおりである。ライブラリの比較・選定に際して、判断のひとつの材料として資することを、期待している。

なにかご意見がありましたら、お気軽にコメントをどうぞ。
2014-05-06追記: 新しいのはこちら→2014年版



■凡例



  • ■の次に、ライブラリ名 (現時点(2010年)でのバージョン)を記す

  • desc に、ライブラリの目的・機能仕様などの説明を記す

  • update に、ライブラリの更新期間を記す。ここで、yyyy-と記されている場合、yyyy年から現時点でも更新されていることを表す

  • url には、ライブラリのHPを記す。特にない場合、また情報が不足している場合は、補うに足るurl(ソースコードのurl)を追記している

  • ライセンスには、配布条件等のライセンスを記す

  • ソースコードには、ライブラリの格納場所のurlを記す

  • インストールには、ライブラリのインストール方法を記す

  • コメントには、補足の情報、私見などを記す

■Hpricot (0.8.2)


desc:
Hpricot は、非常に柔軟なHTMLパーサーで、田中 哲(TANAKA, Akira)の
HTree とジョン・レッシグ(John Lessig)の jQuery に基づいている。しかし、
コード・スキャナは、C でコーディングし直された。

update:
2006-


ライセンス:
MIT License (see http://github.com/hpricot/hpricot/blob/master/COPYING )


rubyforge:
N/A

インストール:
gem install hpricot

コメント
多くの派生ライブラリを持つHTMLパーサー。webスクレイピングにも使うこと
ができる。
以前の公式サイト(http://code.whytheluckystiff.net/hpricot/)は、リン
ク切れである。

田中 哲氏のhtreeは、 http://www.a-k-r.org/index.html からたどることがで
きる。

■Mechanize (1.0.0)


desc:
Mechanizeライブラリは、webサイト間のやり取りを自動化するために
使用される。Mechanizeは、自動でクッキーを格納して送信、リダイレクトを
フォローし、リンクをたどったり、フォームをサブミットsubmitできる。フォーム・フィ
ールドは増やしたり、サブミットできる。また、履歴となった訪れたサイトを
調査する。

update:
2005-



ソースコード:
github:
http://github.com/tenderlove/mechanize


インストール:
gem install mechanize

コメント:
Andy LesterによるPerlの同名のライブラリ:Mechanize の強い影響のもとに開
発された。webスクレイピングのためのライブラリである。
ruby 1.8.6 と nokogiri に依存している。

インストール時に、エラーが発生するという報告がWeb上に散見される。この場合、gemとRailsの更新等が事前に必要とのこと。
※追記2010/12/7:バージョン1.0.0では、Hpricotではなく、Nokogiriを使用するようになっているようだ。

■ScrAPI toolkit for Ruby (1.2.0)


desc:
CSSセレクタと選択 => 抽出 => 格納 処理ルールを使ったスクレイパーを書く
ためのフレームワーク。

update:
2006-2008



ソースコード:
github:
http://github.com/assaf/scrapi


install:
gem install scrapi

コメント:
少し情報が古い(2007年)が、このような意見もあった:“Web scraping in
Ruby: why I had to use scrAPI instead of WWW::Mechanize and Hpricot”
http://blog.bigsmoke.us/2007/05/02/scrapi-wins-over-mechanize-and-hpricot-for-web-scraping-in-ruby

開発は、止まっているようだ。

■scRUBYt! (0.4.06)


desc:
scRUBYt! は、Rubyで記述された、シンプルだがパワフルなwebスクレイピング・
ツールキットである。目的は、webページ・クローリング、HTMLタグ・属性・
XPath・フォーム名のルック・アップ処理の超めんどくささ、また、その他Web
ページまたはFirebugから直接コピペしたようなサンプルからこれらを理解
するような、典型的な低レベルなwebスクレイピングから、あなたをフリーに
することである。

update:
2007-



ソースコード:
github:
http://github.com/scrubber/scrubyt


インストール:
gem install hpricot
gem install mechanize
gem install scrubyt

コメント:
hpricot と mechanize (選択的に、AJAXのスクレイピングにFireWtir)に依存
している。

■nokogiri (1.4.3.1)


desc:
Nokogiri は、libxmlラッパーである。Nokogiri は、XPathやCSSの検索のため
のインタフェースを持ち、また、HTML, XML, SAX, そしてReaderパーサーの機
能がある。Nokogiri は、Hpricotの寄り道リプレイスメントでもある。

update:
2008-


ライセンス:
The MIT License (via http://nokogiri.org/ )

ソースコード:
github:
http://github.com/tenderlove/nokogiri/


インストール:
gem install nokogiri

コメント:
この中で、一番包括的な機能を持つパーサー。もちろん、webスクレイピングに
も使うことができる。


2010年9月27日月曜日

VBAUnit: クラス構成

前回(http://voidptr.seesaa.net/article/163865170.html )は、パッケージ構成についてみた。
本エントリでは、クラス構成についてみてみる。


クラス構成
net版
net版を組み込んだ場合、以下のようになる:
Microsoft Excel Objects  とくになし

標準モジュール VbaUnitMain

クラス モジュール Assert
AutoGen
IAssert
IResultUser
IRunManager
ITest
ITestCase
ITestManager
RectangleClass*
RectangleTesterDisabled
RunManager
SimpleTester
TestCaseManager
TestClassLister
TesterTemplate
TestFailure
TestResult
TestRunner
TestSuite
TestSuiteManager


jp版
jp版を組み込んだ場合、以下のようなプロジェクトが追加される:

VBAHelperProject (VBAHelper.xla) Microsoft Excel Objects Sheet1 (Sheet1)
ThisWorkbook

標準モジュール TestVBAHelperModule
VBAHelperModule

VBAUnit(VBAUnit.xla) Microsoft Excel Objects Sheet1 (Sheet1)
Sheet2 (Sheet2)
Sheet3 (Sheet3)
ThisWorkbook

フォーム frmTestResult

標準モジュール VBAUnitAssert
VBAUnitModule

クラス モジュール TestCase
TestResult
TestSuite

VBAUnit: パッケージの構成

VBAUnitは、SourceForgeのプロジェクトとしては、同名のものが2種類存在する:
rharwood氏によるVBAUnit ( http://sourceforge.net/projects/vbaunit/ ; 2010年現在は、Adminされてない模様)と、ikagawa氏による VBAUnit ( http://sourceforge.jp/projects/vbaunit/ ) である。

以下、rharwood氏によるプロジェクトのパッケージをnet版、ikagawa氏によるプロジェクトのパッケージを、jp版と呼ぶ。


パッケージの構成
パッケージの構成は、以下のとおりである:
●net版
net版は、ドキュメント、クラスファイル、モジュールファイル、サンプル(Excel, Access)からなる。

■ファイル名
vbaunit.zip
■ファイル構成
ファイル名種類パッケージ
vbaunit/
readme.html
modules/
Assert.cls
AutoGen.cls
IAssert.cls
IResultUser.cls
IRunManager.cls
ITest.cls
ITestCase.cls
ITestManager.cls
RectangleTesterDisabled.cls
RunManager.cls
SimpleTester.cls
TestCaseManager.cls
TestClassLister.cls
TesterTemplate.cls
TestFailure.cls
TestResult.cls
TestRunner.cls
TestSuite.cls
TestSuiteManager.cls
VbaUnitMain.bas
samples/
VBAUnit.xls
VBAUnit.mdb

●jp版
jp版は、アドイン形式(.xla)のファイルで構成される。
■ファイル名
VBAUnit.zip

■ファイル構成
VBAUnit/
VBAHelper.xla アドイン形式
VBAUnit.xla アドイン形式

2010年9月21日火曜日

そういえば

8月の頭ほどから、PVががくんと落ちいてる。検索エンジンからのアクセスが、激減した様子だ。トータルで言うと、これまでの1/10位のPV数になっている。

もともと、アクセス対策はしてなかったとはいえ、この現象の原因は、ちょっと気になっている。SyntaxHilighterに対応して、古い記事のカテゴリ、記事を修正したあたりだろうか…。

2010年9月2日木曜日

親指シフト入力の環境2010

親指シフト環境については今まで何度か試してきたが、今日見かけたエントリ
Google日本語入力+DvorakJ(キーボード配列の設定変更ソフト)
が、最強だとわかったので、以降コレで通そうと思う。

以前に一度お試しで、Google日本語入力については、インストールしていたが、
今回インストールし直した。

それ以外については、上記のエントリで、最低限の設定については知ることができる。
blechmuzik氏によるDovorakJのページは、こちら

細かい操作方法で気になる点はある─GoogleIMEとDovorakJの両方の設定の問題と思われるが─ので、別途エントリをあげようと思う。
が、この環境は、これはまったくすばらしい。


なにより、これでやっと、糞のようなMS-IMEから、完全に開放される!!