orangeProse別館

orangeProse(本ブログ)の補助

長田弘の詩集のこと3

※この一連の長田弘にかんする記事では、とくに断りのないかぎり、2015年『長田弘全詩集』(みすず書房)を典拠とする。10月2日の朗読会も、本『全詩集』を典拠として行われる。したがって、『言葉殺人事件』の「バラード」シリーズはすべて「バラッド」で統一されている。

今回とりあげるのは、やはりNursery Rhymeマザー・グース)ネタの「そして誰もいなくなるバラッド」。言うまでもなく、アガサ・クリスティーの『そして誰もいなくなった』も、この作品に響鳴を与えている。周知のように、アガサ・クリスティーの同作は、伝承童謡を使った「見立て殺人」ものであり、さらに孤島で行われる「クローズド・サークル」ものの大傑作である。10人いた客が、1人殺されて9人になり、次に8人になる。殺されたものは例の伝承童謡を連想させる死に方をしている。10個あったインディアン人形は8個に減っている。残されたものは、例の伝承童謡をなぞった「見立て殺人」が起こっていると気づく。「あの唄」の通りだとすれば、さらに殺人は続いていくはずだ……。

元になっている童謡もそれほど長いものではないが、長田バージョンはさらに半分ぐらいにカットして、とても短くなっている。全文引用しておく。

そして誰もいなくなるバラッド

とに革命、かに革命!

一人が叫ぶと、十人集まる

一人が青ざめ、九人になる

一人を吊るし、八人になる

一人が澱んで、七人になる

一人がくるう、六人になる

一人が転んで、五人のこる

一人が逃げる、四人のこる

一人が自嘲し、三人のこる

一人たばかり、二人のこる

一人は一人を打ち倒す

最後の一人を見たものはなし

そして誰もいなくなる

革命、夢の引算

(『長田弘全詩集』124頁)

『言葉殺人事件』にかんしては、『全詩集』への再録にあたって、様々な変更が加えられているのだが、この「誰もいなくなる」にかんしては、使用されるイラストの削除が印象を大きく変えている。『言葉殺人事件』は全編にわたってホセ・グアダルーペ・ポサダのイラストが使われているが(これが『全詩集』に使われなかったのも大きなことだが)、「誰もいなくなる」では、長田が元ネタに使っているオーピー夫妻のオックスフォード版集成からイラストを借りている。

f:id:hidex7777:20160920165021j:plain

f:id:hidex7777:20160920164921j:plain

この歌の原文、

Ten little Injuns went out to dine;
One choked his little self, and then there were nine.

「食事に行ったら、1人は喉詰まらせて窒息」で始まり(引用はオーピー夫妻版から)、

Seven little Injuns chopping up sticks;
One chopped himself in half, and then there were six.

「薪を切りに行ったら、1人は自分を真っ二つ」

Two little Injuns sitting in the sun;
One got frizzled up, and then there was one.

「日向ぼっこしてたら、1人はジュージュー焼かれた」とろくな目にあわないのだが、最終的には

One little Injun living all alone;
He got married, and then there were none.

「残った彼は結婚し、そして誰もいなくなった」というわけで、結婚相手の女性(?)がイラストにあるのは、そういう意味なのだった。

長田バージョンでは、《一人たばかり、二人のこる》の下に2人がイラストで示され、《一人は一人を打ち倒す》の下に1人が示される。そこまではいい。たぶん、そのイラストの男が「打ち倒」した結果、勝ったのだろう。ところが次の連(行としては空行がある、ので、連としておく)では《最後の一人をみたものはなし》とあり、下には女のイラストがある。最終2連では、何のイラストも示されず、文字通り「そして誰もいなくなる」のである。ほんとうに《みたものはなし》なのだろうか。はじめにはいなかった女は、どこからやってきたのだろうか。消えた10人と、なんの関係があるのだろうか。

オリジナル版が、童謡らしい、ナンセンスな、ばかばかしい、ふざけた、脳天気な残酷さを歌っているのに対し、クリスティーのミステリは、この脳天気な残酷さを逆手に取った、不穏で不気味で、ホラーな雰囲気を醸し出すのに成功しているといってよい。長田ヴァージョンは、この2つの元ネタをカットアップ&リミックスし、「能天気かつ不穏」という奇跡的なテクスチャーを作り出すのに成功している。しかし、あの女は誰なんだ……(サークルクラッシャーかな?)。

ところでこのクリスティーの名作、1939年、イギリスで出版された当時は、Ten Little Niggers(10人の黒んぼの子)というタイトルだった。流行していた童謡のタイトルそのままだった。で、当然、アメリカではniggerというアフリカ系アメリカ人に対する蔑称が含まれるこのタイトルは使えず、And Then There Were Noneそして誰もいなくなった)と改題される。後に、イギリスでもこのタイトルに改題されることになる。邦訳もこれに準じているのだろう(邦訳タイトルが『10人の黒んぼの子』だったら何の小説か、さっぱり分からない)。

この"And Then There were ..."というフレーズは、英語の慣用句にさえなっている。前回もアンチョコに使った平野本によれば、新聞の見出しによく使われ、ボクシングでライバルの一方が倒れると「そこで一人になりました」だし、環境汚染である生物が絶滅すると「そこでゼロになりました」である(平田[127頁])。元の童謡の最終行は、すべてand then there were ... で終わっている(oneが主語のときだけwas)。ゼロはnone(否定主語)。英語には否定主語があるから、こういう統一ができる。「バラッド第一番」から借りれば、

あゝ、
始末がわるいよ。
おれたちの言語には
否定主語がねえんだよ。

(『長田弘全詩集』139頁)

ということなのだった。北原白秋もこの歌は訳していて、最終段落のみ、言い回しが変わっている。

十人のくろんぼの子供

十人よ、くろんぼの子供が十人よ。
おひるによばれてゆきました。
ひとりがのどくびつまらした。
そこで、九人になりました。

(中略)
三人よ、くろんぼの子供が三人よ。
こんどは動物園へいったれば、
くまめがひとりをひん抱いた。
そこで、ふたりになりました。

ふゥたりよ、くろんぼの子供がふゥたりよ。
かんかん日だまりィすわりこみ、 ひとりがちぢれてやけしんだ。
そこで、ひとりになりました。

ひィとりよ、くろんぼの子供がひィとりよ。
いよいよ、たったひィとりよ、
その子がお嫁とりにでていった。
そこで、だァれもなくなった。

(北原白秋訳 まざあ・ぐうす)

