ホーム ブログ ページ 52

SQL Mk-2(a5m2)を使用したExcel形式のDB定義書作成方法

0

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

SQL Mk-2(a5m2)を使用したExcel形式のDB定義書作成方法

 今回はフリーソフトSQL Mk-2を用いたDB定義書の作成方法を紹介します。

DB定義書を作成するツールはいろいろあるのですが、Excel形式となるとなかなか見つからない…

少しとっつきにくいツールですが、準備さえ終われば便利ですので、機会があれば是非活用ください。

1. SQL Mk-2のインストール

2. MySQL ODBCのインストール

3. DSNの作成

4. SQL Mk-2からデータベースへの接続

5. DB定義書作成

 [1]SQL Mk-2のインストール。

http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/

 [2]MySQL ODBCのインストール。

http://dev.mysql.com/downloads/connector/odbc/

 [3]MySQLサーバーへ接続するためのDSNの作成手順。

1. [スタート]メニューをクリックし、[コントロールパネル]をクリックする。

2. [コントロールパネル]が開いたら[管理ツール]をダブルクリックする。

3. [管理ツール]の中にある[データソース(ODBC)]をダブルクリックする。

4. [ODMCデータソースアドミニストレーター]の[システムDXN]を選択し、追加ボタンを押下します。

5. 先ほど、インストールしたMysql ODMC 5.1Driverが表示されているので、それを選択します。

以下の項目を入力して、Testボタンを押下します。

Data Source Name:データソース名

Server     :接続するサーバー名

User      :接続する際のMySQLユーザー名

Database    :接続するMySQLデータベース

接続に成功するとConnection successful!が表示され、設定完了となります。

 [4]SQL Mk-2からデータベースへの接続。

1. [データベースの追加と削除]をクリック

ODMCシステムデータソースを列挙するの項目にチェックをいれ、

上記で作成したODMCシステムデータソースを指定します。

2. データリンクプロパティで、プロバイダーのタブで。

Microsoft OLE DB Provider for ODBC Driversを選択します。

接続のタブで、データソース名を指定

サーバにログインする、ユーザ名、パスワードを入力します。

ようやくSQL Mk-2からデータベースに接続する準備ができました。

 [5]DB定義書の作成

SQL Mk-2の横に、データベース情報がツリー構造で表示されています。

データベース名にカーソルをあわせ、右クリックからテーブル定義書作成の項目を選択します。

後は、DB定義書にするテーブルを選択するだけで、下記のExcelファイルを出力します。

ActionScript3でprototypeを拡張したときにはまったこと

0

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

最近Flexの開発が本職になってきたので、ActionScriptを勉強しています。

今回は始めてprototypeを拡張した時に、はまったところを紹介します。

 setPropertyIsEnumerableについて

prototypeを拡張して関数を追加した時、単に追加しただけだとfor ~ in で要素を列挙する際に、追加した関数も列挙されています。これを防ぐにはsetPropertyIsEnumerableを呼んで、追加した関数を列挙しないようにしなくては行けません。

たとえば、以下のソースは実際のプロジェクトではまった部分ですが、

Array.prototype.find = function(property:String,value:Object):Object{
        return this.filter(function(element:*,index:int,arr:Array):Boolean{
                            return element[property] == value;
                           });
      };
Array.prototype.setPropertyIsEnumerable("find", false);

最後の行のsetPropertyIsEnumerableが重要です。これがないと配列をfor ~ inでまわしたときに”find”という身に覚えのない要素が追加されてしまいます。

 非Dynamicなオブジェクトでの拡張

上記ソースのようにDynamicなArrayを拡張した場合、arr.find(“age”,20)のようにObj.func()という形で拡張した関数を呼び出すことができます。しかし、以下の用にDynamicではないStringを拡張したときにstr.camelize()を呼ぼうとするとコンパイル時にエラーになってしまいました。

 String.prototype.camelize = function():String{
        var tmp:String = "";
        for each (var element:String in this.split('_')){
          tmp += element.charAt(0).toUpperCase() + element.substr(1);
        }
        return tmp;
      };

コンパイルエラーを防ぐには、かっこわるいですが、str[‘camelize’]()の様に呼び出せば良いようです。本当はStringをDynamicにしないといけないのかもしれませんが、低レベルのクラスをいじるのは気が引けるのでこの方法を使っています。

さて、以上2点、私のように見切り発車でコーディングをしてしまうとはまってしまうこともあると思い紹介してみました。なにかのご参考になればうれしいです。

Ruby on Rails Redmine Install

