ホーム ブログ ページ 51

PMBOKについて

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

ベンチャー企業に入社して早4年になろうとしています。新卒で入ったので他の会社の事は分かりませんが我が社では突然スキルアップの為の「チャンス」が頂けることがあります。

新規プロジェクトで初めてリーダーとして入ったことがありました。

それまでの私は上司の不満なところにばかり目が行く部下だったのだと実感しました。

突然初めてのリーダーをやることで「あの時○○さんはどうやっていたんだろう」と初めて上司の見えないすごい部分をなんでちゃんと見ておかなかったんだろうと後悔しました。

社長から「○○様(お客様)がいい対応してくれてるって褒めてたよ」と言われることもあったので、お客様向けの対応はそれなりにうまく行っていたようですが、チームのメンバーの私への不満はいっぱいあったと思います。

いままでの上司の良かった点、悪かったと思う点などを思いつく限りピックアップしてみたりもしましたが知識が全然追いついていないので「PMBOK」について学ぼうと思いました。

今回私が読んだのは「プロジェクトマネジメント標準 PMBOK入門」

 読んで理解したのは上記でも触れたプロジェクトは失敗だったということ。

それをここから説明しようと思います。

※PMBOK自体はWEBに限った話ではないのですが、私の仕事がWEB系のため話が偏ってしまっております

PMBOKによるとプロジェクトの「成功」とはスコープ・スケジュール・予算がすべて達成しているということ。

スコープとはお客様の求めているものおよびその作業の事を指します。

お客様の求めているものをうまく聞き出し、それを仕様書に書き起こし、確認を行ってそれ通りの物を納品する。

簡単かつ当たり前のようですがお客様が「これはあって当たり前」と思っていたり漠然としたイメージしか持っていない場合などは大変な作業となります。

続いてスケジュールとは文字通り期間のことです。

 お客様が○日までにサイトをオープンしたいといった場合は最大でもその日までが期間となります。

最後に予算とは、これも文字通りプロジェクトにかけられるコストのことです。

WEBサイト構築で言うと材料はほとんどないので主に人材になります。

その人の単価(スキル・経験のある人だと高くなる)やその人を拘束する期間で使用したコスト算出します。

私のやった案件の失敗は主にスケジュールでした。

言い訳をするならばお客様の仕様の確定が遅かった、デザイン会社がデザインをなかなか納品してくれなかった、直前になって「あの機能がないと困る」と仕様の変更があったなど色々あるのですが、失敗は失敗。

そしてスケジュールが失敗した=期間が延びたのでその間メンバーや私の拘束期間も伸び、結果として予算も失敗となりました。

仕様の確定が遅かったのならばもっと小まめにお客様とコミュニケーションをとって確定するのに何が引っかかっているのかを聞き出すべきだった。

デザインももっとデザイン会社と連携をとって進捗を把握し、遅れ初めているようなら急いで貰うようにもっと働きかけるべきだった。

直前に「あの機能がないと困る」と言われないようにもっと詳細にヒアリングを行い、叩いても埃がでないくらいまで仕様を詰めておくべきだった。

つまりなんで失敗したのか、私の「言い訳」から「原因」が分かります。

経験は知識に勝るものはないとよくいいますが、この本を読んで知識を得るまで漠然と「理由があったし、仕方がなかった、次は頑張ろう」と思っている部分がありました。

知識がなければ経験を生かすことができないのだな、と反省しています。

しかし知識だけあっても振り返るものも試せるものもなければ持ち腐れ。

2つが揃って初めて発揮できるものなのだと思います。

初めにもいった通り、弊社ではいつ「チャンス」を頂けるか分かりません。

案件があり、その人に出来そうだと思われれば未経験でもチャレンジさせて頂けることの出来る会社だと思います。

だからこそ「こんな仕事があるんだけどやってみるか?」と言われたときに、活かせる知識をためておくことが必要だと思います。

最後に「PMBOKって何?」というお話を(本当は最初に書くべきだったのでしょうけど失敗しました)

PMBOKとはProject Management Body Of Knowledgeの略です。

プロジェクトマネジメント団体のPMIがプロジェクトマネジメントの知識をまとめたものです。

私が今回説明できた部分は入り口でしかなく、今回読んだ本にもマネージャーとしての心のあり方から、適材適所を配置する必要性、プロジェクトの運用の仕方(今回説明したスコープ・スケジュール・コストのやり方)など色々載っていました。

初めてみる単語も多く、一度読んだだけでは全然覚えられなかったのでこれからもう一回読んで見たいと思います。

今回この記事をここまで読んで頂いて読んでみようかなと思った方にお勧めの読み方は、

やはり上記で私がやっているように実際自分の経験したプロジェクトと照らし合わせながら、これはこういうことかな?と自分なりの解釈をつけることかなと思っています。

そうしないとせっかく読んでもなかなか中身が入ってこず、実感もわかないので意味があまりないような気がします。

自分がやったことなくても上司で当てはめたり、聞いたことのある他の人のプロジェクトでもいいし、全然検討がつかなかったらそれこそ学生時代の学園祭やクラス劇に当てはめてもいいと思います。

それではここまで読んで頂いてありがとうございました。

奥が深いPMBOKを一個のブログ記事に書くのは難しいので、また別の機会に書きたいと思います。

HTML4とHTML5の違いについて

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

社内で勉強会の担当になって、一番興味があるHTML5について調べてみたのでこちらにも簡単に書いてみることにします。

現在使われているHTML4は1998年に策定されたようです。

1998年というと私が小学生の時でした。

当時はまだ電話回線でインターネットに繋ぐのが主流で企業のHPですら、一部大手くらいしか作成されていなかったと思います。

(少女マンガのなかよしを読んでいて「なかよし」のHPが出来ました!記事を見つけて親に内緒でこっそり見たりしていたので確かにその時代のはずです)

画像なども小さく軽く、とにかく読み込み重視という時代のものです。

ネット回線が常時使えるようになって、WEBは瞬く間に変化しました。

サイズの小さい画像からflashに動画に。

チャットや掲示板からSNSやツイッター。

この変化にHTML4は追いついていないといわれていました。

そこでHTML5の登場です。

■入力フォームの強化

カレンダーから日付が選択できる、ファイルの選択も一つのタグで出来る

■意味を表現する為の要素

今までdivやspanですべてくくっていたものをfooter、headerなど場所により名前でくくれるようになった

imgタグで画像を表示するのと同じように、videoタグ(動画プレーヤーの表示)やaudioタグ(音楽プレーヤーの表示)を使えるようになるのも大きなメリットだと思います。

■特定の要素の終了タグは省略できる(p、li、dt、dd)

■不要の場合省略可能なタグ(html、head、body)

など、HTML5ならではの書き方ができるようになったため、本格的に開始されたときに知らないとエンジニアは戸惑うことも多いかと思います。

簡単に調べただけでも沢山の変更があったので、私も開始までにしっかりと覚えて行きたいと思います。

poundを使って複数サイトでSSLラッパする

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

通常poundをSSLラッパとして使う場合、下記のような設定を行ないます。

 ListenHTTPS
   Address IPアドレス
   Port 443
   Cert "/etc/pound.crt"

   Service
     BackEnd
       Address バックエンドサーバのIPアドレス
       Port 80
       TimeOut 30
     End
   End
 End

