NASというより多機能サーバー? Synology DS1511+ 設置編

Synologyというメーカーをご存じでしょうか?台湾のNAS専業のメーカーで、ビジネス向けから家庭向けまで多くの製品(製品一覧ページへリンク)を発売しているようです(ちなみにNASというのはNetwork Attached Strageの略で、BUFFALOのLinkStationやTeraStationシリーズのようにネットワークで複数のマシンから共有できるファイルサーバー製品のことです)。

今回ご縁があってこちらのDS1511+というビジネス向け製品をレビュー用にご提供いただきました。とても多機能な製品なので数回に渡ってレビューを掲載していきたいと思います(カテゴリ作りました。関連記事一覧はこちらで)。

■製品概要

DS1511+の公式製品ページはこちらになります。個人的に注目の仕様は、

  • 3.5′ HDDx5ベイのNASで、最高Read197.8MB/s、Write165.91MB/sの性能
  • ホットスワップ対応(ディスク障害時に電源入れたまま交換できる)
  • iSCSIのサポート
  • IPカメラを組み合わせた監視サーバー
  • 外部ドライブ増設にUSB2.0x4に加えeSATAx2を搭載
  • LANポートもGibabitx2で束ねて使ったり障害時のバックアップ、はてはルーターとしても機能
  • POP3/IMAP対応のメールサーバー
  • SSH

といった辺り。かなりマニアックですね。ビジネス向けだからというのもありますが、ソフト面に関しては家庭向けモデルでも対応しているものが多いようです。

あとは普通に最近の国産NASが対応している、

  • DLNAサーバー
  • iTunesサーバー
  • スマートフォン向け専用アプリからのアクセス
  • PHP/MySQL対応のWebサーバー
  • FTPサーバー
  • TimeMachineバックアップ(Mac)
  • UPS対応

といった機能も当然のように対応しいて遜色はないように思います。

多重化方式に関して、「Synology Hybrid RAID, Basic, JBOD, RAID 0, RAID 1, RAID 5, RAID 5+Spare, RAID 6, RAID 10」となっています。Synology Hybrid RAID(SHR)というのはまだよくわかりませんが、初代Windows Home ServerのDEのように異なるサイズのHDDを扱える独自規格のようです。

ちょっと多機能過ぎてとても全ての機能をレビューできる気はしませんが、ぼちぼち試していきたいと思います。

  写真1A. 製品外観
DS1511 _1a

  写真1B. 風通しが良さそうで温度管理も安心? 
DS1511 _1b

■ハード周り

さっそく設置してみました(写真1A)。横に並んでいるのはAppleのAirMac Extremeとお約束の単3eneloopです。横長で安定感のあるデザインです。個人的には最近のビジネスグレードのTeraStationのデザイン(リンク)より好きですね。真正面から見ると各ベイの隙間から奥の壁が見えていて(写真1B)、この種の製品の生命線とも言えるエアフロー(風通し)は充分確保されてる印象です。


  写真1C. 充実のインターフェイス群
DS1511 _1c

ついでにちょっとピンぼけですが背面の写真も(写真1C)。大きな冷却ファンが2つ、右上にはD-Subらしきものが見えますがフタされちゃってます。モニタつながるんでしょうか(ドキドキ)。その下がUSB2.0ポートx2、GbEポートx2。本体下部に離れて2つ見えるのがeSATAポートです。このeSATAポートに増設する用にDS1511+と同一筐体のDX510というHDDケースユニットもあり、2台つなげて全ての3TB HDDいれたら3×15で45TBですね。エラいことです。


  写真1D. トレイを引き出した様子
DS1511 _1d

各ドライブベイは下部についてるロックスイッチを解除した後、上部の▼LEDのあたりを押すと写真1Dのように引き出すことができます。写真1E~1Gがドライブトレイです。面白いことに2.5′ HDD用のネジ穴もついていて省電力アレイやSSDアレイなんかも狙えます。AcerのAspire easyStoreみたいにネジ無しで固定できるトレイに比べるとやや不便ですが、ネジは必要本数付属していました。

