まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

社内で使っていた古いサイボウズ、これを「最新版にすればモバイルからも使える」と聞いて、嫌々やってみたらやっぱり大変だった、という顛末記です。最初に書いておくとサイボウズを dis るつもりはなく、どちらかと iPhone の問題というかなんというか・・・

まずは環境情報。
現在使っているのは詳しい事情がよくわからない(苦笑)クラウドサーバー上にインストールされたサイボウズ Office 6 です。

※僕の入社前の話ですが、面倒を見ていた関連会社のサポート担当者が辞めちゃったらしいです・・・ なのでサーバーアプリケーションとしてのサイボウズとしては動き続けているけど、そのサーバーへのアクセス方法とか誰もわからない(苦笑)。

こいつを捨て、新たに自社ネットワーク内に専用サーバーを1つ作ってサイボウズ Office 10 環境を構築、データも既存環境からインポート&エクスポートする、というもの。クラウド→オンプレという時代を逆行ユニークな移行事例でございます。

まあ、今の環境を継続して使う選択肢もあったんですが、「サイボウズを最新版にすればモバイルアクセスができるらしい」と誰かが聞いて、「やってみよう!」ということになった模様です。加えて「クラウドはやっぱり高い」という結論になったらしく(これは正解だと思う)、自社ネットワーク内に作った上で外部からのアクセス環境も用意しよう、ということになりました。 ただ、こういうのは言い出しっぺがやるべきだと思うんですけど・・・ (--;


ちなみにモバイルアクセスについては Office 8 以降での標準機能のようで「サイボウズ KUNAI」という無料アプリを Google Play ストアや App Store からダウンロードして対象サーバーへの接続をセットアップするだけ、とのことでした:
2014021402


移行プランはシンプルです。物理的に異なるサーバーに移行すること、移行元サーバーのOSにアクセスする術がない(苦笑)のでサイボウズのデータインポート/エクスポート機能に依存するしかないことからこんな感じ:
(1) 新サーバー構築
(2) 旧サーバーから既存データを CSV エクスポート
(3) (2) のデータを新サーバーにインポート



実環境を構築する前に一度試してみたい、というわけで6カ月間お試し版の Linux 用モジュールをダウンロードして試してみました。実はインストール作業中にもちょこちょこ Undocumented なエラーメッセージに悩まされましたが、なんとか解決。どこにも書いてないけど「Linux 版をインストールする時はあらかじめ ld-linux.so.2 ライブラリを入れておくこと」が肝っぽいです。

で、なんとかインストールができて、データのエクスポート&インポートも無事完了。PC でのログインまではできる状態になりました:
2014021401


後は iPhone に KUNAI をインストールするだけで、この環境にモバイルアクセスできる、はず、、、だったのですが、ここで全く想定外の事態が発生!

KUNAI の設定項目としてサーバーの URL とユーザー名&パスワードを指定するのですが、ユーザー名というのは上図の「名前」です。これまで PC からの利用しか想定していなかったこともあり、ログインユーザー名は「漢字の名前」をそのまま使っていました(それをセレクトボックスから選択するだけ)。 KUNAI ではこれをテキストとして入力する必要があるのですが、よく見ると僕の名前の名字と名前の間に全角スペースが使われています。

詳しい方はこの時点で「想定外の事態」の内容に気付いたかもしれませんね。。 そう、iPhone は全角スペースを入力できないのです。つまりユーザー名を指定できない! メールなどで全角スペースを含むものを送って、そこから全角スペースをコピペしてメモ帳に残しておくとか、無理やり辞書登録するとか、回避策のような方法はあるんですが、一般ユーザーへのガイドとしては無理があります。


この事態は既存データのユーザー名に全角スペースを使っていたことと、そのデータをエクスポート&インポートしてユーザー登録したことによる制限事項のような感じになってしまいました。 これが新規導入であれば「ユーザー名に全角文字を使う方も悪い」とも思いますが、これまでは特に支障なく使っていた環境でもあります。加えて、これはどちらかというと全角スペースを入力できない iPhone 側の問題と言えなくもないような・・・


いや、それにしてもまさか、こんなことで躓くとは・・・


オフィスの中で無線 LAN を使っていると、たまにこんなことに遭遇します:
無線 LAN の調子が悪い!
繋がることは繋がるけど、反応が悪いし、すぐに切れちゃう!
全く繋がらないわけではないから自分の設定ミスではない。これは無線 LAN ステーション自体が不安定なのが原因だ! 管理者でてこーい!!

で、念のため隣の同僚に「お前もそうだよな?」と確認すると・・・ あれ、なんで大丈夫なの?
無線 LAN ステーションがおかしいわけではない? 何で自分だけ・・・??
wifi


こういった現象、もちろん原因が1つに絞られるわけではないのですが、考えられる可能性の1つとして「無線 LAN の(規格の)種類」があります。同じ無線 LAN ステーションに対しても異なるモードで接続した機器は異なる挙動になる可能性がある、ということです。

まず無線 LAN の種類を説明します。現在は 802.11a / 802.11b / 802.11g / 802.11n という4つの規格が存在しています。無線 LAN ステーションと無線 LAN 子機(PC とかスマホとか)やドライバが対応している無線 LAN 規格によってどのモードで接続することになるかが決まります。

これら4つの規格の違いは何でしょうか?使っている電波周波数や最大速度の違いもありますが、使い勝手を左右する違いとして「干渉の差」と「障害物の影響度合い」があります。

4つの規格を電波周波数帯で分けると、802.11a が 5GHz、802.11b と 802.11g が 2.4GHz です(802.11n は規格としては両方に対応しています)。周波数が高いほど、電子レンジや Bluetooth といった他の電子機器が発する電波ノイズの影響を受けにくくなります。例えば Bluetooth のマウスを接続した機器が近くにあるとか、そもそも自分自身が Bluetooth マウスを使っている、といった環境だとすると、無線 LAN を 802.11a で使っているとそれらの影響はあまり受けないけど、802.11b や 802.11g だと電波干渉を受けやすい(つまり無線も繋がりにくくなるし、マウスの方にも影響がでやすい)と言えます。

一方、周波数が高いと壁などの物理的な障害物があった時に電波が弱くなってしまい、広い範囲では利用しにくくなります。その意味では 802.11a はステーションから自分までの間にある障害物の影響を受けやすいので限られた範囲での利用になってしまう一方、802.11b や 802.11g は比較的広い範囲で使える、と言えます。

なお 802.11n は、規格としては 802.11a/b/g 全てを網羅しているのですが、実際には機器によって一部機能のみ使えたり使えなかったりもします。

仮に全ての規格に対応した無線 LAN の親機/子機を持っているとして、さてどのモードで接続させるのがよいでしょうか? これは何を優先するのか、という順位によっても答が変わってきます。でも壁の少ない、狭いオフィス内で使うことを前提とするのであれば、電波干渉の受けにくい 802.11a がいいのかな、と思っています。


話を戻します。

上記で書いたような現象が起こる原因の1つとして考えられるのは以下です:
・この人は 802.11b/g で無線 LAN に接続した結果、電波干渉の影響を受けて不安定になっている
・周りの同僚は 802.11a で無線 LAN に接続した結果、電波干渉をほとんど受けずに快適に使えている

一例として、日本で発売された iPhone の各バージョンがどの無線 LAN 規格に対応しているか、を特徴と併せて表にしてみました:
規格利用周波数帯電波干渉障害物の影響最大速度iPhoneの対応バージョン
802.11a5GHz受けにくい受けやすい54Mbps5 / 5c / 5s
802.11b2.4GHz受けやすい受けにくい11Mbps3G / 3GS/ 4 / 4s / 5 / 5c / 5s
802.11g2.4GHz受けやすい受けにくい54Mbps3G / 3GS/ 4 / 4s / 5 / 5c / 5s
802.11n(規格上は 802.11a/b/g を網羅)300Mbps4 / 4s / 5 / 5c / 5s

例えばですが、上記の人は iPhone 4s を使っていて、同僚が iPhone 5 以降を使っていた場合、自分は 802.11g に接続して干渉を受け、同僚は 802.11a に接続して快適、ということが起こり得るわけです。

余談ですが 802.11n についても補足しておくと、iPhone 4/4s は規格としては 802.11n に対応しています。でも干渉を受けにくい 5GHz 帯の電波を使って接続できるかというとできません。iPhone 4/4s の無線 LAN は利用周波数帯に関しては 2.4GHz での接続しかできない、ということです。この辺りがちょっとややこしいというかわかりにくい所です。

これはもちろん iPhone だけの問題ではなく、アンドロイドスマホやノート PC でも言えることです。使っている無線 LAN がどの規格に対応しているのか、無線 LAN 親機はどのモードでの接続に対応しているのか、それらによって隣の人と比べた際の無線 LAN の挙動も変わってくる、ということが起こり得るわけです。


iPhone に限った話をすると、4s 以前のモデルは無線 LAN では干渉を受けやすい接続しかサポートされてません。ということは、例えば Bluetooth キーボードと無線 LAN を同時に使おうとすると、それだけで干渉しまくる環境ができあがってしまうわけで、まあちょっと嫌だなあ、、、と。 その意味では今 4s 以前を使っていて無線 LAN に不満がある人はこの点だけでも 5 以降に変えるメリットはあるかもしれないですねー








 

WordPress.com でも使われていて、Apache HTTPD, IIS に次ぐシェアを持つ HTTPD サーバー、それが Nginx(「エンジンエックス」)です。リバースプロキシとしての機能も併せ持ち、並行処理性能と省メモリ性能を重視して開発が続けられているオープンソースサーバーです。

この Nginx を CentOS にインストールする手順を紹介します。

インストール方法はソースからビルドする方法もありますが、簡単なのは yum リポジトリを作ってダウンロード&インストールが楽だと思います。

というわけで、まずは yum リポジトリを作成します:
# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

これで /etc/yum.repos.d/nginx.repo が作成されて準備完了。あとは yum でインストールです:
# yum install nginx

インストール自体はこれだけです(ちなみにデフォルト状態でのドキュメントルートは /usr/share/nginx/html/ です)。 この段階で一度動作確認してみます。まずはサーバーを起動:
# /etc/init.d/nginx start

そしてウェブブラウザでサーバーにアクセスします。"Welcome to nginx" と表示されれば Nginx のインストールは成功しています:
2014021301


Nginx のインストールはこれだけでもできていますが、実際には PHP などと合わせたアプリケーションサーバーとして使いたいですよね。そのための追加設定も紹介しておきます。

Nginx で PHP を使うためのインターフェースにはいくつか選択肢がありますが、今回は PHP-FPM を使う方法を紹介します。まずは yum で php-fpm をインストールします:
# yum install php-fpm

PHP-FPM はデフォルトでは Apache HTTPD 用の設定になっています。これを nginx ユーザー/ nginx グループで動作するように設定ファイルを変更します:
# vi /etc/php-fpm.d/www.conf

  :
user = nginx   # user = apache から変更
  :
group = nginx   # group = apache から変更
  :

最後に nginx の設定を変更して、ドキュメントルート上で PHP(-FPM) が動作するようにします。記述箇所はファイルの下の方にはじめから記載されているのでコメントアウトしてドキュメントルートディレクトリを指定するのが簡単だと思います:
# vi /etc/nginx/conf.d/default.conf

  :
location ~ \.php$ {
#    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
    include        fastcgi_params;
}
  :

この後に php-fpm を起動してから、nginx を再起動します:
# /etc/init.d/php-fpm start
# /etc/init.d/nginx restart

動作確認用に、ドキュメントルートに PHP 情報を出力するスクリプトファイル(phpinfo.php)を用意します:
# echo '<?php phpinfo(); ?>' > /usr/share/nginx/html/phpinfo.php

この状態でこのファイルにウェブブラウザからアクセスして、以下の様な PHP 情報が出力されれば成功です:
2014021302


これで Nginx を導入し、PHP 連携までが可能になりました!

 

このページのトップヘ