japan.internet.comThe Internet & IT Network
Twitter
RSS
  • ニュース
  • コラム
  • リサーチ
  • ヘッドライン
  • 特集
  • ブログ
  • プレスリリース
  • 専門チャンネル
  • イベント
  • ランキング
  • ニュースメール
2009年11月24日
文字サイズ文字サイズ小文字サイズ中文字サイズ大
事業仕分けによる次世代スーパーコンピューターの開発予算削減について、どうお考えですか?
賛成
反対
どちらとも言えない
投票締切 11/30 12:00
デベロッパー2008年6月6日 10:00

Ruby on Rails 2.0入門:Flickerベースのアプリケーションの作成

海外海外internet.com発の記事
  • Post to Twitter
  • Post to Facebook
  • このエントリーを含むはてなブックマーク
  • この記事をクリップ!
  • Buzzurlにブックマーク
  • Yahoo!ブックマークに登録
  • newsing it!
  • この記事をokyuuへインポート

はじめに

 2004年に初めてリリースされたRails Webアプリケーションフレームワークは、Ruby言語のキラーアプリケーションになり、CRUD(Create、Read、Update、Delete)パターンに基づくWebアプリケーションを短時間で作成できる非常に強力なツールとして急速に普及しました。そして2007年末、今やすっかり有名になったこのWebアプリケーションフレームワークのバージョン2.0がリリースされました。最初のリリースのときほどの驚きはありませんが、Rails 2.0はやはり多くのイノベーションを実現し、開発をより効率的で楽しいものにしています。

 本稿では、Rails 2.0の概要と、最も重要な新しい機能を説明し、それらを使ってシンプルでも目を引くWebアプリケーションを作成する方法を紹介します。よくある「15分でブログを作る」というような例ではなく、ここで紹介するアプリケーションサンプルは、最近人気の写真共有Webサイト「Flickr」向けの、便利で一度使ったらやめられないフォトブラウザです。

 図1〜4は、サンプルのフォトブラウザ「RailTrack」のスクリーンショットです。スクリーンキャストについては、こちらを参照してください。

図1 RailTrackrスクリーンショット1:Rails 2.0のFlickrブラウザ
図1 RailTrackrスクリーンショット1:Rails 2.0のFlickrブラウザ
図2 RailTrackrスクリーンショット2:Floridapfeのフォトセット
図2 RailTrackrスクリーンショット2:Floridapfeのフォトセット
図3 RailTrackrスクリーンショット3:Floridapfeの「Snowy Owl」フォトセット
図3 RailTrackrスクリーンショット3:Floridapfeの「Snowy Owl」フォトセット
図4 RailTrackrスクリーンショット4:「Snowy Owl」フォトセットのキツネザルの写真
図4 RailTrackrスクリーンショット4:「Snowy Owl」フォトセットのキツネザルの写真
 本稿にはRailTrackrのソースコードが添付されています。最新のコードについては、私のWebサイトを参照してください。ソースコードをダウンロードし、本稿を読むときの参考にしてください。このアプリケーションには多くの機能が用意されていますが、本稿では関連するスニペットのみをコードから抜粋して示します。

インストールと基本セットアップ

 最初に行わなければならないのは、Rails 2.0フレームワークをインストールして基本的なアプリケーションのスキャフォルドを作成し、すべて正しくセットアップされていることを確認することです。Ruby言語とRubyGems(Rubyライブラリの標準パッケージングシステム)がシステムにまだインストールされていない場合は、RubyおよびRubyGemsのWebサイトを参照してインストールしてください。また、Pastieのサイトも参照してください。これは、Rails 1.xベースのアプリケーションを新しいバージョンに移行できるかどうかをチェックするツールです。

 準備ができたら、Rails 2.0をインストールします。手順は前のバージョンと同じです。端末を開き、次のコマンドを入力します。

gem install rails --include-dependencies
 必要なライブラリを明示的に参照できるgemコマンドを実行して、インターネットから正しいパッケージがダウンロードされていることを確認することもできます。

$ sudo gem update actionmailer actionpack activerecord activesupport
$ sudo gem install activeresource
$ sudo gem update rails
$ ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0]
$ gem -v
1.0.1
$ rails -v
Rails 2.0.2
$ gem list --local

*** LOCAL GEMS ***

