Entries in category "Web"

「ウェブオペレーション」を読みました

18章の執筆者である濱崎健吾さまよりご献本をいただきまして、読むことができました!

O’Reilly Japan – ウェブオペレーション

ウェブオペレーション

「まえがき」から

かっこよすぎて、もう。

日々、我々は少しずつ賢くなり、少しずつ知恵をつけ、少しずつコツをつかんでいった。10年前に書いたスクリプトはツールや言語に発展した。我々の周りには産業ができた。知識・経験・ツール・プロセスは技芸になった。我々はそれを「ウェブオペレーション」と呼んだ。

ウェブオペレーションは技芸であり、科学ではない。正規の学校教育・資格・標準は (少なくとも今はまだ) ない。我々のやっていることは、学習にも習得にも時間がかかり、その後も自分自身のスタイルを模索しなければならない代物である。「正しい方法」はどこにも存在しない。そこにあるのは、(とりあえず今は) うまくいくという事実と、次はもっと良くするという覚悟だけだ。

「ウェブオペレーション」という言葉には馴染みがない、という人が多いことでしょう。自分も、この本を読み始めるまでは自分の中に持っていなかった言葉です。それでも、本書に少しでも興味を持った人は「まえがき」を読んでみることをおすすめします。本書を「かっこいい」と感じるかどうかは、それだけで分かると思います。

数々の戦場を生き抜いた戦士たちの戦いの記録

本書は、現場で活躍する人たちの「武勇伝」集でありました。「まえがき」にあった「次はもっと良くするという覚悟」の意味を、読み進める中で深く知っていくことになります。

逆に、本書は、これとこれとこれを覚えておけば大丈夫、という知識や事実の羅列ではありません。日本語版には1章から18章までがあって、それぞれ著者は別々の人たちなのですが、どの章も「あるときは、こうやったら、こういうことが起こった」「このときの経験から、こういうことを学んだ」「次は、こういうことにならないように、こうしてみようと自分は考えている」といった体験談、あわせて、体験から得た知見が綴られています。そしてだいたい「だからお前もこうしろ」ではなく「君には君の現場があるのだから、君が考えて振る舞うんだ」といった論調で全体がまとめられているのです。

それぞれの章には一人称の「ストーリー」を感じました。おかげで、自分にとってはとても読みやすかったのです。

ふと考えてみるとこれは、濱崎健吾さまが、一緒にごはんを食べているときにお話してくれる「最近はこんなことで悩んでいる」「こういうことを試してみたい」「もっとこうしていかなきゃいけないと思う」のストーリーにそっくりなんですね。ウェブオペレーションは、自分の立ち位置からすると、必ずしも専門のド真ん中というわけではないのですが、たとえて言えば、彼に読み聞かせてもらっているかのように内容を吸収することができて、とても楽しかったです。

また、同時に、彼がお話してくれる戦士の物語が、たまたま近くにいた自分がたまたま聞かせてもらえる特別なものではなく、より広く多くの人たちにも届く物語になったことを、心から嬉しく感じています。執筆、お疲れさまでした。

さらに加えて、やはり地獄の角征典さんの訳のおかげで読みやすかったのでした。本文中に「やべ!俺たちカッコいいわ。カッコいいわー」や「リア充」と言った文字列を見つけたときは、思わず声を出して笑ってしまうわけですが、伝わってくる雰囲気は、文章の流れからするとまったく違和感なく受け取れるものでした。さすがだなぁと思いました。

グッときた

本文中の気になった箇所をマークしておきます。

正しいコードの書き方を教えるのではなく、プロダクション環境での失敗から学ぶ環境を作るのだ。

4.5.1「なぜ継続的デプロイが有効なのか?」 4章 継続的デプロイ

「根本原因」をもとに評価をするのは、失敗の本質に関する技術的な理解からではなく、結果に対して社会的あるいは文化的な何らかの非難が必要だったものと考えられる。

7.1「いかにして複雑なシステムは失敗するか」 7章 いかにして複雑なシステムは失敗するか

一方、開発チームと責任を共有すれば、サイトの安定性やパフォーマンスが良くなることに気付いているグループも多い。開発者を全面的に信頼して、コードのダブルチェックをしなくなれば、開発者は自ずから責任感を持つようになる。

10.3「信頼」 10章 開発と運用の協力と連携

