GAE/J+jRuby+SinatraでWebアプリ開発-インストール〜デプロイ編
前回のエントリから大分時間が経ってしまいましたが、GAE/J+jRuby+sinatraでruby製Webアプリケーションを簡単に公開出来る感じなので試してみます。今回はプロジェクトの作成〜sinatraのインストール〜本番環境へのデプロイです。
プロジェクトの作成
プロジェクト名(開発時のプロジェクトディレクトリと公開後のドメインになる)を決めて以下のコマンドでプロジェクト作成します。
$ appcfg.rb generate_app {appname}
プロジェクトフォルダには以下のようなファイルとディレクトリが自動生成されます。
$ ls {appname} -rw-r--r-- 1 iskata staff 149 5 10 01:10 Gemfile drwxr-xr-x 6 iskata staff 204 5 10 01:11 WEB-INF drwxr-xr-x 3 iskata staff 102 5 10 01:11 bin -rw-r--r-- 1 iskata staff 219 5 10 01:11 config.ru drwxrwxrwx 4 iskata staff 136 5 10 01:11 public
gemのインストール
必要なgemはプロジェクト単位にインストールする必要があります。追加したいgemを自動生成された「Gemfile」というファイルの中に記述するだけでOK。デフォルトでappengine-rackはバンドルされているので、とりあえずsinatraを追加します。
## Gemfile ## # Critical default settings: disable_system_gems disable_rubygems bundle_path ".gems/bundler_gems" # List gems to bundle here: gem "appengine-rack" gem "sinatra" # <<追加
実際のインストールは以下のコマンド一発で依存関係の解決も含めて全て対応してくれます。すごいラクチン。
$ appcfg.rb bundle .
*注)参考サイトでも情報が古いものだと以下のようにしてインストールしている記事がありますが、今はDeprecatedってエラーが出て動かないです。(Deprecatedだったら動いてもイイと思うのだけど・・)
appcfg.rb gem install <gemname> Sorry, the 'appcfg.rb gem' option is deprecated. Simply update the 'Gemfile' and run 'appcfg.rb bundle .' instead.
config.ruの設定
自動生成されたconfig.ruは生のrackを使うようになっているので、sinatraベースのアプリ本体をrequireして、run Sinatra::Applicationに書き換えます。
# 変更前 require 'appengine-rack' AppEngine::Rack.configure_app( :application => "{appname}", :precompilation_enabled => true, :version => "1") run lambda { Rack::Response.new("Hello").finish }
# 変更後 require 'appengine-rack' AppEngine::Rack.configure_app( :application => "{appname}", :precompilation_enabled => true, :version => "1") require 'iskata' #この名前はsinatraアプリのメインルーチンのファイル名と合わせる run Sinatra::Application
sinatraアプリケーションの開発
プロジェクトのホームディレクトリに、以下のファイルとディレクトリを作成します。
iskata.rb # sinatraアプリのメインルーチン views/ # erb , haml , sass というテンプレートエンジンがデフォルトで使える。 models/ # ロジックは取り敢えずこの中に置くようにする controllers/ # あまり複雑な振り分けが無かったらsinatraだけで処理してもいいかも
iskata.rbという名前でとりあえず以下のアプリを。"/"と"/world"の2つのリソースを処理できるようにしてみます。
# iskata.rb require 'rubygems' require 'sinatra' # /へのリクエスト get '/' do erb :index end # /worldへのリクエスト get '/world' do erb :world end
テンプレートエンジンのhamlとsassはDSLで簡潔にHTMLを書けるのがメリットみたい。僕はHTMLが好きなので素直にerbを使います。layout.erbという名前で共有テンプレートを使える。views/の中身は以下のような感じ。
$ ls views/ index.erb # /のページテンプレート world.erb # /worldのページテンプレート layout.erb # レイアウトを決める共通テンプレート
layout.erb。<%=yield%>のところにindex.erbの処理結果が入ってきます。
< !--layout.erb-- > <html> <head><title>iskataのGAEアプリ</title></head> <body> <div id="wrapper"> <div id="header"><img src="/images/logo.png"></div> <div id="content"> Hello <%= yield %> </div>< !-- /content -- > </div>< !-- /wrapper -- > </body> </html>
「/」はとりあえず自分の名前を呼んでもらうように、「/world」はHello, World!と返してくれるようにします
< !--index.erb-- >
Iskata!
< !--world.erb-- >
World!
Staticコンテンツの配置
画像、CSS、JavaScriptなどのStaticなコンテンツはpublic/に配置します。images/、css/、scripts/とそれぞれディレクトリを作って使うことに。最初からrobots.txtとfavicon.icoがあるのでそれはそのままに。
$ ls public/ favicon.ico robots.txt images/ css/ scripts/
開発サーバーの起動
ここまでで一通り揃ったのでローカルで確認します。GAE/Jの開発用Webサーバーをローカルに起動するにはシンプルに以下のコマンドを実行するだけでOKです。
$ dev_appserver.rb .
フォアグラウンドでlocalhost:8080でサーバーが立ち上がります。「http://localhost:8080/」にアクセスして開発した画面が見えてればOK。落としたいときはCtrl+Cで。
本番へのデプロイ
ある程度ローカルで動いたら以下のコマンドで本番のGAEへデプロイします。
$ appcfg.rb update .
http://{appname}.appspot.com/ にアクセスすると"Hello, Iskata"が表示されて、http://{appname}.appspot.com/worldなら"Hello, World"が表示されます。おおー、なんて簡単なんだ。ちょっと感動します。
次回
Twitterのリストのタイムラインを表示してみます。
補遺
レールを降りることのススメ(inspired by たぬきちの「リストラなう」日記)
出版社のリストラに応募し、その内容をかなり赤裸々に語っている「たぬきちの「リストラなう」日記」を購読していて、「たぬきちさん頑張って!」といつも陰ながら応援している。
このブログは、(意図的だと思うけど)かなり重いテーマであるリストラという話題が、軽い口調で書いてあって楽しい。詳細は読んでもらった方が早いので読んでみてください。
で、5/12のエントリリストラなう!その29 何もかも逆だった - たぬきちの「リストラなう」日記の「■首切りをもっとやれ」というセクションが、まさに僕が思っていることと一致していたので引用。
城さんの本は処女作『内側から見た富士通「成果主義」の崩壊』からずっと読んできた。はっきり言ってファンだ。だが、やはり彼の主張を丹念に追うと、最後のところでついていけなかった。成果主義をやるなら本当にやれ、首切りをやれ、もっと雇用を流動化させて、首を切られても再び職に就けるようにしろ、という彼の主張(たいへん荒っぽいまとめ方ですみません)。
自分が正社員である場合、彼の主張に心から賛同すると、正社員である自分を否定することになってしまう。だから城さんの本を読むのは楽しみだったが、いつも強いストレスがあった。
この感覚、前々職の調査会社を退職する前の僕と重なる。今レールに乗っているけどそこはかとない不安を感じている人は、たぬきちさんのように感じている人は多いはず。
だが今は、素で読んで楽しい。彼の主張する世界が実現すれば、リストラなんて怖くなくなるはずだからだ。職を失っても、また職を得られる世界。これが究極のセーフティネットじゃないか。
「正社員の雇用を守れ」というのは、「その他の者の雇用はどうでもいい」と言ってるのと同じだ。「派遣を切るな」というのは「いま職のない派遣はずーっと職のないままでいろ」と言ってるのと同じだ。
これから失業する身の僕は、腹いせとかやけくそとかではなく、「もっともっと首を切ろうよ」と思う。みんな一度失業して、もっかい新しい仕事に就き直せばいいんだよ。
うんうん、そうそう。全くその通りです。今後の日本社会は、雇用が流動化してレールを降りても次のレールに乗れる社会を目指さないと。格差社会って本当はここから生まれてるんだよねぇ。
ということで僕も、今後のキャリアに不安を感じている人は、今のレールを一度降りることを薦めます(もちろん自己責任で)。企業ももっとリストラしていい。そのかわり政府は一時的でもいいので金銭的なセーフティネット(BIなのか?)は必要だけど。
ところで、コメント欄に以下のようなコメントがあって、雇用流動化についての反論で日本人のメンタリティ云々というのはよく見るけど、これについては異論がある。人のブログのコメント欄にツッコミをいけるのもどうかと思いつつ。
しかし人材の流動性向上と言っても、米風の何時でも首切り&キャリアアップ=転職というシステムが日本人のメンタリティに合うかと言えば疑問です。
終身雇用を望む人が増えているという調査結果があるのは知っている(たとえばこういう調査結果とか)。ただこれはそもそも、回答者には、今の終身雇用・年功序列の日本型雇用が現実的に見えていて、雇用が流動化した社会はまだ実現されていないから具体的なイメージが湧かない、というバイアスがかかった状態での調査結果だと考えるべき。つまり
(今の日本型雇用のスキームが維持される前提で)あなたは終身雇用を望みますか?
という見えない前提条件があった上での、終身雇用志向だと思う。この前提を考慮した上でも日本人のメンタリティって言えるのかな?嫌なことがあったら辞めたいと思うのは人情だし、それが転職で解決する世の中なら絶対みんなそうすると思うんだけどな。
企業が30歳前の人材を採用したがるのが合理的な理由
先月書いた日本の殆どの問題って、やっぱり将来への不安だと思うんだというエントリが、アップ後しばらくしてからPVを伸ばしていて、ブックマークやはてなスターをいただいています。僕がブログで書きたかったテーマがキャリア・雇用のことなのでこれは素直に嬉しいです。特にこのエントリは変なテクニックに凝らず自分の気持を正直に書いたものなのでなおさら嬉しかったりする、改めてお礼を申し上げます。
さて、いただいたブックマークには沢山コメントがついていて、それはネガティブなものだったりポジティブなものだったり。人それぞれ立場によって感じ方が違うのは分かっていたけれど、改めて雇用問題の難しさを感じます。ただ、一つ非常に気になったコメントがあったので、これについて補足したいと思います。
「雇用の流動化」は多分政府が音頭を取っても当分はどうにもならんよ。「転職は3度まで」とか「30歳すぎてからの転職はちょっと......」といる奴らがたくさんいるからどうしよもない (ブックマークコメントより)
このブックマークコメントにははてなスターが幾つかついているので、かなりの人の共感を得ているのだと思いますし、僕もこのコメントにあるような採用担当者の傾向は事実あると思います。ただ僕はこのコメントは、問題を逆から見ていると思っています。
採用担当者は今の日本の終身雇用・職能給制度(年功序列とも言う)を前提とした雇用制度(日本型雇用)をベースにした状況下で合理的な判断をしているのです。
今の日本の雇用制度は、正社員として雇用した人を理由なく解雇することはかなりハードルが高いです。これがいわゆる解雇規制。解雇規制は中小企業では有名無実化しているとの指摘もありますが、依然として大手企業では順守されているのが現状です。
企業の立場からすると一度採用した社員はクビを切れないわけで、企業にとって人材採用は必須だけれど失敗の許されない、非常にリスクの高い行為になっています。それどころか年齢を重ねるごとに給与を増やすことが前提になっているのだから、どうしても企業の採用基準は、給与を安く抑えられて配置転換のつぶしが効く(スペシャリストよりゼネラリスト)、つまり大卒の新卒が一番合理的という事になるわけです。
この現状を変えるには、どうしても解雇規制制度を変えないといけない。ただそうすると一時的に職を失う人が大勢出てくるはず。だから信頼できるセーフティネットの拡充が必要なのです。それがベーシックインカムなのかどうかは僕も自信がないですけど、現状一番合理的かなと思っています。
ところで僕は大学卒業後、最初に就職した一年目に体調に大きな問題を抱え、実質的に一度レールを降りた経験があります。そのときに今の日本の雇用制度の大きな矛盾に気付き、僕自身も含めて多くの人の幸せのためにはこの制度を作りなおさないといけない、と感じるようになりました。僕は日本人みんながいわゆる「マッチョ」になれるとは思っていないし、そもそも僕自身が全然マッチョじゃないです。ただ、普通の人でもレールを降りたり乗り換えたりできる世の中が絶対に良いと真剣に思っているのです。だって、この裕福な国で年間3万人も自殺者が出るなんて、、どう考えてもおかしいですよね。南米のもっとずっと貧しい国だって、日本人よりずっと幸せそうに生きているのに。。
続・Gmailがタダなワケ(とGoogle Analyticsがタダなワケ)- 2010/5/7 訂正
先日書いた<Gmailがタダなワケ>というエントリは、少ない日だと5PV[/day]というこのブログにおいて、幸運にも1400以上のPVを計上し沢山の方にブックマークをしていただけました。(まぁこれはAppBankに取り上げられたことが大きいのですが。)
そのエントリの趣旨は「GmailはただGoogleアカウントのログイン状態を維持させるためだけに提供されている」というものでした。
ということはGmailがGoogleアカウントのログイン状態を維持するために提供されているという仮説は、説得力があった、つまり真実に近かった(ように感じられた)のだと思います。僕自身この仮説は正しいんじゃないかと思っていて、Googleがログイン状態を維持させたい理由について説得力のある仮説が何かあるはずだと思い、もう少し考えてみました。
で、僕なりの仮説としては
(5/7 追記 間違いに気づきましたので訂正します。)
Googleは、Google Analyticsを導入しているサイトでトラフィックを補足するために、Gmailでユーザーにログイン状態を維持させてマーキングしている
のだと考えています。(技術的にどうなのかちゃんと検討していないのですが)
Gmailにログインしているユーザーをケータイユーザー、Analyticsを導入しているサイトをドコモの基地局と考えてみます。基地局のメッシュが細かいほどユーザーの行動を詳細に追うことができる、つまりWeb上のトラフィックを詳細に反映していると言えます。このどちらのデータも抑えているのはGoogleで、Googleの立場でだけ、どのユーザーがどのような経路でWebサイトを移動したのかがわかります。(5/7 追記 間違いに気づきましたので訂正します。)
さらにAnalyticsには「コンバージョン」という、そのサイトで重要なページをサイト運営者が自ら指定する機能まであります。
「目標のコンバージョン数は、サイトでビジネスの目標をどの程度達成できているかを測定するうえで主要な指標です。 目標URLには、ユーザーが商品の購入や会員登録またはダウンロードなどを実行した後で表示されるウェブページを設定してください。」 - Google Analyticsより
このデータを使えば、単なるPV数でなくビジネスに繋がるトラフィックがGoogleには丸分かりです。これは効果的な広告出稿に強力なアドバンテージをもたらしているに違いない。
まとめると、Googleは効果的にAdsense、Adwordsに広告を出稿するために、Webの中で起こっていることをできるだけ詳細に知りたい、その合理的な手段(絶対にボランティアではない)として、サイト訪問者・運営者の両者に対して、他企業には真似出来ない高品質なサービス(Gmail、Google Analytics)を無料で提供している、というのが僕の仮説になります。
関連エントリ
Xperiaの販売好調にみるiPhone-from-Docomoの可能性
5/5 追記 Xperiaはiモードメールに公式対応していないんで使いにくそうですね。多くの人が2台目として買ってるのかな? となると論の組み立てが根本的に間違ってることになる!>< 全く勉強不足ですみません、エントリは修正しないで残します。ちゃんと調べてから書かないとだめだなー。
iPhone-from-Docomo、僕はあり得ると思います。なぜならXperiaが好調に売れているらしいからです。
Xperiaの実機を触ったことも無いのに言うのも何ですが、Xperiaが売れているのは高い確率でiPhoneの代用品としてです。本当はiPhoneが欲しいのだけど、キャリアをDocomoから移りたくないと考える層が多いから売れているのだと見ています。
キャリアを移りたくないと考えるのは以下の理由が考えられます。
メールアドレスを変えるのは本当に面倒なので、おそらく一番大きな理由は1でしょう。MNPが導入されたのに意外とキャリアの乗り換えが活発になっていないのは、メールアドレスによる囲い込みが一番の要因だと推測しています。というか囲い込める要因ってもうメールアドレスしかないですよね、多分。
Xperiaがこれだけ売れるとなると、Docomoとしてもいよいよ本気でラインナップのスマートフォン化を進める必要があります。スマートフォンはIMAP対応のメーラがまず間違いなくついているので、技術的にはメールアドレスでの囲い込み戦略が使えなくなります。まぁメールアドレスを変える人がそう多くいるとは思いませんが、メールアドレスでの囲い込みだけでは今後乗り換えられるリスクが高い。
そもそもDocomoがiPhoneを出さないのは、技術的な問題ではなく自社の課金ネットワークを中抜きされたエコシステムを作られることへの恐怖心です。携帯電話の課金システムはキャリアに取って一番の生命線です。Andtoid端末ではDocomoマーケットが使えますが、この条件は最初にiPhoneの販売権をAppleと交渉したときに絶対に出していたはず、でも却下されたわけです。しかもiPhoneがこれだけ売れた今、Appleが自社のエコシステムを崩してDocomoマーケットを許可する可能性はゼロに近い。でもiPhoneは売りたい。多分DocomoはまだiPhone販売を諦めていないと思います。
そこへきてXperiaのこの好調、iPhoneを今Docomoが出したらXperiaの10倍は売れるでしょう。それどころかSoftbankの電波状況に不満な既存iPhoneユーザーの取り込みも期待できます。しかもiPhoneユーザーのARPUは上限に張り付いてて相当美味しい。Docomoなら3Gのキャパシティもかなり余裕があるはず。すでにDocomo側の態度に変化も見えます。iPadで使える小型SIMカードを提供するらしいですし。
確信はないのですが、iPhone-from-Docomo、僕はまだあり得ると思っています。可能性が高いのは次のiPhone発売のタイミングだと思います。でも外れたらごめんなさいです。
[社会][雇用](多分リバタリアンに近いと思う)僕の雇用問題に対する考え
ずっとZopeジャンキー日記というブログをRSS購読していた。その流れで池田信夫氏や城繁幸氏などの論者のブログやTwitterを購読するようになり、僕の基本的な政治的スタンスに近い識者がたくさんいることがわかった。
また、「小さな政府」「規制緩和」「市場による競争」「雇用の流動化」「政府によるセーフティーネット」を重視する彼らのスタンスを新自由主義者とかリバタリアンというのだと知った。(間違ってるかもだけど)
もちろん僕は一介のエンジニアで、専門の議論に加われる力はないのだけど、彼らの発する言葉が自分が思っているけど上手く言えない考えを正しく表現してくれているのを見ると、気になったエントリには自分の意見を述べてBlogを書くとか、Twitterで紹介するとかTumblerに入れるとか、できるだけ応援したいと思う。
今回はZopeジャンキー日記から。このブログの雇用の問題に関する著者のスタンスは僕と本当に近くて、初めて読んだ時からすぐRSS購読し続けているが、明らかに考えが違うなと感じたことが一度も無い。むしろいつも新しい観点から刺激を与えてくれる、僕に取ってとてもありがたいブログだったりする。
実際上は、自分が働いた企業がブラック企業だと感じても、「ブラック企業だ」と声をあげる人はほとんどいないだろう。その労力に対して、メリットが少ないからだ。普通の人は、「イヤなら辞める」だけだ。しかし、この「イヤなら辞める」ことをむずかしくしているのが、日本の雇用規制なのだ。雇用規制が強いために、日本の企業は解雇が難しく、よって採用も少なくなってしまう。このために社員も転職が難しくなり、「イヤなら辞める」ことが難しくなっているのだ。
この構造がわかれば、「ブラック企業を政府がきびしく取り締まれ」という声を強めることは、むしろ逆効果になりうることが理解できる。ほんとうにブラック企業を減らすことを目指すならば、政府が規制を強化するのではなく、「イヤなら辞める」ことを容易にすること、つまり逆説的なようだが、規制を緩和して「企業が解雇をしやすくする」ことが必要なのだ。 - 「ブラック企業」を叩けば叩くほど、「ブラック企業」は増えるかもしれない -Zope ジャンキー日記
まさにそのとおりだと思う。そもそも経営がうまく行っていないブラック企業は社員に払うお金が無いのだ。そんなところに政府が規制をかけて従業員を守ろうとしても、その結果会社が倒産してしまうことになれば、従業員のためにも全然ならない。政府がすべきは、この問題に関わるのではなく、セーフティネット(雇用保険でも良い)をしっかり拡充し、「退職しても2-3年食べていける」まずこの感覚を社会全体に宣言する必要がある。そしてその上で解雇規制を緩和して、柔軟な人材体制を作りやすくする。今ブラック企業で辞めたくても辞められない人の殆どは、辞めたら食べていけないことが不安なのだ。やめたら転落して、ひどい場合ホームレスにまでなってしまうかも知れない、そう感じさせるほどの雇用の硬直化が大問題なのだ。
この方法は、一見、普通の人には受け入れがたいと思う。まず、解雇される可能性があるという恐怖。そして、2,3年後に本当に雇用の流動化が進んでいるのかという恐怖だ。2,3年で変わるかどうかは分からないが、この国の企業の解雇に対するネガティブな態度は、あと5年もしないうちに変わると断言できる。一番重要なのは、その時にセーフティネットが拡充されていることと、流動化した雇用市場で、別の会社にとって価値のあるスキルを身につけていられるかなのだと思う。
日本の殆どの問題って、やっぱり将来への不安だと思うんだ
”この国では、一度レールを降りたらすごく惨めなことになる可能性が高いということを、みんな嫌というほど知ってるから。”
- 官僚が権益を増やしたがるのも、天下りがなくならないのも。
- 出版社・新聞社は書籍電子化アレルギーの中、黒船(Amazon,Apple,Google)来襲に向けて無駄なWG作っているのも。
- TV局は電波利権を決して手放さず、周波数割り当てがガラパゴス化しようとしているのも。
- 破綻したJALとか亀井さんの意のままの(ようにみえる)日本郵政に入りたがる就職活動の学生が沢山いるのも。
- 八坂神社の絵馬に「子供が一生同じ会社で働けますように」って祈願したお母さんも。
- ロビー活動で医薬品のネット販売を規制しちゃったりするのも。
- 非正規雇用の男子の未婚率が70%もあるのも、当然少子化がどんどん進行していくのも。
- 公務員試験の採用人数が、来年度4分の1になるらしいのも
全部全部、将来に対する不安なんだと思う。自分はこの仕事を離れても価値を出していけるのか?食べていけるのか?
”この国では、一度レールを降りたらすごく惨めなことになる可能性が高いということを、みんな嫌というほど知ってるから。”
僕はこの問題こそが、政府が解決しないといけない問題だと思うんだ。レールから外れたら惨めになるのが分かってるから、誰もが怖くて縮こまっちゃっているこの国を、なんどでもやり直せる社会に変えないといけない。レールを降りて3年くらい歩いてみても、また違うレールに乗れるんだよってことを、つまり雇用の流動化を国が必死で実現しないと。
僕にはこれが一番いい案なのか正直分からないけど、たとえば国がベーシックインカムを支給し、2,3年仕事をしなくてもベーシックインカムで十分食べていける。それを政府が必ず保証することと、それとセットで企業の解雇規制を撤廃すること。なぜなら、そもそも人間が社会人として働く約40年くらいの間、事業ポートフォリオも変えず従業員の雇用を守り続けることなんて、どう考えたってできっこないんだから。
一時的に失業者がものすごく増えるだろう。けど、スリムになった会社は絶対まだ世界を目指せる。本当は競争力のある会社は沢山あるんだ。その時不幸にも仕事を失ってしまった人たちも、今、その状況においては必要でなかったというだけで、やり直しさえできればいくらでも必要とされるチャンスはあるんだ。しばらくベーシックインカムで慎ましく暮らしているうちに、社会の歪みがなくなって、新しい産業セクターが育ち雇用が生まれる。
一度そういうふうに雇用の流動化が進まないと、この国の将来への不安って無くならないよね。
繰り返すけど、そうしないと、日本の殆どの問題って、やっぱり将来への不安なんだと思うんだよ。
追記 2010/5/10 関連エントリを書きました。こちらも是非読んで欲しいです。