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

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

2014/10

IDCF(IDC Frontier) が提供するクラウド環境である IDCF クラウドがリニューアルしたようです。


この IDCF クラウドの特徴はこちらの図にもあるのですが、グローバルIPアドレスはファイアウォールに振られ、そのファイアウォールからフォーワードされる VLAN 内のプライベートIPアドレスのマシンをインスタンスとして使う、ということです。この構成自体にはいい面も悪い面もあると思いますが、このファイアウォール部分やロードバランサー部分は無料で提供されています。物理サーバーや ioMemory を使った高速ディスクアクセスも備えているのも特徴といえます。

最小構成の場合、ルートディスク15GBに CentOS を入れた、0.8GHz の vCPUx1、メモリ1GBの light.S1 モデルになります(スワップメモリはありません、要注意)。この構成で一ヶ月使うとディスクに300円、VMに200円の計500円/月 で利用できます。

自分自身、個人で ServerMan@VPS のホスティングサーバーを使っていて、ここもエントリー構成だと月額500円で1台借りることができます。おそらく国内最安値であろうここの価格帯に合わせてくるとは・・・驚きました。ちなみにこの500円の構成で比較すると、IDCF のサーバーとも共通なのはメモリ1GBということで、ハードディスクは IDCF の 15GB に対して、ServerMan@VPS では 50GB 提供されます。スワップメモリは IDCF では用意されていませんが、ServerMan@VPS では 1GB ぶん用意されています。ただネットワークの速度は公開されていない ServerMan@VPS と比較して格段の違いが感じられます。比較検討する場合はこのあたりをどう捉えるか、ということになると思います。


実際に最小構成で申し込んで使ってみましたが、なんといってもネットワークの速度に驚きました。各VMに割り当てられたネットワークはなんと 2Gbps だそうで。CentOS で最初に "yum update" した時の速さはとても格安サーバーとは思えないレベルでした。ネットワークが速いとサーバーマシン自体の体感パフォーマンスが飛躍的に上がります。しかもこれに無料のロードバランサーまで付いてくれるのか・・という印象。

これだけでもかなり挑戦的な価格帯という印象がありますが、更に今ならキャンペーンで1万円分のクーポンが着いてきます(11月14日まで)。「月500円ということは20ヶ月分!?」というわけにはさすがにいきません。クーポンの期限は6ヶ月間なので、最初の6ヶ月で1万円以下なら実質無料、ということになります(ネットワークIOが無料枠を超えなければ、500円のサーバーを3台立てて6ヶ月使える、という計算になりますよね・・)。

タダが大好物なので(笑)、早速申し込んでサーバーを使ってみました。 アカウントを作成してログインし、仮想マシンを作成します:
2014101701

まず仮想マシンのスペックを選びます。ここでは最小構成の light.S1 (月額200円)を選んでいます:
2014101702


次に OS 。CentOS か Ubuntu であれば追加料金はかかりません。僕は当然の CentOS で:
2014101703


そしてディスクボリューム。最初からルートディスクとして 15GB の仮想ディスクが付与されています(減らせません)。このルートディスクで月額300円かかります(15GBで一日10円)。データ用にディスクを追加する場合は 1GB 単位で 1TB まで、同条件で(例えば15GB追加するなら月300円で)追加可能です。また SSH でアクセスするための鍵ファイルもここで指定します。鍵ファイルは既にあるものをアップロードするか、ここで新規に作成します:
2014101704


僕は今回 SSH 鍵を作成しました。その場合は作成した鍵の内容が表示されるので、その全てをコピペしてテキストファイルを作成しておきます。このファイルは後に SSH 接続する際に指定することになります。

次にマシンの台数と、管理用の名前、そしてグループ名を指定します。今回の例では課金対象はディスク(300円/月)とVM(200円/月)で、1台なので計500円/月ということになります。最後に確認画面ボタンをクリックして、内容を確認して申し込みます:
2014101705


しばらく待つとコンソールに作成したサーバーが現れます。起動(Running)状態になるまで少し待ちます:
2014101706


