ゼロからはじめるぜ! Twilio – シーズン2 第4回

20140127-01.jpgこんにちわ。ネットワークエンジニアのまさです。
さて、今回よりメインディッシュに手をつけて参ります。前回までに、暗証番号認証(上側の青枠部分)を作ってきました。今回からいよいよい Twimllet Commander Z の核心部分を作っていきます。

 

メインメニューは、この図の左側にある一番大きな青枠の通り、プッシュ操作によって 6 通りに処理が分岐します。このうち、1・2・3 がデータベースへアクセスする必要がある処理です。

20140127-02.jpg最初にメインメニューを作ろうと思ったのですが、このデータベースの部分を先に作ってみることにします。データベースなんてもっと先の回だと思ったでしょう? 面倒なところを先にやっておけば後、気がラクになります。
それに、先に作っておかないと、各メニューが何のためにあるのか分からないという本末転倒なことになりそうなので、データベースからやりましょう!

 

最初に、Twimllet で使うデータベースのテーブルを紹介します。あくまでもこれはコンセプトのサンプルとして作ったものですので、実際に本気で尻洗浄便座を遠隔操作するシステムを作る場合には、きっちりデータベース設計をしてください。

 

20140127-03.jpgテーブル名は twimllet としました。このテーブルは以下のカラムで構成されています。

  • id : プライマリーキー。ID として通し番号を振ります。
  • sta_no : トイレ番号。音声ではトイレをこの番号で呼ぶ。
  • location : トイレの IP アドレスやポート番号。
  • stat : トイレのステータス。
  • type : トイレのメーカーやタイプを登録。
  • flag : 武装モードのフラグ。

プライマリーキーは、データベース内で各エントリーが一意に識別できるためのカラムです。連番にすることで重複がないようにします。
sta_no、location、stat、type はコンセプトサンプルといえど、それっぽく見せるために作ったカラムです。本気で遠隔操作するなら、各トイレに IP アドレスが振られているはずですし、赤外線信号は各社異なるでしょうし、誰かがトイレに腰掛けているとか、オンラインになっているか否かとかそういうステータスも必要になるはずです。

 

flag はこのサンプルの肝です。Twimllet Commander Z は、ここに armed のフラグが立っているものだけに噴水を発射するという仕様です。また、メニューからこのフラグの On / Off ができるようにします。

 

このようなテーブルをどのように作ればよいでしょうか。これは、Twilio のジャンルからは外れているので、みなさんでデータベースを各自勉強しましょう! と言い切ってしまうのもアリなんですが、「ゼロからはじめるぜ!」と言い切っている以上、せっかくですから簡単に MySQL のセットアップもお手伝いさせていただきます。

というわけで、この回は PHPのコーディングは少しお休みし、「Cent OS で MySQL をセットアップしようぜ!」講座をお送りします。Cent OS は Redhat 系の OS ですので、Redhat の方も以下、同じコマンドで読み進めていただけます。Debian 等他のディストリビューション、他の OS を使っている人は、それぞれの OS における適切なコマンドに読み替えてください。

 

MySQL パッケージの入手とインストール

root 権限になり、以下のコマンドで自動的にインストールされます。

# yum install mysql-server

依存性がある必要なパッケージも選択されるので、インストールしますか? の質問には yes で答えます。
/etc/init.d 以下に mysql という起動スクリプトも一緒に入ります。

 

次に、Perl 用のデータベースアクセスライブラリもインストールします。そのまま root 権限で以下のコマンドを実行。

# yum install perl-DBI

これでインストール作業は完了です。

 

MySQL の初期セットアップと Twimllet 用のデータベース作成

MySQL を起動する前に、データベース用のファイルを格納するディレクトリや初期設定を行います。デフォルトのままでも動きますが、整理整頓は最初が肝心。

私の場合、/data/mysql というディレクトリを作成し、この下に MySQLのデータが入るようにしました。ご自身のサーバ環境で整理整頓できるお好みの場所に読み替えてください。そのまま root 権限で以下のコマンドを実行します。

# mkdir -p /data/mysql
# chown mysql:mysql /data/mysql/

 

次に、MySQL の設定ファイルをいじります。MySQL は起動する際に /etc/my.cnf を読みます。ここでは最低限の設定だけ入れますので、データベースに精通している方はそれぞれご自身の設定とうまく同居してください。
なお、Twilio 側が UTF-8 を標準で使うサービスですので、データベースもデフォルトで UTF-8 を使うようにすることが肝心です。

 

# vi /etc/my.cnf

内容は以下の通りにします。

[mysqld]

datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character-set-server=utf8
[mysqld_safe]

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#custom config