伝承童謡と言ったが、この歌に関しては、作者が判明している。原作は1868年、アメリカ人セプティマス・ウィナーによって作詞・作曲された。タイトルはTen Little Injuns(10人のインディアンの子)。同年末、もしくは翌年、イギリス人フランク・グリーンによって翻案される。タイトルはTen Little Nigger Boys(10人の黒んぼの子)。で、翻案であるはずのイギリス版の方が、有名になってしまった。これはもちろん、ポリティカル・コレクトネスから言ってまずいので、イギリス版はやがて消え、オーピー夫妻の集成でもInjunsになっている。ポリティカル・コレクトネスから言うなら、injunというのもまずいので、Wikipediaによると、1940年代以降はTen Little IndiansもしくはTen Little Soldier Boysに変更されている。クリスティーの悪名高き新訳で「インディアン島」が「兵隊島」になっているのは、原作もそのように改変されているためだ。

次回はできれば「バラッド第一番」に入りたい。

(つづく)

これまでに書いた長田弘についての文章:

朗読会のお知らせ。ふくしま現代朗読会の第3回公演では、長田弘の詩を読みます。2016年10月2日(日)郡山市ホテルハマツ・ロビー(無料) 13:30~歌って踊れる3人娘は『詩の絵本』を読むみたい。

f:id:hidex7777:20160921230152j:plain

長田弘の詩集のこと2

この一連の長田弘関連の記事では、原則として、長田弘の詩の引用は、ことわりがない限り、2015年の『長田弘全詩集』(みすず書房)からである(前回の記事でこのことを書くのを忘れていた)。10月2日に行われる朗読会も、この『全詩集』を典拠としている。なので、『言葉殺人事件』の「バラード」シリーズはすべて「バラッド」で統一される。忘れないうちに、朗読会のプログラムをメモしておこう。ついでに『全詩集』の該当するページも書いておく。「立ちどまる」[290]、というのは『全詩集』の290頁に「立ちどまる」という詩が掲載されているという意味だ。

  • プロローグ 「立ちどまる」[290]『世界は一冊の本』(1994年/2010年definitive edition)
  • 第一部
    • 深呼吸の必要』(1984年)
      • 「あのときかもしれない 二」[145]
      • 「あのときかもしれない 四」[149]
      • 「あのときかもしれない 八」[157]
      • 「あのときかもしれない 九」[159]
    • 『食卓一期一会』(1987年)
      • 「言葉のダシのとりかた」[177]
      • 「天丼の食べかた」[182]
      • 「ふろふきの食べかた」[188]
      • 「餅について」[190]
      • 「きみにしかつくれないもの」[194]
      • 「パリ=ブレストのつくりかた」[203]
    • 『言葉殺人事件』(1977年)
      • 「バラッド第一番」[138]
      • 「ひとの歯のバラッド」[113]
      • 「幸福なメニューのバラッド」[127]
      • 「何のバラッド」[100]
      • 「一冊の本のバラッド」[115]
      • 「戦争のバイエル」[103]
  • 休憩
  • プロローグ 「静かな日」[274]『心の中にもっている問題』(1990年/2015年新編修)
  • 第二部
    • 『詩の絵本』(3冊より構成される。以下の2冊のほか、『ジャーニー』2012年)
      • 「森の絵本」[277](1999年)
      • 「最初の質問」[283](2013年)
    • 『人はかつて樹だった』(2006年)
      • 「世界の最初の一日」[463]
      • 「森のなかの出来事」[464]
      • 「海辺にて」[471]
      • 「立ちつくす」[472]
    • 『世界はうつくしいと』(2009年)
      • 「世界はうつくしいと」[518]
      • 「蔵書を整理する」[530]
    • 『詩ふたつ』(2010年)
      • 「花を持って、会いにゆく」[545]

『全詩集』の655頁に初出一覧があるのだが、「2015年新編修」という言い回しが二箇所出て来る。『メランコリックな怪物』と『心の中にもっている問題』。「新・編集」でなく、「新・編修」。前回、これがどういう意味なのか、疑問を呈したけど、なるほど、分かった。『全詩集』のために編集しなおした、という意味だった。『メランコリックな怪物』からは、無視できない数の詩篇が削除された。『心の中にもっている問題』は、1990年版を持っていないので、今のところ、分からない。

さて、前回に引き続いて、Nursery Rhymeマザー・グース)と『言葉殺人事件』の関係を見よう。今回は、「友人のバラッド」[107]という、これは個人的にはかなり好きな作品なんだけど(朗読会では、時間の関係上、読まれない)、とても短い。短いので、いきなり長田バージョンの方を全文引用しておこう。

友人のバラッド

友人がいた。
丘の下に住んでいた。
まだ死んでなければ
まだそこで生きてるだろう。
ただひとりの
ぼくの友人。

(『長田弘全詩集』107頁)

オリジナル版も短いので、北原白秋の訳と、原文もついでに引用しておこう。

あの丘のふもとに

あの丘のふもとに
おばあさんがござった。
もしも去(い)なんだら
まだ住んでござろ。

There was an old woman
Lived under a hill,
And if she's not gone
She lives there still.

(北原白秋訳 まざあ・ぐうす)

長田が準拠しているNursery Rhymeは、オーピー夫妻によるオックスフォード版で、僕もこれを持っている。アンチョコとしては平野敬一『マザー・グースの唄』(中公新書、1972年)が面白い、というか、マザー・グースに関する研究書は本当に少なくて、40数年前のこの本にいまだに頼らなければならないという現状はどういうことなんだろうか、と思う(まったくなくはないのだけど、Amazon検索でもこれがトップだし、いまだに版を重ねている新書なので、一般的な書店で気軽に買えるのはこれぐらいじゃないかしら)。完全に余談だが、小学校で英語を必修化したら、アルファベット以外には、マザー・グースを徹底的に叩き込んで欲しいし、そうすべきだし、それ以外にはマジで何もやらなくていいよ、と思っている。