actionmailer (2.0.2, 1.3.6, 1.3.3)
actionpack (2.0.2, 1.13.6, 1.13.3)
actionwebservice (1.2.6, 1.2.3)
activerecord (2.0.2, 1.15.6, 1.15.3)
activeresource (2.0.2)
activesupport (2.0.2, 1.4.4, 1.4.2)
rails (2.0.2, 1.2.6, 1.2.3)
... other libraries here ...
 おわかりのように、前のバージョンのRailsを新しいバージョンと共存させて、前のRailsバージョンで作成された既存のアプリケーションを円滑に移行できます。この例では、1つのRails 2.0.2と、前のバージョンの2つのRails 1.2が設定されています(Ruby on Railsのダウンロードページに、インストール方法の詳細が記載されています)。

 すべて正しく動作していることを確認するには、次のコマンドを使って新しいWebアプリケーションのスキャフォルドを生成します。

rails testapp
cd testapp/
script/server 
 ブラウザでhttp://localhost:3000にアクセスして、Railsの最新バージョンを使っていることを確認します。新たに作成したRails 2.0アプリケーションには、図5のようなウェルカム画面が表示されるはずです。表示されない場合は、testapp/config/environment.rbファイルでRAILS_GEM_VERSIONを確認してください。

図5 新たに作成したRails 2.0アプリケーションのウェルカム画面
図5 新たに作成したRails 2.0アプリケーションのウェルカム画面

RailTrackrアプリケーション

 RailTrackrは、ビジュアルリッチなWebベースのFlickrフォトブラウザです。このブラウザを使って、Rails 2.0の優れた機能を紹介します。サンプルアプリケーションを起動するには、本稿のサンプルコードをダウンロードし、通常のscript/serverコマンドを実行します。このアプリケーションはFlickrのAPIを使って写真を読み込むので、Flickr ServicesのサイトにAPIキーを要求し、そのキーをサンプルコードのflickr_helper.rbファイルに入力する必要があります。

 このアプリケーションは、Flickrのユーザー、フォトセット、およびフォトセットに含まれる写真をナビゲートする方法を提供します。つまり、ここでは、FlickrUser、Photoset、Photoの3つのエンティティが定義されています。アプリケーションドメインでは、1つのFlickrUserに複数のPhotosetを割り当てることができ、各Photosetに複数のPhotoを割り当てることができます。これらがRailTrackrのRubyモデルになります。

Rails 2.0のRESTサポート

 Rails 2.0の主な新機能の1つは、完全に「RESTful」であることです。REST(Representational State Transfer)のAPIに従うことでリソースの公開が非常に簡単になりました。実際、すべてのRailsモデル、もっと正確に言えば、アプリケーションのすべてのリソースを、HTTPプロトコルの基本コマンド(GET、POST、PUT、DELETE)を使って操作、アクセス、変更可能なオブジェクトとして公開できます。これらのコマンドは公開されるリソースに対するCRUD(Create、Read、Update、Delete)操作に直接マップされます。

 RESTはRails 1.xでもすでにサポートされていましたが、さらに統合が進み、使いやすくなりました。RESTの原則に従ってリソースを公開するために必要なことは、写真リソースの操作に関する表1のようなメソッドを持つRailsコントローラを定義することだけです。

表1 RESTコントローラが提供しなければならないメソッド
コントローラのメソッドCRUDの操作URL例
indexすべての写真を取得するGET /photos
showID 123の写真を取得するGET /photos/123
new新しい写真を取得して編集するGET /photos/new
editID 123の既存の写真を取得して編集するGET /photos/123/edit
create新しい写真を作成(保管)するPOST /photos
update既存の写真123を更新するPUT /photos/123
destroy既存の写真123を削除するDELETE /photos/123
 RailTrackrで使用する最新のRails 2.0のスキャフォルドジェネレータは、常に表1のスキームに準拠するコントローラを作成します。script/generate scaffold Photoというコマンドを実行すると、次のファイルとエレメントが作成されます。

  • RESTfulコントローラ(photos_controller.rb)
  • ActiveRecordモデル(photo.rb)(サンプルアプリケーションでは、Flickr APIのプロキシに置き換えられます)
  • 関連付けられたビュー(edit.html.erb、index.html.erb、new.html.erb、show.html.erb)
  • ルーティングファイルroutes.rbの内側でのリソースマッピング
  • テスト、フィクスチャ、データベース移行ファイルの通常のセット
 以前のRailsバージョンと異なり、コントローラの名前は自動的に複数形になり、REST URLでのリソースのアドレス指定がより適切に反映されます。さらに、作成されるビューファイルの名前パターンがまったく新しくなりました。

