モバイル共通ページ制作のためのメモ

モバイル向けの共通ページを制作するためのメモです。2006年中頃までの仕様となりますのでUTF-8やXHTMLで記述可能となってきた現在では適用できない項目も含まれているかと思いますが、旧機種に対応するために有用な箇所も有ると思われますので公開します。最新の状況や仕様などは各キャリアサイト等をご参照ください。

またこの内容は2006年から2007年にかけてイベントにて小冊子として頒布したものです。そちらでご入手された方には情報が古くなってきたための公開ということをご容赦いただければと思います。

目次

  1. はじめに
  2. 携帯HTMLの基本型
  3. HTML
    • HTML全般について
    • HTMLタグとオプション
  4. 画像/動画
    • 画像
    • HTMLタグ
      • Docomo(FOMA)
      • au
      • SoftBank
    • 著作権保護(コピーガード)
    • 動画
      • Docomo(FOMA)
      • au
      • SoftBank
    • MIMEタイプ設定
    • 著作権保護(コピーガード)
    • 音声
  5. サーバ設定
  6. アクセス制御
  7. フォーム/Webプログラミング
    • HTMLフォームタグ
    • Webプログラム
  8. その他技術情報
  9. 問い合わせ内容別の不具合推測

はじめに

このメモは既にHTMLを書くことの出来る人がなるべく手間をかけず携帯用HTMLを書くためのものです。Docomo、au、SoftBankでそれぞれHTMLの仕様が違いますが出来る限りひとつのページで全キャリアに対応できる最大公約数的な携帯用ページを作成することが目標です。またCGIなどのWebプログラミングをするときに携帯固有の問題について記載しています。

記事は実際に携帯サイトを運営した中で得た携帯向けのWebのコツを元に書かれていますが、公式な資料に基づいていない箇所も多くあるため間違いがある可能性があります。正確さが必要な場合は各キャリアの技術ページで仕様を確認してください。

Docomo 「作ろうiモードコンテンツ」
http://www.nttdocomo.co.jp/service/imode/make/

au 「EZfactory」
http://www.au.kddi.com/ezfactory/

SoftBank 「SoftBank Developers Support Site」
http://developers.SoftBankmobile.co.jp/dp/

1 携帯HTMLの基本型

このようなHTMLを作るとひとつのページで多くの携帯に対応することが出来るようです。

各タグについては次章を参照してください。

2 HTML

HTML全般について

ファイルサイズ

機種ごとに表示できるHTMLと画像の合計サイズに制限があります。
制限を越えると画像だけでなくなったり、ページの途中までしか表示できなくなったり、ページを全く表示できなくなったりします。合計4KB以下にしておけばほとんどの機種で問題なく見られますが最近は制限も緩くなり9KB程度にしておけばあまり不具合は発生しないようです。

文字コード

携帯ではShift-JISのみ可能です。EUCやUTF-8の読める機種もあるようですが一部ですのでShift-JISにしておくべきです。

絵文字

携帯独自の絵文字が利用可能です。Docomo、au、SoftBank でそれぞれ絵文字の仕様が異なるため全キャリア共通ページを作る場合には絵文字は使えないことになってしまいます。
しかしauの機種ではDocomo用の絵文字を近いau用絵文字に変換して表示してくれますので共通ページで絵文字を使う場合、ユーザの少ないSoftBankを切り捨ててDocomo用の絵文字を利用することがもっとも多くのユーザが絵文字を見れる状態になります。ページに絵文字を記載するには公式サイトの絵文字表のコードをHTMLに貼り付けてください。

半角カタカナ

PCでは文字化けの原因となるため余り使われない半角カタカナですが、携帯では普通に使うことができます。初期には半角カタカナを使うことでパケット代節約となる効果もありましたが、パケット定額の普及したではその意味も薄れました。しかし全角より半角の方が表示の際に収まりが良いこともありデザイン要素のために半角カタカナが使われ続けているようです。

1行の文字数

最も初期の機種で一行の文字数は全角8文字です。このためでも広告では全角8文字x2行ということが多くなっています。最近の機種では10~15文字程度となっているようです。

HTMLソース上の改行

HTMLソース上での改行ですが、多くの携帯では表示の際に半角分のスペースが挿入されます。PCでは気にならない半角スペースでも携帯の画面上ではレイアウトが崩れる場合があるため注意が必要です。