お互いに助け合う環境を作るには、障害にあとに非難を禁止した「ふりかえり」を開くとよいだろう。このとき「どんな間違いを犯したのか?」のような質問をしてしまうと、自己弁護に陥ってしまう。「次はどうすればうまくできるのか?」のように質問すれば、みんなが非難をせずに改善案を提案するようになる。

10.5「非難を避ける」 10章 開発と運用の協力と連携

ウェブオペレーションについて議論する前に、組織の技術標準が恥ずかしいほど低いということを正直に認めなければならない。ウェブ業界でしばらく働いていれば、それが嘘ではないことだと分かるだろう。わかっていないなら、あなたは本当に幸運か、大事に保護されているか、単なるバカだ。問題は何だろう?あらゆる技術の問題は、人の問題である。そして、解決策も人である。あらゆるバグ・障害・機能停止・復旧は、人によって行われる。

16章 アジャイルインフラストラクチャ

「アジャイル」になるかどうかなんて気にするな。「すごい」人を目指せ。技術的な問題を解決するのは人だ。みんなで幸せになろうよ。

16.5「結論」 16章 アジャイルインフラストラクチャ

通常、ウェブサービスのインフラエンジニアがユーザの方と接する機会は皆無に近いものだと思われるが、このフォームのおかげでインフラにかかわるユーザの声を直接受け取れるというのは、インフラ構築の指標の材料としても、エンジニアのモチベーションの原動力としても大変役に立っている。

18章 日本の料理のインフラ

総じて、自分が身震いとともに読んだ文章というのは「人そのもの」や「人の成長」を対象にしたものであると、こうして全体をざっと眺めてみて気が付くこととなりました。10章の「開発と運用の協力と連携」なんかは、ここでいう「開発」と「運用」をそれぞれまったく別の言葉に置き換えたとしてもそのまま言えるようなことがふんだんに書かれていて、それは、結局はチームの構成単位は「人」に他ならないことのあらわれだと確信します。16章の「アジャイルインフラストラクチャ」では「技術的な問題を解決するのは人だ」と言い切っています。これも、とてもしっくりくるものでした。18章の「日本の料理のインフラ」では「エンジニアのモチベーション」という表現で、人への注目があります。

本書を読み終えた直後に、ちょうど、濱崎健吾さまと面と向かってお話する機会にも恵まれて、技術者が自分の価値を相手に認めさせることと、技術をコモディティ化して自分への依存を排除することと、その間にある葛藤について意見を交わしました。なかなかに頭の痛いお話ですが、自分たちエンジニアにとっては、決して目を背けることはできないトピックであるとも思います。

そうなったときに残るものはなんだろうか、と考えると、自分の「成長」を信じることなのかな、と今は思います。たとえ専門分野が変わったとしても、置かれた環境が変わったとしても、できることといえば、その場での自分の役割をまっとうし、最高を求めて終わりのない旅をすること、くらいですよね。だとすれば、本書「ウェブオペレーション」に綴られているウェブオペレータたちの武勇伝から自分が学び取るべきことは、まさに、そこにあるはずなんです。

さてさて。引用はしないけれど、自動化のための Vim スクリプトのお話と、その訳注も面白かったです。

謝辞

献本をくださった濱崎健吾さま、どうもありがとうございました。献本の相手として選ばれたことを、心から光栄に思います。執筆という偉業への尊敬と、ありのままの感謝を。

訳者の角さん、編集の高さん、この文章を (自分にとっては極めて親しみやすい) 日本語で読むことができて、助かりました。偉業に感謝します。それと、角さんの訳文を高さんがどのようにハンドリングしているのか、そのプロセスにはとても興味があります。次にお会いしたときに、質問させてもらうと思います。

上記3名さま、RubyKaigi2011 の会場でお会いできそうなので、楽しみにしています!この度は、ありがとうございました!

おしまい。

「大規模Webアプリケーション開発入門」を読みました

監訳者の河村圭介さんよりご献本を頂戴しまして、読むことができました。自分がずっと家にいなくて、せっかく届いた本が戻ってしまったりしてご迷惑をお掛けしましたが… ご献本、ありがとうございました!

はじめての監訳作業「大規模Webアプリケーション開発入門」 – developer’s delight

4873114926 大規模Webアプリケーション開発入門 ―変化に強いWeb開発を実現する10の原則
Kyle Loudon 河村 圭介
オライリージャパン 2011-03-25

by G-Tools

