若手の目からみたこの業界のアレコレ、気の向くままに書いてみます。

「イマサラ」だからこそ始めるTwitter Bot作成 ~ 開発環境を作ろう(後編) ~

»

【Intro】

 前回はCentOSをインストールして簡単な設定を行いました。しかし、肝心のWebサーバやPHPなどのインストールはしていませんね。正直なところ、前編で行ったCentOSのインストール中に一緒に入れてしまうこともできたのですが、そんなのを書いても面白くないですよね? (Y/y)

 というわけで、今回はPHPなWebアプリケーションを作れる環境を整えるために、ソースファイルから導入していきたいと思います。ApacheとPHPはもちろん、関連で使用するOpenSSLとcURLのインストール方法をステップ・バイ・ステップでご紹介したいと思っております。

【1st Step:OpenSSLをインストールしよう!】

 さて、それでは早速はじめましょう。まずは前回までに構築した開発環境を起動し、コンソール(開発環境サーバにつながっているモニタやらキーボードやら)より一般ユーザーでログインします。rootにsuした後、「/usr/local/src」に移動します。

Pic01

 OpenSSLのソース(というかTarball)を入手するために、Webブラウザを起動し、こちらにアクセスします。ページが表示されたら、左端にあるメニューより「Source」をクリックします。

Pic02

 ダウンロード可能なTarballの一覧が表示されるので、最新版のソースをダウンロードしましょう。「[LATEST]」と書いてある行のリンクが最新の安定版です。ファイル名のテキストリンクをクリックするとダウンロードできます。

Pic03

 ダウンロードできたら、それをSCPなりSFTPなりでサーバにアップし……たいところですが、サーバ自体がDHCPで動作するように作っているので、IPアドレスが分からないとSCP/SFTPで接続することができませんね。……考えるのが面倒なので、サーバ上で直接ダウンロードしてしまいましょう。先のダウンロードページで「ファイル名のテキストリンクをクリック」するのではなく、「ファイル名のテキストリンクをポイントした状態で右クリックし、コンテキストメニューより【リンクアドレスをコピー】」しましょう。

 今現在、あなたは開発環境にログインし、rootな状態で「/usr/local/src」にいるはずです。そのコンソール(あるいはSSHクライアント)上で、「wget 'http://www.openssl.org/source/openssl-{VERSION}.tar.gz'」とタイプし、エンターキーをどや顔で押しましょう。あ、「{VERSION}」のところはバージョン番号が入ります。ちなみにこの記事を書いている時点での最新版は、「openssl-1.0.0a.tar.gz」でした。あなたが不幸にもこの記事を参照しつつ構築をしている場合、より新しいバージョンがリリースされているかもしれません。各自読み替えてください。

Pic04

 無事にダウンロードできたら、Tarballを展開しましょう(本当はsha1なチェックサムなどで、ダウンロードしたファイルのチェックをした方がよいのですが割愛)。「tar xzf ./openssl-{VERSION}.tar.gz」とタイプすると展開できます。「openssl-{VERSION}」というディレクトリができているはずですから、確認してみてください。

Pic05

 それではコンパイルを行いましょう。「cd ./openssl-{VERSION}」でカレントディレクトリを移動した後、「./config --prefix=/usr/local --openssldir=/usr/local/openssl threads zlib-dynamic shared」とタイプしましょう。……あ、「config」のオプションは目的に合うように各自好きなものを設定してくださいね。

Pic06

 ずらずらと英語や日本語や記号が入り交じった魔法の呪文が画面上を流れていくので、それをコーヒーでも飲みながら優雅に眺めましょう。「Configured for ~」というメッセージが表示されれば準備完了です。続いてコンパイルを行いましょう。「make」とタイプします。

Pic07

 ずらずらと英語や日本語や記号が入り交じった魔法の呪文が画面上を流れていくので、それをミルクティーでも飲みながら優雅に眺めましょう。特に「エラー」とか「Error」とか「Fail」とか、その手のブルーなメッセージが表示されてない状態で、コマンドプロンプトに戻ってきていればOKです。続いてインストールを行いましょう。「make install」とタイプします。

