<feed xmlns='http://www.w3.org/2005/Atom'><id>http://blog.madoro.org/mn/feed/atom</id><title type='text'>Masatomo Nakano Blog - Web開発を極める</title><updated>2010-07-11T02:44:07Z</updated><link href='http://blog.madoro.org/mn/feed/atom' rel='self' type='application/atom+xml'/><link href='http://blog.madoro.org/mn/' rel='alternate' type='text/html'/><author><name>Masatomo Nakano</name></author><entry><id>http://blog.madoro.org/mn/74</id><title type='text'>Rails 3 + mongoDB + haml + RSpec + jQuery のインストール - 1</title><summary type='html'>&lt;p&gt;会社用の、小物Webアプリを作ろうかと思い、せっかくなのでRuby on Rails 3でmongoDB使ってみようかな、と思い、とりあえず環境を作るところまでのメモ。&lt;/p&gt;
&lt;p&gt;Rails 3 のインストール&lt;/p&gt;
&lt;p&gt;とりあえず Rails 3 のインストール。現在の最新のbeta4を入れる。Bundlerで。Bundler自体のバージョンが0.9.26以上でないとダメみたいなんで、もしそれ未満しか入っていない場合にはBundlerのインストールからする。&lt;/p&gt;
&lt;p&gt;プロジェクトのトップディレクトリとなるところを作成し、そこにGemfileを作る。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ mkdir ~/workspace/hoge_prj
$ cd ~/workspace/hoge_prj&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Gemfile&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;source &apos;http://rubygems.org&apos;
gem &quot;rails&quot;, &quot;3.0.0.beta4&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;rails 3のgemのインストール&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ bundle install&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;railsコマンドでrailsプロジェクトを作成する。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ bundle exec rails new . --skip-activerecord --skip-testunit&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このコマンド自体がGemfileをもう一度作る。上書きしてしまえばいい。MongoMapperを使う予定なので &lt;code&gt;--skip-activerecord&lt;/code&gt; 、rspecを使う予定なので &lt;code&gt;--skip-testunit&lt;/code&gt; を指定した。&lt;/p&gt;
&lt;p&gt;次に、自分が必要なライブラリをGemfileに追加して、もう一回 bundle install する。&lt;/p&gt;
&lt;p&gt;今回は、&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gem &quot;mongo_mapper&quot;
gem &quot;bson_ext&quot;
gem &quot;rails3-generators&quot;
gem &quot;haml&quot;
gem &quot;rspec-rails&quot;, &quot;&amp;gt;= 2.0.0.beta.13&quot;, :require =&amp;gt; nil
gem &quot;factory_girl&quot;, :require =&amp;gt; nil &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;を追加した。 rspec / haml / factory_girl は普段も使ってるのであまり考えずにそのまま使ってみる。Rails 3では、rspec 2が必要らしい。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ bundle install&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;次に、config/application.rb を開いて、&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;config.generators do |g|
  g.orm :mongomapper
  g.template_engine :haml
  g.test_framework  :rspec, :fixture =&amp;gt; true
  g.fixture_replacement :factory_girl, :dir =&amp;gt; &quot;spec/factories&quot;
end&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;をそれっぽいところに書く。&lt;/p&gt;
&lt;p&gt;rspecとhaml、jqueryの関連ファイルを作成する。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ ./script/rails g rspec:install
$ ./script/rails g haml:install 
$ ./script/rails g jquery:install&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;mongoDBの接続情報が必要なので、それを config/mongodb.yml とかに書き、それを読ませるinitializerも書く。&lt;/p&gt;
&lt;p&gt;今回は &lt;a href=&quot;http://blog.madoro.org/mn/73&quot;&gt;Mac上にインストールしたmongoDB&lt;/a&gt;  を使っている。&lt;/p&gt;
&lt;p&gt;config/mongodb.yml&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;base: &amp;amp;base
  adapter: mongodb
  host: localhost&lt;/code&gt;

&lt;code&gt;development:
  &amp;lt;&amp;lt;: *base
  database: hoge-development&lt;/code&gt;

&lt;code&gt;test:
  &amp;lt;&amp;lt;: *base
  database: hoge-test&lt;/code&gt;

&lt;code&gt;production:
  &amp;lt;&amp;lt;: *base
  database: hoge-production&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;config/initializers/mongodb.rb&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;db_config = YAML::load(File.read(Rails.root.join(&quot;config&quot;, &quot;mongodb.yml&quot;)))&lt;/code&gt;