書籍のタイトルと内容について

自分は「Web アプリケーション開発者」という立場でこの本を読みました。

そうすると、すでに「Web アプリケーション開発」には「入門」しているわけで、タイトルにある「大規模」の部分が、この本から自分が学び取るべきことかな、と想像しながらページを開きました。

ほいで、ざっと読んでみての感想からすると、内容は「Web アプリケーション開発入門」といったところです。「大規模」と聞いてまっさきに想像した「パフォーマンス」のお話は第9章で語られるのみに留まっており、第2章「オブジェクト指向」第3章「HTML」第4章「CSS」第5章「JavaScript」などは、これから Web アプリケーション開発に関わることになる人たちに読んでもらいたい内容です。

「ちゃんと意味を考えてマークアップしましょう」などは、開発の対象となるアプリケーションが大規模かどうかに依らず、常に覚えておくべき提言です。なので、タイトルが「大規模」からはじまることで敷居が高く感じられるのだとしたら、少しもったいない気がしました!

自分の立ち位置の確認

本を一通り読んでみて、あらためて、今の自分の立ち位置を確認することになりました。

自分が Web アプリケーションをつくるときに、まず前提として大きく存在しているのは「これはプログラミングである」という認識です。なので、プログラミング一般に対して言われる「DRY 原則」などは、無意識のうちにコードに反映されていきます。本書の中で「モジュール化しよう」が繰り返し強調されているのは、すんなりと受け入れられました。

また、自分が Web アプリケーション開発に携わってきた期間は、ほとんどが「Rails/Sinatra と関わってきた期間」と言えます。Rails の routes.rb や Sinatra アプリケーションのコードを書くときは、否が応にも「URL 設計」を強く意識することになり、アプリケーション全体を「リソース指向」に設計する傾向があります。

その点で、本書に「URL 設計」の章がなかったのは、自分にとっては「ほう」と思う箇所でした。

まとめ

こうして思い直してみると、自分は「Web アプリケーション開発に入門」と明確に感じたことはなかったけれど、アイディアを形にしたい一心で、気が付けばいくつか Web アプリケーションを動かすようになっていたので、たとえば後輩に「どこから勉強すればよいですか」と聞かれたら、上手く答えられなかったことでしょう。再現性の低い学習プロセスを踏んだと思います。

本書のように「入門」に焦点を当てて整理された本が1冊あると、とりあえず網羅的に知識を付けておきたい、とか、自分に足りないものを明確にしたい、とか、そういった人とはスムーズにお話ができるようになりそうです。

最後にもう一度。河村さん、ご献本ありがとうございました!

Cloud FoundryにRails/Sinatra/Nodeアプリをデプロイしてみた

4月13日にサインアップ申請をしておいた Cloud Foundry から「準備できたよー」のメールが届いたので、さっそく触ってみました。今なら、サインアップから10日くらいで使えるようになるってことでしょうかね。

The industry’s first open platform as a service. Run your Spring, Rails and Node.js applications. Deploy from your IDE or command line.

Welcome to Cloud Foundry

Welcome to Cloud Foundry

今回は Rails アプリ、Sinatra アプリ、Node アプリのデプロイを試してみました。ソースコード一式を GitHub においてあります。

june29/cloudfoundry-samples – GitHub

GitHub Mug

(写真は本文と関係ありません。手に入って嬉しかったので載せました)

準備

コマンドラインのクライアントを gem でインストールしました。

$ gem install vmc
$ vmc -v
vmc 0.3.10

Rails アプリ

普通に Rails アプリをつくって、プロジェクトのディレクトリで vmc push を実行します。

$ vmc push

Would you like to deploy from the current directory? [Yn]: Y
Application Name: sample29rails
Application Deployed URL: 'sample29rails.cloudfoundry.com'?
Detected a Rails Application, is this correct? [Yn]: Y
Memory Reservation [Default:256M] (64M, 128M, 256M, 512M or 1G) 64M
Creating Application: OK
Would you like to bind any services to 'sample29rails'? [yN]: N
Uploading Application:
  Checking for available resources: OK
  Processing resources: OK
  Packing application: OK
  Uploading (15K): OK
Push Status: OK
Staging Application: OK
Starting Application: OK

scaffold だけでつくったアプリをデプロイしてあります。普通にデータベースに書き込めている感じ。

http://sample29rails.cloudfoundry.com/

Sinatra アプリ

