Kahua Release
- Release Note
- Download
- Current Version 1.0.7.3 (2008-05-08)
kahua-web Release
- kahua-webとは
- Release Note
- Download
- Current Version 0.3.1 (2007-06-12)
Security Advisory
Event Log
Documentation
For developers
Site info
Related Site
Kahua で遊ぶ準備をしよう
どんなプログラミング環境であっても、それを理解する最も効果的な方法は、 それを使ってプログラムを書いてみることです。一見とっつきにくいKahuaでの プログラミングも、やってみれば実に簡単です。さっそく始めてみましょう。
必要なもの
このチュートリアルを始める前に、インストールしておいて欲しいものです。
- Gauche 0.8.12
- make (GNUでもBSDでも可)
- autoconf 2.59以降
Gaucheはまぁ、当たり前ですね。ただし、Kahuaを正常に動かすためには、ネイ ティブPOSIXスレッドをサポートしたOS上で、マルチスレッドをサポートするよ うにGaucheがビルドされている必要があります。
また、特に理由がない限り(古いMySQLとの互換性とか)、Gaucheの内部文字コー ディングは UTF-8 をお薦めします。特にページテンプレートは、実装上の都合 でUTF-8決め打ちにしているので、EUC-JPやShift_JISを内部文字コーディング にしたGaucheでは正常に扱えません。
gosh -Vを実行して、次のように表示されればOKです。
% gosh -V Gauche scheme interpreter, version 0.8.12 [utf-8,pthreads]
Gaucheのインストールについては、 KahuaのためのGaucheインストール入門 を参照してください。
なお、Linuxにおいては、古いタイプのスレッドライブラリを使ったディストリ ビューションでは動作しません。カーネルが2.6以降であるか、NPTL(Native Posix Thread Library)が組み込まれたlibc6でなければなりません。例えば 2.4系カーネルを使ったDebian GNU/Linux 3.1 sargeでは、Kahuaは動作しませ ん。2.6系列のカーネルに入れ替えるか、NPTLを組み込んだlibc6に入れ替える 必要があります。NPTLが有効かどうかを確認するにはgetconfコマンドで調べら れます。
- カーネルを2.6系に入れ替えた Debian GNU/Linux 3.1 sarge
% getconf GNU_LIBPTHREAD_VERSION NPTL 0.60 % uname -a Linux raven-debian3 2.6.8-2-686-smp #1 SMP Tue Aug 16 12:08:30 UTC 2005 i686 GNU/Linux
- Fedora Core 6
% getconf GNU_LIBPTHREAD_VERSION NPTL 2.5 % uname -a Linux raven-fedora6 2.6.18-1.2869.fc6 #1 SMP Wed Dec 20 14:51:19 EST 2006 i686 i686 i386 GNU/Linux
- Ubuntu Linux 7.10(日本語ローカライズ版)
% getconf GNU_LIBPTHREAD_VERSION NPTL 2.6.1 % uname -a Linux nikenike 2.6.22-14-generic #1 SMP Sun Oct 14 23:05:12 GMT 2007 i686 GNU/Linux
開発者が確認したり、実際に運用したりしているのは以下のOSです。
- Ubuntu Linux 6.06/6.10/7.10 (いずれもアップデート済み)
- Fedora Core 6 (アップデート済み)
- Debian GNU/Linux 3.1 sarge (2.6系カーネルをパッケージで入れた上でアップデート済み)
- Mac OS X 10.4.8 (Inte/PPC ソフトウェア・アップデート済み)
- FreeBSD 6.1R/6.2R (GENERIC KERNEL/アップデート済み)
- NetBSD 3.1_STABLE(netbsd-3枝先端/カスタマイズカーネル)
- NetBSD 4.0_BETA2(netbsd-4枝先端/GENERICカーネル)
make と autoconf は、生成したスケルトンをベースにアプリケーションの開発 を行うのに必要となります。特に autoconf は、インストールしたてのOSには 含まれていないことが多いので、適宜インストールしておいてください。PATH 上にautoconfコマンドが見えていればOKです。
% autoconf --version autoconf (GNU Autoconf) 2.61 Copyright (C) 2006 Free Software Foundation, Inc. This is free software. You may redistribute copies of it under the terms of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the extent permitted by law. Written by David J. MacKenzie and Akim Demaille.
なお、FreeBSDにおいてportsのdevel/autoconf259をインストールすると、 autoconfコマンドがautoconf259というファイル名でインストールされてしまい ます。このままだとautoconfを見つけることができないので、
# ln -s /usr/local/bin/autoconf259 /usr/local/bin/autoconf
などしてシンボリックリンクを張るといいでしょう。
インストール
ここでは Kahua 1.0.7.1 のインストールを行います。方針は
- /usr/local/kahuaの下にインストールする
- インストール時に実行ユーザなどは一切指定しない
- Kahuaに同梱されているサンプルアプリケーションはインストールしない
とします。まずは適当なディレクトリで(ここでは$HOME/workとします)、 /tmp/Kahua-1.0.7.1.tgz (あらかじめ置いておいてください)を展開します。
% mkdir $HOME/work % cd $HOME/work % tar xzf /tmp/Kahua-1.0.7.1.tgz %
次にconfigureを実行します。上記の方針ですから、渡すオプションは極めてシ ンプルです。
% cd Kahua-1.0.7.1 % ./configure --prefix=/usr/local/kahua checking for gosh... /usr/local/bin/gosh checking for gauche-config... /usr/local/bin/gauche-config checking for gauche-package... /usr/local/bin/gauche-package checking for gauche-install... /usr/local/bin/gauche-install checking for gauche-cesconv... /usr/local/bin/gauche-cesconv checking for a BSD-compatible install... /usr/bin/install -c checking for makeinfo... no checking for gzip... gzip configure: creating ./config.status config.status: creating Makefile config.status: creating src/Makefile config.status: creating doc/Modules/Makefile config.status: creating cgi/Makefile config.status: creating emacs/Makefile config.status: creating plugins/Makefile config.status: creating test/Makefile === configuring in examples (/home/bizenn/work/Kahua-1.0.7.1/examples) configure: running /bin/bash ./configure '--prefix=/usr/local/kahua' --cache-file=/dev/null --srcdir=. checking for gosh... /usr/local/bin/gosh checking for gauche-config... /usr/local/bin/gauche-config checking for gauche-package... /usr/local/bin/gauche-package checking for gauche-install... /usr/local/bin/gauche-install checking for gauche-cesconv... /usr/local/bin/gauche-cesconv checking for a BSD-compatible install... /usr/bin/install -c checking for makeinfo... no checking for gzip... gzip configure: creating ./config.status config.status: creating Makefile %
普通にmakeを実行します。
% make
cd src; make all
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/src' に入ります
/usr/local/bin/gosh ../src/make-script.scm "/usr/local/bin/gosh" "/usr/local/kahua/lib/kahua" kahua-spvr
/usr/local/bin/gosh ../src/make-script.scm "/usr/local/bin/gosh" "/usr/local/kahua/lib/kahua" kahua-admin
/usr/local/bin/gosh ../src/make-script.scm "/usr/local/bin/gosh" "/usr/local/kahua/lib/kahua" kahua-install
/usr/local/bin/gosh ../src/make-script.scm "/usr/local/bin/gosh" "/usr/local/kahua/lib/kahua" kahua-shell
/usr/local/bin/gosh ../src/make-script.scm "/usr/local/bin/gosh" "/usr/local/kahua/lib/kahua" kahua-httpd
/usr/local/bin/gosh ../src/make-script.scm "/usr/local/bin/gosh" "/usr/local/kahua/lib/kahua" kahua-dbutil
/usr/local/bin/gosh ../src/make-script.scm "/usr/local/bin/gosh" "/usr/local/kahua/lib/kahua" kahua-config
/usr/local/bin/gosh ../src/make-script.scm "/usr/local/bin/gosh" "/usr/local/kahua/lib/kahua" kahua-package
test ! -f kahua.conf || chmod +w kahua.conf
sed -e "s@##SOCKET_BASE_DIR##@/usr/local/kahua/tmp/kahua@" \
-e "s@##localstatedir##@/usr/local/kahua/var/kahua@" \
-e "s@##KAHUA_STATICDIR##@/usr/local/kahua/var/kahua/static@" \
kahua.conf.sample > kahua.conf
chmod -w kahua.conf
/usr/local/bin/gosh ./make-testconf.scm .. ..
test ! -f kahua/config.scm || chmod +w kahua/config.scm
sed -e "s@##sysconfdir##@/usr/local/kahua/etc/kahua@" \
-e "s@##localstatedir##@/usr/local/kahua/var/kahua@" \
-e "s@##SOCKET_BASE_DIR##@/usr/local/kahua/tmp/kahua@" \
-e "s@##KAHUA_STATICDIR##@/usr/local/kahua/var/kahua/static@" \
-e "s@##package##@kahua@" \
-e "s@##KAHUA_VERSION##@1.0.1@" \
kahua/config.scm.in > kahua/config.scm
chmod -w kahua/config.scm
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/src' から出ます
cd cgi; make all
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/cgi' に入ります
../cgi/fix-shebang.sh "/usr/local/bin/gosh" "/usr/local/kahua/lib/kahua" "/usr/local/kahua/var/kahua" \
"/usr/local/kahua/tmp/kahua" "/usr/local/kahua/var/kahua/cgilog" no kahua.cgi.in kahua.cgi
chmod -w kahua.cgi
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/cgi' から出ます
cd emacs; make all
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/emacs' に入ります
sed "s@##bindir##@/usr/local/kahua/bin@" kahua.el.in > kahua.el.tmp && \
mv kahua.el.tmp kahua.el
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/emacs' から出ます
cd plugins; make all
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/plugins' に入ります
make[1]: `all' に対して行うべき事はありません.
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/plugins' から出ます
cd examples; make all
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/examples' に入ります
make[1]: `all' に対して行うべき事はありません.
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/examples' から出ます
cd test; make all
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/test' に入ります
make[1]: `all' に対して行うべき事はありません.
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/test' から出ます
cd doc/Modules; make all
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/doc/Modules' に入ります
/usr/local/bin/gosh ./extract -en -o kahua-refe.texi kahua-ref.texi
if test X != X -a Xgzip != X; then \
--no-warn kahua-refe.texi; \
rm -rf kahua-refe.info*.gz; \
gzip kahua-refe.info; \
fi
/usr/local/bin/gosh ./extract -jp -o kahua-refj.texi kahua-ref.texi
if test X != X -a Xgzip != X; then \
--no-warn kahua-refj.texi; \
rm -rf kahua-refj.info*.gz; \
gzip kahua-refj.info; \
fi
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/doc/Modules' から出ます
%
きちんと動作するかどうか、Kahuaのユニットテストを実行してみましょう。 makeした時に日本語メッセージがうっとぉしかったので-sつけてます。
% make -s check Testing kahua.test.xml ... passed. Testing persistence/efs (efs:_tmpefs) ... passed. Testing index slots (efs) ... passed. Testing rollback ... passed. Testing entry-method ... passed. Testing user ... passed. Testing kahua.config ... passed. Testing gsid ... passed. Testing kahua.session ... passed. Testing kahua.partcont ... passed. Testing kahua.server ... passed. Testing kahua.dbm ... passed. Testing worker scripts ... passed. Testing redirect/cont ... passed. Testing define-method-rule ... passed. Testing kahua-call-with-current-context ... passed. Testing lambdabooks test scripts ... passed. Testing wiki-iki test scripts ... passed. Testing nqueen test scripts ... passed. Testing foldlist test scripts ... passed. Testing supervisor script ... passed. Testing kahua-httpd script ... passed. Testing kahua-admin script ... passed. Testing developer ... passed. Testing kahua-shell script ... passed. Testing sandbox test ... passed. Testing plugin manager ... passed. Testing query plugin ... passed. %
無事通ったのでインストールします。-sつけると何も言ってくれないので、 -sはつけてません。また、表示の都合上適当に折り返しています。
% sudo make install
cd src; make install
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/src' に入ります
/usr/local/bin/gauche-install -m 0755 -d /usr/local/kahua/etc/kahua /usr/local/kahua/libexec
/usr/local/bin/gauche-install -m 0775 -d /usr/local/kahua/var/kahua
/usr/local/bin/gauche-install -m 0770 -d /usr/local/kahua/var/kahua/checkout /usr/local/kahua/var/kahua/logs
/usr/local/bin/gauche-install -m 0770 -d /usr/local/kahua/tmp/kahua /usr/local/kahua/var/kahua/tmp
/usr/local/bin/gauche-install -m 0444 -T /usr/local/kahua/lib/kahua -S . \
kahua-spvr.scm kahua-admin.scm kahua-install.scm \
kahua-shell.scm kahua-server.scm kahua-keyserv.scm \
kahua-httpd.scm kahua-dbutil.scm kahua-config.scm \
kahua-package.scm kahua.scm kahua/gsid.scm kahua/persistence.scm \
kahua/user.scm kahua/config.scm kahua/session.scm kahua/server.scm \
kahua/developer.scm kahua/partcont.scm kahua/cm kahua/plugin.scm \
kahua/pdf.scm kahua/pdf/interp.scm kahua/pdf/main.scm kahua/pdf/monad.scm \
kahua/pdf/srfi-48-draft.scm kahua/pdf/srfi-48.scm kahua/pdf/state.scm \
kahua/pdf/typeset.scm kahua/pdf/util.scm kahua/error-report.scm \
kahua/thread-pool.scm kahua/persistence/fs.scm kahua/persistence/efs.scm \
kahua/persistence/dbi.scm kahua/persistence/mysql.scm \
kahua/persistence/postgresql.scm kahua/protocol/worker.scm \
kahua/protocol/http.scm kahua/xml-template.scm
/usr/local/bin/gauche-install -m 0555 -T /usr/local/kahua/bin kahua-spvr kahua-admin kahua-install kahua-shell \
kahua-httpd kahua-dbutil kahua-config kahua-package
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/src' から出ます
cd cgi; make install
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/cgi' に入ります
if test "/usr/local/kahua/libexec/kahua" != ""; then \
/usr/local/bin/gauche-install -m 0755 -d /usr/local/kahua/libexec/kahua; \
for f in kahua.cgi ; do \
/usr/local/bin/gauche-install -m 0555 $f /usr/local/kahua/libexec/kahua/$f; \
done; \
fi; \
if test "/usr/local/kahua/var/kahua/cgilog" != ""; then \
/usr/local/bin/gauche-install -m 0750 -d /usr/local/kahua/var/kahua/cgilog; \
fi; \
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/cgi' から出ます
cd plugins; make install
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/plugins' に入ります
/usr/local/bin/gauche-install -m 0775 -d /usr/local/kahua/var/kahua/plugins
/usr/local/bin/gauche-install -m 444 -T /usr/local/kahua/var/kahua/plugins -S . allow-module.scm sendmail.scm query.scm fileio.scm
make[1]: ディレクトリ `/home/bizenn/work/Kahua-1.0.7.1/plugins' から出ます
%
最後に、PATHに/usr/local/kahua/binを追加しておきましょう。
% PATH=/usr/local/kahua/bin:$PATH
次回のログイン時にも反映されるように、$HOME/.profile などに追加しておくと 便利です。
% which kahua-package /usr/local/kahua/bin/kahua-package %
Emacs環境の整備
Kahuaで遊ぶ際、Emacsとの連携をうまく使うと非常に快適に開発を進めることが できます。Kahuaには、EmacsとKahuaとを連携させるためのkahua.elが同梱されて います。
まずはこのファイルをどこに置くかを決めましょう。Emacsでは C-hv で変数の 情報を得ることができます。プロンプトに load-path と入れてみましょう。 例によって表示の都合で適当に折り返しています。
load-path's value is
("/usr/share/emacs21/site-lisp/anthy" "/usr/share/emacs21/site-lisp/dictionaries-common"
"/usr/share/emacs/site-lisp/autoconf" "/etc/emacs21" "/etc/emacs" "/usr/local/share/emacs/21.4/site-lisp"
"/usr/local/share/emacs/site-lisp" "/usr/share/emacs/21.4/site-lisp" "/usr/share/emacs/21.4/site-lisp/anthy"
"/usr/share/emacs/21.4/site-lisp/dictionaries-common" "/usr/share/emacs/site-lisp"
"/usr/share/emacs/21.4/leim" "/usr/share/emacs/21.4/lisp" "/usr/share/emacs/21.4/lisp/toolbar"
"/usr/share/emacs/21.4/lisp/textmodes" "/usr/share/emacs/21.4/lisp/progmodes" "/usr/share/emacs/21.4/lisp/play"
"/usr/share/emacs/21.4/lisp/obsolete" "/usr/share/emacs/21.4/lisp/net" "/usr/share/emacs/21.4/lisp/mail"
"/usr/share/emacs/21.4/lisp/language" "/usr/share/emacs/21.4/lisp/international" "/usr/share/emacs/21.4/lisp/gnus"
"/usr/share/emacs/21.4/lisp/eshell" "/usr/share/emacs/21.4/lisp/emulation" "/usr/share/emacs/21.4/lisp/emacs-lisp"
"/usr/share/emacs/21.4/lisp/calendar")
Documentation:
*List of directories to search for files to load.
Each element is a string (directory name) or nil (try default directory).
Initialized based on EMACSLOADPATH environment variable, if any,
otherwise to default specified by file `epaths.h' when Emacs was built.
これはUbuntu Linux 6.10においてパッケージからインストールしたEmacs 21.4での 表示です。げんなりするほどたくさんのディレクトリが列挙されていますが、 普通は /usr/local/share/emacs/site-lisp あたりがいいでしょう。今回はここに kahua.elをコピーします。
% cd emacs % sudo cp kahua.el /usr/local/share/emacs/site-lisp
次に、.emacsに次の2行(2フォームと言うべきか)を追加します。
(require 'kahua)
(setq auto-mode-alist
(append '(("\\.kahua$" . kahua-mode)) auto-mode-alist))
これで、.kahuaという拡張子のファイルを編集する際はkahua-modeが使われるように なります。
--uu:---F1 hoge.kahua (Kahua mode)--L1--All-----------------------------
さぁ、Kahuaで遊ぶ準備ができました。