Pic08

 ずらずらと英語や日本語や記号が入り交じった(中略)、それを緑茶でも飲みながら優雅に眺めます。例によって、「エラー」とか「Error」とか「Fail」とか、その手のブルーなメッセージが表示されてない状態で、コマンドプロンプトに戻ってきていればOKです。これでOpenSSLのインストールが完了しました! やったね♪

Pic09

【2nd Step:cURLをインストールしよう!】

 続いてcURLのソース(というかTarball)を入手するために、Webブラウザでこちらにアクセスします。ページが表示されたら、左端にあるメニューより「Download」をクリックします。

Pic01_2

 「Source Archives」のところに、ダウンロード可能なファイルの一覧があるはずです。今回は「.tar.gz」なTarballをGetしましょう。OpenSSLの時と同様に、ファイル名のテキストリンクをクリックしてダウンロードしてからSCP/SFTPで転送してもいいですし、「wget」コマンドで直接ダウンロードしても構いません。

Pic02_2

 どちらの方法でも構わないので、「/usr/local/src」にTarballをダウンロードし、「tar」コマンドで展開します。わたしは「wget」コマンドでダウンロードしました。URLは「http://curl.haxx.se/download/curl-{VERSION}.tar.gz」といった感じになるようです。

Pic03_2

 展開したらディレクトリを移動します。ここまではOpenSSLの時とほとんど同じ手順ですね。続いて「configure」を実行しましょう。configureオプションは目的に合うように各自好きなものを設定してください。ちなみにわたしは、「./configure --prefix=/usr/local/curl --disable-debug --enable-optimize --enable-warnings --enable-werror --disable-curldebug --disable-dependency-tracking --enable-http --enable-libgcc --enable-ipv6 --enable-nonblocking --enable-threaded-resolver --enable-verbose --enable-cookies --with-ssl=/usr/local/openssl」と指定してみました。

Pic04_2

 「configure」が終了したら、続いて「make」を実行しましょう。

Pic05_2

 最後に「make install」を実行します。

Pic06_2

 これでcURLのインストールが無事完了しました。やったね☆

Pic07_2

【3rd Step:Apacheをインストールしよう!】

 続いてApacheをインストールしましょう。Webブラウザでこちらにアクセスし、左側にあるメニューより、「from a mirror」のテキストリンクをクリックします。

Pic01_3

 ダウンロード可能なバージョン一覧が表示されるので、最新の安定版(この記事を書いた時点では「2.2.16」)のテキストリンクをクリックします。

Pic02_3

 「.tar.gz」形式のテキストリンク(「httpd-{VERSION}.tar.gz」)をクリックします。「wget」コマンドでやりたい人は、「http://ftp.riken.jp/net/apache//httpd/httpd-{VERSION}.tar.gz」といったURLでダウンロードできます。いくつかミラーがあるので、「ftp.riken.jp」以外のサイトからダウンロードする可能性もあります。もちろん、あなたが好きなミラーサイトからダウンロードすることもできます。たまたま私は「ftp.riken.jp」だった……というだけです。念のため。

Pic03_3

 「/usr/local/src」にダウンロードしたTarballを配置し、展開します。

Pic04_3

 無事展開できたら、「cd httpd-{VERSION}」でカレントディレクトリを移動した後、「configure」を実行します。ちなみにわたしは、「./configure --prefix=/usr/local/apache2 --with-included-apr --enable-v4-mapped --enable-exception-hook --enable-pie --enable-modules=all --enable-mods-shared=all --enable-authn-dbm --enable-authn-anon --enable-authn-dbd --enable-authn-alias --enable-authz-dbm --enable-authz-owner --enable-auth-digest --enable-isapi --enable-file-cache --enable-cache --enable-disk-cache --enable-mem-cache --enable-dbd --enable-dumpio --enable-deflate --enable-log-forensic --enable-logio --enable-mime-magic --enable-cern-meta --enable-expires --enable-headers --enable-usertrack --enable-unique-id --enable-version --enable-http --enable-info --enable-cgi --enable-cgid --enable-vhost-alias --enable-imagemap --enable-speling --enable-rewrite --enable-so --with-mpm=prefork」というオプションでやってみました。