で、平野本によると、Nursery Rhyme(イギリス伝承童謡)の集成、という仕事で言うと、今までに三つの大きなポイントがあった。(1)18世紀後半のニューベリーの集成、(2)19世紀中葉のJ.O.ハリウェル、(3)20世紀、とくに50年代に入ってからのオーピー夫妻の研究と集成。この中で超絶にスゴイ仕事、と言えば当然オーピー夫妻、ということになるのだけど、ここではニューベリーの集成に着目してみよう。というのも、オーピー夫妻のオックスフォード版も、ハリウェル版も、まじめに正面から伝承童謡に取り組んでいる、学問的な仕事で、まあ、逆に言うと、面白みがない。もちろん集められた童謡はどれもナンセンスでおかしくてばかばかしくて、それを読めれば十分でしょう、とは言える。ただ、ニューベリー版には、なんとも言えない魅力がある。ただでさえ短くて意味がなくてナンセンスな(おっと、同語反復? でも「ナンセンス」の「センス」には「常識」という意味もある)童謡に、さらにナンセンスでふざけていてわけのわからない「注釈」が付されているのだ。で、どうやら、この「注釈」は、ニューベリーと親しくしていたオリヴァー・ゴールドスミスが書いたものらしい。一説には、ニューベリー版には、伝承童謡にゴールドスミスの創作も紛れ込んでいるという説もあるらしいのだが、これは定かではない。

さっき引用した「あの丘のふもとに」に対して、ゴールドスミスはこういう注釈を付けている:

これは自明の陳述であり、それこそ真理の本質をなすものです。〈彼女は丘のふもとに住んでいました。もし立ち去っていないようでしたら、まだそこに住んでいるはずです〉と。これにあえて異を唱える人はいないでしょう。

(平野敬一『マザー・グースの唄』33-4頁)

これについて平野は《ポーカー・フェースで自明のことを述べるのは、イギリスの童謡の一つの特徴だが、ゴールドスミスの注釈のまじめくさったおとぼけぶりは、注釈されている童謡とみごとに呼応するものである》[34]と述べる。はい。

また脱線するけれど、ゴールドスミスのばかばかしい注釈で傑作なのが「黒羊」の唄で、これは北原白秋の訳もあるけれど、谷川俊太郎訳もあるので、谷川訳を引用する(孫引きでゴメン)。

めえ めえ めんようさん
 ようもう あるの?
あるとも あるとも ふくろにみっつ
 ごしゅじんさまに ひとふくろ
 にょうぼのやつに ひとふくろ
もうひとふくろは みちのはずれの
ひとりぼっちの ぼうやのためさ
(平野敬一『マザー・グースの唄』37-8頁)

原文で"Baa, baa, black sheep,"というところを、北原白秋は《べああ、べああ、黒羊(ブラックシイプ)》とルビで韻を説明しているのだけど、谷川訳は、さすがに見事というべきか。ところで、この唄へのゴールドスミスの注釈は《教訓――悪癖は明日克服するより今日克服する方が易しい》(平野、38頁)である。もう、ナンセンスの競争というか、悪ノリがすぎるというか、伝承童謡と注釈が見事に響き合って(この黒羊の場合にはすでに共通・呼応する要素がひとつもない)、めちゃくちゃテンションが高い詩集を読んでいる気分になってくる。

かなり脱線したけれど、「友人のバラッド」に戻る。原文の、丘のふもとのお婆さんの唄は、自明なこと(トートロジー)以外のテクスチャーを持っていない。ように見える。そうでもないのかな。でもThere was an old womanというのは、日本の昔話でいう「昔々あるところにお婆さんがおりました」ぐらいの言い回しで、感情移入を許さないようなところがあるように思う。それに対して、長田ヴァージョンには、抒情詩的なテクスチャーが持ち込まれている。

友人のバラッド

友人がいた。
丘の下に住んでいた。
まだ死んでなければ
まだそこで生きてるだろう。
ただひとりの
ぼくの友人。

(『長田弘全詩集』107頁)

ここで特権的なテクスチャーを持つフレーズは、「友人がいた」「ただひとりの/ぼくの友人」というたった3行の文で、それ以外は「丘のふもとの老婆」と変わらず、関与する要素が入れ替わっただけである(去っていなければ、と言わずに、まだ死んでなければ、と言っているのは、どうか。これは原文のlives there stillのliveを「住んでいる」と解さずに「生きている」と解釈しなおすという、積極的な再構築が行われていると考えてよい)。

There was an old womanのan(不定冠詞)は、初出のテーマの紹介という機能を果たしているのと同時に、任意性も意味している。つまり、この唄の老婆は、「どこの誰だかは分からぬが、ともかく一人の」という属性を備えた人物であり、この唄を歌うときには、そのような属性を備えた、任意の誰かに対する態度が歌い手に発生する。それに対し、「友人」は、任意ではない。友人という一般名詞について語られているのではない。「友人」と言うとき、その人物の「どこの誰なのか性」というべき属性が、込められている。このとき、この詩を読む我々のうちには、否応なしに、特定のどこかの誰かに対する態度が発生してしまう。

かなり飛躍したことを言おう。僕の電波力をフルに発揮するなら、この「友人」とは、ポール・ニザンである(エビデンスはない)。1940年、ダンケルクの戦いから撤退するさなか、戦死した、エマニュエル・トッドの祖父、ポール・ニザンポール・ニザンへの長田弘の友情の念にかんしては、以前、別のところで書いた。僕の(電波力を最大限に発揮した推理にもとづく)考えでは、「バラッド第一番」の作中主体は、別の世界線のポール・ニザン、別の生を生きたポール・ニザンであり、また同時に長田弘であり、ポール・ニザンが死に損なった場合の、生まれ変わりとしてのニザン=長田である。これは(繰り返すが)エビデンスはないし、そうだったらいいなあ、という願望でさえない。むしろ、読者としての僕の電波力を音叉のごとく響鳴させる「バラッド第一番」の圧倒的な強度のもたらす、そうとしか思えない、という、幻想的確信である。

ということを書くからには、次回はいよいよ「バラッド第一番」について書くのかというとそうでもないのであった。

(つづく)

これまでに書いた長田弘についての文章:

朗読会のお知らせ。ふくしま現代朗読会の第3回公演では、長田弘の詩を読みます。2016年10月2日(日)郡山市ホテルハマツ・ロビー(無料) 13:30~歌って踊れる3人娘は『詩の絵本』を読むみたい。

f:id:hidex7777:20160921230152j:plain

長田弘の詩集のこと1

長田弘の詩について、これまでにあちこちで、いくつかのことを書いてきたけど、ぜんぜん言い足りなくって、書かないとなあ、と思って書きはじめた文章がたくさんあって、でもなんか違うんだよなあ、という感じがいつもつきまとうから、消してはいないけど「ボツ」フォルダに投げ込んでいて、実質、書いては消し、書いては消し、という状況が続いている。でも、ほんの少しでも公表したいという思いはあるので、方針を変えてみることにした。「長田弘の詩」について書こうとしているから、たぶん、書き足りない思いとか、なんか違うよなあという思いとか、発射不成功(不性交)みたいなことになっていると気づいた。「長田弘の詩」について書こうと思ったら、たぶん1年ぐらいあっても足りないんじゃないか。冷静に考えれば。そんなわけで、「長田弘の詩集」について書く。