なお今回はSeagateのBarracuda 7200.12 500GBモデル(ST3500418AS)を5台お貸しいただいたのでこれでRAID5アレイを構築してベンチしてみる予定です。将来的には3TBクラスx5に入れ替えて容量優先で運用してみようと思っています。

 

写真1E~G. HDDはトレイにネジで固定。2.5インチにも対応!
DS1511 _1eDS1511 _1fDS1511 _1g


■管理GUI

さてHDDの組み込みも終わり電源を投入して初期設定を行います。管理はブラウザから行えるのですが、最初にIPアドレスを調べたり設定したりするのに専用ツールSynology Assistant(以下SA)を使います。この辺りの流れはBUFFALOのLAS Navigatorと一緒です。ルーターの管理画面などでDHCPで振られたIPアドレスを調べられるならSAをインストールしなくても運用可能かも知れません。ちなみに当然のWindows、MacOSX版に加えLinux版まで提供されているところはさすがです。なんかUNIXに詳しそうなメーカー、って印象を感じますね。

  写真1H. これがWeb管理UI…だと?!
DS1511 _1h

  写真1I. まるでデスクトップOSの様 
DS1511 _1i

IPアドレスさえ判明したら、http://192.168.xxx.xxx:5000/webman/で管理ページにアクセスできるのですが、これが驚愕モノでした。Synology DiskStation Manager(製品ページにリンク)と呼ぶらしいのですが、ブラウザ上で動くデスクトップOS並の作りです。写真1Hがログイン直後の状態ですが、この真ん中のウインドウ、ドラッグできますw。「コントロールパネル」を開いた状態が写真1I。MacOSXのシステム環境設定に似たインターフェイスで各設定ページをサクサク移動できます。これは国産のルーターやNAS、無線LAN機器などの組み込み製品の管理画面ではお目にかかったことがない作りですね。Webフォームで設定をして「保存」ボタンでsubmitしてページが再読込されて、とかってやるのとは別次元のUXです。試しにIPアドレスを変更してみたんですが、従来製品では「接続が切れるのでブラウザを閉じてNAS Navigatorから新しいIPアドレスで開き直せ」と言われ再起動かかって、数十秒待った後に新アドレスでアクセス。当然ブラウザに保存したパスワードも無効になってて、なんてのが普通ですが、DSMでは一切なし。ブラウザのアドレス欄を見るといつのまにかIPアドレスが変わってる、って感じで、再起動(サービス中断)したのかどうかすらわかりませんでした。

あと、画面下部の「Report Bugs」をクリックするとメーカーの問い合わせフォームのページが開く、なんて小技もニクイです。

正直製品ページを見た時点ではクライアント側の管理アプリケーションだとばかり思ってたんですが、まさか全てブラウザ上で実行されているとは(Javaで動いてるっぽいです)。これ公式サイトとかでデモ機公開して直接触れるようにとかしてPRしたらいいんじゃないですかね。

ちなみに海外製品にありがちな日本語のあやしさもほとんど感じません。マニュアルドキュメンも含めてかなりしっかりローカライズしてある印象です。こちらからダウンロードできますので興味のある方はどうぞ。(User’s Guide->日本語)

2011.11.10追記:

日本語の管理画面を体験できるデモサイトが開設されてました。遠隔にあるので若干レスポンスが悪いですが、DSMがどんなものかは体感できると思います(実際にLAN内にあればもっとサクサクです)。是非一度ご覧下さい。

http://www.synology.com.tw/products/dsm_livedemo.php?lang=jpn

(記載されてるIDとパスワードを覚えた後、「Live Demo」ボタンをクリックし、そのIDとパスワードを入力して下さい)

いやはや初っ端から度肝を抜かれました。この後はRAIDアレイの構築で時間もかかるし、少しマニュアルを詳しく読んでから設定したいので、まずはここまで。

今回のレビュー依頼を受けるに辺り、「いくら製品を提供していただくからといって記事内容に手心を加えた提灯記事を書きませんよ?」とおことわりさせて頂き、先方さんからも「何を書いても構わない。ユーザさんからの意見として真摯に受け止める。」とご快諾いただいてましたワケですが、今のところ全くネガティブがない(笑)。とりあえず続きをお楽しみに!

