第何何曜日 再び

昨年末に「2013年に読まれた記事トップ10」を書く際にサイト統計を見たのですが、圏外すぐに「第何何曜日」がありました。古い記事ですが、それなりによく読まれています。

ところでいま調べなおしてみたら、PHP の strtotime() には便利な機能があるではありませんか。前の記事を書くときには見落としていたのか……。前の記事の脚注を見ると PHP 4 と書いているから、まだ使えなかったのかな。

というわけで、いま風に書き直してみます。

Y 年 m 月の第 i の w 曜日は、その月の d 日か

PHP ならこれはもう簡単で、そのまま書くだけです。

Y, m, i, w という記号では書きにくいので、具体的に「2013年12月の第3木曜日」を例にすると、

$d = date("d", strtotime("third Thursday of Dec 2013"));

です。「今月の第3木曜日」なら “third Thursday of this month” ですし、「次の第3木曜日」なら “third Thursday” だけです[1]。なんて簡単なんだ。

ここに日本語が使えると便利なのですが、さすがにそこまではできないようです。というのは、「おととい」を指定するのが、英語だと “day before yesterday” で、まどろっこしいからです。日本語だと今日の前後2日までは短い言葉があるのに[2]、英語だと前後1日までで、その先は持って回ったような言い方になってしまいます。話はやや違いますが、PostgreSQL の SQL でも “today”, “yesterday”, “tomorrow” のキーワードは使えるのですが(ほかの DB はどうなんでしょう?)、「おととい」をしょっちゅう入力したい私はしかたなく日付を使っていて、どうにかしたいなあと思っているのでした。

さて、前の記事の際の動機はゴミの収集日でした。「第 2, 4 月曜日」だとすると、次のゴミの日は

$gomi = date("Y-m-d", min( strtotime("second Monday"), strtotime("fourth Monday") ) );

で済みます。

ちょうど当該日にこれを実行すると、その日になります。しかしゴミの収集時刻 14:00 を過ぎていたら次の収集日を出力してほしいですね。

$base = ( date("G") <= 14 ) ? strtotime("today") : strtotime("tomorrow");
$gomi = date("Y-m-d", min( strtotime( "second Monday", $base ), strtotime( "fourth Monday", $base ) ) );
}

ちょっときれいじゃない気がするけど、こんなのでいいのかなあ。

  1. なお、この書式でも「第5週」の場合は注意が必要です。
  2. その先も「さきおととい」とか「しあさって」あたりまでは、たまに耳にします。

日本語スタイルガイド項目別比較一覧表

JTF日本語標準スタイルガイド」というのを見つけました。

2012年1月30日1.0版です。簡潔にまとめられていてわかりやすいです。迷うようなところは両論併記であとは使う方に任せるとなっているところもあるため、これだけで、というよりこれをベースにしてローカルルールを補うというものになるのかもしれません。「商業目的を含む翻訳作業時の日本語表記ガイドラインとして自由に配布、複製、使用できます。」と明記されているので安心です。

基本ルールの 原則として記号類は全角で表記する。 を「半角」とすればそれだけで、いま私が関わっている翻訳作業のルールにほぼ合致しそうです。ただし具体例があまり多くないので、その点は以前に見つけた日本語スタイルガイド」(PDF)のほうが参考になります。

さて、そのあとも検索を続けていたら、このJTF日本語標準スタイルガイド作成する過程にまとめられたと思われる、「日本語スタイルガイド項目別比較一覧表」を見つけました。これはすごい。とても個人でできる作業ではありません。標準ガイドの付録としてでも公表しないのはもったいないくらいに思います。ぜひ参考にしたいと思います。

カタカナ表記について—マイクロソフト スタイルガイド

参考資料として。マイクロソフトスタイルガイド

手軽に参照しにくいので、ここに要点のみをメモ。