今ものすごく気になっている長田弘の詩集は、第2詩集の『メランコリックな怪物』で、と言っても1973年に千部限定で出た思潮社版は(当然ながら)持ってなくて、1979年に出た晶文社版を持っている。これ(晶文社版)はたぶん、『メランコリックな怪物』と題される長田の詩集としてはいちばんたくさん、作品が収められている(『全詩集』の初出一覧に、「2015年新編修」というのが掲載されているのだけど、これって発売されたのだろうか? それとも、『全詩集』のために編集し直したという意味なのだろうか)。『全詩集』では、この『メランコリックな怪物』から、無視できない数の作品が削除されている。タイトルが変更されたものもあるし、他の詩集に紛れ込ませたものもあるし、他の詩集に入っていたものを『メランコリックな怪物』に紛れ込ませたケースもある。そういう点を考えると、『長田弘全詩集』という2015年に出た、まったく新しい彼の詩集といってよい「全詩集」は、奇妙な詩集だし、長田さんらしい人を食った詩集だともいえる。1979年といえば、1977年の第3詩集『言葉殺人事件』よりもあとのことで、第3詩集のあとに第2詩集がくるというのも、かっこいいと言えばかっこいい。で、今回は、『言葉殺人事件』のことを書く。(ここまで前置き)

この記事のタイトルを「長田弘の詩集のこと1」としたのは、『言葉殺人事件』について、何回かに分けて書くよ、という意味と、他の詩集についても書く機会があったら、ナンバリングを増やしていくよ、という意味とがある。できれば『言葉殺人事件』の「バラッド第一番」について、今月中に触れられればなあ、とは思っているけど。今なにげなく「バラッド第一番」と言ったけれど、『言葉殺人事件』の初版からしばらくは、「バラッド」ではなく「バラード」だった。「○○のバラッド」というタイトルの作品がたくさんあって、それはすべてもともとは初版以来「○○のバラード」というタイトルだった。たしか、ハルキ文庫から出ているアンソロジーでも、「バラード」というタイトルになっているはずだ。おそらく2015年の『全詩集』への再収録に際して、「バラッド」に変更されたのだろうと思っているのだけど、実際はもっと早い段階で「バラッド」になったのかもしれない。この辺の事情はよく分からない。僕は「バラッド」が気に入っている。

『言葉殺人事件』という詩集は、Nursery Rhymeマザー・グース)を主要な元ネタとして、古今東西の散文・韻文・歌・慣用句・引用された台詞の、長田ヴァージョンが繰り広げられる、わりと牧歌的で呑気な感じのする、カットアップ&リミックス集である。「牧歌的で呑気」と言ったのは、山田亮太の『オバマ・グーグル』があまりにストイックでヒリヒリする感じがするからで、まあ比較すべき対象ではないかもしれないけど、『言葉殺人事件』は「俺が俺が」という感じはする。いい意味で、だけど。あと、装画に使われているホセ・グアダルーペ・ポサダのリトグラフが、ラテン系の陽気な感じで、そういう見た目も印象に影響していると思う。

マザー・グース」ネタで、日本でも有名な「クックロビン」をネタにしたものが「誰が駒鳥を殺したか」。原題そのまんまである(マザー・グースに原題もへったくれもないが)。が、内容はもちろん違う。比較のため、「クックロビン」の北原白秋訳を引用する。Kindleで無料で読めるので、オススメ。

こまどりのお葬式

「だァれがころした、こまどりのおすを」
「そォれはわたしよ」すずめがこういった。
「わたしの弓で、わたしの矢羽で、
わたしがころした、こまどりのおすを」

「だァれがみつけた、しんだのをみつけた」
「そォれはわたしよ」あおばえがそういった。
「わたしの眼々で、ちいさな眼々で、
わたしがみつけた、その死骸みつけた」

「だァれがとったぞ、その血をとったぞ」
「そォれはわたしよ」魚がそういった。
「わたしの皿に、ちいさな皿に、
わたしがとったよ、その血をとったよ」
(北原白秋訳 まざあ・ぐうす)

これに続いて、甲虫、ひばり、鳩、フクロウ、などなど、みんな「自白」する。そして駒鳥の「お葬式(おともらい)」は滞りなく終了する。怖い。殺した雀がいきなり何の葛藤もなく、自白しているのが特に怖い。「本当は怖いマザー・グース」でググればわかるように、マザー・グースには意味もなく(?)残酷な歌が多い。まあ、子ども向けの民謡なので、ドリフっぽい首チョンパとか、そういうのが受けるんだろうという気もするし、古いので、死が身近だったというのもあると思う。

上に引用した部分に対応する、長田版「誰が駒鳥を殺したか」を引用する。

誰が駒鳥を殺したか

ある日、一羽の
駒鳥が殺された。

誰が殺した、
駒鳥を?

「ぼくじゃない」雀はいった。
「殺したやつだ、
殺されたやつを殺したのは」

では、誰がみた、
駒鳥が殺されるのを?

「ぼくじゃない」蠅はいった。
「殺したやつだ、
誰もみていない殺しをみたのは」

では、誰がみつけた、
殺された駒鳥を?

「ぼくじゃない」魚はいった。
「殺したやつだ、
まっさきに殺された駒鳥をみたのは」

言ってみれば、長田版は「考えオチ」というか(いや、オチないのだけど)、ひねくれている。雀が駒鳥殺害を自白しないのは分かる。いきなり物語の冒頭で犯人が自白したら、物語として成立しなくなる、ような気がする(ミステリ小説なんかでは、そういうのは少なからずありそうな気もするけど)。逆に言うと、オリジナル版の怖さは、いきなり雀が自白することで、問題の所在が別の論点に滞りなく移行する点にある。殺したのが雀なら、よろしい、では死んでいるのを見つけたのは誰だ、というふうに、なんの引っ掛かりもなく、次の論点に移る。オリジナル版の喚起する変な気持ちは、この歌が徹頭徹尾「駒鳥の死」をめぐって行われるコミュニケーションであるにも関わらず、別の何かをドキュメンタリータッチで描き出しているところにあるように思う。それは生と死に関わる人間世界の「手続き」の容赦なさとか、合理性や効率性とか、そういう荒々しさの手触りみたいなものがある。