MacOSX Server 移行ログ DNS、メール、その他編

先月購入したMaxOSX Lion Server入りMac mini Serverへの移行作業が割と手間取っています。LinuxサーバーでCUIでやっていたことと、OSX ServerのGUI上でのマッチングがよくわからなかったり。参考書籍も検索結果も10.6世代の情報ばかりで、しかも結構ファイル構成とか違ってたり。MC936J/Aの品薄感で焦ってしまったものの、もう少し情報出そろってからでも良かったかもですw。

でもまぁボチボチ進めてます。σ(^^)の様にLion Serverの値頃感で参入する人も多いでしょうからなるべく情報共有できるよう、作業ログはブログの方にあげてくことにします。

■初期設定&概要

まずハマりやすいのは初回起動時のユーザ設定。うっかり自分の普段使いのアカウント名を管理者として使ってしまうと、後でその名前でOpen Directoryアカウントが作れなくなり、結果としてメールサービスなどが設定できなくなります。adminなどの汎用アカウント名を設定しましょう。

次にビビるのは「サーバー管理」アプリがインストールされておらずAppleから自分でダウンロードして入れる必要がある点。最初から入っている「Server」というアプリからだとDNSやDHCPなどの項目がなくて、「Lion Serverは値段も下がったけど機能も削られてるのかっ!?」と一瞬青ざめました。

管理操作はクライアント側に「サーバー管理」をインストールすることで遠隔管理できます。また画面共有も使えます。のでMacから管理する限りは結構便利。ただ読み込み待ちが少し短縮されるといいなーという感じ。SSHを有効にすればコマンドラインであれこれもできますが、サービス再起動等のコマンドはLinuxと違うのでまだよくわからず。今のところemacsで設定ファイル書き換えたりする用。

■DHCP

特に難しいことはなかったですが、MACアドレスによる静的割り振りの設定にインポート機能がなかったので、従来のdhcpd.confから設定を書き写すのが手間でした。

■DNS

CentOSではdjbdnsをソースからコンパイルして入れてたので、Lion ServerのBIND9は結構面食らいました。外向け、内向けどちらかの設定のみならGUI(=「サーバー管理」アプリ)で全て設定完結できるんですが、1台で両方するにはCUIでnamed.confを編集してviewという記述を用いる必要があるようです。内向けは必要ないっちゃないんですが、技術的な興味で立ててみることにした感じです。

普通に外向けDNSサーバーを構築するだけなら結構簡単です。逆引きのレコードは勝手に作ってくれるし。ただ設定してて突然(GUI上から)設定内容が消える現象が発生。1つずつ検証していったところ、do-gugan.comのようにホスト名なしのCNAMEレコードを設定するとアウト(GUIがnamed.confを解釈しきれなくなる?)で全て真っ新になるようでした。AレコードにしたらOKっぽい。そんなことを繰り返してるうちに動作が微妙に。現時点でGUI上にログが表示されなくなってしまいました。また時々ゾーン転送を許可するチェックボックスが勝手に外れてしまうことがあります。などなどどうにも不安定でなるべく触らずにそっとしておきたい部分になってます。

DNS部分だけ設定をリセットして最初からやり直したいのですが、ググってもその方法が見つからないんですよねー。

■メール

内部的にはpostfix + dovecotで構成されていて、今までのCentOS環境と同じでした。ただし細かいところで違いも。

  • メール保存方式がmboxではなくMaildir
  • ユーザ設定はOpenDirectoryで行われ、「ワークグループマネージャ」というアプリを使用
  • サーバー振り分けはprocmailではなくSieveという実装を使用
  • エイリアスはpostfixレベルでaliasesに書く方法と、ワークグループマネージャを使う方法の2つ

あたり。mbox->Maildir変換はLinux側で行いLion Serverにフォルダーコピーすればなんとかなりそう。ユーザ管理は慣れてしまえばまぁむしろ楽です。サーバー振り分けはユーザ単位の設定であればWebメールでログインしてブラウザ上でルール設定ができるのでこれもわかってしまえば便利ですね。エイリアスが2種類あるのは一長一短みたいで後者は設定が楽だけどSieveルールが適用されないという弱点があるとのこと。postfixに慣れてるなら前者でやった方がいいかもです。あと仮想ドメインはGUIで設定できました。まだ本番運用してないのでちゃんと動くか未確認ですが。迷惑メールやウィルスチェックも統合されているのでGUIで簡単に管理できますが、細かい例外ルールとかは先々CUIを使うことになるかもって印象。

