次世代プロトコルWebDAVの可能性[後編]
日本語ファイル名の利用とバージョン管理
− 次世代プロトコルWebDAVの可能性[後編] −
日本語ファイル名問題の解決
中編で構築したWebDAV環境で日本語を含む名前のファイルやフォルダを作ると、画面5のように一見正しく作成されているように見えても、
![]() |
画面5 Webフォルダで新規にフォルダを作成 |
フォルダ情報を更新すると画面6のように実は名前が化けていたりすることに気が付くはずだ。この状態でアクセスすると、エラーが発生してそのファイルやフォルダは利用できない。これではいささか具合が悪い。
![]() |
画面6 日本語は文字化けしてしまう |
これは、ファイルの作成やファイル名の変更時に、WebDAVサーバに送るファイル名の文字列符号化形式がシフトJISであるのに対し(図5)、WebDAVサーバからクライアントに送られるファイル名の文字列符号化形式はUTF-8なのが直接の原因である。
![]() |
図5 WebDAVサーバとクライアントが、それぞれ異なる文字列符号化形式でやりとりしている |
コラム URLの文字列符号化形式についての補足 |
クライアントからどのような符号化形式のファイル名文字列を送るかをサーバに通知するための仕組みがないうえに(XMLも関係することから、WebDAVではファイル名文字列の符号化形式についてもUTF-8を推奨していると推測される)、Webフォルダから送出されるファイル名文字列の符号化形式が常にシフトJISであることが元凶である。この部分、RFC 2718においてUTF-8が推奨されている(URIの文字符号化形式の部分)旨が記述されていることもあるが、このようなちぐはぐがないような形で取り扱ってくれればと切に希望する。 |
このような状況を解決するのが、IIJのTaisuke Yamada氏が作成したmod_encodingモジュール(注)である。具体的には、図6のような動作を行う。Yamada氏は本モジュールをIIJ内部で使うために作ったが、会社の許可を得て社外に公開しているとのこと。詳細な使用条件は、モジュールに記述されているので参考にしてほしい。
![]() |
図6 mod_encodingにより、文字列符号化形式がUTF-8に統一される |
注:mod_encodingが使えない人は、ファイルやフォルダの作成後にフォルダ情報を更新しないで名前を変更するなどして対処してほしい。 |
■mod_encodingのインストール
mod_encodingの導入手順は以下のとおりである。
1.ソースコードの取得
mod_encoding.cはWebDAVのメーリングリスト(dav-dev)で公開されたものであり、これを入手するにはメーリングリストのアーカイブから取得する必要があった。しかし、今回は作者であるTaisuke Yamada氏のご厚意により、mod_encoding.cを転載させていただいた。転載を承諾いただいたTaisuke Yamada氏に感謝いたします。
mod_encoding.cのダウンロード
なお、mod_encoding.cのオリジナルはhttp://www.lyra.org/pipermail/dav-dev/2001-May/002428.htmlにある。
2.コンパイルおよびインストール
$ apxs -c mod_encoding.c |
これで、Apacheのモジュールが格納されているディレクトリにmod_encoding.soが作成される。
3.Apacheの設定
httpd.confファイルを編集して、
LoadModule encoding_module libexec/mod_encoding.so |
という記述を追加することでmod_encodingの機能をApacheに取り込み、
<IfModule mod_encoding.c> |
と記述することで、特定の種類のクライアント(ここではMicrosoft系OSおよびcadaver)のClient Encodingを指定し、適切な処理を行えるようにする。
4.動作確認
ここまでで、日本語ファイル/フォルダ名が扱えるようになっているはずだ。実際に日本語で名前を付けたフォルダやファイルを取り扱った例を画面7に示す。
![]() |
画面7 mod_encodingインストール後。日本語のフォルダ/ファイル名が扱えるようになっているのが分かる |
■mod_encoding利用時の注意
mod_encodingは文字コードの取り扱いをiconv()の実装に依存しているため、iconv()がインストールされている必要がある。Linuxについては、最近のディストリビューションで採用しているglibcであれば問題はない(iconv()が入っている)が、そうでないものやiconv()がないOSなどでは、別途libiconvが必要となる。
なお、古いバージョンのglibcを使ったLinuxだったりすると、iconv()の実装が古くてmod_encodingモジュールが正常に機能しないことがある。このような場合は、mod_encoding.cの170行目にある、
iconv(cd,
NULL, NULL, NULL, NULL);
|
の行を丸ごとコメントアウト/無効にすることで取りあえずの対処はできる。しかし、この部分はバッファやステータスのフラッシュを実行する部分とのことなので、glibcのバージョンアップなどで対処する方がよい。
また、iconv()の実装に起因した問題もあるが、それについては後述する。
WebDAV運用の実際
ここまできたら、設定してきたものを具体的にどう使うかというところになる。まずは筆者の例を基に、具体的にどう使えそうかというのを模索してみよう。
WebDAVはプロトコルにHTTPを使っているが、WebDAVで利用するメソッドを取り扱えるクライアントが必要である(単なるWebブラウザではWebDAVによる拡張機能は利用不可)。Windows系クライアントについてはWebフォルダが、UNIX系クライアントについてはcadaverをはじめとしていろいろある(中編参照)ので、自分の用途に合ったものを選択してほしい。また、WebDAV Resources(http://www.webdav.org/)からたどれるところにも、サーバ/クライアントが紹介されているので、そちらも併せて参考にされることをお勧めする。
■Webフォルダの利用と問題点
筆者の場合、WebDAVは主にWindowsのWebフォルダ経由で利用している。問題点としては、サーバ上のファイル権限がすべてHTTPサーバが動作しているプロセスのオーナー(筆者の場合はHTTPというユーザー)になってしまうところであるが、読者の運用の参考になれば幸いである。
■davfsの利用によるマウント
davfsは、http://dav.sourceforge.net/にて開発が進んでいるLinux用(カーネル2.4.3以上がターゲット)のファイルシステムドライバである。このドライバを使うことで、WebDAVサーバが提供する領域をdavfsとしてファイルシステムにマウントできる。詳細な使い方は、davfsのアーカイブ中のドキュメントを参照してほしい。
以下に、実際にDAV領域をマウントした様子を示す。
$ mount |
■Sambaと組み合わせた利用と注意点
日本Sambaユーザ会(http://www.samba.gr.jp/)がリリースしているSamba 2.0.7日本語版リリース2.1以降では、ファイルシステム上に格納するファイル名のコーディングシステムにUTF8を指定できるようになっている(ja-2.0でもOKだがバグありとのこと)。これに着目すると、smb.confで
coding system=UTF8 |
と設定すればUTF-8な日本語ファイル名が利用できるようになる。詳しい設定については、Samba日本語版のドキュメントを参照するなりしてほしい。
このフォルダをローカルネットワークではSamba経由で、リモートではWebDAV経由で共有することで、日本語ファイル名も同じように取り扱えるようになる。画面7で参照したフォルダの内容をSamba経由で見た様子を画面8に示す。
![]() |
画面8 Sambaでアクセスしてもファイル/フォルダ名が正しく表示されている |
ただし、現状では作成されるファイル名やファイルのオーナー/パーミッション、同時アクセスなどについて注意する必要がある。
例えばファイル名については、現状のiconv()の仕様から「−」「〜」「¥」「\」「¬」などの文字を含むファイル名は、mod_encodingを利用した際にシフトJISからUTF-8変換の時点で不具合を発生させる可能性が高い。画面9に、実際に不具合が起きた例を示す。一見うまく動作しているように見えても、表示を更新したり実際にアクセスしたりすると動作がおかしくなる。
![]() |
画面9 一部の文字では、このように問題が発生する |
なお、上記のSamba日本語版では、画面10のようにこの部分を独自に実装し、不具合が発生しないようになっている(注)。
![]() |
画面10 Samba経由なら「−」「〜」「¥」「\」「¬」といった文字も正しく処理されている |
注:Sambaでこのようにうまく見えているフォルダをWebフォルダ経由で操作しようとしても動作がおかしくなる。また、画面9のような形でファイル名の表示がおかしくなったフォルダは、Samba経由でも操作できない。 |
なお、Webフォルダ経由で作成したファイル/フォルダ名が化ける問題はTaisuke Yamada氏も認識している。
筆者も、この問題に対処すべく実装を進めてきた。そして、かなり強引な方法ではあるものの、対策用の実装はできている。また、この副産物としてiconv()がなくても使えるものになった。ある程度形になった段階で、この実装は何らかの形で公開させていただくので楽しみにしていてほしい。
バージョン管理の実装「Subversion」
![]() |
図7 mod_davとSubversion(Versioning Provider)の関係 |
RFC 2518では、WebDAVプロトコルの「Authoring」のみが規定されている。WebDAVの「V」の部分であるVersioningについては、現在DeltaVプロジェクトが出しているInternet Draftがあるのみだが、これとは別にWebDAVのVersioningの実装がリリースされている。それがSubversion(http://subversion.tigris.org/)である。
Subversionは、mod_davのバックエンドとして動作するバージョン管理エンジン(Versioning Provider)である。図7にmod_davとSubversionの関係を示す。
Subversion自身のバージョンは、現時点ではPre-Alphaというものであるが、tarアーカイブとして取得が可能になっている。プロトコル的にDeltaVを知ることは大事であるが、使える実装があるということ、そしてそれを利用できることも重要である。
なお、SubversionはVersioningプロトコルとしてはDeltaVの仕様をサポートしている。また、2001年10月1日にhttp://www.webdav.org/で公開されたアナウンスによると、DeltaVのステータスはIETFのProposed Standardになったとのことである。
■Subversionのインストール
1.インストールの前提条件
Subversionをインストールするには、以下の条件を満たす必要がある。
CVSスナップショットから取得可能なApache 2.0がDSO利用可能な状態でインストールされていること
理由は以下のとおりである。
なお、筆者は以下のスナップショットを利用した(注)。
apr-util_20010915041912.tar.gz
apr_20010915041901.tar.gz
httpd-2.0_20010915041212.tar.gz
注:なお、Subversionについても同時期にリリースされたアーカイブを利用している。 |
Subversionを利用するうえで注意してほしいのは、これはあくまで開発版であり、インストールしたから使えるという保証はどこにもないことである。また、既存の環境に影響を及ぼさないとも限らないため、これらの作業を行うマシンは環境が壊れても問題ないものであることが望ましい。
2.アーカイブの入手
まず、http://subversion.tigris.org/よりSubversionのソースコードを入手する。筆者はsubversion-M3-r88.tar.gzを入手した(注)。ちなみに、Subversionの最新スナップショットを入手する方法として、Subversionのクライアントを作成し、それを用いることもできる。
注:subversion-M3-r202.tar.gzというアーカイブもあるが、こちらを使うとリポジトリ操作が妙に遅いという問題がある。 |
また、サーバモジュールのコンパイルにはBerkeley DBの最新版(2001年9月15日時点で3.3.11が最新)が必須である。筆者は、http://www.sleepycat.com/からdb-3.3.11.tar.gzを入手した。
3.アーカイブの展開からインストールまで
まずsubversion-M3-r88.tar.gzを展開し、作成されたディレクトリの直下にdb-3.3.11.tar.gzを展開する(注)。
注:手順は、アーカイブを展開すると生成されるnotes/dav_setup.txtというファイルに記述があるので参考にしてほしい。 |
その後、
$ mv db-3.3.11 db |
と実行する。また、/etc/ld.so.confにdb-3.3.11のライブラリが格納されている場所を追加して、
# ldconfig |
を実行しておくと後々ラクである。逆にいうと、これを実施しておかないとSubversionのモジュールを追加したApacheの実行時に、Berkeley DBの共有ライブラリが見つからないというエラーが出る。
■リポジトリの作成とApacheの設定
インストールが終わったらとりあえず実行……といきたいところだが、実行に当たっては以下の準備が必要となる。
1.リポジトリの用意
バージョン管理を行うためのリポジトリの用意は、Subversionをインストールしたコンピュータ上で実施する。
$ svnadmin create /home/svn/sample
|
とすることで、/home/svn/sampleディレクトリ下にファイル/ディレクトリ構造が準備される。
/home/svn/sampleディレクトリ下は、以下のようなディレクトリ構造が生成されている。なお、これらのファイルはApacheのuserディレクティブで指定されたユーザー/グループの権限になるので、このディレクトリ配下を当該ユーザーで操作できるように設定しておく必要がある。
# ls -R /home/svn/sample |
2.Apacheの設定
make installを実行した時点で、httpd.confには
LoadModule dav_svn_module modules/libmod_dav_svn.so
|
という行が追加されていることと思うが、さらにhttpd.confの一番下(ドキュメントにはこう記述がある)に、以下のような記述を追加する。
<Location /svn/repos> |
3.Apacheの起動と動作確認
ここまできたら、普通にApacheを起動する。これで、Subversionが利用できるようになる。
ちゃんと機能が利用できるかを確認するには、OPTIONSコマンドを発行するのが手っ取り早い。結果として、以下のような行が出力されれば問題ない。
$ telnet localhost 80 |
■Subversionの簡単な利用
インストールも困難だが、実は利用するのも一苦労である(注)。理由は簡単、ドキュメントがあまりそろっていないのである。主要なコマンドのリファレンスは、コマンド実行時のヘルプくらいしかないというのが現状である。
注:実は、筆者もかなりハマった。コンパイルだけでなく、使い方が分かるまでにもかなりの時間を費やした状態である。 |
Subversionのインストールによって作成される実行プログラムは、主に以下の3つである。それぞれどこで実行するか、どのような機能を持つかを示しておくので参考にしてほしい。
svnadmin | ||
用途: | リポジトリの新規作成および管理 | |
実行場所: | リポジトリを作成する(もしくは存在する)コンピュータ上で実行 | |
例: | svnadmin create /home/svn/sample | |
svn | ||
用途: | リポジトリの操作 | |
実行場所: | クライアント上で実行 | |
例: | svn import http://localhost/svn/repos ./sample | |
svnlook | ||
用途: | リポジトリを見る | |
実行場所: | リポジトリを作成したコンピュータ上で実行 | |
例: | svnlook /home/svn/sample |
また、リポジトリに含まれるコンテンツ一覧を見たりするだけならば普通のWebDAVクライアント(例えばWindowsのWebフォルダ)が使える(PROPFINDメソッドを使用)。内容を取得するのであれば普通のWebブラウザを用いることで実現できる(GETメソッドを使用)。
■簡単な実行例
最後に、Subversionの実行例を挙げる。リポジトリにコンテンツをインポート(import)する場合、
$ svn import http://localhost/svn/repos
. |
上記の実行例ではユーザー認証を設定していないため、ユーザー名もパスワードも入力していない。ユーザー認証を有効にしたい場合は、通常のApacheの認証設定を<Location>ディレクティブの中で行えばよい。
importも含め、svnのサブコマンドを表7にまとめておいた。参考になれば幸いである。
サブコマンド名
|
書式
|
機能
|
add | add [TARGETS] | 新しいファイルをバージョンコントロール対象に追加する |
unadd | unadd [TARGETS] | ddを無効にする |
co | co REPOSPATH1 [REPOSPATH2 REPOSPATH3...] | 指定したURLにあるリポジトリの内容を作業ディレクトリにチェックアウトする |
ci | ci [TARGETS] | 作業ディレクトリの変更内容をリポジトリにコミットする |
delete | delete [TARGETS] | 指定したファイルやディレクトリをバージョンコントロール対象から外す |
undelete | undelete [TARGETS] | deleteを無効にする |
help | help [SUBCOMMAND1 [SUBCOMMAND2] ...] | ヘルプメッセージを表示する。SUBCOMMAND1(,SUBCOMMAND2) と指定することで、指定コマンドのヘルプを出力する |
import | import REPOS_URL [PATH] [NEW_ENTRY_IN_REPOS] | 指定したファイルもしくはディレクトリツリーをリポジトリにインポートする |
proplist | proplist [TARGETS] | TARGETSで指定したファイルやディレクトリのプロパティ一覧を表示する |
propget | propget PROPNAME [TARGETS] | TARGETSについて、PROPNAMEで指定した名前のプロパティの値を取得する |
propset | propset PROPNAME [PROPVAL | --valfile VALFILE] [TARGETS] | TARGETSについて、PROPNAMEで指定した名前のプロパティに値PROPVAL(もしくはVALFILEに記述された値)を設定する |
propdel | propdel PROPNAME [TARGETS] | TARGETSについて、PROPNAMEで指定した名前のプロパティを削除する |
status | status [TARGETS] | TARGETSについて、作業用コピーファイルやディレクトリの状態を出力する |
diff | diff [TARGETS] | TARGETSについて、ローカルファイルの変更点をdiff形式で出力する |
update | update [TARGETS] | TARGETSについて、リポジトリから作業用のコピーに変更を反映する |
cleanup | cleanup [TARGETS] | TARGETSについて、再帰的に作業用コピーのクリーンアップやロックの除去、そのほか終了していない操作などの後始末をする |
revert | revert [TARGETS] | TARGETSについて、元の作業ファイルを復旧する(ローカルファイルに対するすべての操作をアンドゥする) |
表7 TARGETSはローカルのファイル/ディレクトリ名、REPOSPATHはリポジトリを表すURLである |
充実が期待できるWebDAV環境
WebDAVの標準化は軌道に乗り始めたばかりであり、大きな標準化プロジェクトがいくつか走っている。DASLはリソースの検索に関して、ACLはリソースのアクセスコントロールに関して、DeltaVはバージョン管理についてそれぞれ標準化を行っている。それぞれのプロジェクトのページは、以下のとおりである。
DASL: | http://www.webdav.org/dasl/ | |
ACL: | http://www.webdav.org/acl/ | |
DeltaV: | http://www.webdav.org/deltav/ |
参考資料
・RFC 2291
ftp://ftp.nic.ad.jp/rfc/rfc2291.txt
Requirements for a Distributed Authoring and Versioning Protocol for the World Wide Web
・RFC 2518
ftp://ftp.nic.ad.jp/rfc/rfc2518.txt
HTTP Extensions for Distributed Authoring -- WEBDAV
・WebDAV Resources
http://www.webdav.org/
WebDAV に関する情報が集約されている
・IETF WEBDAV Working Group
http://www.ics.uci.edu/pub/ietf/webdav/
IETFのWebDAV WGのページ
・DASL
http://www.webdav.org/dasl/
・ACL
http://www.webdav.org/acl/
・DeltaV
http://www.webdav.org/deltav/
・Subversion
http://subversion.tigris.org/
・mod_encoding.c
http://www.lyra.org/pipermail/dav-dev/2001-May/002428.html
・Microsoft 「WebDAVの発行」
http://www.microsoft.com/JAPAN/developer/library/jpiis/core/wcwbdav.htm
・「FTPとDAVで作るファイル公開システム」
UNIX USER 2001年10月号
・WebDAV入門
1600円+税、ジャストシステム出版部 ISBN4-88309-220-8