Pic05_3

 続いて「make」を実行します。

Pic06_3

 最後に「make install」を実行します。

Pic07_3

 無事にインストールまで終わりましたか? お疲れ様でした。あともう少しですから、頑張りましょう!

Pic08_2

【4th Step:PHPをインストールしよう!】

 最後に、PHPをインストールしましょう。Webブラウザでこちらにアクセスし、ページ上部にあるメニューより、「downloads」のテキストリンクをクリックします。

Pic01_4

 最新の安定版リリース(「.tar.gz」形式の方)のテキストリンクをクリックします。

Pic02_4

 「jp.php.net」か「jp2.php.net」のどちらか一方のテキストリンクをクリックします。どっちを選んでも結果は一緒ですから、お好みでどうぞ。URLは「http://jp.php.net/get/php-{VERSION}.tar.gz/from/this/mirror」か「http://jp.php.net/get/php-{VERSION}.tar.gz/from/jp2.php.net/mirror」のどちらかになるはずです。

Pic03_4

 もういちいち説明しなくてもお分かりかもしれませんが、「/usr/local/src」にダウンロードしたTarballを配置し、展開します。

Pic04_4

 展開した結果作成されたディレクトリに移動します。みんなお待ちかねの「configure」を実行するだけの簡単なお仕事です。ちなみにわたしは「./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/apache2/conf --enable-safe-mode --with-exec-dir=/usr/local/php5/safe_bin --enable-sigchild --enable-magic-quotes --disable-short-tags --enable-libgcc --with-libxml-dir --with-openssl --with-zlib --with-bz2 --with-libxml-dir --with-zlib-dir --enable-mbstring --with-libmbfl --with-zlib-dir --enable-shmop --enable-soap --enable-sockets --with-regex=php --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --with-xmlrpc --with-xsl --enable-zip --with-zlib-dir --with-pear=/usr/lib/php --with-zend-vm=CALL --disable-inline-optimization --enable-zend-multibyte --with-curl=/usr/local/curl --with-curlwrappers --with-tsrm-pthreads」でやりました。

Pic05_4

 続いて、「make」の実行ですね。

Pic06_4

 そして、「make install」を実行します。

Pic07_4

 無事に終了したら、取りあえず必要なもののインストールは終わりました。あともうちょっとでBotの開発には入れますよ!

Pic08_3

【5th Step:設定しよう!】

 最後にPHPが使えるようにするための、最低限の設定をおこないましょう。本当に最低限なので、各自必要に応じて設定内容を確認してくださいね。

 PHPのインストールが終わった直後ですので、今現在「/usr/local/src/php-{VERSION}」がカレントディレクトリですね。そのなかに、PHPの設定ファイルである「php.ini」のひながたがあります。「php.ini-development」と「php.ini-production」の2つがあるのですが、ファイル名を見ていただければ大体分かりますね。開発環境なので、「php.ini-development」を「/usr/local/apache2/conf」に「php.ini」というファイル名でコピーします。

Pic01_5

 コピーしたら、「/usr/local/apache2/conf」に移動し「php.ini」を編集します。わたしは「vi」コマンドを使いましたが、お好きな方法で編集してください。

Pic02_5

 mbstring関連の設定を行うのですが、ちょっと編集内容が多いので、変更前と変更後のコンフィグファイルを抜粋して下記に記載します。

<<<変更前>>>

[mbstring]
; language for internal character representation.
; http://php.net/mbstring.language
;mbstring.language = Japanese

; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
; http://php.net/mbstring.internal-encoding
;mbstring.internal_encoding = EUC-JP

; http input encoding.
; http://php.net/mbstring.http-input
;mbstring.http_input = auto

; http output encoding. mb_output_handler must be
; registered as output buffer to function
; http://php.net/mbstring.http-output
;mbstring.http_output = SJIS

; enable automatic encoding translation according to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
;       portable libs/applications.
; http://php.net/mbstring.encoding-translation
;mbstring.encoding_translation = Off

; automatic encoding detection order.
; auto means
; http://php.net/mbstring.detect-order
;mbstring.detect_order = auto

; substitute_character used when character cannot be converted
; one from another
; http://php.net/mbstring.substitute-character
;mbstring.substitute_character = none;

; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
; http://php.net/mbstring.func-overload
;mbstring.func_overload = 0

; enable strict encoding detection.
;mbstring.strict_detection = Off

; This directive specifies the regex pattern of content types for which mb_output_handler()
; is activated.
; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml)
;mbstring.http_output_conv_mimetype=

; Allows to set script encoding. Only affects if PHP is compiled with --enable-zend-multibyte
; Default: ""
;mbstring.script_encoding=

<<<変更後>>>

[mbstring]
; language for internal character representation.
; http://php.net/mbstring.language
mbstring.language = Japanese

; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
; http://php.net/mbstring.internal-encoding
mbstring.internal_encoding = UTF-8

; http input encoding.
; http://php.net/mbstring.http-input
mbstring.http_input = pass

; http output encoding. mb_output_handler must be
; registered as output buffer to function
; http://php.net/mbstring.http-output
mbstring.http_output = pass

; enable automatic encoding translation according to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
;       portable libs/applications.
; http://php.net/mbstring.encoding-translation
mbstring.encoding_translation = Off

; automatic encoding detection order.
; auto means
; http://php.net/mbstring.detect-order
mbstring.detect_order = "SJIS,EUC-JP,JIS,UTF-8,ASCII"

; substitute_character used when character cannot be converted
; one from another
; http://php.net/mbstring.substitute-character
mbstring.substitute_character = none;

; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
; http://php.net/mbstring.func-overload
mbstring.func_overload = 0

; enable strict encoding detection.
mbstring.strict_detection = Off

; This directive specifies the regex pattern of content types for which mb_output_handler()
; is activated.
; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml)
;mbstring.http_output_conv_mimetype=

; Allows to set script encoding. Only affects if PHP is compiled with --enable-zend-multibyte
; Default: ""
;mbstring.script_encoding=

 編集が終わったら、忘れずに保存してください。続いて、Apacheの設定を行います。「php.ini」と同じ場所にある「httpd.conf」を「vi」コマンドなどで開きます。

Pic03_5

 開いたら、ファイルの一番最後の行に移動します。そこに下記の記述を追加します。この記述を追加することにより、「*.php」というファイル名でドキュメントルートに保存したものがPHPなプログラムとして実行されるようになります(これをしないと、PHPのソースがそのままブラウザ上に表示される)。いうまでもないですが、編集したらちゃんと保存してくださいね。

<IfModule mod_php5.c>
  AddType application/x-httpd-php .php .phtml .phtm .inc
  AddType application/x-httpd-php-source .phps
</IfModule>

 これで設定ファイルの最小限な設定は終わりました。Apacheを起動させてみましょう。「/usr/local/apache2/bin」に移動します。今現在は「/usr/local/apache2/conf」にいるので、「cd ../bin」で移動できますね。

 移動したら、「./apachectl -k start」とタイプしてください。これでApacheが起動します。起動したかどうかは「ps -ef | grep httpd」といったコマンドで確認すればいいかと思います。

Pic04_5

 続いてPHPの動作確認用ファイルをドキュメントルートに作成しましょう。デフォルトでは「/usr/local/apache2/htdocs」がドキュメントルートなので、そこに移動します。「cd ../htdocs」で移動できます。移動したら、適当な名前(「test.php」など)で、「<?php phpinfo(); ?>」とだけ書かれているファイルを作成します。