長田版に戻ると、「ぼくじゃない」という登場人物(これはもちろん擬人化なので、人物といってよい)の台詞には、あまり意味がない。「殺したやつが殺したのだ」というトートロジーから出発して、「殺したやつが、殺されたやつが殺されるところをみたのだ」「殺したやつが、殺されたやつが殺されているのを一番はじめにみつけたはずだ」と、これら自体はトートロジーとは言えないかもしれないけど、トートロジーにぎりぎり近いようなことを積み重ねていって、どんどん情報の冗長性を高めていく。オリジナル版とは違う、別の「変な気持ち」が生じる。オリジナル版にあった、箴言・格言めいた「教え」は消えてしまって、詩的な効果としか言いようのない、奇妙な手触りを残す。この作品の最後尾には、「告示」と題された「張り紙」が貼ってあって(もちろんイラストだけど)、少しもったいぶった感じはするけど、この『言葉殺人事件』という詩集はちゃんとした詩集ですよ、という宣言にもなっている。

告示
殺されたものは
殺したものによって殺されたが
殺したものがいないのであれば
殺されたものもまたいないであろう
きみが殺されるまで

うーん、いま、「ちゃんとした詩集ですよ」と書いてしまったけれど、改めて引用してみると、この「告示」は、やはり、ちょっとやりすぎていて、というのは、格言・箴言めいた「教え」「教訓」の薫りがしてならない。読みすぎかもしれないけれど。文字通り受け取れば、駒鳥が殺されたという事実から出発したのに、殺したものがいないがゆえに、殺されたものもまたいない、という結論に至ってしまう、そのナンセンスなレトリックに面白さがある、とは言える(その意味では「ちゃんとした詩集」である)。でも、実際、世の中って、そうなってるよね、という社会批評的な教訓話にも見えてしまって、そこに僕としては、引っ掛かりを感じなくもない、ということなのだった。

(つづく)

これまでに書いた長田弘についての文章:

朗読会のお知らせ。ふくしま現代朗読会の第3回公演では、長田弘の詩を読みます。2016年10月2日(日)郡山市ホテルハマツ・ロビー(無料) 13:30~歌って踊れる3人娘は『詩の絵本』を読むみたい。

f:id:hidex7777:20160921230152j:plain

Gulpに挑戦

f:id:hidex7777:20150506225331p:plain ずっとフロントエンドのタスクランナーにはGruntを使っていましたが、Gulpがどんなものか触ってみたくなったので、勉強のために導入してみました。

なお、私の環境は

です。プロジェクトディレクトリはgit初期化済みで、リモートリポジトリもadd済みです。

インストール

まずNode.jsを最新版にします。Windows版はインストーラで一発です。

> node -v
v0.12.2
> npm -v
2.7.4

gulpをグローバルインストールします。

> npm install gulp -g
> gulp -v
> [11:10:14] CLI version 3.8.11

初期化など

プロジェクトディレクトリに移動してpackage.jsonファイルを作ります。

> npm init

gulpをローカルインストール。

> npm i -D gulp

gulpfileをCoffeeScriptで書きたいので、coffee-scriptをローカルインストールします。

> npm i -D coffee-script

.gitignoreファイルにnode_modules/を書いておきます。

node_modules/

ここまでをgit pushしておきます。

> git status
> git add .
> git commit -m "install gulp"
> git push origin master

各種モジュールのインストール

おそらく次のモジュールを使うことになるのであらかじめインストールしておきます:

  • gulp-sass
  • gulp-imagemin
  • gulp-coffee
  • gulp-concat
  • gulp-uglify
  • gulp-plumber
  • gulp-webserver
> npm i -D gulp-sass gulp-imagemin gulp-coffee gulp-concat gulp-uglify gulp-plumber gulp-webserver

gulpfile.coffeeのテスト

プラグインをいろいろ入れておきながらなんですが、gulpfileを書くのは初めてなので、テスト的なものを書いておきます。

gulp = require 'gulp'

gulp.task 'hello', ->
  console.log 'hello world!'

gulp.task 'default', ['hello']

結果

> gulp
[11:48:47] Requiring external module coffee-script/register
[11:48:47] Using gulpfile ~\dev\mysite\gulpfile.coffee
[11:48:47] Starting 'hello'...
hello world!
[11:48:47] Finished 'hello' after 177 μs
[11:48:47] Starting 'default'...
[11:48:47] Finished 'default' after 14 μs

うまくいきました。

タスクを書いていく

やることは、

  • ./src/imageにある画像を軽量化して./dist/imageに配置
  • ./src/coffeeにあるcoffeeファイルをコンパイル、結合、圧縮して./dist/jsに配置
  • ./src/scssにあるscssファイルをコンパイルして./dist/cssに配置
  • scss, coffee, htmlに変更があったらリロード
  • scssとcoffeeのコンパイルにエラーがあっても止めない

gulp-imagemin

imagemin = require 'gulp-imagemin'

gulp.task 'img', ->
  gulp.src ['./src/image/*.jpg', './src/image/*.png']
    .pipe imagemin()
    .pipe gulp.dest './dist/image'

gulp.task 'default', ['img']

gulp-plumber, gulp-coffee, gulp-concat, gulp-uglify

plumber = require 'gulp-plumber'
coffee = require 'gulp-coffee'
concat = require 'gulp-concat'
uglify = require 'gulp-uglify'

gulp.task 'js', ->
  gulp.src './src/coffee/*.coffee'
    .pipe plumber()
    .pipe coffee()
    .pipe concat 'all.min.js'
    .pipe uglify()
    .pipe gulp.dest './dist/js'

gulp.task 'default', ['img', 'js']

gulp-sass

sass = require 'gulp-sass'

gulp.task 'css', ->
  gulp.src './src/scss/*.scss'
    .pipe plumber()
    .pipe sass()
    .pipe gulp.dest './dist/css'

gulp.task 'default', ['img', 'js', 'css']

watchの記述

gulp.task 'watch', ->
  gulp.watch './src/coffee/*.coffee', ['js']
  gulp.watch './src/scss/*.scss', ['css']
  gulp.watch './dist/*.html', ['watch']

gulp.task 'default', ['img', 'js', 'css', 'watch']

webserverの記述

webserver = require 'gulp-webserver'

gulp.task 'webserver', ->
  gulp.src './dist'
    .pipe webserver{
      host: 'localhost'
      livereload: true
     }

gulp.task 'default', ['img', 'js', 'css', 'watch', 'webserver']

http://localhost:8000にアクセスできるようになりました。

できあがったgulpfile.coffeeはGistsにあります。

iiyamaのディスプレイがよかった話(グラボが壊れたと思ったらそうでもなかった)