app.rb を書いただけ。これだけで vmc push したら動きました。

$ vmc push

Would you like to deploy from the current directory? [Yn]: Y
Application Name: sample29sinatra
Application Deployed URL: 'sample29sinatra.cloudfoundry.com'?
Detected a Sinatra Application, is this correct? [Yn]: Y
Memory Reservation [Default:128M] (64M, 128M, 256M, 512M or 1G) 64M
Creating Application: OK
Would you like to bind any services to 'sample29sinatra'? [yN]: N
Uploading Application:
  Checking for available resources: OK
  Packing application: OK
  Uploading (0K): OK
Push Status: OK
Staging Application: OK
Starting Application: OK

http://sample29sinatra.cloudfoundry.com/

Node アプリ

ファイル名は app.js にしておく必要があると書いてあったのでそうしてみたら動きました。express を使ってみたので、package.json を書かなきゃいけなくて、npm bundle も実行しておかなきゃいけない。

参考にしたのは Deploying a Node.JS app with NPM dependencies : Cloud Foundry Community です。

$ vmc push

Would you like to deploy from the current directory? [Yn]: Y
Application Name: sample29node
Application Deployed URL: 'sample29node.cloudfoundry.com'?
Detected a Node.js Application, is this correct? [Yn]: Y
Memory Reservation [Default:64M] (64M, 128M, 256M, 512M or 1G) 64M
Creating Application: OK
Would you like to bind any services to 'sample29node'? [yN]: N
Uploading Application:
  Checking for available resources: OK
  Processing resources: OK
  Packing application: OK
  Uploading (123K): OK
Push Status: OK
Staging Application: OK
Starting Application: OK

http://sample29node.cloudfoundry.com/

おまけ

Heroku の heroku コマンドと同じ感覚で適当にコマンドを打ったら通るので面白かったです。

デプロイしたアプリの一覧を見るときは vmc list でした。

$ vmc list

+-----------------+----+---------+----------------------------------+----------+
| Application     | #  | Health  | URLS                             | Services |
+-----------------+----+---------+----------------------------------+----------+
| sample29sinatra | 1  | RUNNING | sample29sinatra.cloudfoundry.com |          |
| sample29node    | 1  | RUNNING | sample29node.cloudfoundry.com    |          |
| sample29rails   | 1  | RUNNING | sample29rails.cloudfoundry.com   |          |
+-----------------+----+---------+----------------------------------+----------+

デプロイしたアプリを削除するときは vmc delete です。

$ vmc delete #{app_name}

あとあと、vmc push したけど「何のアプリケーションか分からなかったよ」ってときは、以下のようになります。

$ vmc push

Would you like to deploy from the current directory? [Yn]: Y
Application Name: sample29
Application Deployed URL: 'sample29.cloudfoundry.com'?
[WARNING] Can't determine the Application Type.
Select Application Type: (Rails, Spring, Grails, Roo, JavaWeb, Sinatra or Node)

内部では、どのようにアプリケーションを判別しているのでしょうね。ちょっと興味があります。

まとめ

「Heroku さんが息をしていないから…」というわけでもないのですが、Web アプリのホスティング先として Heroku 以外の選択肢があってもいいですよね。Google App Engine も視界にはありつつあんまり手が伸びていなくて、Cloud Foundry は「Rails も Sinatra も最初から動くよ」と謳っていたので勢いで触ってみました。Node アプリが動くという意味では Joyent に並ぶ選択肢にもなるので嬉しいですね。

Heroku の場合は「ああ、git で push すればいいのか」だったのが、Cloud Foundry の vmc コマンドは、独自に覚えることが多くなりそうです。パッと触ってみたところでは「よく分かっていないけれど動かせている」感じで、もうちょっと踏み込んだことをしようと思ったら、色々と調べる必要が出てきそうです。

今後もちょこちょこ触ってみようと思いました!おしまい。


もっとちゃんと説明してあるエントリを見つけたのでリンクしておきます!

VMware発のPaaS、CloudFoundryを試してみた – y-kawazの日記

君が見た桜を僕も見る「sakura.stagram」をつくりました

2011年3月28日、東京でも桜が開花しましたね!そんな桜の写真たちをぱらぱらと眺めるアプリをつくりました。「sakura.stagram」を紹介します。

sakura.stagram

sakura.stagram

あれは1年前のことです