同時に登録アカウントにメールが届きます。この本文の中に作成したサーバーの root パスワードが含まれているのでメモしておきます:
2014101707


上記で説明したように、サーバーVMの作成時点ではサーバーはプライベート IP アドレスしか持っていません。なので SSH などではアクセスできません。この段階でサーバーのコンソールに入るには、同画面内の「コンソール」と書かれた箇所をクリックして、Java アプレット(?)なコンソールアプリケーションを通じてログインする必要があります:
2014101708


サーバーが起動したことが確認できたら、このサーバーにグローバル IP アドレスを割り当てて(正確にはグローバル IP を持ったファイアウォールからポートフォワードさせて)みましょう。管理コンソール左ペインの「IPアドレス」をクリックすると、現在保有しているグローバル IP アドレスが表示されます。サーバー作成直後の時点ではこのアドレスは今作成したサーバーには向けられていないので、実際には何もできません。そこで作成したサーバーに向け直す手順を紹介します。IPアドレス名(図では network1)と書かれた箇所をクリックして設定変更画面に移動します:
2014101709

まずはファイアウォールの設定をします。外部からのアクセスを受け付けるポート番号だけをここで指定して、プラスボタンで追加していきます。以下は一例ですが、SSH(22番ポート)は追加しましょう。HTTP サーバーにするなら 80 とか、MySQL サーバーを外部に公開するなら 3306 とか、必要なポートを全て開けておきます:
2014101710

次にポートフォワードの指定です。基本的にはファイアウォールで開けたのと同じポートを指定して、先程作成した仮想マシンの同じポートに向けます。
2014101711

例えばファイアウォールで 22 番ポートを開けておくことで SSH アクセスが可能になり、ポートフォワードで 22 番ポートを指定することで指定したサーバーに SSH リクエストが転送される、という動きになります(その結果、作成したサーバーに SSH アクセスができるようになります)。

必要であれば更にロードバランサーの設定も行います。受け付けるポート番号と、転送先のポート番号、そして転送先になる仮想マシンを必要なだけ指定します:
2014101712


このファイアウォールとポートフォワードで 22 番ポートの設定が完了できていれば、SSH 鍵ファイルを持った外部からの SSH 接続が可能になります。Windows であれば TeraTerm などから SSH2 でこのグローバル IP アドレスに対して接続します。ユーザー名は root で、パスワードはメールで送られてきたものを、鍵ファイルに作成時に指定した内容を指定するとログインできます。この辺りは Amazon EC2 とかと同じですね:
2014101713


というわけで(無料期間の)6ヶ月ほど使わせていただく予定です。
ネットワークが速くて快適なので、サーバーのはずがつい X Window や Desktop まで入れて、VNC 環境を揃え、日本語フォントも入れ、LibreOffice やら IBM Notes やら・・・とすっかりリモートデスクトップとして使わせていただいてます:
2014101714





 

PHP で MongoDB を使っていると、「その中身を簡単に確認したい!」と思うことがままあります。

MySQL であれば phpMyAdmin など、有名なツールがいくつかありますが、MongoDB の場合は数が限られてい(るように思い)ます。

そんな中で自分が使っているのが phpMoAdmin です。phpMyAdmin と名前が似ていますが、おそらく意識しているのでしょう。

phpMoAdmin はダウンロード&展開するとわかりますが、 moadmin.php という1つの .php ファイルから作られている MongoDB 管理用GUIツールです。ファイル1つなので、このファイルをドキュメントルート以下におくだけで設置完了です。

なお、接続先の MongoDB サーバーの情報もこのファイルの中に直書きします(何も指定しないとローカルホスト状の MongoDB を参照しに行きます)。
例えば MongoDB サーバーがリモートの mongo.test.com というサーバーで、デフォルトの 27017 番ポートで稼働している場合、この moadmin.php ファイルをエディタで開いて 'MONGO_CONNECTION' の値として以下のように記述して保存します:
  define( 'MONGO_CONNECTION', 'mongodb://mongo.test.com:27017' );