■ソフトウェア・アップデート

Appleのソフトウェア・アップデートをLion Serverがプロキシ&キャッシュサーバーになって経由させることができます。複数台Macがある場合には有効ですね。ウチは(サーバー自身を除くと)2台だけなので微妙ですが、技術的関心で設定。とりあえずクライアントMac上でのアップデートの確認が一瞬で終わるのが幸せ。

■TimeMachineサーバー

AirMac Extremeに外付けしたUSB HDDをTimeMachine領域にしていたのですが、使用中エラーになってAMEを再起動しないと復旧しなくなるという現象が頻繁に起きるのでこの機会にこれもLion Server担当に振り替えてみました。比較的遅くてあまり使い道がない内蔵500GBを指定。最初設定してもクライアントから見えなくて悩みましたが、サーバーを再起動したら解決。使用中エラーなどが改善するかどうかはしばらく見守ってみないとです。

 

とまぁあれこれ便利ではあるし、OSX Serverでしかできないこともあるんですが、1万円台で買える安鯖にLinux入れて出来てた事を、なんだかんだで10万近くかけて移行するのは(個人用としては)完全に自己満足の世界ですねぇ。ゼロから新規で立ち上げようという人にはリーズナブルだとは思います。

自宅サーバー用にMac mini Serverを導入

現在のdo-gugan.comサーバーは4,5年前に購入した激安サーバーhp ML115をCPU換装、HDD増設しつつ使っています。最初についてた160GBのHDD(OSが入ってるパーティション)がそろそろ心配になってくる頃です。HDDも合計4台となり消費電力、発熱、騒音面でもイケてない状態。LVMなので古いドライブから新しい大容量ドライブにパーティションを移動していけばいいんですが、仮想環境とあいまってややこしい状態になってて恐くて手を出せない(^^;)。また先日でたCentOS6は結構あれこれ変わっていて今までのようなアップグレードインストールは難しいっぽい。

ならいっそ、ということでLion入りのMac mini Server (MC936J/A)を購入しました。省電力、静音、省スペースと三拍子揃ったハード。光学ドライブがなく密閉度が高いのも好感度高いです。吊しの4GBメモリ、500GB HDDx2台モデルを購入し、メモリを8GBに増設(置換)、HDDの1台をSSD(Crucial m4 128GB)に換装しました。本体はLABIで3,000円引き、13%ポイント、メモリも爆安とはいえ、トータルで10万超え。ベース価格がアフォみたいに安かったML115(Lights-Out入れて5万弱だったような?)に比べると割高感がありますが、上記三拍子や我が家ですっかりメインになったMacとの相性や連携機能を考えればアリかなと。

内蔵ストレージは2.5inchなので弱いですが、FireWire800、Thunderbolt等インターフェイスは充実してますし、近々iSCSI対応のNASが手に入りそうなのでそれと連携してもいいかなとか。

ML115が一昨年くらいから夏に不調を来すようになってて、今年も予防策として扇風機の風あてっぱなしで運用してるくらいなので、とっとと移行したいと思っています。

予定では、メール、Webといった基本サービスはOSX Server、Linuxでないと動かせそうにないサービスはVMWare上のCentOSで。あとWHS2011も一緒に購入して来たのでこちらも移行するつもりです。

■ハード面

光学ドライブスロットがないのでとてもスッキリしていて良いです。デスクトップ用としてはポートやスイッチ類が全て背面にあるのはユーザビリティ的に不利ですが、サーバー用であれば無問題。

片方SSDにしたせいもあるんでしょうが、セットアップ作業厨、アイドリング状態では耳を近づけてもほぼ無音。ぴったり耳をつけるとモーター音がかすかにしてるかな、って位。2chで天板の熱が指摘されてましたがいまんとこ気になりません。エンコードやトランスコードをしない限りまったく心配はなさそうです(ちなみに天板よりにHDD、その下にSSDという配置)。