年末年始には自分のための仕事を進めるつもりだったのだけれど、12月30日、ディスプレイにほとんどなにもうつらなくなってしまった。1月1日に解決するまで、約48時間、パソコンを使えなくて、仕事にならなかった(古いタイプの人間なので、タブレットスマホだけで仕事はムリ)。

ハードにはほんとうに疎いので、ふつうはもっと迅速に通常モードに復帰できるのだろうけれど、まあ、年末年始で顧客の仕事に影響が出なくてよしとしておこう、今回は。

前兆
1週間前ぐらいから、PCの電源を入れてもディスプレイがONにならない。いったんケーブルを抜き差しするとONになる。

こういう症状が1週間続いた後、12月30日の夜、

  • ケーブルを抜き差しすると1秒ほどうつるがすぐに真っ暗に
  • ディスプレイの電源をOFF/ONすると同様に1秒復帰

という状態になった。

スペック:

再起動したり電源切ったりしてるうちにCMOSがどうのこうのという画面になった。

f:id:hidex7777:20150101222837j:plain

そんで、BIOSに入ると(Windowsはディスプレイ電源のON/OFFで1秒ぐらいしかうつってくれないけどBIOSは4秒ぐらいうつる)、CMOSリセットしてないのに、たしかにDate/Timeが設定されていない状態だった。

この時点での仮説と対応:

マザボの電池切れ
翌日ホームセンターで電池を買うことにしよう
グラボがお亡くなりになった
Amazonで安いグラボをポチった
ディスプレイ(の電源)がお亡くなりになった
どうしよう?
マザボがお亡くなりになった
MacBook Proポチった

最悪、MBPをポチったので、それまでパソコン使うの諦めることにした。

12月31日

マザーボードボタン電池はCR2032というらしい。

それでいろいろ調べると、どうやらCR2032とは、

ということらしい。そしてPanasonic一択らしい。把握。

で買ってきた。

f:id:hidex7777:20150101222913j:plain

Amazonバルク品がクソ安く売ってるけど待ってらんないので買った。

マザボの電池を抜いて、CMOSクリアして(MSIだとclrボタンがある)、こいつを入れた。

PCの電源入れるも、変化なし。

Amazonからグラボが翌日届く予定なので、今日はこのぐらいにしといたる。

ムシャクシャして「笑ってはいけない」を忘れて(というか大晦日だということさえ忘れていた)Ingressしに出かけた。

帰省中と思わしき、名も知らぬAgentたちが、旅の恥はかき捨てとばかりに無理リンク貼りまくっていて(一部だとは思うけれど)「これが『お題』というやつか……」とうなだれる。

1月1日

前日、30日にポチったグラボが出荷されて、1日には届く、というメールがすでに入っていた。何時になるかわからないので、いちおう、以前入っていたグラボを一度抜いて、別のスロットに入れるなどしてみた(ドスパラのハード不調はこれで治ることが多い)。が、何の変化もない。

昼過ぎ、ポチっていた玄人志向グラフィックカードが届く。これ:

f:id:hidex7777:20150101223021j:plain

f:id:hidex7777:20150101223051j:plain

2011年発売で、5000円切っている。ゲームとかしないので(Ingress以外は)、うつればいいのだ。

前のドライバをアンインストールして、これを挿す。

うあー。変化がない!

次の段階だ!

夕方。

パソコン工房に出向く。地方のファスト風土なイオンタウンにはマイルドなヤンキーたちの自家用車が大集合している。つうか満車だ! なんで1月1日から2300台収容の駐車場が満車になってんだ!

中略。

ACERにするかiiyamaにするかで(4秒ぐらい)迷ってiiyamaにした。ProLite XB2380HS-B2。

23インチワイドでIPS方式パネル。解像度は普通の安いやつ同等(Retinaには対応しないぐらいの)で1920x1080。

ドット抜け保障つきで20000円ぐらい。

f:id:hidex7777:20150101223125j:plain

ああ、もしこれでも変化なしだったら、次の可能性、マザボがお亡くなりになった、となってしまい(でも出力はしているのだからそれはないはずなんだけど)、いつ届くかわからないMBPを待つことになってしまう……そしてディスプレイは無駄に2枚余って、ということはMBPでトリプルディスプレイ……などと嬉しそうに妄想していたら、うつった。

今回の結論は、ディスプレイ(のたぶん電源)が問題だった、ということだった。しかしこの結論を出すには、うちにある他のディスプレイをつなげばすぐにわかったことではなかろうか……。

MBP期待。

Herokuチートシート:ネイキッドドメインとメール送信まで

f:id:hidex7777:20140915194425j:plain

さいきん、自サイトをHerokuで運用するようになったので、忘れないように自分用にメモ。

方針は次の通り:

  • アプリサーバにはUnicornを使う
  • ネイキッドドメインで運用(www.foobar.comじゃなくてfoobar.comで)
  • メールを送信する(ActionMailerを使う)
  • ドメイン維持(年980円ぐらい?)以外は無料で
  • いちおうMXレコードの登録まではやったたけど受信がめんどくせーのでやるならMandrill(メールのプラグイン)のAPIを各自見てくだしゃんせ

Heroku用にGemfileを書く

ruby '2.0.0'

gem 'rails', '4.0.5'

group :production do
  gem 'pg', '0.15.1'
  gem 'rails_12factor', '0.0.2'
  gem 'unicorn'
end

gemのアップデート。

$ bundle install --without production
$ bundle update
$ bundle install
$ git commit -a -m "Update Gemfile.lock for Heroku"

--without productionはremembered optionなのでコマンドに保存される。

Unicornの設定

$ touch config/unicorn.rb
$ vi config/unicron.rb

worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

config/environments/production.rb

config.assets.compile = true

データベースの設定

config/database.yml

production:
  adapter: postgresql
  encoding: unicode
  # database: db/production.sqlite3
  pool: 5
  # timeout: 5000

Procfileとforemanでのテスト

./Procfile

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

Unicornがローカル開発環境にインストールされている必要があるけど)

ローカル環境の環境変数を./.envに。

$ echo "RACK_ENV=development" >> .env
$ echo "PORT=3000" >> .env
$ echo ".env" >> .gitignore
$ git add .gitignore
$ git commit -m "add .env to .gitignore"

foremanでテスト

$ gem install foreman
$ foreman start

ログインする

$ heroku login

または

$ heroku auth:login

ログアウトする

$ heroku logout

または

$ heroku logout

アプリを作成してデプロイ

$ heroku create foobar

または

$ heroku create

からの

$ git push heroku master
$ heroku run rake db:migrate
$ heroku ps:scale web=1
$ heroku ps
$ heroku open