しかし、この方法だと1つのIPアドレスについて1つのSSLラッパしか使えませんので サイト毎に新しくIPアドレスを用意する事で複数サイトのSSLラッパをすることができます。 IPアドレス(サイト2用)は仮想IPとして新たに追加したものです。

 ListenHTTPS
   Address IPアドレス(サイト1用)
   Port 443
   Cert "/etc/pound.crt"

   Service
     BackEnd
       Address バックエンドサーバのIPアドレス
       Port 80
       TimeOut 30
     End
   End
 End
 
  ListenHTTPS
   Address IPアドレス(サイト2用)
   Port 443
   Cert "/etc/pound2.crt"

   Service
     BackEnd
       Address バックエンドサーバのIPアドレス
       Port 80
       TimeOut 30
     End
   End
 End

以上で設定は終わりです

大人の女性向けデコメアプリ『Glamデコ★』のレビュー

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。


こんにちはiPhoneレビューアです。

出ました!ピンクと黒を基調とした大人の女性向けのデコメアプリ!

かっこいいデザインで大人の女性にぴったりなiPhoneアプリをご紹介します。

アプリの価格は無料です。

「Glamデコ★」ダウンロードはこちらから

デコメ素材は、まだ少なく今後どんどん素材が出てきてくれれば選ぶ楽しみも増えますね。

「Glamデコ★」メニュー画像
「Glamデコ★」素材購入画面
  • 主な機能

・デコメ作成/送信

・メール本文の背景/文字色、文字サイズの変更

・デコメ素材の選択

・デコメ素材の購入う

・グラムメディア広告表示

・設定

せっかく無料なので一度ダウンロードして、こんな感じでメール作成して送ってみて下さい!

 デコメ作成画面も使いやすく、すいすいデコメを作成できるのでとても使いやすいです。

「Glamデコ★」メール作成画面

iPhoneアプリの製作サイドによると、これからも機能追加ありそうです。

楽しみです!

「Glamデコ★」ダウンロードはこちらから

Google Analytics 今すぐ直せる解析環境 5の項目

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。


Google Analyticsで正しい数値を取得できていない利用者は意外にも多く、弊社調べでは20%を超えています。
今回は、今すぐ直せる簡単な解析環境の修正方法をお伝えしたいと思います。

最近では「加重並べ替え」など、ますます高機能な項目を追加している「Google Analytics」。これが無料だから、すごいことです。
けれど無料だからこそ?とりあえず導入はしてみるもののきちんと使えていない。放置している。という方も多くいらっしゃるように思います。

いくら費用はかからないと言っても、トラッキングコードの埋め込みなどで確実にコストはかかっているのです。使いこなさないのはもったいないです。

とはいえGoogle Analyticsの環境整備のために、サイト改修が新たに発生するのも状況によっては本末転倒な話かもしれません。

今回は、トラッキングタグの修正やサイト改修など、費用や期間のかかる大掛かりなものは避け、今すぐできる修正項目を書かせていただきます。

今回はこの画面を主に使います。

(1)「example.com」と「example.com/index.html」の分散を直す

Google Analyticsレポートの「コンテンツ」⇒「上位のコンテンツ」を見て「/」と「/index.html」があったらアウトです。トップページの数値が分散している可能性が高いです。

多くのwebサイトは「www.example.com」などといったドメインをトップページにします。
この表記は実は省略系で、index.htmlなどといったトップページ用のHTMLファイル名が省略されています。
このファイル名、一般的なサイトでは入力してもしなくてもアクセス可能なことが多いのですが、問題はGoogle Analyticsが「URLをベースに数値取得している」ということです。
同じページなのに、URL(の表記方法)が違うので、数値が分散してしまいます。
数値分散の例
修正はいたって簡単です。
修正したいプロファイルの「編集」画面から「[メインのウェブ サイト プロファイル情報] を編集します。」の編集を行ないます。
「デフォルトのページ」に自社のトップページファイル名(「index.html」など)を入力すればOKです。

index.htmlの統合

(2)パラメータの除外

もし自社サイトがパラメータをつけて何らかの処理を行なっているのなら、気をつける必要があります。
ただし、パラメータでコンテンツを切り分けていたり、広告の流入元を判定しているのであれば、そのままで構いません。

気をつけなければならないのは、同じコンテンツにもかかわらず、パラメータでURLが変わってしまうページが存在している場合です。
よくありがちなのはセッション管理用のパラメータですね。会員機能のマイページなどの利用率を見たい時に、パラメータが邪魔をして分散してしまったりする場合がこれにあたります。

この修正も非常に容易です。

(1)と同じ編集画面で、除外したいパラメータの名前をここに入れるだけ。後は勝手にないものと判断してくれます。

(3)タイムゾーンの設定

ときどきタイムゾーンが太平洋時間(GMT-07:00)になっている方もいます。
時間帯別などで時差が生じてしまいます。

やはり修正は簡単です。これまでと同じ画面から編集します。
ただし、AdWordsと連携している場合は一筋縄ではいきません。連携すると、AdWordsのタイムゾーンが優先され、Google Analyticsでの変更はできなくなってしまうからです。

(4)目標設定

正しい数値。とは少し異なりますが、これを設定しないとアクセス解析の意味は半減します。
目標とは、サイトがそれぞれ持っている目標のことです。ECサイトであれば商品購入、BtoBサイトであればお問い合わせといったところでしょうか。

設定は目標を追加、で行ないます。



ここで注目していただきたいのは、「目標到達プロセス」です。
これを設定することで、たとえば情報入力ページからゴールページまでのプロセス遷移が追えます。
どのステップで離脱が多く発生しているのかという、ボトルネックが判断しやすくなります。

(5)社内アクセスの除外

これは以前のDorubyの記事でも書かれていますが、やはり対処していないアカウントがなかなか多いので、今回もご紹介いたします。
フィルタから設定します。

自社内や制作会社、アクセス解析コンサルなど、関係各社のIPアドレスを入力し、除外設定してください。

おわりに

さて、5つの項目。いかがだったでしょうか。
非常に基本的なことだったので、すでに対応済みだという方も多かったかもしれません。
しかし、ひとつでも抜けがありますと、解析が面倒であったり数値の信ぴょう性が損なわれてしまったりと、いいことはありません。
これを機に、一度ご確認してみてはいかがでしょうか。

ちなみに、こういった解析環境が正しく取得できているか。さらにどんな数値を見ればよいのか、アクセス解析の手法はどんなものがあるか、といったスクールを弊社で開催中です。
上記の項目をクリアできていなかった人は確認のために、クリアできていた人はもう一段上の解析手法を手に入れるチャンスです。ぜひぜひご参加お待ちしております。

それではまた、次の機会に。

■AppiritsのGoogle アナリティクスセミナー

AppiritsのGoogle アナリティクスセミナーは、初期設定から機能解説、仕組の理解までさまざまな内容を用意しています。
ご興味のある方は是非弊社セミナーにご参加ください。

Google アナリティクス セミナー インターフェイス編
Google アナリティクスのレポート画面が把握できていない方向けの講座。
レポート画面の解説や既存機能の活用法、マルチチャネルなどの新レポートのインターフェイスを解説します。

Google アナリティクス セミナー 分析手法編
インターフェイスは把握しているが、数値の意味や考え方がよく分からないという方向けの講座です。 アクセス解析を用いた課題抽出やサイト改善の考え方を解説します。

Google アナリティクス セミナー 徹底設定編
現状のGoogle アナリティクスで取得可能な数値に物足りない方向けの講座。
外部サイトへの誘導やソーシャルボタン連携、eコマース機能などのカスタマイズ方法をレクチャーします。

