Choco Soft

Nadesiko DE RDB

Choco Soft header image 2

なでしこでバッチ外伝【第一回】Apacheを制御しよう!

2009年08月28日 · コメント(0) · なでしこでバッチ外伝

#—————————————————————-
# 【なでしこでバッチ】でボツになった原稿が中心です。
#—————————————————————-
今回は【なでしこ】を利用して文字列の検索、置換を行います。
対象のファイルは何でもいいのですが、今回はオープンソースのWEBサーバーで有名な「Apache」のコンフィグファイル
「httpd.conf」を流用してみます。
開発業務でWEBサーバーの設定変更って多いと思いますが、環境の切り替えって面倒ですよね^^;
(例:PHP4→PHP5等)
なでしこを使って、環境の切り替えをもっと簡単にしてみましょう。

#### 検索編 ####
#ここからプログラムですので、コピーしてなでしこエディタに貼り付けて下さい。———-
検索文字とは配列//配列変数である事を宣言
パスとは文字列//これ書かなくても動きます(笑)

#パスと言う変数にデータを放り込みます。
パス=「ServerRoot “E:/Apache Software Foundation/Apache2.2”
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
DocumentRoot “E:/Apache Software Foundation/Apache2.2/htdocs”」

#インデントに注意!
#なでしこでプログラムを書く時に最も注意して欲しいのはインデントです。
#単に見やすいだけでなく、制御構文としての意味も持っているので間違うと正しく動きません。
#今回はスペースを使いましたが、タブでも大丈夫です。

パスを反復//変数(パス)の中のデータを反復して、一行づつ処理しています。
対象が「*LoadModule*」にワイルドカードマッチ
もし、それが空でなければ
それを検索文字に配列追加//マッチしたデータを検索文字(配列変数)に積み重ねるように追加してます。
検索文字を言う。//検索結果の表示
終わる。
#ここまで!—————————————————————————

apache1