多様なビュー

 Rails 2.0では、マルチビューのサポートがテンプレートにまで拡張されています。それぞれ特定のエンジンでレンダリングされているリソースに、さまざまな形式でアクセスし操作することができます。ビューのファイル名構文は[name_of_the_view].[format].[engine]です。たとえば、show.html.erbというファイルは、次の処理を実行します。

  1. コントローラのshowメソッドに関連付けられたビューを表現します。
  2. html出力を生成します。
  3. erb(Embedded Ruby)エンジンを使います(erbは以前のRailsバージョンで動的なHTMLビューの作成に使われたデフォルトエンジンです)。
 したがって、たとえばshow.csv.erbテンプレートとshow.atom.builderテンプレートは、同じビューをそれぞれerbで生成されたCSV(Comma Separated Value)形式のコンテンツと、XMLビルダエンジンで生成されたATOMシンジケーションフィードにマップします。

 コントローラはrequest.format関数とrespond_to関数を使って、レンダリング形式の変更と実行フローの適切なテンプレートへの転送をそれぞれ行うことができます。指定がない場合、Railsは要求されたリソースのMIMEタイプに従って適切なテンプレートを検出します。次のリストに、コントローラのメソッドが写真のリストをHTMLページまたはXMLファイルのいずれかとして返す方法を示します。

class PhotosController < ApplicationController
  # GET /photos
  # GET /photos.xml
  def index
    @photos = # load photos from Flickr

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @photos }
    end
  end
end
 RailTrackrは、ユーザーが具体的な画像を要求した場合は必ずJPGバイナリ画像として写真をレンダリングします。この要件に対応するには、コントローラのshowメソッドを次のように変更する必要があります。

class PhotosController < ApplicationController
  # ... omissis ...

  # GET /photos/1.jpg
  def show
    @photo = Photo.find(params[:id])

    respond_to do |format|
      format.jpg
    end
  end
end
 次に、ビューファイルviews/photos/show.jpg.erbを作成する必要があります。このファイルが画像のバイナリコンテンツを出力します。

<%= @photo.image_data %>
 モデルオブジェクト@photoには、画像そのもののバイナリコンテンツを含む属性image_dataがあります。

 デフォルトの形式(HTML、XML、ATOMなど)のほかに、ファイルconfig/initializers/mime_types.rbを編集してMime::Type.register_alias関数を使うことでカスタムの形式を作成する方法もあります。この機能を示す有効な構成は次のとおりです。

# Bind jpeg mime-type to the format.jpg format
Mime::Type.register_alias "image/jpeg", :jpg
# Bind the richtext mime-type to the format.rtf format
Mime::Type.register "text/richtext", :rtf
# Bind an additional formatter to the html mime-type, to be used
# for mobile devices with a limited display
Mime::Type.register_alias "text/html", :mobile
 最後の行で、2つの異なるHTMLレンダリング(ブラウザ用と、ディスプレイ機能が限定されたモバイルデバイス用)を用意するという一般的な要件を満たしています。コントローラは、要求パラメータまたはHTTPヘッダに応じて適切なレンダリングを選択できます。次にその例を示します。

class PhotosController < ApplicationController
  before_filter :detect_mobile_device

  def index
    @photos = # load photos from Flickr

    respond_to do |format|
      format.html   # index.html.erb
      format.mobile # index.mobile.erb
    end
  end

  ... omissis ...
  def detect_mobile_device
    if request.env['HTTP_USER_AGENT'] &&
      request.env['HTTP_USER_AGENT'][/BlackBerry/]
      request.format = :mobile
    end
  end
end
 カスタムの形式を使ってモバイルデバイスをサポートする方法については、このチュートリアルを参照してください。

リソースのネストによるわかりやすいURLの作成

 ここまでは、次のようなRESTのURLに基づいてリソースを提供するRailTrackrの機能を説明しました。

  • http://yoursite.com/flickr_users/max ― Flickrユーザーmaxの詳細を表示します。
  • http://yoursite.com/photosets/123 ― ID 123のフォトセットを表示します。
  • http://yoursite.com/photos/456/edit ― ID 456の写真を編集します。
 実際に、routes.rbファイル内の基本的なリソースマッピングを見ると、スキャフォルドコマンドが次のエントリを作成したことがわかります。