Gitでリモートリポジトリを作成する

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

バージョン管理は主にsvnを使っていますがGitを使用しリモートリポジトリを作成してみたので方法を書きます。

まずはリモートリポジトリ側でリポジトリを作成します。

mkdir ~/repos/sample.git
cd repos/sample.git

# bareオプション付けると管理情報だけのリポジトリが作れる
git --bare init

次にクライアント側でローカルリポジトリを作成しリモートリポジトリとの関連をつけます。

ローカルリポジトリの作成

mkdir repos
cd repos
git init

これでローカルのリポジトリは作成できました。

なにかファイルを作ってgitの管理下においてコミットしてみましょう。

touch sample.txt
git add sample.txt
git commit -m "first commit"

コミットをすることができました。

ローカルのリポジトリとリモートのリポジトリを関連付けしてリモートリポジトリに内容を送信できるように設定します

git remote add origin ssh://user@hoge/home/user/repos/sample.git

プッシュをすることによりリモートリポジトリに更新が反映されます。

git push origin master

リモートリポジトリからcloneすると変更した内容が反映されていると思います。

CSV形式のデータをインポートする方法

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

RAILSでCSV形式のデータをDBにインポートするとき、 Fixturesの中に定義されているcreate_fixturesを使ってみたいと思います。

結構便利です。まず、RAILS_ROOT/db/initial_data/の中にCSVファイルを設置します。
この時、ファイル名は、「(データを入れたいテーブル名).csv」としてください。

今回は、「jobs」テーブルにデータを入れ込んでみたいと思います。
「jobs」テーブルは、id、name、created_atというカラムを持っています。

なのでCSVデータを以下のような感じになります。

RAILS_ROOT/db/initial_data/jobs.csv

####################################
id,name,created_at
1,会社員,<%= Time.now.strftime(“%Y-%m-%d”) %>
2,公務員,<%= Time.now.strftime(“%Y-%m-%d”) %>
3,無職,<%= Time.now.strftime(“%Y-%m-%d”) %>
####################################

このファイルは、Rubyのコードも記述できます。

あとは、コンソールを開いてデータをインポートします。

ruby script/console

Fixtures.create_fixtures RAILS_ROOT + ‘/db/initial_data’, ‘jobs’

以上

日本語の総合金融情報を素早く入手できるiPhoneアプリ

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

久しぶりのiPhoneアプリレビューです。


今回は、宣伝も兼ねて、KBMJもお手伝いさせて頂いた総合金融情報を素早く入手できるモーニングスターiPhoneアプリをご紹介します。

ユーザーは、ニュースやデータ等を閲覧できるだけでなく、関心の高い銘柄や実際に保有している銘柄等を登録することで、日々の価格の動きが確認できる 「ウォッチリスト」の機能が利用できます。

起動画面-モーニングスターiPhoneアプリ
ウォッチリスト-モーニングスターiPhoneアプリ

また、投資信託の運用実績、分配金、モーニングスター独自の評価情報等に加え、銘柄関連のつぶやき (Twitter)等の情報も閲覧することができます。

銘柄詳細-モーニングスターiPhoneアプリ

■iPhoneらしさを引き出すデザイン
ユーザーにストレスを感じさせにくくするため、データの取得タイミングや速度を細かくチューニングしています。また、iPhoneらしさを活かし、データの見せ方を工夫しております。ぜひ一度、お試しください。

グラフ-モーニングスターiPhoneアプリ

■このような利用が可能
・ウォッチリストで保有銘柄・ファンドの直近の価格情報を瞬時に確認
・タップして詳細パフォーマンス情報や銘柄指標、チャートを確認
・銘柄に関連するTwitterのつぶやきを閲覧
・文字ベースのニュースだけでなく、レポートや動画も閲覧可能
・充実した企業情報・ニュースは投資家はもとより、ビジネスでも活用可能
 

ニュース-モーニングスターiPhoneアプリ

■(開発者に聞いてみた)開発で大変だったところは・・・

限られた開発期間の中で、グラフ描画が一番大変でした。

機能的に大変だったところを聞いたのですが。。。

ということで、国内追加型公募株式投信約 3,000 銘柄、国内株式約 3,800 銘柄、国内上場投信(ETF)約 100 銘柄の情報等が閲覧できるアプリを是非お試しください。

■ダウンロード方法
上記のリンクから辿るか、iPhone 内の App Store より、検索で「モーニングスター」と入力


■iPhoneアプリについて
KBMJでは、今回開発させて頂いたiPhoneアプリを始め、『TDOS3 for iPhone』など数々のiPhoneアプリを公開しております。
iPhoneアプリの開発(http://iphone.kbmj.com/)も行っておりますので、是非ご相談下さい。

*iPhoneは米国Apple Inc.の商標または登録商標です。


■関連URL
モーニングスター株式会社
http://www.morningstar.co.jp/company/ir/index.html

モーニングスター公式サイト
http://www.morningstar.co.jp/

iPhone向けのアプリ開発サービス
http://iphone.kbmj.com/

Android向けのアプリ開発サービス
http://android.kbmj.com/

SEO内部対策においてよくある見落としポイントとは

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんばんは。アクセス解析チームのNASAです。

今回は、アクセス解析ではなくSEO対策をメインテーマにしてお送りします。


集客のための施策として、よくSEO対策が言われています。

SEO対策には「外部対策」、「内部対策」の2種類があるのは
みなさんご存知かと思います。

ただ最近では、外部SEO対策は効果が薄れてきていると言われています。
外部SEO対策を行った場合、対策を行っている期間中は集客において
効果が高くたくさんのユーザーをサイトに引き込むことができますが、
外した場合に徐々に元の集客力に戻ってしまうというのが現状としてあります。

 
そのため、現在は内部SEO対策を地道に行い、徐々に効果をあげている企業様が
多くなってきています。

しかし、最近のECサイトを見ているとSEO内部対策は行っているところは
多くありますが、どこか不足している部分があるサイトをよく見かけます。

そこで今回は、SEO内部対策のポイントを3つおさらいしたいと思います。

———————————————————————————-

1)タイトルタグについて

SEOの内部対策において重要と言われているのがタイトルタグです。

ほとんどのサイトではタイトルタグはきちんとページごとに変えているかと思います。

ただ、そのタイトルタグの文字数は適切ですか?
ユーザーが見たときに分かりやすいものですか?

 ◇タイトルタグのポイント◇

  その1:タイトルタグの文字数は35文字以内

  タイトルタグの文字数は、会社名等を入れた場合どうしても長くなってしまいがちです。

  中でもよくあるのが、会社名が「KBMJ」と「ケイビーエムジェイ」のように英語とカタカナ
  表記の両方がある場合、どちらも入れている会社様もよく見受けられます。

  会社名が英語表記、カタカナ両方とも同じくらい検索で使用されているのであれば
  問題はないですが、検索キーワードを見た場合に、カタカナが多かったり、英語が
  多かったりと偏りがある場合は、より検索されているほうをタイトルタグに選定
  することが望ましいです。

  また、一つの傾向としてやはり40代~50代のように年齢が高めのユーザーが
   多いサイトでは、カタカナで入力しているユーザーが多い傾向がございます。
  そして、雑誌等に紹介や広告出稿している場合は、それを見ながら入力する
  ユーザーも多いので、どのように表記しているかをチェックすることが必要です。

  その2:タイトルタグの区切り文字は「 – 」「 | 」を使用して構成する

  タイトルタグをよく「 / 」で区切っているサイトを見かけますが、
  タイトルタグの区切り文字は「 - 」「 | 」が推奨されています。

  これらを使用することで、ロングテールの認識が高くなる傾向がありますので
   使用することをお勧めします。

  (Google検索ロボットのみ)

  その3:タイトルタグは左から順に一番訴求したい単語を入れる

   タイトルタグはただ書いていけばいいというものではありません。
   そのページ内の概要がユーザーに伝わりやすい内容のキーワードが含まれていることが
   大切です。

  例えば、KBMJのECサイト構築パッケージの「エレコマ」

    このタイトルタグは下記のようになっており、これで31文字です。