次の場合の「か」はひらがな書きとする。カタカナは使わない。
例:「3 か月」 (「3 ケ月」「3 ヶ月」「3 カ月」「3 ヵ月」としない)
次の場合の「こ」は漢字とする。カタカナは使わない。
例:「5個」 (「5 ケ」「5 コ」としない)

長音符号

まず規準は、平成3年6月28日 内閣告示第2号「外来語の表記」
英語の末尾が -er, -or, -ar のとき、長音符号を付ける
英語の末尾が上記以外(すなわち、-y も)の場合、
カタカナが4字より短い場合(促音「ッ」は1と数える。拗音は数えない)、長音符号を付ける
  • 例:「キー」「メニュー」は付ける。「メモリ」「プロシージャ」は付けない
  • 英語が接頭語+語幹の場合、語幹で考える。例:「プレ+ビュー」「サブ+ツリー」「インター+フェイス」
  • 上記の例外は一覧表を参照

異体字同一視検索

PostgreSQL をバックエンドに、フロントエンドを PHP でどうにか書いて、自前のデータベースを仕事に使っています。そこでたまに異体字を同一視してほしい(たとえば「斎藤」さんだったか「齊藤」さんだったかうろ覚え)ときがあるのですが、それほど頻度も高くないし、人間が注意して対処(「読み」も登録しているので「さいとう」で検索)すれば乗り切れるので、つい後回しにしていました。

そろそろ何とかしなければ、と web を検索したところ、「異体字同一視検索」を見つけました。そう、以前に調べたときにこの方と同じく「漢字データベースの異体字データベース」を見つけてはいたものの、そこからどうしようと思いながらそのままにしていたのでした。

さっそくそのページの説明のとおりに自分のスクリプトに組み込みました。こちらでは日本語のいわゆる旧字体があれば十分で、簡体字は必要ではないのですが、そのままで快適に機能しています。このように情報を公開していただいていることに大変感謝しています。

subscribe の訳語は「継読」で

RSSフィードやメーリングリストなど、subscribe の訳語を「購読する」、名詞形の subscription を「購読」としているのを目にする機会がしばしばあります(ほかに文脈に応じて「登録」や「加入者」(subscriber の訳として)としている場合もありますが、ここでは専ら「購読」について考えます)。
RSS フィードをはじめとして、インターネットでは、ある情報の更新を何らかの手段で通知するための機能がいろいろとあり、特定の情報をその管理下におくように指定することを “Subscribe” (署名する、賛同する、予約する、購読する、などの意) といいます。
この訳語がどうもしっくりこないと感じているのは、私だけではないようです。違和感は「購」が、代価を支払う、という意味を持っているところにあります。
「購読」とは「金を払って読む」事であって、ウェブ上の、いくらでも無料で参照できるリソースに対して使用する語ではないだらう。初めてこれらを「購読」した時、「え、金かかんの?」と思ったものだ。
ほかに適切な訳語があればきっとそれが当てられているでしょうから、しかたないということのようです。
だったら、「RSSフィードを購読する」よりももっと適した日本語訳があるかというと…これが意外と難しいようで…。
適切な語がないのだったら造ればいいのか、「統計」や「神経」だって最初はそうだったのだ、などと思いながら布団に入り込み、あれこれ考えているうちに「継読」というのを思いつきました。我ながらこれはなかなかいいと悦に入って眠りにつきました。 翌朝、「継読」で検索してみると、意外に多く引っかかりました。読書界(?)で多く使われているようで、特にシリーズ物を次々に読んでいくことを指している用法も見受けられ、ちょうどここで考えている意味とも合致しそうです。そのほかにメールマガジンに対して用いられているものも見つかりました。そして、ここでの主張と同じものも発見しました(『購読』ではなく『構読』や『継読』にすべき) この造語の最初の発案者にはなれませんでしたが、あらためて
  • subscribe は「継読する」
  • subscription は「継読申込」または短くして「継読」
