注目記事

2013年10月6日日曜日

五色の舟(津原 泰水)



ジャンル :SF
ストーリー:5
文章力  :7
キャラ  :5
物語の魅力:7
総合   :6

今回は、津原 泰水の「五色の舟」。
漫画版がコミックビームで連載中です。

コミックビームと言えば、ついに「放浪息子」が終わってしまいましたね……
少し消化不良な幕切れにみえて、そこが本当に残念でした。
永遠に浸っていたい世界観だったのにな。

さて津原 泰水ですが、
ミステリとして評価が高いのはやはり「蘆屋家の崩壊」でしょうか。
どんでん返しが良い感じのミステリです。


今回レビューする「五色の舟」は、『11 eleven』に収録されている短編SFです。
舞台は戦時中。
未来を言い当てる"くだん"という生物を巡る、見世物の一家の物語です。

主人公の一家は皆、何らかの障害をもっています。
腕がなく耳の聞こえない僕、脱疽で足を切った父親、
萩尾 望都の『半神』のように身体が二つあり、死んだ片方を切り取って生き延びた桜など。

国じゅうが惨憺たる状態にあって、生半可な涙や笑いが受けようはずもない。人々のまなざしを爛々とさせられるのは、もはや僕らのような、圧倒的に惨めな存在だけだった。


一家は見世物の報酬で生きてます。
父親は金になる"くだん"を欲しがりますが、見つけた時には軍に接収されていました。

その後、父親を好いたために一家の面倒を見てくれていた医者の犬飼先生の力添えで、
僕はくだんに会うことになるのですが……

(以下ネタバレ部分反転)

初め、くだんは「未来を言い当てる、人の顔をした牛」として噂されます。
ですが最終的に明かされるくだんの正体は、
人を別の世界へと運ぶ装置
なようです。

タイトルの"舟"とは、
その世界の歴史のことです。
くだんの言い当てる未来は、航路と表現されます。

文章中の言葉を交えると、


内海を巡回する航路から見た海上の一点は、船の前とも後ろともつかない。
しかしくだんの生まれた座標は、この世界からは未来と感じられやすい。

歴史は、単純な円環とは限らないが、ぐるぐると内海を巡ることと等しい。
内海からは出られない。正確に言えば、外のことを感知できない。
しかし航路は無数に存在する。
その様子を俯瞰し、意図的な乗り換えを行うために未来人が拵えた装置が"くだん"。

くだんは海上の一点を漂い、その傍を様々な船が通過する。
その内の一艘が、主人公達の世界。


僕の来歴も、なかなか叙情的な言葉で表現されて良い感じです。

  物心がついたときには押し入れの闇にいた僕の、最初の外の記憶は、河原を吹く風と、満天の星空と、生い茂った草の向こうで息をしているようにゆったりと沈んでは浮かぶ、大きな舟の影だ。
  朝になって僕を見つけたお父さんは、快く舟の上に導いてくれた。

僕は、桜とともに
くだんの力で舟を乗り換える(別の世界線へ移動する)のですが、
そのことについて僕は次のように語ります(以下ネタバレ)。

  散歩で土手を通るたび、ふたりして僕らの舟が浮かんでいた場所を見下ろす。今の僕らの、最も幸福で、最もせつない時間だ。
  心の置き所の問題だと、犬飼先生はお父さんに解説していた。だとしたら、くだんは僕らを運びきれなかったに違いない。運びきる前に死んでしまったのだ。だって僕らの気持ちは相変わらず、あの悲惨な世界にある。僕と桜にとってはやがて爆弾によって終わってしまう、短く虚しい世界だったのかも知れないが、こちらのかりそめの自分が死んだら、また心はあそこに戻っていくという、確信めいた想いから僕は逃れられずにいる。

原作では最後、漫画版だと一番初めに綴られる言葉が、
どんなに悲惨な世界でも、そこは僕の居るべき世界だったのだという僕の心根を表しているのでしょうね。

『色とりどりの襤褸をまとった、あの美しい舟の上に』




2013年9月25日水曜日

奇面館の殺人



ジャンル :ミステリ、クローズドサークル
ストーリー:4
読み味  :5
キャラ  :3
謎の魅力 :7
驚愕度  :6
総合   :5

綾辻 行人の長編を読んだのは初めて。
でも他の館シリーズのネタは大体知ってます。

連作短編「どんどん橋落ちた」は読んだことがあります。


あとミステリじゃない短編(下手物好きの夫婦が、最後には自分を食べちゃうという話)と、
ゲーム「TRICK×LOGIC」のSeason2で有栖川と合作してたやつ。



あとは、アニメで「Another」



ミステリ好きのくせに綾辻作品をこれだけしか読んでないのは、
文章が淡泊かつ説明的すぎて、いかにもミステリのためだけの文章って感じが強く、
食指があまり動かないからです。

ミステリもエンタメである以上、面白い文章 or 魅力的なキャラで読ませて欲しい。

伊坂も道尾も辻村深月も、あまり好きな作家ではありませんが、
いざ読み出せば軽快でユーモラスな文体に惹かれて、気付けば読み終えている。
        鴉の親指(道尾 秀介):オーダーメイド殺人クラブ(辻村深月)