2)メタディスクリプションの記載

SEO対策の一つとしてメタディスクリプションの記載があります。
これは直接的に順位の上昇にはつながりにくいですが、Googleで検索
した際に対ユーザーに表示されるサイトの説明文となります。

 ◇理想のメタディスクリプションとは?

  その1:文字数は87文字~115文字以内

  あまりにも少なすぎても、サイトの概要が伝わりにくく、ただ長すぎると途中で
  切れてしまい大事な部分を訴求出来ていないことがあります。
  そのため、メタディスクリプションは87文字~115文字以内(3行以内)に収めることが
  理想とされています。
  ちなみに、3行目まで記述する場合は90文字以上となります。

  その2:サイトの内容はもちろんのこと、ユーザーの興味をひく内容が記載されている

   これはECサイトであれば、送料無料や会員登録してポイントを貯めると商品と交換出来る
  など、ユーザーにとってプラスになる情報を記載することが大切です。
  メタディスクリプションは本当は全ページ違うものにすることが理想とされています。


   しかし、ページ数が多いサイトやWEB担当の方が少ないと工数もかかってしまうので、なかなか
   難しいというのがよくあるWEB担当の方からの声です。

   その場合はTOPページランディングページ(入口ページ)になりやすいページの
  メタディスクリプションだけでもいいので変更することをお勧めします。

   ランディングページになっているページを把握するには、Google Analyticsの場合、

   マイレポート→コンテンツ→閲覧開始ページ

   から確認することが出来ます。

    ※閲覧開始ページを見た際に、よく見られているけれども直帰率が高いページが
    あった場合はそのページは改善の余地があるページです。
    せっかく集客出来ているユーザーをそこで逃してしまうのはもったいない部分です。

3)サイトマップの作成

最後はサイトマップの作成です。
サイトマップはユーザーがサイト内で迷った際に役立つものですが、
それ以外にもサイトに訪れた際に浅いページを巡回しやすい傾向がある検索ロボットに
サイト全ページの巡回を促すのを助ける役割があります。

また、サイトマップは作成してもユーザーの目にとまりやすい部分に設置を行わないと
ユーザーにクリックされず迷ったユーザーが離脱してまう原因にもなりますので、
ユーザーの目にとまりやすい部分に設置することをお勧めいたします。

また余裕があればぜひ「xml サイトマップ」への登録も行うことをお勧めします。
登録することで、クロールしてインデックス化されるまでの時間が大幅に短縮されます。

———————————————————————————-

このほかにもSEO内部対策で行っておくことは、Yahooカテゴリーの登録や、
パンくずリストの設置、404エラーページが存在するかなど、まだまだたくさんありますが、
今回は、私がサイト診断をしているなかでよくある見落としポイントを3つあげてみました。

みなさんも自分のサイトでちゃんと出来ているかもう一度確認してみてください。

RailsのgeneratorでMultiple migrationsとなる件の対応方法

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Railsのgeneratorでmigrationが二つ以上ある時の対策をしました。

Railsのgenerator対応のプラグインを作成している時に、migrationが二つ以上あるとdb:migrateに失敗してしまいます。

エラーの内容は以下のとおりです(一部伏せています)。

bash-3.2$ script/generate xxx_payment -f XxxPayment
      exists  app/models/
      exists  config/initializers/
      exists  spec/controllers/
      exists  spec/factories/
       force  app/models/xxx_payment_plugin.rb
      create  app/models/xxx_payment_results.rb
   identical  config/initializers/xxx_payment_cart_controller_extend.rb
       force  spec/controllers/xxx_cart_controller_spec.rb
       force  spec/factories/xxx_payments.rb
      exists  db/migrate
      create  db/migrate/20100831124224_create_xxx_payment_plugins.rb
      exists  db/migrate
      create  db/migrate/20100831124224_create_xxx_payment_results.rb
bash-3.2$ rake db:migrate
(in /Users/btm/develop/elecoma/devel_git)rake aborted!
Multiple migrations have the version number 20100831124224
(See full trace by running task with --trace)

このように二つのmigrationが同じ日付になっているため、「Multiple migrations have the version number」となってしまうのです。

では、対策をしてみましょう。実際のところ、時間の取り出しはnext_migration_stringというメソッドで行われているようです。

# rails-2.3.5/lib/rails_generator/commands.rb
          def next_migration_string(padding = 3)
            if ActiveRecord::Base.timestamped_migrations
              Time.now.utc.strftime("%Y%m%d%H%M%S")
            else
              "%.#{padding}d" % next_migration_number
            end
          end

結局のところ、Time.nowのタイミングをずらせばよいというのがわかります。

なので、generatorでは以下のように書けばOKです。

# xxx_payment_generator.rb
class XxxPaymentGenerator < Rails::Generator::NamedBase
  default_options :skip_migration => false

  ...
  def manifest
    record do |m|
      ...
      # migration
      # migration
      unless options[:skip_migration]
        m.migration_template 'create_xxx_payment_plugins.rb', 
                             'db/migrate', 
                             :assigns => {}, 
                             :migration_file_name => "create_xxx_payment_plugins"
        m.sleep 1
        m.migration_template 'create_xxx_payment_results.rb', 
                             'db/migrate', 
                             :assigns => {}, 
                             :migration_file_name => "create_xxx_payment_results"
      end
      ...
    end
  end
end

m.migration_template 同士の間に “m.sleep 1 “として一秒間ずらしてあげます。

では、作成してみましょう。

bash-3.2$ script/generate xxx_payment -f XxxPayment
      exists  app/models/
      exists  config/initializers/
      exists  spec/controllers/
      exists  spec/factories/
   identical  app/models/xxx_payment_plugin.rb
   identical  app/models/xxx_payment_results.rb
   identical  config/initializers/xxx_payment_cart_controller_extend.rb
   identical  spec/controllers/xxx_cart_controller_spec.rb
   identical  spec/factories/xxx_payments.rb
      exists  db/migrate
      create  db/migrate/20100831131456_create_xxx_payment_plugins.rb
      exists  db/migrate
      create  db/migrate/20100831131457_create_xxx_payment_results.rb

Versionが一つずれて作成されているのがわかります。これで、無事マイグレートができるようになりました。

同じエラーではまった人は参考にしていただけると幸いです。

文字数の違う複数の項目をliタグを使って綺麗に並べるTips

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

フォームの選択項目をliタグとcssのfloat、min-width、white-spaceを使って綺麗に並べるTipsです。

登録フォームを動的に作っていると、選択項目がとにかく多い!という事態に遭遇します。

静的なら1つずつtdで切って、文字が長ければcolspanで〜とできるわけですが、
動的に出してるとそういう細かい芸当は無駄にややこしいので、
できるだけ手軽に、できるだけ見栄えよく並べるために、リストタグを活用します。