&lt;code&gt;if db_config[Rails.env]
  mongo = db_config[Rails.env]
  MongoMapper.setup(db_config, Rails.env, :logger =&amp;gt; Rails.logger)
end&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これで、ほぼインストール完了。 rails3-generators のおかげで mongo_mapper を使った scaffold を作ることもできる。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ ./script/rails g scaffold entry title:string body:string
      invoke  mongomapper
      create    app/models/entry.rb
      invoke    rspec
      create      spec/models/entry_spec.rb
      invoke      factory_girl
      create        spec/factories/entries.rb
       route  resources :entries
      invoke  scaffold_controller
      create    app/controllers/entries_controller.rb
      invoke    haml
      create      app/views/entries
      create      app/views/entries/index.html.haml
      create      app/views/entries/edit.html.haml
      create      app/views/entries/show.html.haml
      create      app/views/entries/new.html.haml
      create      app/views/entries/_form.html.haml
      invoke    rspec
      create      spec/controllers/entries_controller_spec.rb
      create      spec/views/entries/edit.html.haml_spec.rb
      create      spec/views/entries/index.html.haml_spec.rb
      create      spec/views/entries/new.html.haml_spec.rb
      create      spec/views/entries/show.html.haml_spec.rb
      create      spec/helpers/entries_helper_spec.rb
      create      spec/routing/entries_routing_spec.rb
      invoke      rspec
      create        spec/requests/entries_spec.rb
      invoke    helper
      create      app/helpers/entries_helper.rb
      invoke      rspec
Plural version of the model detected, using singularized version. Override with --force-plural.
      invoke  stylesheets
      create    public/stylesheets/scaffold.css&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;とりあえず、コンソールからレコード (mongoDB風に言うとドキュメント)が作成できるか確認してみる。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;% ./script/rails console