これでウェブブラウザからこの moadmin.php を開けば、目的の MongoDB サーバーにアクセスして、コレクションやレコードの状態を参照することができるようになります。


ところで、MongoDB を使っていると大量のデータを扱うことが少なくありません(そのための No-SQL だと思っています)。コレクション(RDB でいう所のテーブル)を指定して、そのレコードの一覧を参照することは簡単ですが、特定の条件を満たすレコードだけを取り出して見ることはできないでしょうか? それが今から紹介するクエリー(Query)機能です。

クエリーを実行するには、コレクションのレコード一覧の画面から "[query]" と書かれた箇所をクリックします:
2014101601

するとクエリーを指定するフィールドが開きます。ここに目的のレコードに絞り込むクエリーを記述して "Query" をクリックすることでレコードを選別することができます。
2014101602


さて、意外と戸惑ったのが、このクエリーの指定方法です。例えば「item_id の値が'14'のレコード」を探したい場合、どのように指定すればいいのでしょうか?意外と資料や情報が少なくて難儀しました。

結論としては CakePHP の find の中で指定するような感覚で、以下のように記載します:
 array('item_id'=>'14')
2014101603

無事見つかりました。同様にして「item_id が '14' で、category_id が '10' のレコード」であればこんな感じになります:
 array('item_id'=>'14','category_id'=>'10')


注意が必要な点として、どうやらこのクエリーで数値を指定する場合、そのデータが数値文字列なのか、数値なのかを意識して指定する必要がありそう、ということです。例えば先程の例を
 array('item_id'=>14)
のように 14 を数値文字列ではなく数値として指定した場合、レコードは見つかりませんでした。
2014101604


要するにデータがどのような型で格納されているのかをちゃんと意識して指定する必要があるのだと思います。

このあたりを気をつけていれば軽量で使える便利なツールといえそうです。


 

WordCamp Tokyo 2014 という、WordPress のイベントに参加して、そこで Sova WP という WordPress 専用のクラウドホスティングサービスがあることを知りました:


Sova は シンガポールに拠点を置くクラウドホスティングの企業で、WordPress 専用のホスティングサービスを行っています。月30万PVを目安とするスモールサーバー(月1980円/年19800円)と、月300万PVを目安とするミディアムサーバー(月9800円/年98000円)の2種類のサーバー構成から選べます。また「ブースト機能」といって、別料金で一時的サーバースペックを上げることもできるようです。1週間の無料試用も用意されています。

当初はこの2種類のサーバー構成だったのですが、最近になって月1万PVを目安としてフリーサーバー(無料)が追加されました。フリーサーバーはその場で利用申し込みが完了するわけではなく、「順番待ちの列に並ぶ」ようなイメージで申し込みを行い、自分の番まで処理が進んだ段階から使えるようになる、というサービスです。

WordPress 使いとして恥ずかしながら、この Sova WP というサービスを知りませんでした。会場で存在を知り、その場で申し込み、先日やっと使えるようになったので早速使ってみました。


フリーサーバーでは SFTP によるファイルの転送がサポートされています。また希望すれば phpMyAdmin も用意していただけます。SSH は使えません。基本的に1DBしか使えませんが、phpMyAdmin でテーブルをごっそり削除すればリセットしたことになり、新しく WordPress を立ち上げることはできます。また独自ドメイン利用での運用も考慮されており、そのための設定情報も用意されています。なおプラグインの利用に制限はありません。

申し込みが完了して、実際に利用できる段階になると専用の管理ページへのアクセスができるようになります。このページからサーバーの状況を確認したり、再起動したり、プランを変更したり、といった管理操作が可能になります:
2014101401


私自身は WordPress のプラグイン開発者ではないのですが、 WordPress と連動して使う PHP アプリを過去に作ったことがあります。そのアプリはこの環境でも使えるかな、と思い、ファイルを SFTP で転送して試してみた所、普通に使えました!変な制約がかかっていることもなく、かなり自由に使えます。