Thunderbolt I/FのついたRAID箱の登場が待たれます。

■換装作業

購入後一度も電源を入れずに換装作業実施w。換装作業はこちらのブログを参考にさせていただきました。工具としてトルクスドライバーのT6とT8が必要。またm4が厚み的に微妙に入らないのでケースの片側を外すのにプラスドライバーを使いました。試してないですが、ケースが干渉するのは入れる時だけなのでもう少し深くまで分解して入れるのであればそのままでも入るんじゃないかって印象でした。まぁSSDだし据え置き機なんであまり気にせず、元のHDDについてた絶縁シートだけ基板剥き出しの側に貼っておきました。

ちなみに2台のHDDは縦に積まれるように入っており、底面側からアプローチする形なのですが最初に見える下側のドライブにOSが入っていて、SSD換装には便利な作りになっていました。もう1台も換装する場合はさらにバラす必要があるっぽいです。あと元から1台しか入ってないモデルだとスペースはあるもののケーブルが内蔵されていないので現状追加は難しいようです。

難易度としてはMBPよりは面倒だけどメチャクチャ難しいという点はないです。普通の自作erならできるでしょう。唯一気をつけるべきなのは上記ブログにもあるように金属メッシュパネルを取り外す時。円形の窓の奥の方に若干刺さっているので、それを引き出してから持ち上げないと簡単にひん曲がってしまいます。

いまんとこ6Gbpsでリンクしてるようです。

■インターネット経由リカバリ

OSと共にリカバリ領域の入った下側のドライブを換装してしまってもLion世代のマシンはインターネットからリカバリできます。スゴい時代になったものです。電源投入時にCommand + Rを押すとリカバリーモードに入るとのことですが2点ハマりました。

1つはたまたま使ったUSBキーボードにCommandキーに相当するWinキーがついてなかった(^^;)。サーバー用ということで純正キーボードを用意せずに一時的にそこら辺に余ってるキーボードで済ますケースも多いと思いますが地味にハマります。またBluetoothキーボードはリカバリーモード前には上手くペアリングできませんでした。

あと「Command + Rを押しながら電源ON」とあちこちに書かれてますが、本当にCommand + R押さえてから電源入れるとうまくリカバリーモードになってくれませんでした(?マーク入りのフォルダアイコンが点滅する状態に)。先に電源を押して「ジャーン」が鳴った直後くらいに押したら行けました。

ちなみに電源ボタンは正面から見て右側背面にあります。

リカバリーツールのDLが3分程度。SSDにパーティションがないとリカバリーしようとしても指定できないので先にディスクユーティリティを選んで領域確保するのもポイントです。ディスクイメージのダウンロードは予測で3時間弱と出たので放置してテレビ見てたんですが実際には1時間かからないで完了しました。勝手に再起動してインストール。こちらも最初19分と出ますが実際にはもっと短い時間で完了。こっちはSSDのお陰もあるでしょう。

純正SSDではないので当然Trimは「いいえ」。Trim Enablerで強制オンにしてみました。いっそ問題が出るなら早め(移行作業中)に出てくれってことで。

 

そんなこんなで2時間弱くらいで初期設定が完了しました。これからサーバー設定を少しずつ進めてい
きます。

Softbnak ULTRA-SPEED対応ルーター 007Zを導入

昨日から始まったSoftbankの下り42Mbpsデータ通信サービスULTRA-SPEED対応モバイルルーター007Zを買って来ました。

発表時はあまり興味なかったんですが、直前の記事を改めて読んでいて、最近の自分の使い方ならさして帯域制限の影響を受けないしお得なんじゃないかという気がしてきました。また現在主に使っているWiMAXが、

  • DIS Mobile WiMAXのアカデミックプランが使えなくなった
  • 圧倒的に使用頻度が高い港北みなも(横浜市都筑区)店内の電波は弱いまま
  • WM3500Rの安定性がイマイチ