Loading development environment (Rails 3.0.0.beta4)
irb(main):001:0&amp;gt; Entry.create!(:title =&amp;gt; &quot;HOGEHOGE&quot;, :body =&amp;gt; &quot;Hello&quot;)
=&amp;gt; #&amp;lt;Entry created_at: Wed, 30 Jun 2010 22:24:06 UTC +00:00, body: &quot;Hello&quot;, title: &quot;HOGEHOGE&quot;, updated_at: Wed, 30 Jun 2010 22:24:06 UTC +00:00, _id: BSON::ObjectID(&apos;4c2bc406a90e08bf25000001&apos;)&amp;gt;
irb(main):002:0&amp;gt; &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;簡単！&lt;/p&gt;
&lt;p&gt;本当に保存されたか、mongoシェルで確認してみると、&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;% ~/somewhere/mongodb-osx-x86_64-1.5.3/bin/mongo
MongoDB shell version: 1.5.3
connecting to: test
type &quot;help&quot; for help
&amp;gt; use hoge-development
switched to db blog-development
&amp;gt; db.entries.find()
{ &quot;_id&quot; : ObjectId(&quot;4c2bc406a90e08bf25000001&quot;), &quot;created_at&quot; : &quot;Wed Jun 30 2010 23:24:06 GMT+0100 (BST)&quot;, &quot;title&quot; : &quot;HOGEHOGE&quot;, &quot;body&quot; : &quot;Hello&quot;, &quot;updated_at&quot; : &quot;Wed Jun 30 2010 23:24:06 GMT+0100 (BST)&quot; }
&amp;gt; &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;入ってる！&lt;/p&gt;
&lt;p&gt;サーバを起動して、画面でも見てみる。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;config/route.rb&lt;/code&gt; に、&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;resources :entries&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;と、とりあえず書いて、&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ ./script/rails server&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ブラウザで http://localhost:3000/entries/ を開いて確認。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://blog.madoro.org/mn/images/mn/tt_0002/scaffold1.png&quot; class=&quot;attach_img&quot;&gt;&lt;/img&gt;&lt;br /&gt;
&lt;img src=&quot;http://blog.madoro.org/mn/images/mn/tt_0002/scaffold2.png&quot; class=&quot;attach_img&quot;&gt;&lt;/img&gt;&lt;br /&gt;
&lt;img src=&quot;http://blog.madoro.org/mn/images/mn/tt_0002/scaffold3.png&quot; class=&quot;attach_img&quot;&gt;&lt;/img&gt;&lt;/p&gt;
&lt;p&gt;なんとも面白くないいつもの scaffold がちゃんとmongoDBで動いているのが確認できる。&lt;/p&gt;
&lt;p&gt;とりあえずここまでで、RSpec / factory_girl あたりを &lt;a href=&quot;http://blog.madoro.org/mn/76&quot;&gt;次回&lt;/a&gt; 。&lt;/p&gt;
&lt;p&gt;参考：&lt;br /&gt;
&lt;a href=&quot;http://www.mongodb.org/display/DOCS/Rails+3+-+Getting+Started&quot;&gt;http://www.mongodb.org/display/&lt;span class=&quot;caps&quot;&gt;DOCS&lt;/span&gt;/Rails+3+-+Getting+Started&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://paulbarry.com/articles/2010/01/13/customizing-generators-in-rails-3&quot;&gt;http://paulbarry.com/articles/2010/01/13/customizing-generators-in-rails-3&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://groups.google.com/group/mongomapper/browse_thread/thread/cd89810b98eb7abf&quot;&gt;http://groups.google.com/group/mongomapper/browse_thread/thread/cd89810b98eb7abf&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://github.com/rspec/rspec-rails&quot;&gt;http://github.com/rspec/rspec-rails&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://stackoverflow.com/questions/3004489/mongodb-initialization-error-in-rails&quot;&gt;http://stackoverflow.com/questions/3004489/mongodb-initialization-error-in-rails&lt;/a&gt;&lt;/p&gt;</summary><updated>2010-07-11T02:44:07Z</updated><link href='http://blog.madoro.org/mn/74' rel='alternate' type='text/html'/></entry><entry><id>http://blog.madoro.org/mn/76</id><title type='text'>Rails 3 + mondoDB + HAML + Rspec + Jquery のインストール - 2</title><summary type='html'>&lt;p&gt;&lt;a href=&quot;http://blog.madoro.org/mn/74&quot;&gt;前回&lt;/a&gt; の続き。&lt;/p&gt;
&lt;p&gt;主に &lt;a href=&quot;http://github.com/thoughtbot/factory_girl&quot;&gt;FactoryGirl&lt;/a&gt; と &lt;a href=&quot;http://github.com/jnunemaker/mongomapper&quot;&gt;MongoMapper&lt;/a&gt; の話。基本的に何も考えなくてもそのまま使えるのだけど。&lt;/p&gt;
&lt;p&gt;まず、設定。&lt;/p&gt;
&lt;p&gt;spec_helper.rb で、&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;config.use_transactional_fixtures = true&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;を&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;config.use_transactional_fixtures = false&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;にする。そうしないと、ActiveRecord::TestFixtures が呼ばれてしまうのだけど、ActiveRecordを入れてないので落ちる。&lt;/p&gt;
&lt;p&gt;そもそもMongoDBにはトランザクションとかないのでfalseでいい。&lt;/p&gt;
&lt;p&gt;後は、ActiveRecordで使う場合と同じように、FactoryGirlの定義の読み込みを spec_helper.rb の中で行う。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Factory.find_definitions&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;mongoDBにはトランザクションがないので、テストの前にデータを自分で消しておいたほうがいいだろう。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;config.before(:each) do
  MongoMapper.database.collections.each {|collection| collection.remove}