ちなみにその作業を通じて分かったのですが、WordPress のドキュメントルートは /var/www/html で、データベースサーバーは MariaDB でした。この辺りも含めて、ごくごく一般的な環境だと思います。なお SFTP を実行する場合、/var/www/html 以下のみにアクセスすることが可能です。

私は、この自分で作成した PHP アプリケーションのデモ目的で WordPress 環境を使う機会がそれなりにあります。これまではそのためだけに Amazon EC2 などに WordPress 用サーバーを用意したりしていたのですが、その環境についてはもうこちらに乗り換えられる、という印象を持っています。 


無料で使う場合は月1万PV(1日300PV程度)を想定したサーバーになるので、ヘビーな使い方はできないと思います。とはいえ、当初は無料で使い、ある程度のアクセスが見込める段階からスタンダードへ移行することも簡単にできる(と会場で聞いた(苦笑))し、一時的なスケールアップもブースト機能によって確保できる、とのことです。WordPress に特化している、というシンプルな構成だからこそ、こういった特殊なサポートも可能になるんでしょうかね。いずれにせよ、便利なサービスを発見してしまいました。
 

統合開発環境である eclipse に、リレーショナルデータベースのデータビューワである DBViewer プラグインを導入することで、開発中のアプリケーションのデータを開発環境からも比較的簡単に参照することができるようになります。

このプラグインを導入する前提として、まず Eclipse Marketplace プラグインが必要です。メニューから Help - Eclipse Marketplace が選択できるようになっていれば導入済みなので次のステップへ。
2014100301


もし Help メニューに Eclipse Marketplace が存在しない場合は最初に同プラグインを導入する必要があります。 その場合はメニューから Help - Install New Software を選びます。ダイアログではまず Work with 欄で使っている eclipse SDK のバージョン(junoとか)を選び、その下では General Purpose Tools - Marketplace Client にチェックを入れて Next > Next > 利用規格に同意 > Install です。 しばらく待つとインストールが完了し、eclipse を再起動すると Eclipse Marketplace がメニューから選択できるようになっているはずです。
2014100302


改めて eclipse のメニューから Help - Eclipse Marketplace を選択し、Search タブの Find 欄に "DBViewer" と入力して "Go" をクリックします。DBViewer プラグインが見つかるので、Install > Next > 利用規格 > Finish でインストールします。しばらく待つとインストールが完了し、eclipse を再起動すると DBViewer プラグインの導入が完了します。
2014100303


実際に DBViewer を使ってデータを参照するには、参照先データベースに対応した JDBC ドライバが必要になります。例えば接続先データベースが MySQL であれば、以下のサイトから JDBC Connector をダウンロードして JAR ファイルを展開しておきます:
MySQL : Download Connector/J

他の(Oracle や DB2, PostgreSQL などの)データベースを利用する場合も、それぞれ対応した JDBC ドライバが必要です。これらをあらかじめ用意しておきます。


これで DBViewer を利用してデータベースを参照するための準備が整いました。では実際に DBViewer でデータベースサーバーに接続して、eclipse 環境からデータの中身を参照してみます。

eclipse のメニューから Windows - Open Perspective - Other を選択し、一覧から "DBViewer" を選択して OK をクリックします。
2014100304


すると eclipse 全体が DBViewer パースペクティブに切り替わります。この段階ではまだ何の接続先定義もしていないので何も表示されていません。
2014100305


では接続先データベーステーブルを追加してみます。DBViewer パースペクティブの左上ペインの登録ボタン(上記図の赤枠部分)をクリックして「データベース定義」ダイアログを表示します。
2014100306


「データベース定義名」欄にはデータベース参照先を表す適当な名称を入力します。また「JDBC Driver」欄には接続先の JDBC ドライバを指定する必要があります。「ファイルの追加」ボタンをクリックして、先程用意した JDBC Driver の JAR ファイルを指定して Next ボタンをクリックします。なおここで指定した JDBC Driver は、この後で同じ種類のデータベースを追加する時には「登録済み Driver から選択する」をクリックするだけで指定できるようになります。
2014100307