という状況で少し魅力が薄れてきたのも理由です。
AirVideoとかで自宅サーバーの動画をストリーミングで再生!とかやってた頃は帯域制限無しで高速、というのは代えがたい魅力だったんですが、最近めっきりやらなくなりました。だいたい週1,2回、1〜3時間程度のカフェ使用でWebやTwitterがイライラせずに使えればいい、というのが最近の要求仕様です。さすがにB-MOBILEの低速プランは使う気にならないけど、まぁ下りで数Mbps安定して出ればいいや、という感じ。あとはpingレイテンシが低いといいですね。

■ULTRA-SPEEDプラン

詳細は公式サイトを見ていただくとして、ごく簡単にまとめると、

  • Softbank網のメインエリアとE-MOBILE網のサブエリアが1台で使い分けられる
  • それぞれの下り42M(理論値)通信方式に対応している
  • SB、EMそれぞれ帯域制限がある(後述)
  • 定額プランだと月3,880円とWiMAXと同額
  • 更に月月割1,400円が24回
  • 海外でも使えるけどローミング代は高め
  • 2年単位の更新で途中解約は1万円程度の解約料

という感じです。本体が33,600円なので月月割で相殺して実質無料になりますが、σ(^^)は一括で購入しました。月々の体感料金は2,480円となります。でヨドバシでポイントがつく分、一括の方が一ヶ月分程お得かと。

問題の帯域制限ですが、GIGAZINEの記事によれば、

・ソフトバンクモバイルのネットワーク

前々月の月間パケット通信量が3000万パケット(約3.66GB)を越えた場合、当月1ヶ月通信速度を制限する場合がある

・イー・モバイルのネットワーク
24時間ごとのパケット通信量が300万パケット(約366MB)を超えた場合、当日の21時~翌日2時に通信速度制御を実施

となっています。自宅で固定回線代わりに使うわけではないので、σ(^^)の場合はまずひっかかることはないでしょう。>3.66GB
イーモバイルの場合、ちょっとWebみてれば行きそうではありますが、まさに制限時間対の21〜2時頃に使う場合が多いσ(^^)の場合どうなるんでしょう?翌日に制限?だとすると二日連チャンで使うことはあまりないので、これまた問題ないということになります。

■007Z

Pocket Wi-Fi D25HWよりも軽いですが厚みは若干増した、という感じ。WM3500Rと比べるとかなりコンパクトです。通信中は結構熱を持ちます。最大の弱点はバッテリーの使用時間が4時間という点でしょうけど、これはD25HW同様追々予備バッテリーが買えるようになることを期待。
充電端子はmicroUSBです。PCからの充電や通信中の充電ができるか、などは未検証。おいおいネットで報告が出てくるの待ち。

ざっと触った感じ、メインエリアとサブエリアの切換はブラウザから設定画面にアクセスしないとできないみたいです。本体操作でできてほしいですね。

■ベンチマーク!

routers

行き付けの港北みなも内マクドナルドで比較ベンチマークをしてみました。土曜日の夜9時台のデータです。

・店内無線LAN(BB mobilepoint)

mobilepoint

前はもっと出てたんですが最近こんな感じ。なぜか上りの方が速い。pingはサスガ。いずれにせよブツブツ切れる(認証画面が何度も出る)ので実用になりません。

・店内無線LAN(mopera-U/M-ZONE)

mopera-U

同施設内のスタバで使えるmopera-U。爆速ですが、こちらもたまに認証が切れて再接続操作が発生するんですよね。というかこのベンチ取るだけでも途中でパケ詰まりして4回ほど再接続が必要でした(^^;)。MacBook Air側の問題の可能性も高いですが。

・WM3500R (WiMAX)

wimax

この店内では電波1本ギリギリの環境なのでそれを差し引いて見ておいて下さい。屋外ではもう少し出ます。

・PWR-100F (EMチャージ)

emobile

一時期横浜では1Mbpsも出なくなったんですが少し増強されたか、たまたま休日だったからなのか。

 

さぁ、そして本命の登場!

・007Z (メインエリア=Softbank)

・007Z(サブエリア=E-mobile)

ultra-sub

どちらも7.2Mbps超えてないので42Mbpsエリアなのかどうか微妙。PWR-100Fより出てるのでサブエリアはG4対応エリアなんですかね?まぁいずれにせよ個人的には常にこれくら出てれば充分ですね。pingもイイカンジ。サブの方が若干速いのは気になるけど、トータルバランスと帯域制限のひっかからなそうさで当面はメイン使用メインで大丈夫そうです。