並べたい項目は以下の通り。

  • たぬきうどん
  • きつねそば
  • 天丼
  • 鶏ガラしょうゆラーメン
  • 特選月見そば
  • みそラーメン
  • 明太子スパゲッティ
  • ざるそば
  • もりそば
  • ナポリタン
  • 森のきのことじゃこの和風スパ
  • ざるうどん
  • ペペロンチーノ

縦に並べるとページが長くなってしまうので、横に並べる事にします。
cssはこんなカンジ。

li {
float: left;
margin-right: 5px;
}

  • たぬきうどん
  • きつねそば
  • 天丼
  • 鶏ガラしょうゆラーメン
  • 特選月見そば
  • みそラーメン
  • 明太子スパゲッティ
  • ざるそば
  • もりそば
  • ナポリタン
  • 森のきのことじゃこの和風スパ
  • ざるうどん
  • ペペロンチーノ

なんとなく見づらい。
文字数がバラバラなので、揃えたいけど一番短いのが2文字、長いのは14文字。
とりあえず14文字にあわせてみます。

li {
float: left;
margin-right: 5px;
width: 14em;
}

  • たぬきうどん
  • きつねそば
  • 天丼
  • 鶏ガラしょうゆラーメン
  • 特選月見そば
  • みそラーメン
  • 明太子スパゲッティ
  • ざるそば
  • もりそば
  • ナポリタン
  • 森のきのことじゃこの和風スパ
  • ざるうどん
  • ペペロンチーノ

だいたい良くなりました。
贅沢言うと右が空きすぎて、そこに詰められればもうちょっと長さを節約できそう。
平均して6文字くらいに収まる項目が多そうなので、6文字分の幅にしてみます。
このときpxで指定するよりもemで指定する方が直感的で調整しやすいのでemを使います。

li {
float: left;
margin-right: 5px;
width: 6em;
}

  • たぬきうどん
  • きつねそば
  • 天丼
  • 鶏ガラしょうゆラーメン
  • 特選月見そば
  • みそラーメン
  • 明太子スパゲッティ
  • ざるそば
  • もりそば
  • ナポリタン
  • 森のきのことじゃこの和風スパ
  • ざるうどん
  • ペペロンチーノ

右の方空間は無駄にならなくなったけど、ちょっと困った状態になりました。
6文字以上ある場合は、幅に応じて伸びて欲しい。
そこでmin-widthを使ってみます。
min-widthはIE6では対応されないので、IE6用のハックも併記して、
幅も自由に伸びるようにwhite-spaceも書いておきます。

li {
float: left;
margin-right: 5px;
width: auto;
min-width: 6em;
white-space: nowrap;
}
* html .sample5 li { width: 6em; }

  • たぬきうどん
  • きつねそば
  • 天丼
  • 鶏ガラしょうゆラーメン
  • 特選月見そば
  • みそラーメン
  • 明太子スパゲッティ
  • ざるそば
  • もりそば
  • ナポリタン
  • 森のきのことじゃこの和風スパ
  • ざるうどん
  • ペペロンチーノ

長いものは文字数に応じて伸びるようになりました。
6文字幅だと普通に並べたのとあんまりかわらない…ので、もうちょっと調整します。

li {
float: left;
margin-right: 5px;
width: auto;
min-width: 9em;
white-space: nowrap;
}
* html .sample5 li { width: 9em; }

  • たぬきうどん
  • きつねそば
  • 天丼
  • 鶏ガラしょうゆラーメン
  • 特選月見そば
  • みそラーメン
  • 明太子スパゲッティ
  • ざるそば
  • もりそば
  • ナポリタン
  • 森のきのことじゃこの和風スパ
  • ざるうどん
  • ペペロンチーノ

綺麗にならびました。

ちなみに今回のようにliタグがfloatするときは、無駄になってもいいからとにかくulタグのclassにclearfixを入れておきます。
#clearfixについては以前の記事を参照

これでエンジニアに複雑な条件分岐をお願いする必要もなくなるので、
みんな幸せになれそうです。

iPhoneのメールアドレスはPC、携帯どちらの入力欄に入力するのか

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

サイトを作って行く上でパソコンのメールアドレス、携帯のメールアドレスそれぞれを入力することがありますが、iPhoneのメールアドレスをどちらに入力させるのかについて調査してみました。

まず前提として、通常の携帯で受信時はiPhoneからのメールはPCから送信されたメールと同様の扱いになります。

そのため携帯でPCからのメールアドレスを受信拒否していると、iPhoneからのメールを受信できません。

前提から考えると結論は「iPhoneのメールアドレスはPCメールアドレス欄に入力する」となるわけですが、使用目的やメールマガジンのレイアウト等を考えると携帯の欄に入力して欲しい気持ちがあります。

そこで、他サイトがどのようにiPhoneのメールアドレスの入力チェックをしているのかを調べてみました。

■某新卒就職サイト

パソコン ○   モバイル ×

■某検索サイト

パソコン ○   モバイル ×

■某総合ショッピングサイト

パソコン ○   モバイル ×

■某グルメ情報サイト

パソコン ×   モバイル ○

■某ブランドECサイト

パソコン ○   モバイル ×

前提通り、基本的にはパソコンのメールアドレスとして対応していることが分かりました。

また、 PCサイトとモバイルサイトで必須項目が異なる場合(PCはPCアドレスが必須、モバイルはモバイルアドレスが必須)はiPhoneでサイトを見るとPCサイトが表示されるため、PCアドレスに入力させないとPCを持っていないiPhoneユーザが会員登録出来ないなどといった問題も発生することが考えられます。

特にルールとかがない現状、メールアドレスの使用目的に合せ、サイト開発者または運営者が判断するしかないようです。

PHP+PEARでデータをExcelファイルに出力する。 Spreadsheet_Excel_Writer Plugin編

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは、KBMJの中平@PHPエンジニアです。
*最近はPHPで開発を行っていますのでPHPのプラグインについて紹介します。
今回紹はPHPでデータをExcelファイルに出力する方法ついて書きます。

よく、Webシステムでデータをファイルに出力する際にはCSV形式で出してしまう事が多いと思いますが、

CSV データをExcelで開くと、「001234」というデータの場合、頭ゼロが消されてしまい「1234」と数値として表示されてしまう事があるため、CSVではなくExcel形式で出力させてほしいという要望はないでしょうか?

そこで、今回はPHPで簡単にデータをExcelファイルとして出力することができる、Spreadsheet_Excel_WriterというPEARのpluginの使い方について書こうと思います。

環境

OS : Windows Vista

PHP : 5.1.6
PEARを利用します。

Spreadsheet_Excel_Writerのインストール

 //Spreadsheet_Excel_Writerはbeta版なので、
beta版をインストールさせるための設定を行う。


pear config-set preferred_state beta

 インストールpear install Spreadsheet_Excel_Writer-0.9.2

Spreadsheet_Excel_WriterのExcel出力のサンプルコード

 require_once ‘Spreadsheet/Excel/Writer.php’;
class excele_writer
{
     $workbook = new Spreadsheet_Excel_Writer();
        $file_name=’sample.xls’;
        $tablename = sprintf(“establishment_entry_%s”, date(“Ymd”));
        $worksheet =& $workbook->addWorksheet($tablename);

        $format =& $workbook->addFormat();
//excelのフォントを指定 MS UI Gothic 
        $format->_font_name = mb_convert_encoding(“MS UI Gothic”, “shift_jis”);