あるいは麻耶たんのような癖の強い妙なペダン調皮肉文章だとか、
皆川先生の重厚濃密な世界だとか、
米澤さんの親しみやすいキャラだとか、

ミステリなんだから"魅力的な謎"で話を牽引してくれるのは当然、
それプラスαが必要な時代でしょう。

しかし綾辻さんを始め、
有栖川・法月など、過去の作家たちにはその魅力がない。

館シリーズラスト2の「奇面館の殺人」
自分も周囲も仮面を被ったクローズドサークルという設定には最高に萌えます!
それだけで「うひょー!」です。

が、長い割には死人は一人だけ。
犯人の狙いが被害者一人だけだと考える容疑者達には、緊張感もほとんどなし。
丁寧すぎる描写ばかりで進行も遅く、読むのが苦痛な状態に……。

ミステリ的には良いのです。
"仮面+首斬り死体"から入れ替わりネタをミスリードさせ、ストンと落とす。
けれどあまりに綺麗に落ちすぎて、「え?こんな地味なトリックでおしまい?」と、読まされてきたページ数を振り返る。。。

せめてあと一つでも、例えば魅力的な文章、例えば魅力的なキャラがあったならなぁ……

以下、トリックのネタバレ(反転)

犯人が何故、客全員に鍵をかけた状態で仮面を被せたのか?
それは入れかわりのためではなく、
被害者ともみ合った際、顔に抵抗傷を受けたから。

被害者の指には犯人の肉片が付いた。だから被害者の全指を切断し、ミキサーにかけた。


密室については、抜け道の仕掛けを利用した。

外で待ち構える柔道家の娘(メイド)に気付かれないように部屋から脱出するには、犯行現場の外にある内線を使って寝るよう指示する他ない。
そこでしかたなく抜け道を使い一度外に出て、電話で指示した後に犯行部屋に戻り、鍵を開けて脱出した。
抜け道の鍵は被害者の仮面。
だから犯人は、仮面をとるため被害者の首を切断した。

作中、人物の呼び分けは仮面の名前か職業でされていたが、
これは、犯人を含む容疑者全員が同姓同名であったからである。
だから互いの呼び分けを、名前以外でしなければならなかった。

密室の謎から、犯人は館に詳しい人物。
一種の叙述トリックにより、館の2代目当主の存在が隠されていたが、犯人はその2代目だと断じる探偵。

容疑者の一人が近視でコンタクトをしていることを会話から推理。
「コンタクトはすぐに慣れるよ」と言えるのは、自分がしているから。
彼は仮面を被らされた後も、遠くからものをみれている様子だった。
しかし仮面を付けたままコンタクトはできない。
彼はコンタクトをしたまま眠ったと言うが、犯人だからではないか?

決め手は雑誌のロゴ。
被害者書斎の雑誌は、被害者がロゴに手を加えた世界で唯一のもの。通常のロゴと色が違うのだ。
雑誌について知っていると言った犯人は、その雑誌のロゴの色を間違えて答えた。館にいた証だ。

2013年9月23日月曜日

Python講座 第2回〜文字列の扱い〜

今回はPythonでの文字列の扱いをみていきます。

前回みてきた通り、
"¥n"は"改行"を意味します。

では"¥t"はなんでしょう?
答えは"tab"です。
この二つはよく使いますので、覚えておいて下さい。

また、Pythonでは文字列を括る際、
"ダブルクオテーション"か'シングルクオテーション'に差はありません。

では、¥nを「改行を表す特殊文字」ではなく「文字列」として見なしたい場合はどうすればよいでしょう?

こういった"記号"をそのまま文字列として扱いたい場合には、
どの言語でも"エスケープ処理"をしてあげるのが基本です。

エスケープは、Windowsなら"¥"を、macなら" \ (バックスラッシュ)"を使います。
(macではキーボードの"¥"を打ちましょう)

# coding: UTF-8
tabe = "Hello¥tWorld"
no_tabe = "Hello¥¥t"
print tabe # 実行結果:Hello    World
print no_tabe # 実行結果:Hello¥¥t

また、以下ではSyntax error(文法間違い)のメッセージが出ます。
error = 'it's a pen'
ok1 = 'it\'s a pen'
ok2 = "it's a pen"
print error
実行結果
File "test.py", line 1
error = 'it's a pen'
^
SyntaxError: invalid syntax

it'sを短縮形として表したいのに、文字列を括る'シングルクオテーション'のせいで、
'it'として、itだけを括ってるとコンピュータに思われているのです。

文字列は必ず"ダブルクオテーション"か'シングルクオテーション'で括らなければいけません。
なので「s a pen'」が括ってないよ、と怒られるのです。

そこでok1のように、シングルクオテーションをエスケープさせてあげましょう。
すると実行結果は、
it's a pen
となって、解決します。

あるいはok2のように初めから"ダブルクオテーション"で括れば、
途中のシングルクオテーションを「文字列の終わり」としてみなされることはなくなります。

基本的には、「'」などの記号の前では、必ずエスケープさせる癖をつけましょう。