HTMLタグとオプション

<a>

accesskey="N"

N には 0-9,#,* が指定可能です。指定しておくと携帯の該当するキーを押すとリンクをクリックした時と同じようにジャンプします。form の submit ボタンに accesskey を設定すると動く機種も有るようですが動かない機種の方が多いように思えますので使わない方がよさそうです。

utn

Docomo用オプションです。

上のように設定するとリンクをジャンプするときに「携帯電話情報を送信しますか」と表示され「はい」「いいえ」の選択画面になります。「はい」を選択するとユーザエージェントに端末IDが追加されます。「いいえ」を選択すると追加されず普段と同じユーザエージェントになります。

mailto

PC同様に携帯でもメール送信画面になります。ここで便利なのがメール送信時にあらかじめサブジェクトや本文を入力しておく機能です。

とするとサブジェクトに「SUBJECT」、本文に「BODY」という文字が入った状態でメール画面が起動します。日本語を使う場合はあらかじめURLエンコードしておいてください。この機能は古い機種では動かないことも有りますが、最近の機種はたいてい問題ありません。

name

name によるアンカーリンクもPC同様に動作します。但し以下のように name と href を a タグに混ぜた場合、リンクとして機能しなくる機種があるようです。

この症状は SoftBank 705SCで確認しました。一方同じSoftBank の 812SH ではリンクとして動作します。なお name によるアンカーはXHTML1.1で廃止され id に代替することになっていますので、将来的には非対応の機種が増えることが考えられます。

<blink>

囲った範囲を点滅させます。PCではIEで動作しないため普及していませんが携帯では利用可能でワンポイントに使うと非常に効果的です。タグを閉じ忘れると画面全体が点滅し酷いことになる機種もあります。IEで動作しないためPCでは確認しにくいので注意してください。

<body>

bodyタグは基本的にPCのbodyタグと同じです。

これらのオプションは問題なく動きます。ただし古いauのHDML機で bgcolor を認識しない機種がありますがHDML機はほとんど無くなったので使って問題なさそうです。
background="画像" の壁紙指定については現時点では最新機種のみ対応しています。Docomoの場合902i以降のみ対応です。

<br>

改行タグです。PCと同じです。 なおauではXHTML準拠のため<br /> と記述すべきとされていますが <br> でも動作します。

<center>

囲った範囲をセンタリングします。デザイン上目立たせたい一文やボタンをセンタリングするなど多用します。

<font>

PCと同様にフォントの色指定が出来ます。 color="色指定" が使えます。
size 指定についてはDocomo505i/900i以降の機種で利用可能ですので今後は多くの機種で動作するようになりそうです。

<form>

フォーム/CGIの項目で扱います。

<hr>

PCと同様にsize="N" color="色指定" でサイズ(線の太さ)指定、色指定が出来ます。sizeを大きめにするとページ上に帯状に色の違う部分を作れるのでページデザインとの一部として使えます。
なおauではXHTML準拠のため<hr> と記述すべきとされていますがは<hr> でも動作します。

<img>

PCと同様に幅、高さの指定がwidth="N" height="N"で出来ます。
幅または高さのみを指定した場合は比率を保って縮小されます。両方指定した場合はもちろん比率は保持されず指定された大きさになります。
最近の機種はそれなりに綺麗に縮小してくれますのでこの機能で縮小してサムネイル表示に利用しても問題無さそうです。
使える画像の種類などについての詳細は画像の項目で扱います。

<input>

フォーム/CGIの項目で扱います。

<marquee>

PCでは余り使われない流れる文字を表示する marquee ですが、画面の小さい携帯では効果的に利用できます。更新内容やアナウンスなど、多く内容を表示したいがスペースが無い場合に便利です。
direction="left|right" width="N" loop="N" などが設定できます。繰り返しを指定する loop に -1 を指定すると無限ループします。

<meta>

meta http-equiv="refresh" はNG

以下のようなmetaタグによるリフレッシュは携帯では利用できません。

これは無限ジャンプが作れてしまうのでこれを利用したパケット死攻撃を防止するためかもしれません。しかしCGIを利用すれば同じジャンプ機能を実現できます。

meta http-equiv="Cache-Control"