0

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

rick No20です。
今回はredmoneのinstallについて書きます。
remineとは?
タスク管理ツールです。
SubVersionとかも管理できるんですが、今回はredmineのinstallです。

環境

ruby 1.8.6
rails 1.2.5
sqlite 3.5.3
CentOS 5.2
redmine 0.6.4
download場所 /usr/local/src
ソース場所 /var/

Redmine Install

$wget http://rubyforge.org/frs/download.php/33789/redmine-0.6.4.tar.gz
// redmine 7.0以降はrails2系でないとダメらしいです。
$ tar xvf http://rubyforge.org/frs/download.php/33789/redmine-0.6.4.tar.gz
$ cp -a redmine-0.6.4 /var/

Redmine 設定

$ cd /var/redmine-0.6.4
$ cp config/database.yml.sample config/database.yml
$ vi config/database.yml
production:
adapter: sqlite3
dbfile: redmine.db
timeout: 5000

gem sqlite3-ruby install

$ gem intall sqlte3-ruby
$ rake db:migrate RAILS_ENV=production
$ rake redmine:load_default_data RAILS_ENV=production
Select language: bg, cs, de, en, es, fr, he, it, ja, ko, nl, pl, pt, pt-br, ro, ru, sr, sv, zh, zh-tw [en] ja ←jaを入力してenter

Rdmine 起動

monbrelを使用して起動します。
$ vi config/mongrel_cluster.yml
port: “3000”
environment: production
log_file: /var/redmine-0.6.4/log/mongrel.mongrel.log
public_file: /var/redmine-0.6.4/public
servers: 1
$ mongrel_rails cluster::startこれでlocalhost:3000でアクセス可能です。

RailsでOAuth Providerを作る

0

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

先日、お客様から「OAuthに対応できますか?」という質問を受けました。

正直「OAuthって何?」 という感じだったので、ちょっと調べてみました。

☆OAuthとは・・・

→認可情報の委譲のための仕様
 -予め信頼関係を構築したサービス間で
 -ユーザの同意のもとに
 -セキュアにユーザの権限を受け渡しする

とあります。

なんかOAuthには3つの要素が存在するようです。

  -OAuth Service Provider(ユーザの認可情報を第3者に渡す)
  -OAuth Consumer(ユーザの認可情報を受け取り、ユーザに代わっていろんな情報へのアクセス、追加・削除を行う)
  -User(ProviderがConsumerに認可情報を渡すことを許可したり、認可情報を無効化する)

mixiの「友人を探す」の「アドレス帳から探す」でOAuthを使っているそうなので、それに当てはめると・・・

 ↓

ユーザ(User)の許可のもと、mixi側(OAuth Consumer)にGoogle(OAuth Service Provider)のGmailのアドレス帳へのアクセス権限を与えて、mixi内にマイミクに追加するためのアドレス帳のインポートが出来る

 ・mixiにGmailのアカウントやパスワードを渡す必要がありません
・ユーザはGmail内において、mixiを認証済みのウェブサイトから外すことで、mixiへの認可情報の受け渡しを無効化出来ます

なんとなく安全なのかなぁ~程度。。。

☆OAuth Providerの実装

お客様の話を聞いていると、どうもサイト内の友達情報とかをConsumerとなるゲーム側に受け渡すためにOAuthを使い、サイト=Providerという形にしたいっぽかったので、そもそもRailsのアプリにOAuthのProviderを取りこめるのか調べてみると・・・

 Railsにruby-oauth gemと、OAuth Pluginというのがあって、それを使えば簡単にProvider側を実装できるらしいです。。。

◆ruby-oauth gemのインストール

gem install oauth

◆アプリにpluginをインストール(Railsアプリ配下で)

./script/plugin install git://github.com/pelle/oauth-plugin.git

◆Controller、Modelの作成

 ./script/generate oauth_provider

 これにより、以下のファイルが出来ます

 app/controllers/oauth_controller.rb
 app/models/oautht_token.rb
 app/models/access_token.rb
 app/models/request_token.rb
 app/models/client_application.rb
 app/models/oauth_nonce.rb

◆routesとassociationを設定

 map.oauth ‘/oauth’,:controller=>’oauth’,:action=>’index’
 map.authorize ‘/oauth/authorize’,:controller=>’oauth’,:action=>’authorize’
 map.request_token ‘/oauth/request_token’,:controller=>’oauth’,:action=>’request_token’
 map.access_token ‘/oauth/access_token’,:controller=>’oauth’,:action=>’access_token’
 map.test_request ‘/oauth/test_request’,:controller=>’oauth’,:action=>’test_request’