ActionController::Routing::Routes.draw do |map|
  map.resources :photos
  map.resources :photosets
  map.resources :flickr_users

  # default mapping
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end
 Rails 2.0には、URLを改善してわかりやすくする方法が用意されています。ActiveRecordモデルで1対多の関係を構成する方法と同様に、リソース間のマッピングを宣言して、次のようなURLを使ってリファレンス間をナビゲートできるようになりました。

  • http://yoursite.com/flickr_users/max/photosets ― maxのすべてのフォトセットを表示します。
  • http://yoursite.com/photosets/123/photos ― フォトセット123に含まれるすべての写真を表示します。
 これらのURLには、覚えやすい自然な名前が付けられています。これらのURLを有効にするために必要なステップは2つだけです。まず、次のコンテンツを反映するようにroutes.rbを変更します。

ActionController::Routing::Routes.draw do |map|
  map.resources :flickr_users
  map.resources :flickr_users, :has_many => :photosets   
  map.resources :photosets, :has_many => :photos

  # default mapping
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end
 その後、次のようにユーザーとそのフォトセット間のリソースマッピングを宣言してコントローラを編集します。

class PhotosetsController < ApplicationController
  before_filter :load_user
  
  # Given a sample url like site.com/flickr_user/max/photosets ,
  # params[:flickr_user_id] automagically points to 'max'
  def load_user   
    @flickr_user = FlickrUser.find(params[:flickr_user_id])
  end
  
  # GET /photosets
  def index
    @photosets = Photoset.by_user(@flickr_user)[0..50]

    respond_to do |format|
      format.html # index.html.erb
    end
  end
end
 before_filterステートメントにより、フォトセットにアクセスする前にそのフォトセットのユーザーが読み込まれます。flickr_user_id変数には、Railsによって自動的に、親リソース(flickr_user)の名前から命名規約に従って値が設定されます。

 このネストリソースマッピングは、コントローラ内だけでなく、ビュー内でのURLの生成にも使うことができます。たとえば、@flickr_userはID maxのユーザーを参照し、@photosetはID 123のフォトセットを参照しているとします。次のすべてのステートメントをビュー内で正しく使うことで、link_toなどのリンク関数に関連付け可能なURLを生成できます。

  • flickr_user_photosets_url(@flickr_user)は、www.site.com/flickr_user/max/photosets(ユーザーのすべてのフォトセットのリスト)を参照します。
  • flickr_user_photoset_url(@flickr_user,@photoset)は、www.site.com/flickr_user/max/photoset/123(1つの特定のフォトセットの詳細)を参照します。
  • photoset_photos_url(@photoset)は、www.site.com/photosets/123/photos(フォトセット123に含まれるすべての写真)を参照します。

パフォーマンスの確認

 RailTrackrのユーザーサイドの機能はこれで完成です。しかし、多くの写真をダウンロードして処理するリソース負荷の高いアプリケーションでは、スムーズな操作を実現するためにパフォーマンスが極めて重要になります。

 Rails 2.0では、全体的なパフォーマンスに対するさまざまな改善が盛り込まれ、アプリケーションを高速化するための高度な手法がサポートされています。特に重要なものは次のとおりです。

  • JavaScriptバンドル機能
  • Cookieベースのセッション
  • ドメインのマルチターゲット機能
  • クエリキャッシュ機能

JavaScriptバンドル機能

 JavaScriptバンドル機能とは、アプリケーションのすべてのJavaScriptファイル(またはその一部)を1つのファイルにまとめてからクライアントに送信する機能です。現在、Webアプリケーションは多くのJavaScriptライブラリを使ってユーザーエクスペリエンスを向上させ、リッチなビジュアル効果を提供しています。一方で、ブラウザは1つのJavaScriptライブラリを取得するたびに複数の要求を実行しなければならないため、パフォーマンスが低下するという欠点もあります。ライブラリすべてを1つにまとめることで、ブラウザは1つの要求しか実行する必要がなくなり、Rails 2.0はJavaScriptファイルを迅速に提供できるようになりました。

 RailTrackrも同じです。凝った効果を提供するには多くのJavaScriptファイルが必要です。比較のため、あるユーザーのすべてのフォトセットを含むページにJavaScriptバンドル機能を使わずにアクセスした場合の所要時間(図6)と、JavaScriptバンドル機能を使った場合の所要時間(図7)を示します。レポートの作成にはFirebugを使いました。

図6 バンドル機能を使わずに多くのJavaScriptライブラリをダウンロードした場合
図6 バンドル機能を使わずに多くのJavaScriptライブラリをダウンロードした場合
図7 同じJavaScriptライブラリを1つのファイルにまとめて所要時間を短縮した場合
図7 同じJavaScriptライブラリを1つのファイルにまとめて所要時間を短縮した場合
 JavaScriptバンドル機能のアクティブ化は極めて簡単です。次のように、ビューテンプレート内のjavascript_include_tagステートメントに:cache属性を追加するだけです。