Pic05_5

 続いてWebブラウザより、たった今作成したファイルにアクセスしてみましょう。「test.php」という名前で作成したなら、「http://{IPADDR}/test.php」でアクセスできるはずです。「{IPADDR}」は開発サーバのIPアドレスです。各自環境に合わせて読み替えてください。

 ……ん? 「{IPADDR}は開発サーバのIPアドレスです。」って、この開発環境はDHCPでしたね。IPアドレスが何割り振られているか分かりませんね。今現在、コンソールより「/sbin/ifconfig」とタイプしてください。多分「eth0」の「inet addr」という項目が表示されていると思います。そこに表示されているアドレスが開発サーバのIPアドレスです。えっとこういう面倒なことがあるので、分かってる人はちゃんとDHCPではなく固定のIPアドレスをアサインしておくことをおすすめします。……これこそ「イマサラ」ですが。

Pic06_5

 さて、気を取り直してWebブラウザから「http://{IPADDR}/test.php」にアクセスしましょう。下記のような画面が表示されたら正常に設定できています。

Pic07_5

 取りあえずきりのいいところまでできたので、ここで中断しましょう。「/usr/local/apache2/bin」に移動(「cd ../bin」で可)し、「./apachectl -k stop」とタイプしてApacheを終了させます。ちゃんと終了したかどうかは同じように「ps -ef | grep httpd」といったコマンドで確認すればいいかと思います。

Pic08_4

【Outro】

 今回でようやく開発環境の構築が終了しました。お疲れ様でした。こういったことをやりなれている方にはどうってことない話ですが、そうではない方にとってはかなり大変だったのではないでしょうか。この連載では、ただ「そっちの方が面白いから」という読者完全無視な理由で、「普通はこんなことやらねぇよ!」といった方法をご紹介してます。お仕事でやろうとしている方や、仮にプライベートであっても本格的にやろうとしている方は、お近くの詳しい人に聞くなり、本を買うなり、まともなWebサイトを見るなり、まともな人に代わりに構築してもらうなりしてください。

 文字通り「読者完全無視」で突っ走ってますので、「ここが分からない」とか「○○にしたいんだけどどうするの?」(例:固定IPで運用したい / ソースからではなくRPMで入れたい)とかがあれば、コメントなりTwitterなりメールなりでご連絡ください。

 余談ですが、「俺はBotが作りたいのであって開発環境とか時間かけて作ってる場合じゃねぇ!」とか「やってみたいけど手元に開発環境にできるコンピュータなんかない!」という方もいらっしゃるかと思います。そういう場合に備えているわけではないのですが、わたし個人が趣味で自宅サーバを運営しておりましてレンタルサーバのまねごともやってたりします。一応、複数で共用している都合上、完全な開発環境としては使えませんが、興味のある方は、「HYEC.ORG - レンタルサーバの利用をご希望の方へ」をご覧ください(非常にプアなサーバなので、過度な期待はしないでね!)。

 次回はいよいよ本題のBot作成に取り組みましょう。……といっても、正直ネタがありません。メインテーマなはずなのですが、非常に簡単に終わると思います。はい。

■□■

 当コラム「若人視点」へのご意見・ご感想・ご批判など、歓迎いたします。コメント欄に記入いただくか、el@hyec.orgあてにメールしてください。「@hyec」というアカウントでTwitterもやっていますので、もしよろしければフォローしてください。

 いただいたメッセージはすべて拝見させていただきますが、個別にお返事させていただくことが難しいかもしれません。

 なお、特に当コラムに対するご質問や誤字・脱字、認識の誤りについてのご指摘をいただいた場合は、個人を特定できないようにしたうえで、当コラム中で使用させていただくことがございます。

Comment(0)

コメント

コメントを投稿する