innodb_file_per_table
query-cache-size=16M
[mysql]

default-character-set=utf8

保存したら、MySQL を起動します。起動時に my.cnf に従って勝手に必要なファイルを datadir に作成してくれます。

# /etc/init.d/mysql start

起動したら、MySQL に接続します。データベース接続用のユーザとパスワードを設定したり、デフォルトでサンプルに入っているデータベースは不要なのでこれを消したりといった作業です。

 

MySQL に接続しましょう。以下のコマンドを実行します。

# mysql -u root

mysql> というプロンプトが返ってきたと思います、この状態が MySQL に接続された状態です。まずはデフォルトで入っているサンプル用のデータベース test を削除します。

mysql> drop database test ;

 

次に、デフォルトのユーザー root にパスワードを設定します。これを忘れると、パスワード無しでデータベースにアクセスできることになるので、忘れずに実施しましょう。以下の hogehoge を好きな文字列に読み替えてください。

mysql> update user set password=password('hogehoge') where user = 'root' ;

 

次に、Twimllet Commander Z で使うデータベースを作成します。ここでは db_masa という名前のデータベースを文字コード UTF-8 で作ります。お好きな名前に読み替えて実行してください。

mysql> create database db_masa default character set utf8 ;

 

そして、このデータベースにアクセスできる一般ユーザ masa を作成すると共にパスワードも設定します。hogehoge を自分の好きなパスワードに読み替えてください。

mysql> grant all on db_masa.* to masa identified by 'hogehoge' ;

権限情報をフラッシュして反映します。

mysql> flush privileges ;

これで Twimllet 用データベースの準備ができました。root はこの MySQL の特権ユーザですので、今後は今作った masa というユーザでアクセスしましょう。

 

ここで少しだけ。「データベース」と「テーブル」について簡単に説明しておきます。

MySQL の場合「データベース」という大きな器の中に「テーブル」が入ります。テーブルは実際の表です。エクセルでよく見る形になっており、テーブルが実際にデータを収める括りだと考えてもよいです。「東京都」というデータベースの中に「八王子市」「日野市」「新宿村」「千代田村」「渋谷村」という市町村のテーブルが入るイメージです。そして、それぞれ市町村の中にエクセル表で、例えば「住民 1 番 住所は ●●●、名前は △△△、性別は 男」のようなデータが入っています。

さて、きちんと作成したデータベースが存在しているのか確認してみましょうか。

 

mysql> show databases ;

information_schema

db_masa ★
mysql

と 3 つのデータベースが表示されたはずです。このうち information_schema と mysql はシステムが使っていますのでこれは放っておいてください。
ちなみに、特権ユーザ root なので mysql が表示されていますが、先ほど作った一般ユーザ masa で接続すれば mysql は表示されません。やってみましょうか? まずは一旦 MySQL から抜けましょう、今は特権ユーザです。

 

mysql> exit

一般ユーザで入り直します。

# mysql -u masa -phogehoge

ここで注意、-p の後にパスワードを指定しますが、-p とパスワードの間にスペースは不要です。
で、もう一度データベースの一覧を表示します。

mysql> show databases ;

ね。

今回はここまでにしておきましょう、次回は、Twimllet 用のテーブルを作ってみます。お楽しみに!

 

おまけのひとこと

1 月も終わりに差し掛かってこんな話題をふるのも難ですが、皆さん、今年、初夢みましたか? 初夢って元旦に見た夢のことだとばかり思ってたんですが、同僚が「1 年の最初に見る夢だよ」と。しかしですね、Wikipedia さまは、こう述べられています。

「字義どおりに新年最初に見る夢とされることは少なく、現代では元日(1 月 1 日)から 2 日の夜、または、2 日から 3 日の夜に見る夢とされることが多い。」

 

むう・・・私は 1/10 の朝に今年最初の夢を見たんです。三が日は見てないので、今年の運気を占うために、これを初夢としておきましょうか。

で、その初夢なんですが、私がハリーポッターに扮しているというもの。杖をちゃんと持っていました。が、突然誰だか分からない人がぶつかってきて、ハリーは、つまり私ですが、杖を落としてしまいます。まもなく右手よりヴォルデモートが登場。その刹那、視界が緑の閃光、終了。

 

ヴォルデモートにやられたわけです。この間、体感 30 秒程度。

原作の 1 巻 ~ 7 巻まで、長い期間この作品を愛読してきたのに、ただ 1 つの呪文や魔法も唱えないまま、何の世界観も味わうこと無く夢が終わり起きたと。この夢は、私の 1 年がどうなると示唆しているんでしょうか。生きて来年の正月を迎えられるんでしょうか。

この記事をシェア

最新記事

すべての記事へ