end&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;全体的にはこんな感じ。generatorが作ったものに、上記変更を入れただけ。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Dir[&quot;#{File.dirname(__FILE__)}/support/**/*.rb&quot;].each {|f| require f}&lt;/code&gt;

&lt;code&gt;require &apos;factory_girl&apos;
Factory.find_definitions&lt;/code&gt;

&lt;code&gt;RSpec.configure do |config|
  # == Mock Framework
  #
  # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
  #
  # config.mock_with :mocha
  # config.mock_with :flexmock
  # config.mock_with :rr
  config.mock_with :rspec&lt;/code&gt;

&lt;code&gt;  # config.fixture_path = &quot;#{::Rails.root}/spec/fixtures&quot;&lt;/code&gt;

&lt;code&gt;  # If you&apos;re not using ActiveRecord, or you&apos;d prefer not to run each of your
  # examples within a transaction, comment the following line or assign false
  # instead of true.
  config.use_transactional_fixtures = false&lt;/code&gt;

&lt;code&gt;  config.before(:each) do
    MongoMapper.database.collections.each {|collection| collection.remove}
  end
end&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;試しに一個テストを書いてみる。&lt;/p&gt;
&lt;p&gt;まず、generatorがEntryクラスのFacotryの雛形も作ってくれているので、それの確認。&lt;/p&gt;
&lt;p&gt;File: spec/factories/users.rb&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Factory.define :entry do |f|
  f.title &quot;MyString&quot;
  f.body &quot;MyString&quot;
end&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;簡単なお試し用のテストを書いてみる。(テスト自体に意味はない)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;describe Entry do
  it &quot;should create 10 entries&quot; do
    10.times { Factory(:entry) }
    Entry.count.should == 10
  end
end&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;書いたテストの実行&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ bundle exec rspec spec/models/entry_spec.rb
.&lt;/code&gt;

&lt;code&gt;Finished in 0.03308 seconds
1 example, 0 failures&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;すばらしい！&lt;/p&gt;
&lt;p&gt;FactoryGirlで、MongoMapper::Document同士のassociationも問題なく書ける。(ただし、MongoMapper::EmbeddedDocument から 親Documentへのassociationはうまく作ってくれなかった(正格には作ってくれるんだけど、Saveされない))&lt;/p&gt;
&lt;p&gt;こんな感じで、Rails 2 + ActiveRecord時代とほとんど変わらない環境が Rails 3 + MongoMapper で、できたかな。&lt;/p&gt;</summary><updated>2010-07-11T02:44:07Z</updated><link href='http://blog.madoro.org/mn/76' rel='alternate' type='text/html'/></entry><entry><id>http://blog.madoro.org/mn/75</id><title type='text'>最近のmongoDB翻訳</title><summary type='html'>&lt;p&gt;しばらくさぼってたんですが、ちょっとずつ再開してます。&lt;/p&gt;
&lt;p&gt;ただ、オリジナルのドキュメントの更新頻度がずいぶんと高いので、しばらくは新規のドキュメントはやらずに、既存のドキュメントに追従していくだけにしようと思ってます。とりあえず導入の部分から、ある程度使いこなせるまでの部分だけに集中しようかな、と。&lt;/p&gt;
&lt;p&gt;思っていたよりあちこちからリンクされているようで、変に古いドキュメントがあるのは逆にmongoDBにとってマイナスなんで。&lt;/p&gt;
&lt;p&gt;とりあえず、以下の超基本ドキュメントを最近更新しました。&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/mongo%20-%20%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E3%82%B7%E3%82%A7%E3%83%AB&quot;&gt;mongo &amp;#8211; インタラクティブシェル&lt;/a&gt;
	&lt;ul&gt;
		&lt;li&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/%E3%82%B7%E3%82%A7%E3%83%AB%20%E6%A6%82%E8%A6%81&quot;&gt;シェル 概要&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/%E3%82%B7%E3%82%A7%E3%83%AB%20%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9&quot;&gt;シェル リファレンス&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB&quot;&gt;チュートリアル&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/%E9%96%8B%E7%99%BA%E8%80%85FAQ&quot;&gt;開発者FAQ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</summary><updated>2010-07-08T01:15:06Z</updated><link href='http://blog.madoro.org/mn/75' rel='alternate' type='text/html'/></entry><entry><id>http://blog.madoro.org/mn/73</id><title type='text'>Mac OS X で mongoDB</title><summary type='html'>&lt;p&gt;出張とか旅行で家を空ける機会が多かったので久しぶりになってしまった。&lt;/p&gt;
&lt;p&gt;普段はFreeBSDをサーバ用途で使っているのだけど、Macでも手軽に実行できるので紹介してみる。ダウンロードして展開する以外、特にインストール作業いらない。もろもろなパッケージ管理ツールみたいなものを使ってもいいけど、遊ぶぐらいならこれで十分かな。&lt;/p&gt;
&lt;p&gt;とりあえず、 &lt;a href=&quot;http://www.mongodb.org/downloads&quot;&gt;ここ&lt;/a&gt; から適当にダウンロード。(OS X 64-bit の 1.5.X とか)&lt;/p&gt;
&lt;p&gt;次に、mongoDBのデータを入れるディレクトリを作成。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ mkdir /somewhere/mongodb_data&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;後は、ダウンロードして展開したmongodを実行するだけ。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ /foo/bar/mongodb-osx-x86_64-1.5.3/bin/mongod --dbpath=/somewhere/mongodb_data&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;オプションを何もつけないとフロントエンドで実行される。バックグランドで実行したい場合には、 &lt;code&gt;--fork --logpath=/somewhere/mongodb.log&lt;/code&gt; とか付ける。&lt;/p&gt;
&lt;p&gt;接続できるか、mongoコマンドで確認&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ /foo/bar/mongodb-osx-x86_64-1.5.3/bin/mongo
MongoDB shell version: 1.5.3
connecting to: test
type &quot;help&quot; for help
&amp;gt; &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;エラーが出ないでプロンプトが出たら完了。&lt;/p&gt;
&lt;p&gt;後は &lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB&quot;&gt;チュートリアル&lt;/a&gt; をやってみるもよし、お好みの言語でいじるもよし、mongoライフを楽しみましょう。&lt;/p&gt;</summary><updated>2010-07-01T21:55:40Z</updated><link href='http://blog.madoro.org/mn/73' rel='alternate' type='text/html'/></entry><entry><id>http://blog.madoro.org/mn/72</id><title type='text'>今週のMongoDB翻訳</title><summary type='html'>&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;p&gt;日本滞在中でいまいち調子が狂う。今週は更新のみ。&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB&quot;&gt;チュートリアル&lt;/a&gt;&amp;#xA0;-&amp;#xA0;内容的に大きな変更なし。ObjectIDの作成に、ObjectID() を使うようになった。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/%E3%82%B3%E3%83%8D%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3&quot;&gt;コネクション&lt;/a&gt;&amp;#xA0;-&amp;#xA0;内容的に大きな変更なし。&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88&quot;&gt;アップデート&lt;/a&gt;&amp;#xA0;-&amp;#xA0;$ ポジションオペレータ が追加&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9&quot;&gt;インデックス&lt;/a&gt;&amp;#xA0;-&amp;#xA0;ドキュメント自体をインデックスとして使うところの更新&lt;/li&gt;
&lt;/ul&gt;
&lt;p/&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
</summary><updated>2010-03-27T03:05:39Z</updated><link href='http://blog.madoro.org/mn/72' rel='alternate' type='text/html'/></entry><entry><id>http://blog.madoro.org/mn/70</id><title type='text'>TDDを真面目にやってみて気付いたこと</title><summary type='html'>&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;p&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;何を今更、なことかもしれないないのだけど、もしかしたらこれを知ることでTDD(Test-driven development)をやることのハードルが一気に下がる人がいるかな、と思ってメモ。 特に、ある程度プログラマとして経験があるけど、どうもTDDは慣れないという人向き。&lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;
      &lt;p/&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;hr/&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;
      &lt;p/&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;p&gt;
    &lt;font&gt;
      &lt;font&gt;
        &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
          &lt;font size=&quot;3&quot;&gt;“TDDとは、TDD以前に脳内や機上でやっていたことをコードに落とすことに過ぎない”&lt;/font&gt;
        &lt;/font&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;
        &lt;p/&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;このことが解ってから、TDDをするのが一気に苦痛ではなくなり、むしろ楽しくなった。&lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;
        &lt;p/&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;TDDでなくても、コーディングをするとき、temporaryなテストコードを書いたり、目視でのチェックはしたりするものだろう。たとえば、一時的に変数の値をハードコードして挙動を変えてみて、それを目視で確認したり、printデバッグとかもその一部だ。&lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;p/&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;つまり、このtemporaryなコードや目視している部分をpermanentにするのがTDDで書くテストコードだということがわかった。&lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;p&gt;
      &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
        &lt;font size=&quot;3&quot;&gt;
          &lt;p/&gt;
        &lt;/font&gt;
      &lt;/font&gt;
    &lt;/p&gt;
    &lt;p&gt;
      &lt;p&gt;
        &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
          &lt;font size=&quot;3&quot;&gt;TDDであろうが、なかろうが、考えないといけないこと、やらないといけないことはたいして変わらない。たいして変わらないなら、テストコード書いておいた方が得。&lt;/font&gt;
        &lt;/font&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;p/&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
          &lt;font size=&quot;3&quot;&gt;テストコードがあれば、チーム内で技術や知識の共有もテストコードを通じてしやすくなるし、コードレビューだって、コードとテストがセットの方がやりやすいだとやりやすい。&lt;/font&gt;
        &lt;/font&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;p/&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
          &lt;font size=&quot;3&quot;&gt;単純に、テストファーストでやらないのは色々と損だよね。って感じ。&lt;/font&gt;
        &lt;/font&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
          &lt;font size=&quot;3&quot;&gt;
            &lt;p/&gt;
          &lt;/font&gt;
        &lt;/font&gt;
      &lt;/p&gt;
    &lt;/p&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;hr/&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;font&gt;
      &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
        &lt;font size=&quot;3&quot;&gt;
          &lt;p/&gt;
        &lt;/font&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;font&gt;
      &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
        &lt;font size=&quot;3&quot;&gt;後は、おまけみたいなものなんだけど、自分でTDDしたり、人のTDDでしたコードを見たりして、いくつか思ったことをメモ。&lt;/font&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;font&gt;
      &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
        &lt;font size=&quot;3&quot;&gt;
          &lt;p/&gt;
        &lt;/font&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;font&gt;
      &lt;font&gt;
        &lt;font&gt;
          &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
            &lt;font size=&quot;3&quot;&gt;1. TDDでコードや設計がきれいになるのは、プログラマをさぼらせないから&lt;/font&gt;
          &lt;/font&gt;
        &lt;/font&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;
        &lt;p/&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;いいコードでないとテストが書きにいので、「いいコードを書くのをさぼれない」ってことになって、結果的にきれいなコードにはなりやすい。人はさぼるものなので、これ重要。&lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;
        &lt;p/&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;2. TDDのUnit Testは自作自演&lt;p/&gt;&lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;p&gt;
    &lt;font&gt;
      &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
        &lt;font size=&quot;3&quot;&gt;
          &lt;p/&gt;
        &lt;/font&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;font&gt;
      &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
        &lt;font size=&quot;3&quot;&gt;TDDでは、テストコードを書く人と実際のコードを書く人は通常同じなので、どうしても自分の都合のよいテストコードを書いてしまいがち。また、仕様を誤解してても、その誤解したままのテストコードになって、テストは通る。もちろん、自作自演だからこそ、1.の恩恵を得れる。&lt;/font&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;font&gt;
      &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
        &lt;font size=&quot;3&quot;&gt;
          &lt;p/&gt;
        &lt;/font&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font&gt;
      &lt;font&gt;
        &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
          &lt;font size=&quot;3&quot;&gt;3. ある程度の範囲に影響するリファクタリング時の動作の保証は微妙&lt;p/&gt;&lt;/font&gt;
        &lt;/font&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;
        &lt;p/&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;Unit Testは、どちらかというとホワイトボックス的なテストなので、リファクタリング時にもあわせて変えないといけないことも多い。そのため、ある程度の範囲を直す場合、Unit Testだけでは不十分。動作の保証という意味ではブラックボックス的なcucumberみたいなテストも組み合わせないと厳しい。(もちろん自動化以外のテストも必要だけど、これは別の話)&lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;
        &lt;p/&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;これはTDDってよりUnit Testの話か。&lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;
        &lt;p/&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font&gt;
      &lt;font&gt;
        &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
          &lt;font size=&quot;3&quot;&gt;4. テスト自体の知識も大切&lt;/font&gt;
        &lt;/font&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;
        &lt;p/&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;当然なんだけど、TDDをするようなツールの知識だけではなくて、ある程度のテストの知識がないと良いテストは書けない＝良いTDDはできない。テストの知識ってのはCOBOLの時代(もっと前かな)から変わってないような知識。境界値チェックとか(ちなみに、こういうの勉強するのに情報処理試験の勉強ってなかなか侮れない)。&lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;
        &lt;p/&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;単純な例を挙げると、ある条件での平均値を求める、と言ったコードに対するテストで、テストコードで使うテストデータがその「ある条件」のものしか用意してなく、「ある条件」以外のものを用意してないといったケース。この場合実際のコードの方に「ある条件」が抜けていてもテストは通ってしまう。超基本なんだけど、それすらできてないテストを見かける。&lt;p/&gt;&lt;/font&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;
      &lt;p/&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;p&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;単体テスト仕様書を何百枚も手書きしていた世代のノウハウをゲットすべき(関係ないけど、Key-Value Storeな方面でもあの世代のノウハウって役に立ちそう)。&lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
      &lt;font size=&quot;3&quot;&gt;
        &lt;p/&gt;
      &lt;/font&gt;
    &lt;/font&gt;
  &lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;ちょっと逸れるけども、知識どうこうではなくて、手を抜いてしまっているダメなテストももちろんダメ。&lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;
      &lt;p/&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;たとえば、Rubyとrspecでの例になってしまうが、&amp;#xA0;foo.should_not be_nil&amp;#xA0;を安易に使いすぎるとか。foo.should == something とちゃんと書けるようなケースなのに、should_not be_nil で手を抜く。&lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;
      &lt;p/&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;他にも、Mock/Stubを使いすぎて、何もテストしてない状態になっている、とか。笑い話みたいだけどたまにある。&lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;
      &lt;p/&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;こういうのは「自分が何をテストしているのか」というのをしっかり意識しないと陥りがち。&lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;
      &lt;p/&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;そういえば、「TDDは品質のためじゃない！」 と、でかい声で言ってる人でも、多分このぐらいのことは当然やってる人たちなんだろうけど、なんか誤解は与えそうだね。とは思った。&lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;
    &lt;font size=&quot;3&quot;&gt;
      &lt;p/&gt;
    &lt;/font&gt;
  &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
</summary><updated>2010-03-23T01:02:03Z</updated><link href='http://blog.madoro.org/mn/70' rel='alternate' type='text/html'/></entry><entry><id>http://blog.madoro.org/mn/71</id><title type='text'>今週のMongoDB翻訳</title><summary type='html'>&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;p&gt;地道にやってます。&lt;/p&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
&lt;p&gt;新規&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%81%A8%E8%A8%BA%E6%96%AD&quot;&gt;モニターと診断&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%81%A8%E8%A8%BA%E6%96%AD&quot;/&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/HTTP%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9&quot;&gt;HTTPインターフェース&lt;/a&gt;&amp;#xA0;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/mongosniff&quot;&gt;mongosniff&lt;/a&gt;&amp;#xA0;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/mongostat&quot;&gt;mongostat&lt;/a&gt;&amp;#xA0;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/Data%20Types%20%E3%81%A8%20Conventions&quot;&gt;Data Types と Conventions&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/Data%20Types%20%E3%81%A8%20Conventions&quot;/&gt;
    &lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/Object%20Id&quot;&gt;Object ID&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/Object%20Id&quot;/&gt;
    &lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/%E8%80%90%E9%9A%9C%E5%AE%B3%E6%80%A7%E3%81%A8%E4%BF%AE%E5%BE%A9&quot;&gt;耐障害性と修復&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
&lt;p&gt;更新&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;a href=&quot;http://www.mongodb.org/display/DOCSJP/%E9%9B%86%E7%B4%84%20(aggregation)&quot;&gt;集約 (aggregation)&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;他にもあった気もする&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mongodb.org/display/DOCS/About&quot;&gt;about&lt;/a&gt;の下と&lt;a href=&quot;http://www.mongodb.org/display/DOCS/Contributors&quot;&gt;contributors&lt;/a&gt;の下をやりたいんだけど、手が回らない。&lt;/p&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
</summary><updated>2010-03-20T04:29:22Z</updated><link href='http://blog.madoro.org/mn/71' rel='alternate' type='text/html'/></entry><entry><id>http://blog.madoro.org/mn/68</id><title type='text'>Flash嫌い？</title><summary type='html'>&lt;?xml version=&quot;1.0&quot;?&gt;
今の会社に入るまで、自分も普通にFlashが嫌いだったのだけど、自分が関わるようになって「まー、ありかな」と思うところもあるのでメモ。アニメーションとかゲームとかでばりばりFlashっていう方面ではなくて、アプリケーションの一部としてFlashを使う話。
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
&lt;p&gt;まず自分のFlashに対する経験を書いてみる。&lt;/p&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
&lt;p&gt;Flashとバックエンド(サーバサイド)の間に立ってコミュニケーションをするモジュールをFlexで作った。というのが一番技術的にFlashに近づいたところかな。&lt;/p&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
&lt;p&gt;これを作る前はFlashが直接バックエンド(またはJavascript経由でバックエンド)と直接コミュニケーションしていたんだけど、色々と問題(実装したFlash毎に通信方法が違ったり、通信環境のエラー処理をFlash側にそれぞれ書かなかったりいけなかったり)が出てきたので間にデータハンドリング用の層を作った。また、Flashから直接サーバサイドやJavascriptとやりとりするのを禁止にして、Flashのプログラマの人がpureなFlashの制作に集中できるようにした。&lt;/p&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
&lt;p&gt;それと、ActionScriptというところで言うとAdobe Flexでそれなりの規模のアプリケーションは作ったことはある。&lt;/p&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
&lt;p&gt;そんな感じなので、ActionScriptはそれなりにわかるけど、Flash固有のこと(タイムラインとか)はよくわかってないと言った感じ。でも、なんとなくFlashがどう動いているかというのはわかっているつもり。それと、それなりの数のFlashのプログラマと一緒に働いてきて、Flash開発とFlashの開発者の人の傾向みたいなものもなんとなくわかっているつもり。&lt;/p&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
&lt;p&gt;で、自分が感じている開発視点でのFlashの強みは、&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;生産性は高い？ これは正直微妙なところもある。ただ、HTML+Javascript+CSSが好き(でFlashが嫌い)な人は「それ、HTMLでもできるよ」ってすぐ言うのだけど(エフェクトとかね)、やっぱり生産性、保守性という面ではまだまだFlashには敵わないかな、とは思っている。もちろんFlashが得意なところに限る。テキスト処理みたいな苦手なところで使うと一気に生産性ダウン。&lt;/li&gt;
  &lt;li&gt;人材を確保しやすい。これも微妙か。数年前は、html+Javascript+cssで、きれいに動きを付けられる人を探すのは、Flashな人を探すより大変だった。最近はそうでもないのかなー。&lt;/li&gt;
  &lt;li&gt;オーディオやビデオの再生や録画と言ったところはまだまだFlashでしか(簡単に)できないことも多い。&lt;/li&gt;
  &lt;li&gt;ブラウザ間の互換性を(あまり)気にしなくていい。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;弱いところは、&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;テスト系のツールが遅れてる。Unit Testがあるぐらい？ 画面系の自動テストも、商用含めいくつかあるみたいだけど、あまり標準的なものもなく、結局未だに手でテストしてる。TDDだBDDだ言って盛り上げっているところから見ると、あれ？って感じ。&lt;/li&gt;
  &lt;li&gt;SCMが使いづらい。Flashだとまだバイナリファイルで管理している部分(fla)があって、SCMでの管理が非常にしづらい。Flexならほぼ全部テキストベースのコードで行けるのだけどね。このご時世に「いつの間にかファイルが先祖返りしてた」とかありえない。&lt;/li&gt;
  &lt;li&gt;バックエンドのことまで考えられる技術者が少ない？ これはもう半分諦めて、インタフェースの部分はバックエンドの技術者が作ってしまった方がよさそう。&lt;/li&gt;
  &lt;li&gt;テキスト系が弱すぎる。Flashというより、Flash Playerの問題か。この時代に、もっさり感のあるテキスト入力とかちょっと考えられない。&lt;/li&gt;
  &lt;li&gt;ブラウザ間の互換性はあまり気にしなくていいけど、Flash Playerのバージョン間の互換性は知っておく必要がある。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;うーん、「みんな悪く言うけど、Flashそれなりにいいもんだよ！」と思って書き始めたんだけど、こうやって書き出すと悪いところが目立つようになってしまった。あらら。&lt;/p&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
&lt;p&gt;今後は、Flashが強いところをピンポイントでモジュールとして作り、htmlとJavascriptの中でそれを調和させつつうまく使う、というのが正解なんだろうな。Adobeの中の人も同じようなこと言ってたような気がするけど。で、その辺のいい感じのフレームワークみたいのがあればいいのにね。&lt;p/&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
&lt;p&gt;そうなってくると、Flash技術者の人はhtmlとかJavascript/CSSの知識も持っていないとツラそう。いかにhtmlと協調して、違和感なく動くようなFlashモジュールを作れるか、というのがポイントになってくるので。&lt;/p&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
&lt;p&gt;なんとなく、メモっておきました。&lt;/p&gt;
&lt;p&gt;
  &lt;p/&gt;
&lt;/p&gt;
</summary><updated>2010-03-16T02:23:08Z</updated><link href='http://blog.madoro.org/mn/68' rel='alternate' type='text/html'/></entry></feed>