—-

 has_many :client_applications
 has_many :tokens, :class_name=>”OauthToken”,:order=>”authorized_at desc”,:include=>[:client_application]

—-

rake db:migrate

これにより、OAuth Service Providerの最低限の機能は揃うそうです。

また、下記のbefore_filterが使えるとのこと

・before_filter :login_or_oauth_required
・before_filter :oauth_required

でも、このプラグイン(Provider)を使うためには、よくよく調べてみるといろいろな条件があるようです。

・login_requiredを使っている

・rails2.0を使っている(←これが結構大きい・・・)

・OAuth Consumerの管理において、Consumerの削除・編集の機能実装が必要(え?結構重要じゃん)

既存のサイトに導入するのは結構難しそうですが、趣味とかで組んでみるのには面白そうですね☆

Passengerのステータス確認ツールの紹介(その1)

0

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

 今回は、Passengerに標準でインストールされるステータス確認ツールの紹介をしたいと思います。

 Passengeerのステータス確認ツールは2種類あります。今回はその1つについて説明したいと思います。

passenger-status

 passengerのプロセスの情報が見れます。passenger-statusで実行できます。出力は以下のようになります。

----------- General information -----------
   max      = 6   count    = 5   active   = 0   inactive = 5    
----------- Domains -----------
   /var/rails/hoge:
     PID: 4599    Sessions: 0    Processed: 13      Uptime: 1m 35s
     PID: 4594    Sessions: 0    Processed: 7       Uptime: 1m 36s
     PID: 4592    Sessions: 0    Processed: 1       Uptime: 1m 36s
     PID: 4589    Sessions: 0    Processed: 9       Uptime: 1m 38s
    /var/rails/huga:
     PID: 18348   Sessions: 0    Processed: 24      Uptime: 2m 54s

General informationの項目の説明は以下になります。max

passengerが起動できるプロセスの最大値。ApacheだとPassengerMaxPoolSize、Nginxだとpassenger_max_pool_size の値になります.count

現在起動しているプロセスの数active

リクエストを処理中のプロセス数。この値はcount以下になりますinactive

アイドル状態(リクエストを処理していない)のプロセス数。count – activeの値と等しくなります

Domainsは、VirtualHostが複数あれば、VirtualHostごとでプロセス情報の一覧を表示します。

項目の説明は以下になります。Sessions

処理待ちのクライアント数
Processed

リクエストを処理した数Uptime

プロセスの生存期間

 なお。設定ファイルでPassengerTempDir(Apacheの場合のみ)を指定している場合は、実行時に

ERROR: Phusion Passenger doesn't seem to be running.

というエラーになってしまいます。その場合、

 $ export PASSENGER_TEMP_DIR(かPASSENGER_TMPDIR)=[PassengerTempDirの値]
 $ passenger-status

か、または

$ PASSENGER_TMPDIR(かPASSENGER_TMPDIR)=[PassengerTempDirの値] passenger-status

とすれば実行できます。

 passengerの動作が怪しい時に確認するのに使ってもらえればと思います。

 次回はもう1つのツールについて説明したいと思います。それでは。

SSLを更新したらエラーコード:sec_error_unknown_issuerが表示された(ベリサイン証明書にて)

0

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

先月SSLの更新を行ったところ、FireFoxにてsec_error_unknown_issuerという

エラーがでました。

以下解決方法です。

どうやら、ベリサインにて2010年10月10日に仕様変更があり、それ以降に申請された

SSLの中間証明書は従来とは別のものになっていたことが原因のようです。

参考:中間CA証明書のインストールについて

新仕様の証明書か否かは以下の方法で確認しました。

※今回確認したのはセキュア・サーバーID用のものです。

1. SSL適用画面で「ページ情報」を表示させ、「証明書を表示」ボタンを押します。

  → 証明書ビューアが表示されます。

2. 証明書ビューアの「一般」タグの「発行者」>「一般名称(CN)」と確認します。

  証明書が新仕様、旧来仕様の場合それぞれ以下のように表示されます。

 新仕様: VeriSign Class 3 Secure Server CA - G3
 旧来仕様: VeriSign International Server CA - Class 3

新仕様の署名書の場合は以下から新しい中間証明書を取得し、対応します。

セキュア・サーバID用中間CA証明書

SSL更新の際は皆様ご注意ください。

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をコンパイルしなおさずに済みそうで、便利ですね。

最近人気な記事