え?それはいちいち面倒くさ過ぎるって?

……しょうがないなぁ。
そんな横着なあなたのことも、Pythonは見捨てません。
print """<html lang="ja">
<body style="color:yellow">
</body>
</html>"""
このように"""または'''とクオテーション3つで括ってやると、
なんとエスケープいらず!
しかも改行もみとめて表示してくれます!

そんな具合にPythonの懐の広さを知ったところで、
次は文字の連結などを学びましょう。
print """<html lang="ja">
# coding: UTF-8
# 文字の連結は、"+"で繋ぐ
print "やら" + "ないか" # 実行結果:やらないか 
 
# 文字の繰り返しは"*(かける)"
print "やら" * 5 + "ないか" # 実行結果:やらやらやらやらやらないか
 
# 文字数カウントは len("")←関数
print len("ABCDE") # 実行結果:5 
print len(u"やらないか") # 実行結果:5
最後の
print len(u"やらないか")
について補足します。

文字列"やらないか"の前にuを付けないと、実行結果は15となります。
これはlen関数が、中の文字列のbyte数を表示しているためです。

byteとはプログラミングの本質、つまり0と1の表記の単位です。
1byte=8bit
これは2進数8桁分、つまり0~255(16進数:0x00~0xFF)を表します。

半角英数字は1文字1byteです。
例えば、Aは16進数で"0x41"。
つまり"00100001"という0と1の並びが、プログラム上で"A"と表されるのです。

print len("ABCDE")
の実行結果は、1byteが5つなので、5です。

が、ひらがなや漢字、つまり日本語は、
1文字2byteなのです。
さらに今回は
# coding: UTF-8
と一行目で宣言しているため、
文字はUTF-8でunicodeされた状態。
この状態の日本語は、1文字3byteとなります。

従って
print len("やらないか")
の結果は、3byteが5つなので、15となります。

これじゃ困りますよね。5文字なのだから、5と出して欲しい。
その解決法が日本語の前に付けるおまじない、"u"なのです。

最後に、文字列に便利な関数をもう少し見てみましょう。
# coding: UTF-8
strings = "abcdefghi"

# 文字列の切り出し
# 変数名の後に[n]をつけると、n番目の文字を返してくれる
# 先頭は0、2番目は1、……と表記。末尾は-1とも表記可
print strings[0] # 実行結果:a
print strings[8] # 実行結果:i
print strings[-1] # 実行結果:i
# 範囲指定 [start:end]
# start番目からend番目の手前の文字までを返す
print strings[1:3] # 実行結果:bc
print strings[1:-1] # 実行結果:bcdefgh
# start、endは省略可
# 省略すると、それまで:それ以降の「残り全て」が返される
print strings[5:] # 実行結果:fghi
print strings[:3] # 実行結果:abc
 
# 検索 .find("検索文字列")
# 指定文字列の開始番号を返す。なければ-1
print strings.find("a") # 実行結果:0
print strings.find("ef") # 実行結果:4
print strings.find("ij") # 実行結果:-1
ただしこれらは、日本語だとunicodeエラーが起きるようです。

Syntax Highlighterでブログのソースコードを綺麗に!(Python講座 第0回)

このサイトが参考になります。

_msg = "Hello World"
print _msg
こんな具合にできちゃいますよー!

ところで上記コード、何言語かわかるでしょうか?


答えは"Python"です。
というわけで今回、統計勉強のために勉強してみました。
勉強したい初心者のためにも、その軌跡を残しておきたいと思います!

※ところでmacのターミナル(OS:Darwin,unix系)でscreenを張る時、
以下の.screenrcでは、
どうにもfnキーでセッション画面の切り替えができません。
$TERMはxtermに設定し直したのに……
どなたか判る方、コメント欄より教えていただけると嬉しいです!

escape ^Tt
shell -$SHELL

startup_message off

vbell off

screen 1
bind c eval 'screen 1'
defscrollback 2000

term xterm-256color

termcapinfo xterm "ks=\E[?1l\E:ku=\E[A:kd=\E[B:kr=\E[D:kr=\E[C:kh=\E[5~:kH=\E[F"
termcapinfo xterm 'k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~'
bindkey -k k1 select 1
bindkey -k k2 select 2
bindkey -k k3 select 3
bindkey -k k4 select 4
bindkey -k k5 select 5
bindkey -k k6 select 6
bindkey -k k7 select 7
bindkey -k k8 select 8
bindkey -k k9 select 9
bindkey -k k; select 10
bindkey -k F1 select 11
bindkey -k F2 select 12
bindkey "^[OD" prev
bindkey "^[OC" next

# 端末が落ちたら自動的にデタッチする
autodetach on

# ステータス設定
hardstatus alwayslastline "%{=b kW} %H |%{= kW}%-w%{= rW}%n %t%{=b kW}%+w| %=%{w}[%Y-%m-%d %02c]"
# caption always "%{= wk}[%Y-%m-%d %02c:%s] %{wg} %-w%{=bu kr}%n %t%{-}%+w %=%{=b wb}$USER@%H[$LANG] (%l) "