<%= javascript_include_tag 
    "prototype" , "effects" , "dragdrop" , "instant" , "reflex" , 
    :cache => "railtrackr" %>
<!-- Will create a single railtrackr.js file -->
 同じ手法はスタイルシートのバンドルにも適用できます。この場合は、stylesheet_include_tagコマンドを使います。

 バンドル機能は、Railsが実稼動モードになると有効になり、開発中は無効なので、開発者のデバッグセッションでわずらわしさを感じることがありません。

Cookieベースのセッション

 パフォーマンス向上が期待できるもう1つの理由は、Rails 2.0では、セッションデータを保管するときに、サーバー上のデータベースファイルや一時ファイルではなく、ブラウザのCookieを使用することです。ステート情報はすべてクライアント上に残るので、アプリケーションはステートレスに動作でき、水平方向のスケーラビリティによってパフォーマンスが向上します。必要に応じて、サーバーを追加して、各サーバーでまったく同じアプリケーションを実行させることで、レプリカ間でのセッションデータの同期を気にせずに、スループットを向上させることもできます。RailsはCookieにセッションデータを格納するときに暗号化を行いますが、それでも、このソリューションを用いて機密データをセッションに格納したり、セッションに巨大なオブジェクトを格納したりすることは避けてください。なぜなら、ブラウザは要求のたびにCookieをサーバーに送り返すからです(そのため、Cookieは軽量でなければなりません)。

ドメインのマルチターゲット機能

 最近のブラウザは、一般的に、アクセスしている各ドメインに対して2つの同時接続だけを開きます。RailTrackrのページには多くの画像が収められているので、これではブラウザがすべての要求をキューに入れてしまいパフォーマンスが低下します。次のステートメントを指定すると、Railsはドメインのマルチターゲット機能をアクティブにし、複数のドメインに分散された静的なリソースのURLを生成します(デフォルトは4つで、%d記号が数字0〜3に置き換えられて、名前が作成されます)。

ActionController::Base.asset_host = "static%d.yoursite.com"
 ブラウザは同時に2つではなく8つの画像をダウンロードします。この変更をアクティブにするには、まずドメインでDNS別名を設定する必要があります。

クエリキャッシュ機能

 Rails 2.0には、このほかにもデータベース層のパフォーマンス向上を実現するための機能がいくつか用意されています。たとえばクエリキャッシュ機能では、1つの要求を処理するときに同じクエリを何度も実行することを回避できます。

データベース方面の変更点

 今回のサンプルコードでは、Rails 2.0がアプリケーション開発のユーザーサイドにもたらす変更にのみ焦点を当てています。モデルやデータベースマッピングにはまったく触れず、Flickr ServiceのリモートAPI呼び出しを優先させました。しかし、新しいバージョンのRailsでは、そのバックエンドや、人気のあるActiveRecordパーシステンス層に対する一連の変更も行われています。これらの変更は本稿の対象外ですが、最も重要な変更点をここで簡単に説明します。

  • 移行の簡便化 ― データベースの移行を定義する構文が読みやすく、書きやすくなりました。
  • 便利なフィクスチャ ― テストフィクスチャが簡素化され、以前のようにレコードIDではなく、名前によって自分自身を参照できるようになりました。
  • ActiveResource ― リモートサイトがRESTfulなAPIを使ってリソースを公開している場合は、ActiveResourceクラスを拡張してそのリモートサイトを参照するsite属性を宣言するだけで(ActiveRecordモデルと同じ機能を持つ)完全に動作するモデルを作成できるようになりました。本稿で説明したように、Rails 2.0はRESTと完全な互換性があるので、Railsの複数のリモートサイトを1つの分散化モデルに接続するのは簡単なことです(ActiveResourceの詳細を示すスクリーンキャストについては、ここをクリックしてください)。

まとめ

 本稿では、Rails 2.0がWeb開発の世界にもたらした変化を説明しました。主にユーザーサイドの面を中心に、RESTの完全なサポートと、パフォーマンスの向上を確認しました。また、Railsのバックエンドに加えられた変更点についても簡単に説明しました。

 また、Rails 2.0には、ruby-debugライブラリの統合によるデバッグ機能の改善、JSONサポートの向上、RSSフィード用ビルダの改良、ルートの名前空間化、HTTP Basic認証のサポート、セキュリティの向上などの小さな機能も導入されています。

 これらの機能の詳細については、下記の「関連資料」のリンクを参照してください。また、RailTrackrとそのソースコードも使ってみましょう。定期的に更新していますのでbattlehorse.netのチェックもお忘れなく。