上記プログラムを実行すると、「LoadModule」が含まれる行が抽出されます。
どんなモジュールがあるか一目瞭然ですね!
ですが、利用されているモジュールが一杯あると目で確認するのも大変です、もっと見やすくしたいです。
(先頭に#が使われてるモジュールは未使用です。)

ならば、先頭が「LoadModule」のデータだけを抽出すればいいですね。
正規表現ならば、厳しい条件下でも大丈夫。
なでしこは、Perl互換の正規表現に対応してますので今まで正規表現をやった事のある人ならば
すぐにできます。
やった事の無い人でも、参考書籍やホームページがかなり充実してますのでググってみて下さい。

ここで再び『なでしこ豆知識』
「それ」って何だろう???って思いますよね。
「それ」とは、なでしこならではの特殊な変数で常に前の行で実行された結果を持っています。
上記のプログラムの場合ですと、「対象が「*LoadModule*」にワイルドカードマッチ」の結果を持っています。
ワイルドカードによるマッチで該当行が無い場合は、空が入ります。
該当行が存在した場合は、「検索文字」と言う変数に結果が追加されます。
凄く特殊で便利な変数ですので、ぜひ覚えて下さい。

それでは、先頭が「LoadModule」のデータだけを抽出してみましょう。

#正規表現で検索
#ここからプログラムですので、コピーしてなでしこエディタに貼り付けて下さい。———-
#パスと言う変数にデータを放り込みます。
パス=「ServerRoot “E:/Apache Software Foundation/Apache2.2”
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
DocumentRoot “E:/Apache Software Foundation/Apache2.2/htdocs”」

検索文字とは配列
パスを反復
対象を「^LoadModule.*」で正規表現マッチ
もしそれが空でなければ
それを検索文字に配列追加
検索文字を言う//検索結果の表示
終わる。
#ここまで!—————————————————————————

apache2

どうですか?現在使われているモジュールだけが表示されたはずです。
今回はデータを直接プログラム内に書きましたが、既存のファイルを読み込んでその中を検索したい時は
下のような書き方です。
表示するだけだと忘れてしまうので、今度はテキストファイルに保存してみました。

#ここからプログラムですので、コピーしてなでしこエディタに貼り付けて下さい。———-
検索文字とは空//変数(検索文字)の初期化
パス=「E:\Apache Software Foundation\Apache2.2\conf\httpd.conf」//ここは自分の環境のフルパスを入れて下さい。
パスを毎行読んで反復//ファイルを一行づつメモリに読み込みます。
対象を「^LoadModule.*」で正規表現マッチ
もしそれが空でなければ
それを検索文字に配列追加
検索文字を「{デスクトップ}load.txt」に保存//検索結果をデスクトップのload.txtに保存しました。
#検索文字を「C:\Users\choco\Desktop\load.txt」に保存//これでも上と同じです。
終わる。
#ここまで!—————————————————————————

デスクトップ画面に「load.txt」が保存されてますので、マウスでクリックしてみて下さい。
メモ帳が起動して、中が表示されるはずです。
ちゃんと検索結果が保存されてましたか?
次は、検索した結果を自分の希望に合わせて置換をしてみますね。

####置換編####

今度はこんな書き換えをしてみましょう。
1.「LoadModule authn_anon_module modules/mod_authn_anon.so」を「LoadModule authn_anon_module modules/mod_nadesiko.nako」に書き換えます。
2.未使用の「LoadModule」を全て「LoadModule authn_boot」に書き換えます。

#ここからプログラムですので、コピーしてなでしこエディタに貼り付けて下さい。———-
#パスと言う変数にデータを放り込みます。
パス=「ServerRoot “E:/Apache Software Foundation/Apache2.2”
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
DocumentRoot “E:/Apache Software Foundation/Apache2.2/htdocs”」

パスの「LoadModule authn_anon_module modules/mod_authn_anon.so」を「LoadModule authn_anon_module modules/mod_nadesiko.nako」に置換。
それの「^#LoadModule authn*」を「LoadModule authn_boot」に正規表現置換。#「それ」の中には1の結果が代入されてます。
それを言う。//置換操作結果の表示
終わる。
#ここまで!—————————————————————————

せっかく設定ファイルを変更するのだから、「Apache」を再起動して設定内容を反映しましょう。
なでしこでは、DOSプロンプト画面でのコマンドが直接実行できる命令を持ってます。
Sを【コマンド実行】
今回の場合は、Windows上での「Apache」の再起動なのでこんな感じです。
「httpd -k restart」をコマンド実行
※「Apache2.0」系は「apache -k restart」になります。

実際のファイルを利用して全部続けると、こんな感じですね。

#ここからプログラムですので、コピーしてなでしこエディタに貼り付けて下さい。———-
検索文字とは配列//配列変数の宣言
「C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf」を毎行読んで反復//ファイルを一行づつ読み込みます。
もし、対象=「#LoadModule status_module modules/mod_status.so」ならば
対象を「LoadModule status_module modules/mod_status.so」に置換、それを検索文字に配列追加//置換対象が見つかったら置換します。
違えば、もし、対象=「LoadModule alias_module modules/mod_alias.so」ならば
対象を「LoadModule alias_module modules/mod_alias.nako」に置換、それを検索文字に配列追加//置換対象が見つかったら置換します。
違えば
対象を検索文字に配列追加。//置換対象がなければ、そのまま配列変数に格納します。
検索文字を「C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf」に保存//置換結果を、既存の「httpd.conf」に上書きします。
「C:\Program Files\Apache Software Foundation\Apache2.2\bin」に作業フォルダ変更//「bin」フォルダに移動します。
「httpd -k restart」をコマンド実行//「Apache」再起動します。
終わる。
#ここまで!—————————————————————————

後は上記のプログラムを実行ファイルにすればOKです。
(change_php4.exe等、わかりやすい名前にしておきましょう。)
やっている内容は、「httpd.conf」を読み込んで2つの項目を書き換えて「httpd.conf」に上書き保存、そして「Apache」の再起動です。
日本語なので処理内容は一目でわかるし、面倒な宣言も最小限に抑えられてます。
もうちょっとコンパクトにまとめたかったのですが、12行程度になりました。
如何ですか、日本語バッチ?

タグ :

コメント(0)

コメントはまだありません。

コメントする

*