携帯ではPCと同じように一度見たページをキャッシュしますが、auの機種は特にキャッシュのクリアがなかなか行われず、一度ブラウザを終了した後でもまだキャッシュを引くことがあるようです。auをターゲットとした携帯サイトでは常に以下のタグを書いておくのが無難です。

これを設定していないとコンテンツを更新したのに「ページが更新されていない」等の問い合わせが来ることがあります。

<object>

動画の項目にて扱います。

<p>

段落を付ける <p> タグです。携帯でも動作しますが機種ごとの挙動が分からないので空行を入れたい場合は<br>を二つ入れた方がよいかもしれません。

<param>

動画の項目にて扱います。

<select>

フォーム/CGIの項目で扱います。

<table>

現時点では最新機種のみ対応しています。Docomoの場合902i以降のみ対応です。

<textarea>

フォーム/CGIの項目で扱います。

<title>

PCと同様に利用できます。キャリアを限定するなら絵文字の利用も可能です。

3 画像/動画

画像

画像は基本的に jpg で作ればOK。読み込み可能な画像サイズやファイルサイズはキャリアや機種によってばらばらですが、大体以下のどちらかを作っておけばOKのようです。

旧機種との互換性重視の場合

横幅120ドット/ファイルサイズ4KB(HTMLとの合計5KB以下)

新機種での見栄え重視の場合

横幅240ドット/ファイルサイズ8KB(HTMLとの合計9KB以下)

ただし旧機種では jpg が読めない機種もあるためサポートする場合は gif や png を作ります。

HTMLタグ

通常のPCと同様の img タグで画像を表示できます。またPCと同様にaタグで直接リンクしても表示できますが古いauやTukaでは直接リンクでは見れない機種があります。

Docomo の場合

503以前/2xxシリーズをサポートする場合

jpg が読めないので gif ファイルが必要です。横幅120ドット、9KB程度までの画像を作ればほとんどの機種で見れるようです。
こちらも使ってる人がほとんどいなくなりましたので特別な事情がない限り作らなくて良いかと思います。

504以降をサポートする場合

これ以降は jpg が読めます。ただし504はQVGA対応していないので横幅は120ドットまでです。

505以降/FOMAをサポートする場合

jpg でOK。505はQVGAに対応していますので横幅は240ドットが表示可能です。

FOMAはQVGA液晶でない機種もありますが画像の自動縮小機能が付いていますのでこの設定で問題ありません。

au の場合

旧au/TukaのHDML機をサポートする場合

jpg が読めないので png ファイルが必要です。横幅120ドット、6KB程度までの画像を作ればほとんどの機種で見れるようです。
こちらも使ってる人がほとんどいなくなりましたので特別な事情がない限り作らなくて良いかと思います。

QVGA 対応機種 / 非対応機種

auではDocomoのような明確なQVGA対応/非対応の境界はありません。WIN以降とA55xxとA54xxの新し目の機種が対応しています。
対応機種用には横幅240ドット、非対応機種用には横幅120ドットの画像を用意しておけば問題ありません。
ファイルサイズは8KB以下にしておきHTMLとの合計で9KB程度に収まれば問題ありません。

SoftBank の場合

902SH等の型番が数字三桁の機種では一部の例外を除いてほぼQVGA表示が可能です。それ以前の J-N51 など型番がJで始まる機種では J-SH53以外はQVGAではありません。

QVGA 対応機種

対応機種用には横幅240ドット、ファイルサイズは8KB以下にしておきHTMLとの合計で9KB程度に収まれば問題ありません。

QVGA 非対応機種

非対応機種用には横幅120ドットの画像を用意すれば問題ありません。

SoftBank の古い機種は各携帯の中で最も制限がきつく、5KB以下にしないと見れない機種があります。このためファイルサイズは4KB以下にしておく必要があります。

著作権保護(コピーガード)

携帯の画像にはコピーガード機能があります。コピーガードをかけても端末への保存は可能ですが、そこからメールに添付したりメモリカードに移動したりは出来なくなります。

Docomo の場合

jpegのコメント欄に特定の文字を入れることでコピーガードがかかります。
コメントを編集出来るソフトで以下のコメント欄に入力してください。

gifの場合も上の一文をコメント欄に埋めることでコピーガードがかかります。しかしMovaではそもそも画像を保存してメール添付したりメモリカードに転送する機能がありませんのでFOMAでgifを表示させる場合だけコピーガードをかければよいようです。