関連資料

著者紹介

Riccardo Govoni(Riccardo Govoni)
2003年からJ2EE開発者としてイタリアの金融サービス会社に勤務。ソフトウェアアーキテクトとして従来の銀行システムのWebフロントエンドの設計に従事。物理学修士。SCJP(Sun Certified Java Programmer)資格を持つ。
  • プリンター用
  • 記事を転送
  • Post to Twitter
  • Post to Facebook
  • このエントリーを含むはてなブックマーク
  • この記事をクリップ!
  • BuzzurlにブックマークBuzzurlにブックマーク
  • Yahoo!ブックマークに登録
  • newsing it!
  • この記事をokyuuへインポート
最新トップニュース
  • ディズニーは2009年11月24日、ディズニー初となる絵文字専門サイト「ディズニー絵文字」(http://disney.jp/de/)を、ディズニー・モバイルと NTT ドコモ向けにオープンした。KDDI は11月26日、ソフトバンクモバイルは12月1日より開始する。
  • 国内米 F5、モバイルサービス向けに BIG-IP を拡充(Webテクノロジー 11月24日 17:20)
    サービスプロバイダやシステムインテグレータが、認証、認可、課金サービスを行う既存 AAA( Authentication Authorization Accounting)サーバーを置き換えることなく、レイヤ7トラフィック管理を利用して各サービスを提供できるようにする。
  • 株式会社グリーンハウスは2009年11月24日、お気に入りのイヤホンをケータイで使える携帯電話用イヤホン変換アダプタ「GH-FOMA2ADK」を、12月上旬に発売することを発表した。価格は980円。
  • 富士ゼロックス株式会社は2009年11月24日、スモールオフィス向けに、フルカラーデジタル複合機「DocuCentre-IV C2260(ドキュセンター フォー シー2260)」を、日本国内で12月中旬から販売開始することを発表した。
  • 一般社団法人 JPCERT コーディネーションセンター(JPCERT/CC)は、2009年11月24日、制御システムセキュリティに関する資料として、「重要社会インフラのためのプロセス制御システム(PCS)のセキュリティ強化ガイド」および「制御システムセキュリティガイドライン、標準、及び認証への取り組みに関する分析」を公開した。
Graphic Design Forum
【Graphic Design Forum】
Designism 4.0:持続可能性は持続可能か?(11月24日)
スマートにソーシャルウェブを構築しよう
スマートにソーシャルウェブを構築しよう
オバマ大統領も絶賛。メイヨークリニックのソーシャルメディアポリシー(11月24日)
アイレップの SEM フロンティア
アイレップの SEM フロンティア
検索技術の進化で広がる SEO 領域―2010年以降に要求される事は?(11月24日)
百式のネットビジネス研究
百式のネットビジネス研究
外国で見かけた標識を写真に撮ると翻訳してくれる iPhone アプリ「PicTranslator」(11月24日)
エンジニア転職ノウハウ開発室
エンジニア転職ノウハウ開発室
エンジニア的「合わない」と思う瞬間/理系の人々(11月24日)
DevX
DevX
HTML 5のフォーム要素(11月24日)
「IT の耳」
「IT の耳」
【書評】『Hyper-V スタートアップバイブル』――仮想化についてのすぐれた解説書(11月20日)
週刊-サイト別アクセス状況データ
週刊-サイト別アクセス状況データ
ビデオリサーチインタラクティブ調査(月間インターネットオーディエンスデータ)(11月19日)
海外ソーシャルウェブに学ぶ成功の秘訣
海外ソーシャルウェブに学ぶ成功の秘訣
ゲーム業界を襲う世界的な激震。ソーシャルゲーム急成長のインパクト(11月19日)
今さら聞けない初歩からのアクセス解析
今さら聞けない初歩からのアクセス解析
サイトリニューアル前のアクセス解析活用法(11月19日)
成約率、反応率を上げる Web 文章術
成約率、反応率を上げる Web 文章術
文章力を磨き、キャッシュを生み出す Web サイト に(11月19日)
Copyright 2009 Japan Internet.com K.K. All Rights Reserved.http://www.internet.com/