各種情報
• 無線 LAN アクセスポイント
– AP0007406A1B99
– Jumpstart-P1-4b363d
Google App Engine Hackathon in Kyoto
第二回 事前勉強会
京都GTUG
マネージャー 山下大介
はじめに
• 本日は、みなさまお越し下さいまして、ありが
とうございます。
注意点
• 写真撮影はご自由にどうぞ。
– フラッシュは控えて頂けると助かります。 – ブログへの掲載も問題ありません。
• スタッフ以外の顔が入っているものは、加工していた だくか個別に許可を取って下さい。
注意点
• スタッフもイベントの様子を撮影します。
– 8月8日のHackathon終了後に京都GTUGおよ び京都GTUGが許諾したメディアなどで公開され ます。
– 参加者には事前に写真データが共有され、公開 されると問題のある写真はご連絡頂ければ、削 除・加工の措置を取ります。
自己紹介
• 山下 大介
– メール:[email protected]
– ブログ:http://blog.daisukeyamashita.com/ – twitter:http://twitter.com/dddaisuke
• 京都GTUG マネージャー
• 株式会社SOBAプロジェクト 取締役
– KRP2号館2階
• 会社では自社開発のP2P通信方式による、VoIP技術の普及に努めており、ここ 数年は主にサーバサイド周りの技術検証/実装をしています 。(主に、ウェブ会 議システムのSOBA CITYやSOBA mierukaの開発)
京都 GTUG とは?
正式名称
「Kyoto Google Technology User Group」
Kyoto GTUG
Kyoto GTUG Kyoto GTUG Kyoto GTUG
目的
純粋・シンプルにGoogleのテクノロジーを 理解・習得するための活動をする。
(これは、世界中のGTUG共通の目的)
*漢字表記の「京都GTUG」は国内のみの利用でお願いします。
Google Technology User Group とは?
• 現在、全世界で30ヶ国70を超える地域でローカルなGTUG が設立されています。
– http://www.gtugs.org/directory
• 各地域で、Googleのテクノロジーに興味のある方々が組織 を立ち上げています。
• 将来的には、地域を越えたイベントもやりたいよね!という 話が、マネージャのMLでやりとりされています。
京都 GTUG へ!
• まだ、参加してない方はぜひ参加して下さいね!
http://kyoto-gtug.org/
http://kyoto-gtug.org/ http://kyoto-gtug.org/ http://kyoto-gtug.org/
http://group.kyoto-gtug.org/
http://group.kyoto-gtug.org/ http://group.kyoto-gtug.org/ http://group.kyoto-gtug.org/
勉強会に入る前に・・・
• Hackathon で利用しようと思っている言語を
教えてください。
– Python – Java
– その他(PHP, Ruby, Scala・・・)
• GAE/J上でRubyを実行してみる
• GAE/J上でPHPを実行してみる
Nothing is impossible on the JVM
JVM 上で不可能なことなど何もない
Charles Nutter
Nothing is impossible on the JVM
• JRubyでコア開発メンバーを務めるチャールズ・ナッ ター氏が、2009年6月1日にサンフランシスコで行わ れたCommunity One(JavaOne)の講演で語った 台詞です。
JVM で Ruby を実行する JRuby
• JRubyは、RubyインタープリタのJavaによるオープンな実装です。
– いくつかのライセンスで公開されています。 – Java 1.5+で動作します。
– 現在のバージョンは1.2
• 主要開発者はサン・マイクロシステムズに雇用されています。
– ThoughtWorksに雇用されてる人もいるよ!
• Ruby 1.8.6 リファレンス実装よりも多くの場合高速に動作する。
– ベンチマーク1 – ベンチマーク2
JRuby と Java との連携
• JRubyとRubyは基本的に同じですが、JRuby の強 力な機能の一つとして、Javaプラットフォームのクラ スを呼び出すことができます。
環境のセットアップ
• Java
– JDK/JREどちらでも良い – JAVA_HOMEの設定
• Google App Engine SDK for Java
– http://code.google.com/intl/ja/appengine/downloads.html – $APP_ENGINE/binにパスを通す
環境のセットアップ
• JRuby
– http://dist.codehaus.org/jruby/current/
• 1.2.0以降が良さそう(現在1.3.0)
• JRuby, Ruby stdlib, RubyGems, rakeが含まれる
– <jruby-dir>/binをPATHに追加
• gems
– gem install rspec
– jruby -S gem install rspec
• Warbler(Rackが同梱されています)
– jruby -S gem install warbler
JRuby から Java を呼び出す
include Java
frame = javax.swing.JFrame.new()
frame.getContentPane().add(javax.swing.JLabel.new('Hello, World!')) frame.setDefaultCloseOperation(javax.swing.JFrame::EXIT_ON_CLOSE) frame.pack()
frame.set_visible(true)
frame.content_pane.add label frame.visible = true
また、JavaコードをよりRuby的なアンダースコアを使った 命名規則で呼び出し、JavaBeanのプロパティを属性とし て参照できる。
まず "include Java"(以前のバージョンでは "require 'java'")として
JRuby の Java サポートをロードする。以下の例は、 Javaの JFrame に JLabel を付与したものを生成する。
Wikipediaより引用 http://ja.wikipedia.org/wiki/JRuby
デモ
Live Demo
Rails
• David Heinemeier Hanssonにより開発
– プロジェクト管理ツール"basecamp"の開発に用いられたコードを一般化
• 基本理念「同じことを繰り返さない」
– DRY:Don't Repeat Yourself (The Pragmatic Programmer:達人プログラマー) – 「設定より規約」(CoC:Convention over Configuration)
• 強固なソフトウェア
• プログラマーの生産性のために、最適化されている
• オープンソース
• すばらしいコミュニティ、プラグイン、拡張
Rails + JRuby
• 簡単なセットアップ
• すばらしいパフォーマンス
• 数千のライブラリー
• 簡単なデプロイ
• 幅広いデータベースのサポート
• プラットフォームから独立している
– JRuby on Rails on AS/400, calling DB2
Warbler
• Railsアプリをwarファイルに固めるGem
– 自身を含める
– JRubyとサーブレットアダプタを含める
• jruby -S gem install warbler
• jruby -S warble config
• jruby -S warble
Rack
• ウェブアプリケーションをディスパッチするための良 く定義されたインタフェース
• 基本的にすべてのRubyウェブフレームワークで、サ ポートされます。
• JRuby-rack
– RackServlet
– JRubyランタイムのプーリング
Reggae
• Ruby Enabled GooGle App Engine
– ↑どう見ても無理やりです(笑)
• 単純化されたサポート
– 設定
– Gem-to-Jar バンドラー
– Rackアプリをローカル開発サーバーで簡単に実行できます – 簡単にデプロイできます
• という、夢を見ました(笑)
– これは、また完成していません。。。
DataMapper
• Ruby ORM ツール
• データソース用のアダプター
– dm-datastore-adapter
• DataMapperインターフェイスを経由したシンプルな クエリーをサポートしています。
Sinatra
require 'rubygems' require 'sinatra' get '/' do
'Hello world!' end
Sinatraは、ウェブアプリケーションをRubyに書くための小さいDSL
(Domain Specific Language)です。Railsは大げさすぎるという時に利用 します。
シンプルなコード:
SinatraはGoogle App Engine上でJRuby-rackと一緒に利用するときに 、 より良く動作します。
Ramaze
(ラマゼ)• Sinatraのように小さなウェブフレームワークです。
• 特徴として、モジュラーな設計で、いろいろな部分が 取り替え可能です。
• Rackの下で実行されます。
• DataMapperと共に動作します。
• シンプルで自由度が高いです。
• スレッドの利用を回避するために簡単なパッチを必 要とします。
Google App Engine Service
JRuby ラッパー
bumble
• DB のかわりに、 Google DataStore にアクセ
スするためのライブラリ
dm-datastore-adapter
• DataMapper から Google DataStore にアクセ
スするためのアダプタ
BeeU
動作を保護するために、問題のコントローラに以下を加え てください。
UserServiceとの非常に簡単な統合
認証状態を自動的に設定するため、application.rbに以下 のコードを加えます:
include BeeU
before_filter :assign_user
before_filter :assign_admin_status
require_admin :remove
image-gae
• ImageScience のかわりに、 Google 独自の画
像処理ライブラリにアクセスするラッパー
pony-gae
• Google のメールサービス利用ラッパー
urlfetch-gae
• net/http が直接利用できないので、通信をす
るための URL フェッチラッパー
rb-gae-support
• 現在開発中!
• GAE の各 API に対する全ラッパー
制限
• ファイル制限
– ファイル数 < 1000個
• 3000個に増えているハズですが試していません
– jarファイルのサイズ < 10MB
• 通信の制限
– net/http,activeresourceなどRubyのURLフェッチライブラリは利用できない
• データストアの制限
– ActiveRecordは利用できない
• Image API
– RMagick/attachment_fu/ImageScience/ImageVoodoo/javax.imageが利用できない
• スレッドが利用できない
• ファイルを書き出すことができない
• いくつかのリフレクションが使えない
GAE で JRuby 最も簡単に使う方法
<application>アプリケーションIDIDIDID</application>
<version>バージョン名</version>
• http://github.com/nicksieger/jruby-rack/tree/master/examples/rails
画面中央の[download]ボタンからファイルをダウンロード
/examples/rails/appengine-web.xml
• /examples/railsで
$ jruby -S rake appengine:deploy email={email} password={pass}
Windowsの場合、事前に以下のファイルを修正しておく /examples/rails/lib/tasks/deploy.rake
92,94行目 catをtype
96行目 appcfg.shをappcfg.cmd
GAE で JRuby 最も簡単に使う方法
• 最初の一回だけ、エラーになると思いますので、以下のコマンドを実行し て下さい。二回目以降は正常にアップロードできると思います。
>appcfg.cmd --email=メールアドレス --passin --enable_jar_splitting update tmp/war Password for メールアドレス: パスワード
デモ
• ソースコードはHackathon用のリポジトリに入っています http://code.kyoto-gtug.org/
• GAE/J上でRubyを実行してみる
• GAE/J上でPHPを実行してみる
Quercus
• JavaベースのPHPプロセッサ
• Javaで実装されているためセキュリティ面でより安全
• mod_phpよりも高速
• Javaクラスにコンパイルされて実行されるため、既存の Java用プロファイラ等を利用可能
• もちろん、既存のJavaライブラリを利用することもできる
セットアップ
• 以下の5ファイルを[プロジェクトdir/war/WEB-INF/lib]にコ ピーする。
• http://quercus.caucho.com/download/quercus-3.1.6.war
• jar xf quercus-3.1.6.war
– WEB-INF/lib/quercus.jar – WEB-INF/lib/resin-util.jar – WEB-INF/lib/script-10.jar
• http://dist.codehaus.org/jetty/jetty-6.1.17/jetty-6.1.17.zip
– lib/jetty-6.1.17.jar – lib/jetty-util-6.1.17.jar
appengine-web.xml (一部)
<!-- Quercus用の設定 -->
<!-- PHPファイルを静的なファイルから除外 -->
<static-files>
<exclude path="/**.php" />
</static-files>
<!-- PHPファイルをリソースファイルとして登録 -->
<resource-files>
<include path="/**.php" />
</resource-files>
web.xml (一部)
<servlet>
<servlet-name>Quercus Servlet</servlet-name>
<servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class> <init-param>
<param-name>script-encoding</param-name> <param-value>UTF-8</param-value>
</init-param> <init-param>
<param-name>ini-file</param-name>
<param-value>WEB-INF/php.ini</param-value> </init-param>
</servlet>
<servlet-mapping>
<servlet-name>Quercus Servlet</servlet-name> <url-pattern>*.php</url-pattern>
</servlet-mapping>
php.ini
• php.iniは「war/WEB-INF」に配置する。
• QuercusのPHP環境では、バイト列がISO-8859-1として扱 われるので、Unicodeとして扱いたい場合には、
unicode.semanticsをonにする必要があります。
unicode.semantics=on
unicode.http_input_encoding=UTF-8 unicode.output_encoding=UTF-8 unicode.runtime_encoding=UTF-8
文字コードについては、この辺りが詳しい:http://www.atmarkit.co.jp/fjava/column/koyama/koyama05_2.html
ソースコード( php ファイル)の設置
• phpファイルは、warディレクトリに配置します
• srcにファイルが1個も存在しない場合、Google
App Engineへのデプロイに失敗します。(クライアン ト側の制限)
デモ
• ソースコードはHackathon用のリポジトリに入っています http://code.kyoto-gtug.org/
Hackathon に向けて
• Hackathon に向けて、 Google App Engine で
開発されたアプリをみんなで見てみましょう!
• 具体的には、「 appspot.com 」ドメインを検索
すると良いです。
• 「 http://app-gallery.appspot.com/ 」などを見
て回るのも良いと思います。
リポジトリの変更
• リポジトリのURLが少し、長いのでリポジトリを取得 しなおしました。
• Google Code
http://code.google.com/p/kyoto-gtug/
• ショートリンク
http://code.kyoto-gtug.org/