au の場合

Docomoと同様にjpegのコメント欄に特定の文字を入れることでコピーガードがかかります。

pngの場合も上の一文をコメント欄に埋めることでコピーガードがかかります。またこのコメントはカンマで繋ぐことが出来るようです。

とするとDocomo、au両方にコピーガードのかかったファイルが出来ます。

SoftBank の場合

SoftBankでは拡張子をjpgからjpzに変更することでコピーガードがかかります。またpngの場合はpnzとなります。ただしjpzにするとサーバがファイルを画像だと認識してくれなくなり、そのままでは表示できません。サーバの管理者と連絡が取れる場合には httpd.conf に以下の記述の追加を依頼してください。

サーバ管理者が対応してくれない場合は画像を置くディレクトリに上の内容をテキストで書いて.htaccess というファイルをおいてみてください。残念ながらそれでも表示できない場合はそのサーバではjpzは利用できません。

また3G対応機種ではhttpヘッダを出力することでコピーガードが可能です。httpd.conf にmod_headers が組み込まれている場合は以下を追加することでコピーガードがかかるようです。

値に「no-store」「no-transfer」「no-peripheral」の3つを組み合わせて指定できるようです。no-transferとno-peripheral を組み合わせて指定するとDocomo、auと同様のコピーガードになると思われます。それぞれの意味は以下の通り。

no-store
携帯に保存(store)させない。送信、転送も不可。

no-transfer
携帯からメールに添付しての転送(transfer)させない。

no-peripheral
携帯から外部メモリ、すなわち周辺機器(peripheral)に転送させない。

ただしno-peripheral を設定してもメモリカードに転送できてしまう機種が存在するようです。そのような機種に対しては今のところ機種判定をしてno-store を設定する等の対策が考えられます。

ところでコピーガードをかけた画像がPCから見れてしまうディレクトリにあっては意味がありません。PCからはファイルにアクセスできないようにする必要があります。サーバ設定の項目を参照してください。

動画

携帯用の動画を作成するソフトは色々ありますが、とりあえずAppleのQuickTime Proを購入してしまうのがお手軽です。Docomo用もau用もQuickTimeがあれば作成可能です。またフリーソフトで制作する方法もあるようです。

Docomo(FOMA)

DocomoではFOMA以降動画を見れるようになりました。拡張子は 3gp です。画像サイズは176x144(以降QCIFサイズ)、ファイルサイズは300KBまでとなります。
横幅128サイズのSQCIF規格もありますが、全ての機種でQCIFが読めるのでこれを作っておけば問題ありません。最近の機種では500KBまでOKになりました。
HTMLタグも単純で普通に a タグでリンクすれば問題ありません。

au

auはかなり以前から動画を見れる機種が見れますが、初期のamc からは3g2とフォーマットが変わりました。このため機種ごとにamcだけ読めたり両方読めたり3g2だけ読めたりとばらばらです。
またサイズもamcで3種類、3g2で2種類と豊富なため面倒なことになっています。
最近の機種ではamcが既に読めませんので広く対応するには両方のフォーマットを作成する必要があります。またダウンロード方式とストリーム再生方式がありますが、ここではダウンロード方式だけ扱います。

最近の機種のみサポートする場合

3g2フォーマット 240KB以下

古い機種もサポートする場合にはこちらも作成

amcフォーマット 240KB以下

HTMLタグも特殊です。以下のように書けば取りあえず見れますが詳細は公式サイトで確認してください。

3g2
amc

ところで公式サイトでのサンプルには

というファイルサイズを示すparamタグが必須となっていますが、これは省略しても動作するようです。ただしサーバの設定によっては必要な場合がありますので詳しくはサーバ設定の項目を参照してください。
なお value="携帯に保存されるときのタイトル" に絵文字を使うと動画のダウンロードに失敗する機種があるようなので避けてください。

SoftBank

SoftBankもかなり以前から動画を扱うことが出来ました。しかし初期の機種の拡張子が.noaの動画フォーマットは既に見れる機種も少ないため捨てて良いと思います。
最近の機種ではFOMAと同じ3gpフォーマットのQCIFが読めるようです。ただしファイルサイズは200KB以下となっているいます。

MIMEタイプ設定