     $worksheet->writeString(0,0,mb_convert_encoding(‘hogehoge’,”SJIS”,”UTF-8″)); // セルに書き込み
    $worksheet->writeString(0,1,mb_convert_encoding(‘0123456’,”SJIS”,”UTF-8″)); // セルに書き込み
    $workbook->send($file_name);
        $workbook->close();
}

説明

mb_convert_encodingはUTF-8の文字コードをSJISに変換しています。
excelでは日本語はSJISでないと文字化けを起こしますので注意!
writeStringの第一引数はエクセルの行、第二引数は列になっています。

writeStringは文字列を書き込むメソッドなので、数値を文字列として書き込むためexcelで開いたときに頭の0が消えません。

複数データを出力する場合はループさせればOK
sendでファイルに出力
closeでファイルを閉じています。

後はブラウザでアクセスすればexcelファイルが出力されます。


また、Spreadsheet_Excel_Writerだとexcel出力方法も細かく設定できます。

 セルに色をつけたり、文字サイズの変更、罫線、数値のフォーマット指定、画像貼り付け等excelでできることは大抵できるようです。

詳しくはこちらのマニュアルを参考にしてください。

Spreadsheet_Excel_Writer マニュアル
http://pear.plus-server.net/package.fileformats.spreadsheet-excel-writer.html

このSpreadsheet_Excel_Writerというpluginは簡単に導入できてコードも数行で済みますので、PHPからCSVではなくExcel形式でデータ出力したい場合には試してみてはいかがでしょうか?

tortoisegitでclone実行時に「Network error: Connection timed out」のエラーが表示され失敗する(WindowsXP)

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

gitでプロジェクトを管理することになったので、tortoisegitを入れてみました。

cloneを実行してプロジェクトを落とそうとしたとき、PuTTY Fatal Errorがでて失敗したので、

その時の解決方法です。

環境

WindowsXP

TortoiseGit 1.5.2.0

git version 1.7.0.2.msysgit.0

PuTTY 0.60-JP_Y-2007-08-06

ちなみに、

PuTTY Fatal Error 「Network error: Connection timed out」

のエラーダイアログの「OK」ボタンを押すと↓のようなエラーが表示されました。

git.exe clone --progress -v  "ssh://プロジェクトURL" "C:\Documents and Settings\sakuma85\workspace\test"

Initialized empty Git repository in C:/Documents and Settings/sakuma85/workspace/test/.git/
fatal: The remote end hung up unexpectedly

原因はputtyのデフォルト設定にありました。解決方法は以下の通りです。

1.レジストリエディタを開く

 ・Winキー+Rで「ファイル名を指定して実行」ダイアログを開く

 ・「regedit」と入力し「OK」ボタンを押す

2.Puttyセッションを保存しているパスを開く

 ・HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions

3.「Default%20Settings」をリネームする

 ・「Default%20Settings」を右クリックしメニューから「名前の変更」を選択

 ・「Default Settings」に修正する

これで無事、cloneができるようになりました。

rvmで外部ライブラリもインストール

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

OpenSSLをアップデートしたところ、地味に面倒な事になってしまいました。

railsプロジェクトを新規作成しようとした矢先です。

% rails test
/Users/hachinen/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/i686-darwin10.3.0/digest/md5.bundle: dlopen(/Users/hachinen/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/i686-darwin10.3.0/digest/md5.bundle, 9): Library not loaded: /opt/local/lib/libcrypto.0.9.8.dylib (LoadError)
  Referenced from: /Users/hachinen/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/i686-darwin10.3.0/digest/md5.bundle
  Reason: image not found - /Users/hachinen/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/i686-darwin10.3.0/digest/md5.bundle
        from /Users/hachinen/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from /Users/hachinen/.rvm/gems/ruby-1.8.7-p249/gems/activesupport-2.3.6/lib/active_support/dependencies.rb:156:in `require'
        from /Users/hachinen/.rvm/gems/ruby-1.8.7-p249/gems/activesupport-2.3.6/lib/active_support/dependencies.rb:521:in `new_constants_in'
        from /Users/hachinen/.rvm/gems/ruby-1.8.7-p249/gems/activesupport-2.3.6/lib/active_support/dependencies.rb:156:in `require'
        from /Users/hachinen/.rvm/gems/ruby-1.8.7-p249/gems/rails-2.3.6/lib/rails_generator/generators/applications/app/app_generator.rb:3
        from /Users/hachinen/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
        from /Users/hachinen/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from /Users/hachinen/.rvm/gems/ruby-1.8.7-p249/gems/activesupport-2.3.6/lib/active_support/dependencies.rb:156:in `require'
        from /Users/hachinen/.rvm/gems/ruby-1.8.7-p249/gems/activesupport-2.3.6/lib/active_support/dependencies.rb:521:in `new_constants_in'
        from /Users/hachinen/.rvm/gems/ruby-1.8.7-p249/gems/activesupport-2.3.6/lib/active_support/dependencies.rb:156:in `require'
        from /Users/hachinen/.rvm/gems/ruby-1.8.7-p249/gems/rails-2.3.6/lib/rails_generator/spec.rb:17:in `klass'
        from /Users/hachinen/.rvm/gems/ruby-1.8.7-p249/gems/rails-2.3.6/lib/rails_generator/lookup.rb:140:in `instance'
        from /Users/hachinen/.rvm/gems/ruby-1.8.7-p249/gems/rails-2.3.6/lib/rails_generator/scripts/../scripts.rb:31:in `run'
        from /Users/hachinen/.rvm/gems/ruby-1.8.7-p249/gems/rails-2.3.6/bin/rails:19
        from /Users/hachinen/.rvm/gems/ruby-1.8.7-p249/bin/rails:19:in `load'
        from /Users/hachinen/.rvm/gems/ruby-1.8.7-p249/bin/rails:19

なんかエラーになってしまいました。libsslがないとか言われているので最近何やったっけな…と思ったんですが、そういえばopensslを先日0.9から1.0にアップグレードしてみたのでした。

なのでリンクしていた libcrypto.0.9.8.dylibがなくなってしまい、実行できない状態になってしまってました。

仕方がないのでもう一度 rvm から1.8.7を再インストールしました。が、rvm的な解決方法は他にもある模様で、

rvm update --head 
rvm package install openssl

とするとよいようです。1.9.1を試してみました。あとはrubyを以下のようにインストールします。

rvm install 1.9.1 -C --with-openssl-dir=$HOME/.rvm/usr

他、zlib,readline,iconv,ncursesなど、外部パッケージに依存しそうなものはrvm内でも管理できるようになっているようです。

これならmacportsなどのパッケージ管理システムのアップグレードの度にrubyをコンパイルしなおさずに済みそうで、便利ですね。

はじめてのSQLite(Mac版)

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

SQLiteをはじめて使うレポートです。今回はMac OS Xに標準でインストールされている3.6.23.1での動作となります。(2010/8/6現在の最新バージョンは3.7.0.1)

 SQLiteとは

SQLiteはPostgreSQLやMySqlと同じリレーショナルデータベースですが、

サーバーとしてではなく、単独のアプリケーションとして動作が可能です。

またインストールも簡単で非常にコンパクトなのが特徴です。

 起動と終了

コマンドラインから起動します。

$ sqlite3 
sqlite>

これで起動しました。

終了は以下のコマンドで可能です。

sqlite> .exit

 データベースの作成

では早速データベースを作成してみましょう。