また本当に42Mbpsエリアかもあやしいので、別の場所でも試してみようと思います。

やはり速度でいえば公衆無線LAN接続には負けますが、どうもσ(^^)の使う店舗では不安定でイライラが募るので、Webが実用的に見られるならモバイルルーター常用でいいかって気分です。たまたまルーターを持ってない時とかのために契約は残しておくか悩ましいですが。

UIWebViewをコードでズームする方法の覚え書き

iOSプログラミングの話です。

アプリ内にWebブラウザコンポーネントであるUIWebViewを埋め込んで簡易的にWebページを扱えるようにする必要があったんですが、その表示倍率を直接制御するメソッドやプロパティがありませんでした。海外の掲示板も含めて結構質問は出てたんですが、有用な回答は得られず。

まず散見されたのはUIScrollViewの上にUIWebViewを置いて、UIScrollView側でピンチやスクロールを制御すればいいんじゃね?というアイデア。実際にやってみたんですが、以下の問題点がありました。

  • UIIWebViewの標準操作であるダブルタップでブロック最適化ズーム(?)動作が使えなくなる
  • ズームの品質が低い(文字がボケる)

そして何より、よくよくAPIガイドを読んだら「UIWebViewとUITableViewをUIScrollViewの上に置くのは予期せぬ動作を引き起こす可能性があるので推奨しない」と書いてあった。禁止ではないのでAppStoreの審査でリジェクトされるといほどではないかも知れないけれど、将来的なAPIの仕様変更でおかしなことにならないとも限らない。

で、悩んだ末に辿り着いた答えは、stringByEvaluatingJavaScriptFromStringメソッドを使ってWebコンテンツを書き換える方法。

まず単純な例。

[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat: @"window.scrollTo(0, 100);"]];

これを実行すると、Webコンテンツ上で「window.scrollTo(0,100);」というJavaScriptを実行したことになります。つまり画面が下に100ピクセル分スクロールします。

これを応用して、iOSのブラウザに対するズーム定義をmetaタグで追加してやる、ということをしてやるワケです。metaタグの仕様についてはAppleのドキュメントを参照するか、「meta viewport」などでググって下さい。

今回の閲覧対象ページはこのmetaタグ自体が存在しなかったので、タグ自体を作成してheadタグの中、titleタグの前に挿入しています。

[webView stringByEvaluatingJavaScriptFromString:@"var bodyNode = document.getElementsByTagName(‘head’).item(0);"  
"var titleNode = document.getElementsByTagName(‘title’).item(0);"
"var newNode = document.createElement(‘meta’);"
"newNode.name = ‘viewport’;"
"newNode.content = ‘width = 1024, initial-scale = 1.2, minimum-scale = 0.3, maximum-scale = 1.2’;"
"bodyNode.insertBefore(newNode, titleNode);"];

@””の文字オブジェクトは;で切らない限り改行入れて列挙できるので、見やすさの為にそうしています。

1行目でbodyNodeという変数にheadタグの位置を取得。

2行目でtitleNodeという変数にtitleタグの位置を取得。

3行目でnewNodeという変数にmetaタグを作成。

4行目でそれに「name=’Viewport’」に相当する記述を追加。

5行目に更に「content = ‘width = 1024, initial-scale = 1.2, minimum-scale = 0.3, maximum-scale = 1.2’;" 」を追加。数値は適宜状況にあわせて調整を。ちなみに=の前後にスペースがないとダメとどっかで読んだのでそうしてます。

6行目で、bodyNode(=headタグ)内のtitleNode(=titleタグ)の直前にnewNode(=metaタグ)を挿入して完成です。

 

最初から「<meta name=’viewport’…>」が書かれているページに対してはcontentだけを書き換えるような処理をしないといけないので、汎用的なWebブラウザとして使うなら分岐処理も入ったもう少し複雑なJavaScriptが必要でしょうが、今回は対象サイトが固定のアプリなのでこれだけで済みました。

参考になれば幸いです。