上のタグで動画が見れない場合はサーバ側のMIMEタイプが設定されていない場合があります。サーバの管理者と連絡が取れる場合には httpd.conf に以下の記述の追加を依頼してみてください。

サーバ管理者が対応してくれない場合は動画をおくディレクトリに上の内容をテキストで書いて.htaccess というファイルをおいてみてください。この辺りは画像のjpzの場合と同じです。

著作権保護(コピーガード)

3gp,3gp2,amcともに QuickTime のオプションにてコピーガード設定ができ、画像のコピーガードと同様にメール添付やメモリカードへのコピーが出来なくなります。
ただし SoftBank については画像と同様のhttpヘッダによるコピーガードが必要です。画像の設定とあわせ以下のように httpd.conf に記述してください。

音声

携帯にはauのqcp等音声用のフォーマットがありますが、さしあたって画像無しの動画ファイルを作れば各キャリアとも音声のファイルを公開できます。

4 サーバ設定

携帯向けにhttpサーバの設定が必要になる部分があります。ここではApacheのhttpd.confの場合について記載します。

keep alive

OFFにするとauの動画についてサイズ指定のパラメータを省略不可能になります。ONにしておくのが無難です。

MIMEタイプ

.htaccess でもできますがhttpd.confを変更できるのであればあらかじめ設定して置いてあげるのが親切です。とりあえず携帯関連のものを片っ端から追加しておくとこのようになります。

5 アクセス制御

画像や動画にコピーガードをかけた場合は、ファイルがPCからアクセスできてしまってはコピーガードになりません。.htaccess で携帯以外をブロックする場合は以下のようにします。

Docomo/au/SoftBank 以外のリモートホストではアクセスできないようにしています。なおSoftBankのリモートホストは未だにJ-Phone時代の .jp-*.ne.jp です。
ところで前述の .htaccess を設定してしまうとPCから全く見えなくなるのでサイト管理が面倒になります。そこでPCだけパスワードを聞くようにする場合は以下のようになります。

これでパスワードファイル .htpasswd を作れば問題ありません。パスワードファイルの生成方法などは .htaccess の解説サイトを探してみて下さい。

6 フォーム/Webプログラミング

HTMLフォームタグ

<form>

method="get|post"

携帯ではGETで扱える文字数が少ない機種がありimodeでは255文字までとなっているようです。基本的にpostにしておくのが無難です。
SoftBankの旧機種でgetにしておかないと動かない物があるようですが既にほとんど利用されてないと思います。

utn

Docomo用オプションです。aタグと同様に

のように設定するとリンクをジャンプするときに「携帯電話情報を送信しますか」と表示され「はい」「いいえ」の選択画面になります。
「はい」を選択するとユーザエージェントに端末IDが追加されます。「いいえ」を選択すると追加されず普段と同じユーザエージェントになります。

<input>

type="text"

PCと同様ですがSoftBankの旧機種対策のためmaxlength オプションが必須です。
maxlengthを省略すると勝手に小さめの値を設定してくれる物があるようでSoftBankのユーザから「フォームにメールアドレスが全部入らない」などの問い合わせが来たらこれを疑ってください。
Docomoではテキストに絵文字を入力できますがauでは仕様上出来ません。ですが絵文字が入力出来てしまう機種があるようです(W11Hで確認)。

type="password"

普通に利用できますが携帯だと表示を隠されると何が入力されてるのかわかりにくいためtype="text"で代用した方がよさそうです。

type="radio|checkbox|hidden"

PCと同じです。

type="file"

携帯では今のところSoftBankの一部しか携帯からのファイルアップロードが出来ません。ファイルを受け取るにはメール添付でもらう必要があります。

istyle(format)

入力欄が立ち上がったときの入力モードの初期状態を設定できます。
Docomoでは istyle、auでは format、SoftBankでは modeで指定しますが
auはDocomoの istyle を読んでくれるため istyleと mode だけ設定しておけば問題ありません。
よく使うのは下の2パターンです。その他詳細は公式サイトで確認してください。

半角英数を入力させたいとき

半角数字を入力させたいとき

全角ひらがな入力をさせたい場合はデフォルトですので指定する必要はありません。

<textarea>

基本的にPCと同じです。istyleの設定も出来ます。
絵文字については input type="text" と同様にDocomoでは入力できますがauでは仕様上出来ません。
auの一部の機種で絵文字が入力出来るバグがあるのも同じです。