下記のコマンドを入力します。

$ sqlite3 データベースファイル

Mac OS Xの場合、デフォルトのルートディレクトリは /Users/ユーザ名 になっています。

フルパスで指定すると任意のディレクトリのファイルを指定可能です。

また、存在しないデータベースファイルを指定すると新規作成されます。

ここではtest.db というファイル名のデータベースを作成します。

$ sqlite3 test.db

/Users/ユーザ名 配下にファイルが出来ているはずです。

$ ls -al test.db
-rw-r--r--  1 hoge  hoge  0  8  6 20:50 test.db

 データベースへの接続

以下のコマンドで接続できます。

$ sqlite3 test.db 
sqlite>

ちゃんとtest.dbに接続しているかを確認してみましょう。

sqlite> .database
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main             /Users/hoge/test.db 

 テーブルの作成

下記コマンドで作成します。

sqlite> create table users(id integer, name text);

作成したテーブルの定義を確認してみましょう。

sqlite> .schema users
CREATE TABLE users(id integer, name text);

 レコードの挿入

以下のコマンドを入力します。

sqlite> insert into users values(1, 'hoge');

レコードを参照してみます。

sqlite> select * from users;
1|hoge

簡単ですがひとまずここまで。

次回はもう少し踏み込んだ操作に挑戦しようと思います。

SQLiteをはじめて使うレポートです。今回はMac OS Xに標準でインストールされている3.6.23.1での動作となります。(2010/8/6現在の最新バージョンは3.7.0.1)

 SQLiteとは

SQLiteはPostgreSQLやMySqlと同じリレーショナルデータベースですが、

サーバーとしてではなく、単独のアプリケーションとして動作が可能です。

またインストールも簡単で非常にコンパクトなのが特徴です。

 起動と終了

コマンドラインから起動します。

$ sqlite3 
sqlite>

これで起動しました。

終了は以下のコマンドで可能です。

sqlite> .exit

 データベースの作成

では早速データベースを作成してみましょう。

下記のコマンドを入力します。

$ sqlite3 データベースファイル

Mac OS Xの場合、デフォルトのルートディレクトリは /Users/ユーザ名 になっています。

フルパスで指定すると任意のディレクトリのファイルを指定可能です。

また、存在しないデータベースファイルを指定すると新規作成されます。

ここではtest.db というファイル名のデータベースを作成します。

$ sqlite3 test.db

/Users/ユーザ名 配下にファイルが出来ているはずです。

$ ls -al test.db
-rw-r--r--  1 hoge  hoge  0  8  6 20:50 test.db

 データベースへの接続

以下のコマンドで接続できます。

$ sqlite3 test.db 
sqlite>

ちゃんとtest.dbに接続しているかを確認してみましょう。

sqlite> .database
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main             /Users/hoge/test.db 

 テーブルの作成

下記コマンドで作成します。

sqlite> create table users(id integer, name text);

作成したテーブルの定義を確認してみましょう。

sqlite> .schema users
CREATE TABLE users(id integer, name text);

 レコードの挿入

以下のコマンドを入力します。

sqlite> insert into users values(1, 'hoge');

レコードを参照してみます。

sqlite> select * from users;
1|hoge

簡単ですがひとまずここまで。

次回はもう少し踏み込んだ操作に挑戦しようと思います。

Railsの処理の中でRakeのタスクを実行する方法

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

 今回はRailsの処理の中でRakeのタスクを実行する方法を紹介したいと思います。

 実行したいRakeのタスク名が「hoge:huga」だったとすると以下のコードになります。

Rake::Task.new(‘hoge:huga’, Rake.application).invoke

 基本Rakeのタスクを処理の中で実行するということはほぼないかと思いますが、Rakeのタスクのテストしたい時にテストコードの中で実行できたら便利かと思います。

 Railsの環境は、1.2.6、2.3.8で確認しました。2.3.8の場合は事前に「require ‘rake’」する必要があります。

Google Analyticsにおいて見落としがちなポイント

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。アクセス解析チームのNASAです。 第2回目の今回は、Google Analyticsを設定、活用していく中で見落としがちなポイントをご紹介します。

今回なぜこのテーマになったかというと、今までアクセス解析チームでは100以上のサイトを見てきましたが、5社に2社は設定が間違っているという統計があります。

自分の会社の設定は大丈夫と思っている方も、もう一度設定を確認してみてください。

———————————————————————————

見落としがちなポイント その1 :自社アクセスの除外設定

 ⇒Google Analyticsの設定の際にきちんと自社や関係者からのアクセス数は除外するように設定されていますか?

これを除外していないと正確なユーザー数は把握することが出来ず、また正確な数値の推移も追うことができません。

除外設定は以下のところで設定可能です。

1・ログイン後、プロファイルが表示された下にフィルタマネージャーという項目があるので、

  そこをクリックします。

アクセス元フィルタ用

2・クリックして、新しいフィルタマネージャの作成を選択します。

   ①フィルタ名に任意のフィルタ名を設定します。

   例)社内アクセス除外

  ②適用するプロファイルを選択し、右側に移動させ追加ボタンを押します。

  ③すべて設定が終わったら、変更を保存を押して完了です。

マネージャフィルタ用

見落としがちなポイント その2 : タイムゾーンの設定

⇒タイムゾーンは最初はデフォルトで太平洋が選択されております。
  太平洋にしてしまうと16時間の時差が出てきてしまいます。
  これにより・・・

   ・ 時間帯別で見た場合に、アクセスが少ないはずのところが多くなっている
   ・メルマガを打った直後のアクセス数が少ない

   など、細かい分析をする際には支障が出てきてしまいます。   そのためにも、タイムゾーンについては、最初の設定の際に

  ”東京”

  に合わせておくことが必要です。

  タイムゾーンの設定は以下から可能です。

①Google Analyticsの画面にログインした際に下記のような画面があります。

  その中にある”アカウント設定を編集”をクリックします。

②クリックすると下記の画面が表示されます。
 その中のデフォルトの国を”日本”に設定します。

③最後に変更を保存をクリックして設定が完了です。

※各プロファイルごとに行う場合は、各プロファイルの右側にある編集ボタンから行うことが可能です。

※Adwordsと連携している場合は、Adwordsの設定が優先されますのでご注意ください。

——————————————————————————–

今回は最近よく見かける見落としがちなポイントについて2つだけですが、書いてみました。

それでは失礼します。

JMeterで役立つTips

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちはダオカです。

今回は負荷テストで個人的に使う機会が多い、JMeterの役に立ちそうなTipsをいくつか紹介したいと思います。

一定時間リクエストを送り続ける設定の仕方

負荷テストではよく「5分間リクエスト送り続けてのレスポンス状態をみる」といったような一定時間リクエストを送り続けるようなテストが行われます。

JMeterでそのようなシナリオを作成するには、スレッドグループのスケジューラを利用します。

設定方法

1. ループ回数を無限に設定する

2. 「スケジューラ」のチェックボックスをチェックする

3. スケジューラ設定の「持続時間 (秒)」にリクエストを送り続けたい秒数を入力する。

備考

・スケジューラ設定の開始時刻、終了時刻は入力必須になっていますが、過去の日付にしておけば無視されるので特段の理由がなければ、初期値のままでかまいません。

サンプラーのホスト名をいちいち書き換えるのが面倒くさい時

負荷テストでははじめにステージング環境で試してみて、その後本番環境で行ったりすることがあったりします。