こんな感じのダイアログが表示されたら OK をクリックします。
2014100308


次の画面で具体的な接続情報を指定します。この例では MySQL データベースに接続するので、そのような内容担っていますが、ここは実際のドライバに合わせた指定をしてください。この例では接続文字列として jdbc:mysql://(MySQL サーバー名):3306/(データベース名) を入力して、接続ユーザー名とパスワードを指定しています。念のため「テスト接続」ボタンをクリックして、実際にこの内容で接続できることを確認し、Finish ボタンをクリックします。
2014100309


今作成した内容が DB ツリービューに追加されるはずです。この DB 名部分をダブルクリックすると接続します。
2014100310


正しく接続できるとデータベース一覧、テーブル/ビュー一覧が階層的に表示され、テーブル名をダブルクリックすると、その中身が画面右側に一覧表示されます。
2014100311


接続状態を終了(切断)するにはデータベース定義名部分を右クリックして「切断」を選択します。
2014100312






 

CentOS に限りませんが、本当にまだあまり IT スキルの高くないユーザーが Linux/UNIX の勉強を始めようとすると、最初につまづくものの1つが「テキストエディタ」だと思っています。

Windows であれば「メモ帳」、Mac OS X なら「SimpleText」など、ちょっとしたメモを残す程度の用途で使う簡易テキストエディタが標準で用意されていますが、UNIX の場合、この標準エディタに相当するのが "vi" です。

vi は「慣れてしまえば」片手をホームポジションに置いたまま "J" キーと "K" キーで上下スクロールできるし、単語まとめて置換とか、正規表現で検索したりとか、カスタマイズで柔軟に設定できるとか、便利なエディタだと思うのですが、いかんせん「編集モード」と「閲覧モード」の切り替えという、他のエディタにない特徴(というか「クセ」)があるので、Linux 初心者がつまづきやすいと感じています。

Linux でも GUI 環境であれば GNOME の標準エディタである gEdit など、メモ帳に相当するエディタがないわけではありません。ただ一般的なクラウドで Linux を選択した時など、初めから GUI が提供されていることは滅多にないし、サーバー用途だったりすると GUI 導入そのものが認められないことも考えられるので、結局はテキストベース環境でも Linux を操作できるスキルが必要になります。


というわけで、「UNIX の CUI 環境でもメモ帳感覚で使える軽量テキストエディタ」を探してみました。そして現時点では今回紹介する ee(EasyEditor) が有力候補かな、と感じています。
2014100201

ee はテキストターミナル画面内で起動することができ、また画面内上部には最低限必要な操作メニューが常時表示されています。例えば「メニューを開く」は Ctrl + [ で、検索は Ctrl + e で、終了は ESC > Enter で、ファイル保存は Ctrl + [ > c > c で、といった具合です。一応、これだけ覚えておけば設定ファイルの編集くらいはできるかな、と。

この ee は yum では提供されていないようなので、インストール時はソースファイルをビルドする必要があります。ネットワークに接続された状態から以下を実行します:
# cd /usr/local/src
# wget ftp://ftp.uwsg.indiana.edu/linux/gentoo/distfiles/ee-1.5.2.src.tgz
# tar xzvf ee-1.5.2.src.tgz
# cd easyedit-1.5.2
# make
# make install

で、以下のコマンドで ee が導入できているかどうかを確認できます:
# which ee
/usr/local/bin/ee ←こう表示されれば成功

これでコマンドラインから ee コマンドが使えます。パラメータなしで "ee" とだけ実行すれば新規ファイルを、ファイル名を指定して実行すればそのファイルを読み込んで(なければそのファイルを新規作成して)開きます。
# ee /etc/hosts (/etc/hosts を ee で開く場合のコマンド)


・・・んー、でも vi 使えない人だと、そもそもビルドするまでの手順が結構厳しかったりするのかな?? 本当は vi を覚えるべきだと思いますが、それまでの間のつなぎとして。



 

このページのトップヘ