<select>

基本的にPCと同じですがSoftBankの旧機種に設置できるoptionの数に制限のある機種があり機種によって30だったり50だったりするようです。
このため都道府県のセレクタを設置すると途中の県までしか表示されないよう場合があるようです。
これに対応するためには地方別にセレクタを分けプログラムで処理する等の仕掛けが必要です。
Docomoについても技術ページでは31項目までとなっていますが、ユーザより都道府県セレクタが使えないという問い合わせがないため 利用されている機種ではこの制限より多い制限数となっているようです。

その他

nameオプション

SoftBankの3G機種で name として使えない文字があります。sid,lid,uid等を予約語としてSoftBankのシステムが使っているようです。
SoftBankユーザだけからプログラムが動かない、と言う問い合わせがある場合これを疑ってみてください。

Webプログラム

Webプログラミングをするときの携帯特有の部分を集めてみました。書いてる人がPerlしか出来ないのでサンプルはPerlになってますが他の言語でも同様かと思います。

環境変数

取得できる環境変数のうち携帯固有の情報、クセが幾つかあります。

HTTP_USER_AGENT

PCだとブラウザの種類が取得できるユーザエージェントですが携帯の場合機種名とブラウザ、そのバージョンが格納されています。
またDocomo、SoftBankでは端末IDが取得できる場合にはユーザエージェントに端末IDが含まれた状態で格納されています。

HTTP_REFERER

Docomoの機種ではリファラが取得できません。基本的にリファラ情報を使わないほうが良さそうです。

REMOTE_HOST

リモートホストです。これから実際に携帯でアクセスしているかどうか確認できますが、環境変数のREMOTE_HOSTは詐称が出来るため
実際にプログラムでアクセス制限をする場合は REMOTE_ADDR から逆引きしてリモートホストを求めて下さい。

HTTP_X_UP_SUBNO

auの機種で取得できる環境変数です。au の端末IDであるサブスクライバIDが取得できます。
auであれば設定や動作に関わらず全ての機種で取得可能でしたが、今はユーザの設定で取得不可能にすることができます。
しかし au 対応のサイトでは基本的に取得できることを前提に作られている物が多く取得不能にすると利用できなくなるサイトが多くなるようであまり取得不可に設定しているユーザはいないようです。

その他

HTTP_X_UP_*****や HTTP_X_JPHONE_***** など携帯だけで取得できる環境変数もあります。色々情報が入っているようなので活用できそうです。

端末ID取得方法

端末IDを取得するにはDocomo対策のために form または a タグに utn オプションを着けたHTMLを用意、プログラム側では以下のルーチンで取得していますがこれでうまくいくようです。

auではユーザが公式サイトの設定画面からサブスクライバIDの出力をOFFに設定していると取得できません。またSoftBankの機種では機種側のブラウザの設定で端末ID送信の設定をOFFにしていると取得できません。

ただしそもそも端末IDを出力する機能のない機種があります。Docomoでは 501i系、502i系、210i系など、SoftBankでは J-xx0x系、V30x系、V40xなどです。このような端末に対しては以下のルーチンで判定してチェックから除外しています。

今後取得できない機種が出てくることはないと思いますので当分変更する必要は無さそうです。

DocomoFOMA については端末IDのほかにFOMAカードのIDが取得できます。これはカードに付いているIDなので機種変更しても電話番号を変更せず同じカードである限り同一の人物からのアクセスであることが分かります。
utnオプションを利用したときにユーザエージェント中に出る icc から始まる文字列がカードのIDです。

文字コードと絵文字と文字化け

携帯では文字コードは基本的にShift-JISのみです。UNIX系のサーバでは文字化け防止やマッチングのためEUCで保存したくなりますが、Docomo、auユーザがフォームから入力した絵文字をjcode等でEUCに変換すると文字化けします。
SoftBankの絵文字についてはShift-JIS <=> EUC 変換をしても文字化けせず問題ないようです。
文字化けを避けるには絵文字をユーザ入力時点のバイナリ形式からエスケープした型式に変換する必要があります。以下のルーチンで行っています。

サイトで機種間の互換性を上げる場合同様のルーチンで絵文字をばっさり削除してしまっても良いかもしれません。