こういう場合、本番環境とステージング環境でホスト名が違っていて、ホスト名の部分を書き換えないといけない場合があります。

これが1ページならいいのですが、複数ページにわたる場合、いちいちサンプラ毎に書き換えていては、面倒くさい、どっかで漏れや間違えが生じてしまうなど効率がよくありません。

このような時には「HTTPリクエスト初期値設定」という設定エレメントを利用すると便利です。

このHTTPリクエスト初期値設定では、ホスト名やポート番号、プロトコルなどの初期値を設定することができます。

これで、複数ページにわたるテストでもいちいちサンプラ毎にホスト名を書き換えるという面倒くさいことから解放されます。

ただし、HTTPリクエスト初期値で設定した値はサンプラーで上書きすることが可能です。

なので、サンプラーで初期値を利用したい箇所は、その箇所を空欄にしておく必要があります。

逆に、初期値を利用したくない場所はサンプラーでその項目の部分を設定すれば、サンプラーの値で設定した値が利用されます。

Basic認証がかかったページをテストしたい

何らかの事情でBasic認証がかかったページでも、JMeterでテストを行うことができます。

JMeterでBasic認証がかかったページをテストしたいときは、「HTTP 認証マネージャ」を使用します。

1. スレッドグループで右クリックし、「追加」→「設定エレメント」→「設定エレメント」→「HTTP 認証マネージャー」をクリックし、HTTP 認証マネージャを追加する。

2. 基底URLにBasic認証がかかるURL、ユーザ名、パスワードを入力する。

Cookieを使いたい

セッション情報の保持などにCookieがよく使われますが、JMeterでCookieを利用したサイトのテストを行いたいときは、「HTTP クッキーマネージャ」を使用します。

「HTTP クッキーマネージャ」はスレッドグループに追加するだけで利用できます。

何らかの事情で意図した値を保持したいということがなければ、特に設定は必要ありません。

ユーザエージェントを変えたい

モバイルやスマートフォンのサイトのテストを行う場合、ユーザーエージェントを設定しないとテストできない場合があります。

このようなケースでは、「HTTP ヘッダマネージャ」を利用します。

ユーザエージェントの設定例

1. スレッドグループで右クリックし、「追加」→「設定エレメント」→「設定エレメント」→「HTTP ヘッダマネージャ」をクリックし、HTTP ヘッダマネージャを追加する。

2. HTTP ヘッダマネージャの追加をクリックし、名前に「User-Agent」、値に適当なユーザーエージェントの値(例ではiPhone4の値)を設定する。

※HTTPヘッダマネージャでは、ユーザーエージェントのみでなく、HTTPヘッダで設定する値の変更をすることが可能です。

リクエストが自分の意図した結果通りのものか確認したいとき

JMeterではサンプラでリクエストを投げて、レスポンスにかかった時間を測定したりしますが、そのレスポンスが自分の意図したものでないとテストの意味がありません。

自分がシナリオ作成段階で、自分の意図した状態でレスポンスが返っているかどうか確認する手段として、リスナーの「結果をツリーで表示」をよく利用しています。

このリスナーではリクエスト毎の、リクエスト内容、レスポンス結果、応答データが詳細に表示されます。

ここで応答データをみると、自分が意図したレスポンス内容かどうか確認できます。

最近リリースされた、JMeter2.4ではいままであった、テキスト表示、簡易的なHTMLレンダリングに加え、XMLパーサ、JSONパーサ、正規表現の取り出しテストの機能も加わって、結構強力な機能になっています。

携帯サイトのアクセス判別方法とセッションハイジャック

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

携帯サイトのアクセス判別方法とセッションハイジャック

こんにちは、でりくーです。

携帯サイトへのアクセス判別方法と、 セッションID漏洩の問題点を簡潔に調べた範囲でまとめてみた。

■携帯からのアクセスの判別方法

携帯からのアクセスであることを判別するために、

1. アクセス元がdocomo、au、softbankの各キャリアで使用しているIPアドレス帯域であること

2. User-Agentによる認証 の2点を併用する方法がある。

1.の補足

携帯からインターネットにアクセスする場合は、

一度各キャリアのゲートウェイを通り、 その後、インターネットを通じて各携帯サイトにつながる。

つまり、アクセス元のIPアドレスは各キャリアのIPアドレスとなるため、

IPアドレスとキャリアのマッピングデータがあれば,キャリアを判別することができる。

ちなみに、各主要キャリアのIPアドレス帯域は公式サイトで確認できる。

■docomo

http://www.nttdocomo.co.jp/service/imode/make/content/ip/

■au

http://www.au.kddi.com/ezfactory/tec/spec/ezsava_ip.html

■softbank

http://creation.mb.softbank.jp/web/web_ip.html

○セッションハイジャックについて

Webアプリケーションとブラウザの間でやり取りされるセッションIDが第三者に知られてしまうと、

その第三者も正規ユーザとまったく同じアクセスを手にすることができる。

他人のセッションIDの値を何らかの方法で突き止め、

それを自分で使うことによって他人のセッションの続きを横取りするのがセッションハイジャックである。


 参考にしたサイト

■【PHPで作る】初めての携帯サイト構築

http://gihyo.jp/dev/serial/01/mobilesite-php/0002

■携帯電話向けWebアプリケーションのセッション管理手法

http://d.hatena.ne.jp/ockeghem/20070224

■セッション乗っ取り

http://thinkit.co.jp/free/tech/7/4/1.html

■Webアプリケーションに潜むセキュリティホール

http://www.atmarkit.co.jp/fsecurity/rensai/webhole03/webhole01.html

Seasar2でCSV処理

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

お久しぶりです。wryyyです。

今回のエントリーは、前回に続き、Seasar2のプロジェクトである、
S2CSVを紹介したいと思います。

(今回もSeasar2かい!って話は置いといて。。。)ここを参考におはなしを進めてまいります。

では、まずは、お決まり(?)の

s2CSVとは何か!?

S2CSVはSeasarとアノテーションを使ってCSVファイルや
CSVデータを手軽に扱うためのライブラリ。

S2CSVでは以下の事が可能になるようです。

・CSVファイル と Java Objectの相互変換を簡単に行える
・CSV個別の設定ファイルが必要ない
・バリデーションを行うことが出来る
・バリデーションメッセージ定義はStrutsライクでなじみがある形式

業務で、CSVファイルを読み込んだり、書き込んだりするのがまだまだあるこのご時世
Seasar2に慣れた方であれば、
このライブラリを使えばサクサクっと開発できることと思います。

(このライブラリがないと、
書き込みであれば、StringuBufferに何個もデータを突っ込んでやら、
読み込みであれば、InputStreamやらなんやら使ってゴニョゴニョしたりと色々面倒です。)

では早速、設定と動作に関して説明しましょう。

S2CSVの設定と動作

まずは、ココからS2CSVのjarファイルをダウンロードしましょう。

ダウンロードしたjarファイルをクラスパスに追加してください。

続いて、diconファイルを設定していきます。以下のdiconファイルに追記していってください。

・app.dicon





・creator.dicon





・customizer.dicon





以上で、設定は完了となります。

続いて、実際のコードの説明に移ろうと思います。

が!!!

実際、自分もこのライブラリに関してはまだ触ったことがないので、

コードの説明に関してはまた次回にしたいと思います。

Seasar2でCSVの書き込み、読み込みをおこないたい場合は、
ぜひ、このライブラリを使用してみてはいかがでしょうか。

最近人気な記事