と訳してはどうかと主張します。 この語の難点のひとつは、見た目が「継続」に似ていて、「間違いじゃないの?」と思われそうだというところでしょうか。

外来語のカタカナ表記の末尾の長音について

1年ほど前にマイクロソフト社の方針変更で話題になったものですが、今ごろになって書いてみます。

検索してみると、これについて論じているページはたくさん出てきます。そもそもカタカナ表記はどうしても元の発音を表現できないので長音をつけてもつけなくても五十歩百歩(例えば、「カタカナ語の長音表記」について)という主張は、そのとおりだと思います。

例えば「コンピュータ」と「コンピューター」を(これが英語の computer のことだという知識があると難しいのですが、その発音を思い起こしてしまわないように注意しながら、単純に日本語のカタカナだと思って)発音して比べてみると、後者のほうが「タ」のアクセントが強くなります。たぶん私だけでなく一般的にそうだと言ってもいいと思います。英語ではありませんが、「イタリア語では長音を区別しないが、単語を単体で発音するとアクセント位置が長くなる(単子音の場合は顕著)ので」長音を使うとしている場合もあります。つまり逆に考えると、カタカナに長音があるとそこにアクセントが置かれやすいことの現れです。

私は素人なのでこれ以上詳しく述べることはできませんが、検索しても英語のカタカナ表記の長音とアクセントについて言及しているものがあまり多くは見つからないのは意外でした。

私自身は、五十歩百歩とはいえ少しでも隔たりの小さいほうがまし、という考えで、不要なアクセントを作ってしまう語末の長音には賛成しません。

第何何曜日

日付を尋ねる場合に「何年何月何日」のようにあいだに別の語が挟まればいいのだが、「第何何曜日」というのは言いにくい[1]。次のような事情で「第何何曜日」を求める方法を検索したく、この単語でいいのだろうかと思ったが、やはり仕方ないのかこのまま書いてあるのがいくつか見つかった。ともあれ意味は通じるし、そもそも未知のところを「何」に置き換えればほぼそのまま表現できる日本語は強力だ。

さて、その事情というのは……うちの資源ゴミの収集日は「第 2, 4 月曜日」だ。うっかり忘れてしまうことがしばしばあるので、収集日 (の前日) に自分宛にメールを飛ばそうと考えた。cron では「第何何曜日」という指定はできないので、スクリプトのほうで判定する。せっかくだからメモしておく。

Y 年 m 月 d 日は、その月の第 i の w 曜日か

これは検索ですぐに見つかった。曜日は、PHP なら求める手段は用意されている。

$i = floor(($d+6)/7);
$w = date("w", strtotime($Y . $m . $d));

Y 年 m 月の第 i の w 曜日は、その月の d 日か

上の逆だから簡単だと思ったが、何度か試してみてようやく

$w1= date("w", strtotime($Y . $m . "01"));
$d = $i*7-6 + ($w+(7-$w1))%7;

とした。ここで $w1 は当該月の 1 日の曜日である。$d が当該月の最大日を越えない判定が必要かもしれないが、ゴミ収集日はたいていの場合 5 回目の曜日には設定されないので省略した。

【追記】5年半ものあいだをおいて、続きを書きました

ところでこのために PHP マニュアル日付・時刻関数を見ていたら、日の出時刻日の入り時刻を返す関数というものまであるではないか[2]

現代の都市生活者には日の出・日の入り時刻より、ゴミ収集日を返す関数のほうがありがたい。……と思ったら、この日の出・日の入り時刻関数は宗教上の必要から作られたらしい。別に農耕狩猟生活のためというわけではなかった。

  1. 「第何週の何曜日」というと誤解を招く。今月はたまたま 1 日 が日曜日だからいいとして、たとえば来月 (2007年5月) の「第 2 週の月曜日」は 7 日? 14日?
  2. 残念ながらここのサーバは PHP のバージョンが 4 なので、これらを使えない。