なお本来auの絵文字はフォームから入力できないためサイト側には来ないはずなのですが、バグで入力できてしまう機種がありその対応のためau絵文字らしき物は特定の文字に変換するようにしてあります。

リダイレクト

HTMLのmetaタグでのリダイレクトが使えないため、別ページに移動させるにはプログラム側でリダイレクトする必要があります。

また単純なリダイレクトをするだけであれば Apache の mod_write を利用すると便利です。

メール送信

メール送信は通常のPC宛と同様にPerl等からsendmailを呼び出して送信する事が出来ます。携帯での注意点は以下の通りです。

エンコードはJISコード

携帯はWebではShift-JISのみ動作しますがメールは一般的なメールのルール通りJISコードで送信できます。

CC/BCCの制限有り

メールにCCやBCCを大量に付けて送信すると受信を拒否されることが有るようです。これらについては使わない方が良さそうです。

MIME-Versionヘッダが必要

SoftBankの一部の機種に以下のようなMIME-Versionのヘッダが無いと受信できない機種があります。

宛先不明メール大量送信による受信ブロック

短時間に存在しないメールアドレスに大量にメールを送るとそのサーバからのメールを一律で受け付けなくなるようです。いまのところこちらでは au でこのような制限がかかったことを確認しています。auではブロックは1日程度で解除されるようですがそれまでメールが送れなくなってしまいます。この「存在しないメールアドレス」にはそれまでは送信できていたがユーザがメールアドレスを変更したため不達になったものも含まれるため日々増えていくことになります。このようなアドレスに送ったメールはエラーとなって帰ってきますのでエラーメールを解析して不達アドレスに送信しないようにする仕組みが必要です。

メールアドレスの抜き出し

携帯のメールアドレスにはPCでは通常使われないスラッシュやらハテナやらが使われます。このため既存のスクリプトを用いた場合メールアドレスのチェックで引っかかる場合があります。アドレスチェックの正規表現は以下のようにしておくと大体問題ないようです。

ファイル受信

携帯ではSoftBankの一部の機種をのぞいてフォームからのファイルのアップロードが出来ないためファイルを受け取るには基本的にメール添付で送ってもらう必要があります。
こちらでは MTA に qmail を使い、.qmail からPerlスクリプトに投げてメール分解ライブラリで処理することでうまくいっています。

ログイン状態の保持

携帯では coockie は使えないため coockie によるログイン状態が作れません。基本的にセッションIDをGETやPOSTで継承していくことになります。

コピーガード

サーバ側で画像にコピーガードを入れることが出来ます。ImageMagickを使うとjpegのコメント欄を変更できますのであとは同様にコピーガード文字列を入れてあげれば問題ありません。Perlの場合ImageMagickのモジュールがありますのでCGIでコピーガードをかけることが可能です。

モジュール

HTTP::MobileAgent等、携帯向けの各種モジュールが公開されているようなので組み合わせて使うと便利そうです。

7 その他技術情報

画像コピーガードがかかってるかどうかチェックする

シェルから画像にコピーガードがかかってるかどうかチェックするには

とするとgrepで無理矢理判別できます。コピーガードのあるファイルには上の文字列が含まれるのでマッチしたという結果の1行が帰ってきます。ガードが無い場合は文字列含まれないため何も結果が帰ってきません。

SoftBankをどうするか

SoftBankについては携帯をブラウザとしているユーザがDocomo、auに比べ少なく、またHTMLの仕様もクセが多いので真っ先に切り捨てるとページ作成が楽になります。
しかしナンバーポータビリティ導入以降ユーザ数が増えているようで今後は対応を進めていく必要がありそうです。

8 問い合わせ内容別の不具合推測

携帯ユーザからの問い合わせは携帯メール文化のせいか非常に短い文面で来ることが多々多くあります。不具合の詳細を教えて貰えれば対応できますが、インターネットに関する知識のないユーザから聞き出すのはなかなか難しいものです。
ここでは問い合わせの内容から推測できる不具合をリストアップしてみました。

動作関連

「全く見えない」「接続できない」

httpdの設定間違い

.htaccess等で携帯を制限してしまっていませんか?

SoftBankでDNS逆引き不可能の不具合