サブドメイン名をリネームする

$ heroku rename foobar

必要ないけど。いちおう。

デプロイに失敗したときは

$ rake assets:precompile
$ git add .
$ git commit -m "add precompiled assets for Heroku"
$ git push heroku master

デプロイ時のエラーを取得

$ heroku logs

または

$ heroku logs --tail

実行環境の確認

$ heroku run console
Ruby console for foobar.herokuapp.com
>> Rails.env
=> "production"
>> Rails.env.production?
=> true

SSLを使う場合

config/environments/production.rb

FooBar::Application.configure do
(…)
  config.force_ssl = true
(…)
end
$ git commit -a -m "add SSL in production"
$ git push heroku
$ heroku run rake db:migrate

本番データベースをリセットする

$ heroku pg:reset DATABASE
$ heroku run rake db:migrate

アプリを強制再起動する

$ touch foo
$ git add foo
$ git commit -m "foo"
$ git push horoku

再度デプロイすればいいということ。

どのアカウントでログインしているのか

$ heroku auth:whoami

CloudFlareでネイキッドドメイン

CloudFlareドメインを入れろと言われたら、自分のドメインを入力(例としてここではfoobar.comとする)。スキャンがはじまる。

DNS Records for foobar.com:

CNAME foobar.com is an alias of hoge.fuga.com ACTIVE

みたいに書いてある画面の設定アイコンをクリック。というか、あとでも設定できる。DNS Zone設定で、CNAMEのfoobar.comのValueをfoobar.herokuapp.comにすればよい。

ネームサーバを変えろと言われるので、お名前ドットコムとかの、自分のドメインを管理しているネームサーバを言われたとおりに変える。

http://foobar.comでアクセスできるのを確認する。

ネイキッドドメインの方針。

  • www.foobar.comにアクセスしたらfoobar.comにリダイレクトする。
  • foo.foobar.comのような存在しないサブドメインも同様。

DNS Zoneを次のように設定:

  • CNAME www foobar.herokuapp.com
  • CNAME * foobar.herokuapp.com

My websitesのページで設定アイコンをクリックしてPage Rulesを選択。

f:id:hidex7777:20140915202746p:plain

無料なら3パターンまでルールを登録できる。

Add new ruleで*.foobar.com

Forwarding http://foobar.com

Forwarding type Permanent 301

(参考記事)

メールを送れるようにする

まずGmailから直接送れるか、試してみる

Gmail使って大量メール一斉送信をすると、そっこーでアカウントロックされるとのことなので、一通でも無理なのか、試してみる。

開発環境と同じ設定を書いてみる。

ActionMailerでは

default from: 'FooBar <foobar@gmail.com>'

みたいに、gmailから送信されたことにしている。

confib/environments/producution.rb

  config.action_mailer.raise_delivery_errors = false
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :enable_starttls_auto => true,
    :address => 'smtp.gmail.com',
    :port => '587',
    :domain => 'smtp.gmail.com',
    :authentication => 'plain',
    :user_name => 'foobar@gmail.com',
    :password => 'foobar'
  }

ダメだった。

一通でも、不正なログインで、ブロック。親切設計のGoogle

プラグインを使う

2014.09.10時点で使用できるメールプラグイン(SMSを除く)

  • Mandrill(月12000通無料)(Mandrill.comにログインしたら1時間250通のリミットもあるようなことが書いてあった)
  • Mailgun(1日300通無料=月9000通)
  • Mail2Webhookβ(受信メールをWEBアプリへのPOSTとして扱うプラグイン
  • CloudMailIn(月200通)
  • SendGrid(1日200通無料=月6000通)
  • Postmark(月10000通無料)

第一候補がMandrillで第二候補がPostmark。

けっきょくMandrillでよさげだったので、ここではMandrillだけ紹介する。

Mandrill

$ heroku addons:add mandrill:starter

でもプロヴィジョンできるけれどもドキュメントみながらやりたいのでHerokuのアドオンページからログインする。

(Oh...クレカ登録してなかったからハネられた…)

Mandrillのドキュメントを見ながら進める。

MANDRILL_APIKEYというのが使えるようになっているはずなので、確認する。

$ heroku config:get MANDRILL_APIKEY
foobarfoobarfoobarfoob

$ heroku config -s
↑これで環境変数が見られる。ユーザ名も記録しておいたほうがよい。

開発環境でテスト。Foremanで.envにMANDRILL_APIKEYを書いておく(↓の設定ファイルを使うならユーザ名も必要か)。

MANDRILL_APIKEY=foobarfoobarfoobarfoob

設定サンプルを見ながらconfig/environments/production.rbを書き換える。

  config.action_mailer.raise_delivery_errors = false
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :enable_starttls_auto => true,
    :address => 'smtp.mandrillapp.com',
    :port => '587',
    :domain => 'heroku.com',
    :authentication => 'plain',
    :user_name => ENV['MANDRILL_USERNAME'],
    :password => ENV['MANDRILL_APIKEY']
  }

できた。Gmailで受信すると、送信者名の隣に「経由」って出てなんとなく嫌だけど仕方がない。

受信もする場合:MXレコードの設定

http://mandrill.com/にユーザ名(heroku config -sで分かる)とパスワード(APIキーがパスワード)でログインできるので、ログインしてみる。

Inboundセクションで、ドメインを入力できるので自分のドメインを入れる。

DNSでMXを設定してないのでinvalidと出ている。

DNS Settings]ボタンをクリックすると、DNSサーバ名が2つ表示される。

別タブでCloudFlare開く。

自分のドメインDNS Settingsを開く。

TypeをMX、Nameを自分のドメインに、ValueをMandrillのサーバ、Priorityを10。

もう一行に、もう一つのMandrillサーバ名入れて、Priorityを20。