去年は「SakuraPics」というものをつくりました。こちらも、桜の開花に応えるように、今年も色付きはじめています。

SakuraPicsでタイムラインを舞い散る「さくら」を集める – 準二級.jp

2011年ということで

制作にあたったチームのメンバーは、とてもいい意味で欲張りな人ばかりですから、「去年と同じじゃつまらない!」テンションでした。去年は「Twitpic の写真を集めるアプリを Ruby でつくって Heroku にデプロイ」だったところが、今年はまるっと変わって「instagr.am の写真を集めるアプリを Python でつくって Google App Engine にデプロイ」となりました。

自分はフロントエンドにちょろっと手を入れるお仕事を担当しまして、この1年で身につけたものとして、CSS3 を書いたりしました。CSS3 は本当にハンディでよいですね。プログラマが、プロダクトの見た目をちょっこしオサレにしたいときに、とっても有用です。

「この技術に触れてみたい」ってモチベーションからのものづくりも、楽しくていいですよね。大事にしていきたいです。今年はオンライン共同作業中の放屁報告もなく、平和な開発となりました。

まとめ

sakura

sakura.stagramSakuraPics できれいな桜の写真を眺めて、ほっこりしてみませんか。週末には、お花見に出かけるのもいいですね。

「行きたい!」を共有してお出かけをもっと楽しくする「Wanna5」をリリースしました

「Wanna5」というサービスをリリースしました!せっかくなので紹介させてください。

Wanna5 / Where Do You Wanna Go?

Wanna5 / Where Do You Wanna Go?

もっと気軽に「行きたい!」って言おう

Twitter や Facebook といったリアルタイムなソーシャルメディアの時代になって、日常の様々なことを気軽に言えるようになりました。これまで発信されることのなかった人々の「色んな気持ち」が表出し、そこから価値が生まれることも珍しくありません。

そんな「色んな気持ち」の中でも、Wanna5 は「行きたい!」に注目しました。Wanna5 を使うと、あるイベントへの「行きたい!」を、とても簡単に Twitter や Facebook の友人たちと共有することができます。

「これ行ってみたいなー」と何気ない気持ちを声にすることで「じゃあ、一緒に行こっか」とお誘いにつながれば、とっても素敵なことですよね。友達の「行きたい!」から、面白いイベントを知ることもできるかもしれません。Wanna5 によって、そんな体験を皆さんにお届けしたいと思っています。

「行きたい!」と気軽に言えることによって、お出かけが楽しくなればいいなぁ、と思って。

Wanna5 が目指す世界

Wanna5 の構想段階で、チームで大事にしていたハッピーストーリーをいくつか紹介します。ボクたちが Wanna5 を通してどんなことを実現したいか、共有できると嬉しいです。

  • 自分の行きたい美術展を Wanna5 したら、それを見てくれた友達と一緒に行くことになった
  • 自分好みのイベントに出会えるようになった
  • 1人では行かなかったであろうイベントに、Wanna5 上で盛り上がった複数名の友人たちと行くことができた
  • どうしても都合が付かなくて参加できないイベントなんだけれど、主催者に「行きたい!」という気持ちを伝えることができた
  • 地元に住んでいる友達が、地元のイベントを盛り上げて楽しそうにしていることがわかった
  • 気軽にイベントの告知ができるようになった
  • みんなの「行きたい!」を眺めているだけでも面白い
  • このイベントがいいねと君が言ったから、7月6日は初デート記念日

すでに活用されている「参加登録用のサービス」とは目指すところが違っていて。そうですね、たとえば「コミケ」や「東京ゲームショウ」なんかに「行きたい!」と思っている人たちが見えるようになったりしたら、面白いかもなーって思っています。

上に紹介したハッピーストーリーはほんの一部で、他にも色々と、面白い世界のことを考えています。

Wanna5 ができるまで

これについても想うことがいっぱいあるので、落ち着いた頃に、ここに書いたり、お話したり、できたらいいな。

まとめ

みんなのお出かけがもっともっと楽しくなったらいいな!と思いながら Wanna5 をリリースしました。

もし、Wanna5 の上で面白いイベントを見つけられたら、ぜひぜひそれをお友達と教え合ってみてください!もし、Wanna5 には登録されていない面白いイベントを知っていたら、ぜひぜひ教えてくださいな!

「行きたい!」を共有する Wanna5 を、どうぞご利用ください。それでは、楽しいお出かけを。