BASIC認証で .jp-*.ne.jp のアクセスを認証している場合、まれに SoftBank の DNS が応答しないため逆引きが出来ずリモートホストでの判定ができない場合があります。この場合DNSが応答するようになるまで待つか SoftBank の技術ページよりIP帯域を参照してリモートホストからリモートアドレスでの制限に変更する必要があります。

「画像が見えない」

FTPでのファイルアップロードミス

アップロード忘れやアスキーモードで画像をアップロードしていませんか?

MIMEタイプ設定忘れ

特にvodafone の jpz pnz の場合、MIME設定がされているかどうか確認してください。

機種ごとの容量制限に引っかかっている

HTMLの読み込みが完了しページが表示された後に容量制限でその後の画像が表示できない場合があります。特にSoftBankの旧機種の場合HTMLと画像の合計が5KB程度でないと読めない場合があります。

「動画が見えない」

FTPでのファイルアップロードミス

アップロード忘れやアスキーモードで画像をアップロードしていませんか?

MIMEタイプ設定忘れ

MIMEタイプに 3gp や amc や 3g2 が設定されているかどうか確認してください。

フォーマット間違い

再生出来ない機種用のファイルを再生しようとしていませんか?
また機種ごとのファイルサイズ制限等を見直してみてください。

httpd設定間違い

au で size を省略している場合は keep alive をONにする必要があります。

auの動画タイトルに絵文字が使用されている

においてタイトル部に絵文字が有ると動画をダウンロード出来ない機種があります。

「リンクをクリックしたのに何も起こらない」

リンク先がCGI等で ***.cgi?name=value&name2=value という型式の場合、URLが長すぎるとアクセスできない場合があります。
またSoftBank 3G機種の場合 name オプションに sid や did 等の値が使えません。

「リダイレクトの制限を超えた」等のメッセージが表示される

携帯ではCGI等でリダイレクトが可能ですが機種によってリダイレクトできる回数に制限があるようです。

表示関連

「ページが途中までしか読めない」

機種ごとの容量制限に引っかかっている

容量制限を超えるとそこで表示が打ち切られる機種があるようです。
特にSoftBankの旧機種の場合容量制限が厳しくなっています。

au CASIO機種の固有問題

なぜかこちらで担当したサイトでは改行の後の文章がau CASIO機種限定で読めなくなる不具合がありました。原因は不明です。

「画面全体で文字の色がおかしい」

aタグまたはfontタグを閉じ忘れている場合ページ全体がリンクになり色が変わりますのでこのことを指名していることがあります。
業者の広告を設置している場合は広告のタグでfontが利用されておりそれが閉じられていない場合もあります。

「画面全体がちかちか点滅する」

blinkタグを閉じ忘れていることが考えられます。

「選択中の文字が見えない」

bodyタグ指定で text と alink の色指定が同様になっていることが考えられます。

「サイトが更新されていない」

機種内のキャッシュを見ている可能性があるため更新してもらうようにお願いします。特にauではキャッシュが長く保持されるようですが<meta http-equiv="Cache-Control"> を各ページに設置することでauではキャッシュされないようになります。

フォーム関連

「submitボタンをクリックしたのに何も起きない」「表示がおかしい」

methodがGETになっていればpostにしてみて下さい。またSoftBank 3G機種の場合 name オプションに sid や did 等の名前が使えませんのでこれらのが使われている場合に誤動作を起こします。

「フォームにメールアドレスなどを入力したのに途中までしか入らない」

SoftBankの旧機種では maxlength 省略時のデフォルト値が小さくなっています。maxlength="255"と設定してみてください。

「セレクタが途中までしか選べない」

SoftBankの旧機種では option の設置数制限が30となっている場合があります。

「パスワードが一致しない」

ユーザが全角でパスワードを入力している可能性があります。

「端末ID取得画面で先に進めない」

IDが出ない旧機種があり、その場合処理をスキップする必要があります。SoftBank ではブラウザ設定でID出力をOFFに設定出来るためこれをONにしてもらいます。

メール関連

「昨日のメールが今来た」

使っているサーバが携帯会社から受信ブロックを受けており、それが解除されてメールが再送された可能性があります。宛先不明で戻ってくるエラーメールを処理して不達アドレスにメールを送らないようにする必要があります。

「メールが読めない」

JIS以外のエンコードでメールを送信していませんか?
またSoftBankでは送信時のヘッダに「MIME-Version: 1.0」という項目が必要な機種があります。

以上