[I'm done]なんちゃらボタンを押す。

Mandrillに戻って[Test]ボタンを押すとvalidになる。

ActionMailerのコード(差出人のところ)を書き換える。

default from: 'FooBar <info@foobar.com>'

このドメインへの送信(こっちからすれば、受信)は、InboundにあるRoutesを設定する。

アプリに対するPOSTデータとして送信されるので、うまいことフックするアプリを書く。

APIドキュメントを参照されたし。

(参考記事)

Chefのufwクックブック

f:id:hidex7777:20140730230625j:plain

Chefのufwクックブックの使い方がいまいちわからなかったので、公式のREADMEを訳してみました。

結論。nodeのjsonに直接ファイアウォールのルールを記述してしまっていいみたいですが(じっさい、ぼくは目下のところ、ステージング環境と本番環境の2つのノードしか考えていないのでそれが楽かもしれない)、練習も兼ねて、ロールでAttributeを管理するのがいいかなー、と思っています。

『Chef実践入門』にも「Chefで複数ノードを管理する必要が出てきたら迷わずロールを導入しましょう」(p.104)と書いてあります(第4章執筆id:naoya)。

(誤訳の責任はとらないので、よろしくお願い致します。英語としてよくわからん部分があったのでLang-8でネイティブに聞きましたが"This guy's language use is a mess"って言ってました。そのネイティブの解釈にも疑問があったので、この訳は俺様解釈で訳しています)


説明

Ubuntu上のUncomplicated Firewall (ufw)を設定します。ランリストにufwレシピをインクルードすると、ファイアウォールはenableになり、デフォルトで、SSHとICMP pingをのぞいたすべてをDENYします。

ルールをそのノードに付け加えるには、rolesにおける['firewall']['rules']Attributeにルールを加えるか、そのノードに直接加えます。firewallクックブックは、他のレシピからも直接ルールを適用するのに使うことができるLWRPを持っています〔訳注:ufwクックブックはfirewallクックブックに依存しています〕。明示的にルールを削除する必要はありません。変更やリセットのときにそのルールが再評価されます。ルールは、順序が明示されていないかぎり、ランリストの順に適用されます。

要件

Ubuntu 10.04と11.04でテストしました。

レシピ(recipes)

デフォルト(default)

defaultレシピは、適用すべきファイアウォール・ルールのリストを、ロールやノード自体に加えられた['firewall']['rules']Attributeから探します。そして、ルールのリストが、規定の順にノードに対して適用されます。

無効(disable)

disableレシピは現存するファイアウォールを無効化する必要がある場合に使われます。おそらくそれはテストのためでしょう。たとえ他のufwレシピがenableにしようとしても、ufwファイアウォールは無効化されます。

このレシピを削除しても、自動的に再有効化されるわけではありません。['firewall']['state']の値をクリアし、ファイアウォール・ルールの再計算を強制する必要があるでしょう。これはknife node editで行うことができます。

データバッグ(databag)

databagレシピは、ファイアウォール・ルールを適用するために、firewallデータバッグの中を見ます。それは、ロールのためのランリストの精査、およびデータバッグ項目にマップするキーのためのレシピ名の精査にもとづきます。そして、ファイアウォール・ルールは規定の順に適用されます。

ルールを適用するために、['firewall']['rules']Attributeがセットされた後で、databagレシピはdefaultレシピを呼び出します。なので、もし望むならロールとデータバッグ項目をミックスすることもできます(まずロールの適用、それからデータバッグの内容)。

レシピ(recipes)

recipesレシピはnode[<recipe>]['firewall']['rules']Attributeをもつレシピのランリストの精査にもとづいて、ファイアウォール・ルールを適用します。これらはnode['firewall']['rules']に追加され、そのノードに適用されます。クックブックはレシピのためのAttributeをつぎのように定義することができます:

attributes/default.rb for test cookbook

default['test']['firewall']['rules'] = [
  {"test"=> {
      "port"=> "27901",
      "protocol"=> "udp"
    }
  }
]
default['test::awesome']['firewall']['rules'] = [
   {"awesome"=> {
       "port"=> "99427",
       "protocol"=> "udp"
     }
   },
   {"awesome2"=> {
      "port"=> "99428"
     }
   }
]

'test::awesome'ルールは、その特定のレシピがランリストにある場合のみ適用されることに注意してください。レシピで適用されるファイアウォール・ルールは、ロールAttributeで定義されるルールのあとで適用されます。

セキュリティレベル(securitylevel)

securitylevelレシピは、強制される必要があるnode['firewall']['securitylevel']設定がある場合に使われます。これは設定されていないリファレンス実装です。

アトリビュート(Attributes)

ロールとそのノードは['firewall']['rules']Attributeセットを持つことができます。このAttributeはハッシュのリストであり、そのキーはルール名に、その値はパラメータのハッシュになります。適用の順序はランリストにもとづきます。

ロール例

name "fw_example"
description "Firewall rules for Examples"
override_attributes(
  "firewall" => {
    "rules" => [
      {"tftp" => {}},
      {"http" => {
          "port" => "80"
        }
      },
      {"block tomcat from 192.168.1.0/24" => {
          "port" => "8080",
          "source" => "192.168.1.0/24",
          "action" => "deny"
        }
      },
      {"Allow access to udp 1.2.3.4 port 5469 from 1.2.3.5 port 5469" => {
          "protocol" => "udp",
          "port" => "5469",
          "source" => "1.2.3.4",
          "destination" => "1.2.3.5",
          "dest_port" => "5469"
        }
      },
      {"allow to tcp ports 8000-8010 from 192.168.1.0/24" => {
          "port_range" => "8000..8010",
          "source" => "192.168.1.0/24",
          "protocol" => "tcp" //ポートレンジを使う場合プロトコルは必須です
        }
      }
    ]
  }
)

データバッグ(data_bags)

firewallデータバッグはdatabagレシピとともに使われます。それはロール名にマッピングする項目を含むでしょう(例:'apache'ロールは'firewall'データバッグのなかの'apache'項目にマッピングする)。ロールかレシピがキーになります(role[webserver]は'webserver'、recipe[apache2]は'apache2')。もしレシピで規定するファイアウォール・ルールがあれば、'::'を'__'(アンダースコアふたつ)と置き換える必要があります(例:recipe[apache2::mod_ssl]はデータバッグ項目においては'apache2__mod_ssl'です)。

データバッグにおける項目は、['firewall']['rules']Attributeに適用するための'rules'ハッシュ配列を含みます。

% knife data bag create firewall
% knife data bag from file firewall examples/data_bags/firewall/apache2.json
% knife data bag from file firewall examples/data_bags/firewall/apache2__mod_ssl.json

'firewall'データバッグ項目の例

{
    "id": "apache2",
    "rules": [
        {"http": {
            "port": "80"
        }},
        {"block http from 192.168.1.0/24": {
            "port": "80",
            "source": "192.168.1.0/24",
            "action": "deny"
        }}
    ]
}

リソース/プロバイダ(Resources/Providers)

firewallクックブックはfirewallfirewall_ruleというLWRPを提供します。そのためにufwプロバイダはあります。

ライセンスと著作者

Author:: Matt Ray (<matt@opscode.com>)

Copyright:: 2011 Opscode, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.


訳語の選択はできるだけ『実践Chef入門』に習いましたが、完全ではありません。