六月の開発局

「業界の人」じゃないよ

純粋な優しさに包まれた3ヶ月 - Just Because! 感想

もう30になるというのに、未だにクリスマスが近づくと「有楽町のドトールでココアを飲んでいると、白いコートに身を包んだ黒髪ロングストレートの美少女がやってきて「一時間なら待てなくて、一時間半なら待てるのね」と皮肉ってくれないだろうか」などと言っている。これは、とある小説のラストシーンなのだが、そういう「夢みたいな話」を「アニメの脚本」からとにかく削除しまくったような話、というのが「Just Because!」を端的に説明するやり方だと思う。

つまり、ひどい言い方をすれば、華がない。クリスマス回に雪は降らないし、女の子たちの私服は基本重武装で露出度が低い上に、絵のトーンも全体的に彩度が低い。それどころか、春から神戸に行く女の子に男の子が毎週会いに行くよ、と言っても「新幹線で往復3万、続くわけがない」と言い返すような話である。ちなみにEX早得21を使えば2万強で済む。僕はこの作品を見始めたとき、見ていなかったのだが方方で「似ている」と言われていた別の作品とはまったく態度が違う。主人公は文学で認められて出版社に呼び出されたりしないし、イタリアに行ってヴァイオリン職人になる、とか言い出さないし、幼いころの約束のアイテムもなく、当然お色気ハプニングもなければ、超金持ちも登場しない。金を持っていそうなキャラクタが出ても、黒服がメルセデスで送迎したりはしない。

そして、この「夢みたいな話」の削除は、最後の最後まで徹底している。卒業式の日「ホームランを打とう」と友達と対戦し、ホームランを打つ。だが、その後声をかけるべき彼女はすでに帰路についており、会うこともできない――。

この展開に「一体何の意味があるのか」と憤っている人がいた。おそらく「卒業式の日に告白して、幸せな結末を迎える”べき”」だとでも言いたかったのだろうと思う。多くのアニメはそうしてきたし、それは「お約束」であり、一番作り手にとっても見る側にとっても「安心できる」展開だったはずだ。では、僕らはその「安心できない」展開をどう受け取るべきなのか。この極めて禁欲的な展開、別の言い方をすれば極端なリアリズムに徹したアニメのお話をどう捉えていけば良いのか。

僕は、それを優しさと捉えればよい、と思っている。

好きな女の子とお互い同意の上で同じ大学を受験する、というのはなかなか素敵な話だ。もちろん、こっそり受けて見事合格し、大学で会える、というのも良いだろう。危険を犯したくないのなら、合格したところで告白し、うまくいきそうなら入学する、という作戦も取れる。当然、卒業式の日に告白して、その後の幸せな展開を約束したい、というのもそれほど珍しくない、高校生であったら夢見る展開の一つではある。何か願掛けをして、上手く行ったらそのまま告白になだれ込んでそこで大勝利、というのも一考だ。だが、それは、滅多なことでは実現しない。そんなことはわかっている、だからこそアニメでは、というのがおそらく批判の原理だ。

けれども、それは「僕ら」がその事態に直面していない、もしくはすでに過去のことだからだ。だがそれが「今」だったら、と思うと、その「夢みたいな展開」はとても恐ろしく思える。

卒業式を終えて、友達と一打席勝負する。そこまでは結構やりやすい。それからホームランを打つ、それもなんとかなるだろう。自分の腕次第だが、腕に覚えがあるならやっても良いし、その腕は努力でわりかし手に入りやすい。もちろんホームランでなくてもいい。そういう、自分が得意なもののうちの、特に素敵な出来事でいいわけだ。けれども、その後、好きな女の子に会って告白して色好い返事を勝ち取る、このステップにはそこまでとは正に格の違う難易度が存在する。その難易度の違いを「アニメの中では上手く行ったが、自分の人生はそうは行かないか」と卒業式の午後に思い知らされるのは、とてもつらいことだと思うのだ。

だが、アニメの中でそれが上手く行かず、大学に入ってから入学式でもない、しばらく経った「なんでもない一日」に彼女が声をかけてきてくれる、というのが「アニメという夢の世界での展開」でなら、その日に希望を持って生きることができるし、そうして生きている間に時間が恋心を解決してくれることや、新しい出会いが問題を問題でなくしてしまうことにも期待できる。「なんとなく」ほどかれていってくれるだろう。

メインヒロイン、夏目美緒は物語が始まった時、主人公泉瑛太を特に好きではない。他に好きな男の子がいる。しかし三ヶ月間の物語の間にその心は移ろって、主人公を「本気」で好きになる。この展開を見た時「ああ、この子はアニメファンに嫌われるだろうな」と思った。一人の相手をずっと好きでいる、ということがアニメにおける人間の「かくあるべき姿」とされている文化があるからだ。だが、その「かくあるべき」を現実に持ち込めば、殆どの場合地獄しかない。

ある人のフィールドワークによれば「非モテ」の多くに共通する特徴として「昔からずっと好きな運命の人が忘れられない」というものがあるそうだ。そしてその呪縛を解き放ち、気軽に誰かを好きになったり、付き合ったりすることで、恋愛はしやすくなり「モテない」という生きづらさから逃れ、生きやすくなっていくという。

「誰かを一途に好きでいつづける」こと、洗練されすぎた恋心が現実では地獄に直結するように、洗練されすぎた恋愛の展開を求めることも、また地獄に直結してしまうだろう。恋とは基本的にうまくいかないものなのだ。うまくいかないものをうまくいかないものとして描いてやり、その先にある小さな喜びを大事にしてやることは本当の優しさだ。その喜びとは、渡し損ねた手の込んだチョコレートを押し付けられたとき、ロマンスカークッキーを来月渡そうと相談してくれるような友人達が、黙って泣かせてやり干渉しないでいてくれるような清らかで健気な愛のことだ。

一方で洗練されていないお話の流れは、僕らに夢を見させてはくれないし、それを良しとしないという気持ちもわかる。

それでも、僕は「夢みたいな展開」を切り詰めたことが優しさだと思えたし、その優しさを作り出すために費やされたすべての労力の価値を高く買いたいと思う。静謐に描き出された映像美のことも書かないだけで強く感じたし、尊敬できる素晴らしさだった。パンタグラフの数は多すぎたが。

2017年最高のテレビアニメ作品であったと思っている。2013年の翠星のガルガンティア以来、放送終了直後に金を出そうと決意した作品となった。だから、僕は割引の効かない限定特典付きのBlu-ray Discを全巻予約したのだ。

ローグワン雑感

エピソード7を劇場で見て「ああ、もうこのシリーズはいいや」と思い、どんなに好評でも劇場ではスルーしていたのだが(他人の映画の評価なんか当てにならないからね)、WOWOWで放送されたのを見た。

エピソード4は別格、5や6が堅実、新三部作だと1が好きな僕だが、5や6に並び立つなかなかの作品で満足した。

何よりよかったのは、全員がベストを尽くしたということだ。ともかく新三部作以後、スターウォーズシリーズは手抜きによって辻褄を合わせて来た。

ヨーダ、フォースなんか使わなくてもアナキンが不満を持っていて心が千々に乱れていることは顔色を伺う幼稚園児でもわかるだろう。ほかのジェダイ評議会の連中も同様である。

オビ=ワン、死ぬだろう、じゃねえよ、フォースの潜在能力が極めて高くパルパティーンの愛弟子なんだからちゃんとトドメをさせ。パルパティーン、なぜ積年の恨みを晴らそうという時にヨーダにとどめを刺そうとしない。呑気なことやってんなよ。そもそもヴェイダーが「生命反応はありません」の一言で自分が作った気の毒なドロイドを見逃したからこのお話が始まっている、と言われればそれまでだが。

そもそもデス・スターの破壊自体が「なんでそんな弱点作ったんだ」と長年の謎というかツッコミどころだったわけだが、それを説明する話なので辻褄合わせには気合が入っている。ターキンもヴェイダーも全力を尽くしたし、K2SOも最後まで戦った。こういうのがみたかったのだ。

その全力を尽くしたヴェイダーだが、強い、怖いと言われて期待していたので、正直拍子抜けだった。殺すのがストームトルーパーと同じモブの雑魚キャラなんだもの。

本当に強さや怖さを出したいのなら、殺される側の反乱軍兵士の強さをちゃんと描き、その人格や人生を描かないとダメだ。例えば、データを送信してやったやったとジンとアンドーがやっているところにヴェイダーが現れて、余韻も感動もなく2人の首を瞬時にはね、その遺体はまるでストームトルーパーが死んだ時のようにあっさりと蹴散らされてしまう、これぐらいやらないとシスの暗黒卿の本当の恐怖は描けない。弱そうな奴らがどれだけ帝国の行進曲とともに斬り殺されても、それは映画の中では「とるに足らない死」でしかない。ヴェイダーがディスクを回収できないのはわかっているのだから。

音楽といえば、相変わらず残念であった。Duel of the Fates以来、素晴らしいスコア、というものがこのシリーズにはない。ローグワンと言えばこの曲だ、といえるメインテーマがない。

お話の上で一番残念だったのは主人公連中が命をかけて戦うべき戦いに見えなかったということだ。ルーク・スカイウォーカーは育ての親を惨殺され、綺麗なお姉ちゃん(妹だけどな!)に呼ばれたから行っちゃった、という「若者だし、パイロット志望だったし、目の前でこんなことになったら、行くよな!」みたいな話があった。特に帝国民がひどい暮らしをしている「描写」もないし、別に反乱なんか起こさなくてものんびりやっていけばいいんじゃね?という感じしかしない。むしろ人間は優遇されているはずである。これがカエル人間やサカナ人間が差別に耐えかねて反乱する、という映画なら、なるほど、となっただろう。最終作戦においても小娘が「実はこうなんです!」と言ったらみんなホイホイ付いて来やがって、ワトーみたいな一筋縄ではいかない連中がいてもいいと思うのだが。

この映画はスターウォーズシリーズの中でももっとも映像が美しいと感じている。ジェダを消し去った爆発や、シールドに跳ねるスターファイターの残骸、そしてなにより物理法則を完全に無視して翻るヴェイダーのケープ、船を見送る彼の無念のレイアウトは最高にカッコよかった(お気づきとは思うが、ヴェイダーは船の外にハッチを背にして立っているので、船からもれる空気は彼のケープを彼の身体に貼り付けるように風にあおられるはずだ)。

ただ、本当、ヴェイダー出てくるたびに思うのは胸元のパネル、あれもうリファインしてやってもいいんじゃないですかね……。おもちゃにしか見えん。まあ、それは帝国軍全般に言えるので。むしろ、キャストも一新して再びあの傑作エピソード4を作って欲しいと思う。タイトルはもちろん「シン・スターウォーズ新劇場版:四」である。

ジンはポンチョが可愛かったので最後までポンチョでいて欲しかったです。

あ、あと「七人の侍」と言われていたのだけれど、どこが七人の侍なんですか……?どちらかというと指輪物語では……。

コミケ宣伝です(そのためのエントリィだ)。このままだとイラスト本はなかったことになります。写真集はあるから来てね。

顧客数4のサークル主

f:id:TOYOZUMIKouichi:20171223190117j:plain

早いものであと一週間もせずにコミックマーケット93が開幕する。我が水無月追跡所は今回もサークルスペースをいただいており、出展する。

f:id:TOYOZUMIKouichi:20171223180029j:plain

今回は前三回とは趣向を変えて写真集を頒布する。全28ページ、A5判オールカラーオンデマンド印刷で僕がこの5年間、9回の青森訪問で撮影した写真の中から自信の持てるものをまとめ上げた。

先にお詫びしておくと、本当はA4判でオフセット印刷としたかったが、上記の仕様になった。その仕様だと8万円の製造原価が必要で、我がサークルには基本的に4人しかお客様がいらっしゃらないので、一冊2万円にしないとペィできなくなってしまうのである。もちろん、ペィを目的にしてはいないが(目的にしていたら、参加しない)、金を無駄にする正論もない。

それから、今のところイラスト本も作るつもりで、準備も進めていたが、どうやら作っても無駄そうなので作らない公算が高い。

まあ、どうせ各4部しか出ないので、どちらも一桁しか刷らないつもりだ。既刊は持っていかないつもりだが、見つけたら持って行くだろう。

年々、当日が近づくにつれて気分が暗くなっていく。全然、楽しいコミックマーケットという感じではない。ただ、やはり「本がある」という状態は色々な意味で「強い」のでやっている。

念のため書いておくが、損して学んだこと、売れなくて学んだことなど、何一つない。まったくの無駄だ。

野蛮なアプリの作り方

この記事はLisp Advent Calendar 2017の15日目の記事である。

僕は仕事で主にPHPという大変手軽なプログラミング言語を使っている。この言語は非常によくできていて、初心者でも簡単に扱えるにも関わらず、かなり実用的なアプリケーションを作ることができる。IntelliJ IDEAという強力なIDEの支援をうけることで、効率的に書くこともできる。非常に優れたプログラミング言語だ。なにしろ、僕の日銭はすべてこの言語によってもたらされているのである。ダメな言語なら、それができないだろう。

しかし、僕は肝心な多くのソフトウェアをCommon Lispというプログラミング言語で書いている。Common LispにはPHPには到底出来ないとてつもない機能をいくつか持っているが、何より大変簡単でわかりやすい。主な文法が一つしか存在しないので、奇妙なことをしない限り、文法に悩む必要がほぼない。僕はあまりおつむがよろしくないので、こういう言語でないと、複雑な仕事ができない。他にも魅力的な数々の特徴を持っているが、この記事ではちょっとしたアプリケーションを作ることで、この言語がいかに単純な作りでいろいろできるかを見せられたらと思う。

アプリケーション、応用ソフトウェアをどう定義するかが問題だが、僕は「用事を済ませられるならそれはすべてアプリケーション」と定義している。なにかデータを送り込んでやり、それを加工して、取り出すのがコンピュータに仕事をさせる基本形態であり、それを行うのがアプリケーションだ。だから、この記事で作ったプログラムにデータを送り込み、加工して出力させることにしよう。

どうせこんな記事を読む人間はよくわかっているはずだから、処理系とQuicklispのインストールぐらい自分でなんとかできるだろう。では、始めよう。

(ql:quickload "hunchentoot")

手始めにHTTPサーバを作ることにしよう。hunchentootはCommon LispにおけるApacheのようなものだ。ユーザはこいつにリクエストを投げつけて、こいつからJSONを送り返してもらう。そういうアプリケーションを作ろう。うまい具合に画面をこしらえるのはVue.jsとかそういうのが得意なものに任せれば良い。もちろんCommon LIspでHTMLを吐かせることもできるが、そういうことをすると非常にややこしい道具を量産しなければならなくなることがわかっている。餅は餅屋、画面を描くのが得意なものに画面を任せればよいのだ。

そうだ、作業をするためのパッケージも一つ用意しておいたほうがいいだろう。

(defpackage :app
  (:use :common-lisp
        :hunchentoot)
  )
(in-package :app)

以後このappパッケージのなかでコトを進めることにしよう。

なにはともあれHTTPサーバをこしらえよう。

(defvar *main-acceptor* (make-instance 'easy-acceptor :port 2001))

defvar*main-acceptorという変数を宣言し、そこに2001番ポートを利用するACCEPTORを束縛する。ACCEPTORとはなんぞやと思うと思うが、リクエストを受け取るものだからこういう名前がついているのだ。

このhunchentootという道具は非常に行儀が悪く、グローバル変数を多用して行動するので、先に必要なものを確保しておこう。

(defvar *debug-output* *standard-output*)

*standard-output*は読んでの通り標準出力だが、hunchentootはこれを乗っ取ってしまって、こっちがprintデバッグを試みた時に内容をアルファ・ケンタウリに持ち去ってしまう。だからこうして*debug-output*に束縛しておこう、というわけだ。

(defun print-debug (var)
  (format *debug-output* "~a~%" var))

関数を一つ宣言しておく。こいつがあれば、怪しい変数を標準出力に書き出せるから、困ったらこれを使えば良い。

(start *main-acceptor*)

おもむろにACCEPTORを起動しよう。これで手持ちのウェブブラウザからhttp://localhost:2001/にアクセスすれば、Welcomeページが見える筈だ。標準出力にはログも出てくるだろう。

127.0.0.1 - [2017-12-14 22:11:34] "GET / HTTP/1.1" 200 393 "-" 
127.0.0.1 - [2017-12-14 22:11:34] "GET /img/made-with-lisp-logo.jpg HTTP/1.1" 200 12583 "http://localhost:2001/"

今はいわゆるindex.htmlを返しているわけだが、これがこっちの作った関数の返り値を返すようにしてやれば、その関数を好き勝手いじるだけでアプリができる、という寸法だ。実に手軽である。

さて、いきなりだが、こういうものを作っておこう。

(defun handler ()
  (setf (header-out "Access-Control-Allow-Origin" *reply*) "*")
  (setf (header-out "Access-Control-Allow-Methods" *reply*) "GET, PUT, POST, DELETE, OPTIONS")
  (setf (header-out "Access-Control-Allow-Headers" *reply*) "Content-type")
  (setf (header-out "Content-type" *reply*) "application/json; charset=UTF-8")
  (handler-case
      (case (request-method *request*)
        (:GET (get-handler *request*))
        (:PUT (put-handler *request*))
        (:DELETE (delete-handler *request*))
        (:POST (post-handler *request* )))
    (t (e) (print-debug e))
    )
  )

いきなり巨大な関数が出現して面食らったかもしれないが、先にこいつを作っておいたほうが具合が良いのだから我慢してほしい。

まず、最初の3行だが、これはレスポンスヘッダにXSSではないよというおまじないを添付してブラウザを静かにするためのものだったはずだ。細かいことは自分で調べてほしい。最後の1行はもちろん「これからJSONを返すぜ、UTF-8のな」である。

さて、Common Lispが初めての諸兄の中にはhandler-caseを知らない方も多いと思うが、お察しの通り、これはいわゆるtry catchだ。(t (e) (print-debug e))とあるわけで、まあ例外が起きてしまったら、内容を出力して終わりにしよう。そしてhandler-caseの下にあるcaseは見れば分かる通り、リクエストのHTTPメソッドによって分岐していて、それぞれ別の関数を呼び出している。この関数を好きに書けばよい、というわけだ。まだこれらの関数は宣言していないから、警告を処理系が吐いただろうが、これから作ればよい。

ところで、このhandlerはまだACCEPTORに登録されていない。だからACCEPTORはリクエストを受け取ってもこのhandlerを呼び出してはくれない。ので、登録しよう。

(push (create-regex-dispatcher "^/[0-9a-zA-Z/_]*$" #'handler) *dispatch-table*)

*dispatch-table*はその名の通り、リクエストをどう処理するかを割り付けている表で、この表に正規表現マッチャが正を返した時にhandlerを呼び出す関数を割り付けた。この正規表現は見れば分かる通り、英数字とスラッシュそれからアンダースコアで構成された文字列にマッチする。適当なアドレスにアクセスすれば、標準出力にはエラーとログが出るだろう。

The function APP::GET-HANDLER is undefined.
127.0.0.1 - [2017-12-14 22:28:48] "GET /htkra HTTP/1.1" 200 - "-" 

get-handlerがないと怒られてしまったから、一つ用意しよう。

(defun get-handler (request)
  "{\"message\": \"Hello, world!\"}")

requestを使っていないじゃないか、と怒られると思うが、とりあえずこれでJSONを返すことはできた。

では何かデータを返したいものだから、データを用意しよう。データベースというとSQL系が思いつくが、あれは非常に難しいクエリを書かなければいけない。面倒だ。あれさえなければ資格欄にソフトウェア開発技術者を記すこともできたというのに。というわけで、ここではお手軽なデータベースを使うことにする。

(ql:quickload "bknr.datastore")
(defpackage :app
  (:use :common-lisp
        :hunchentoot
        :bknr.datastore)
  )

新たにbknr.datastoreをロードして、これをappパッケージから使えるようにした。とりあえずデータストアを立ち上げることにしよう。

(defvar *datastore* (make-instance 'mp-store
                       :directory (merge-pathnames "app-store/" (user-homedir-pathname))
                       :subsystems (list (make-instance 'store-object-subsystem))))

これで変数*datastore*に束縛されたデータストアを立ち上げることができた。諸々はホームディレクトリ以下app-storeの下に収めてある。

おもしろくもへったくれもないが、社員というクラスを用意しよう。ご覧の通り、姓名を記録することができるようになっている。

(define-persistent-class employee ()
  ((first-name :read :initarg :first-name :reader employee-first-name :type string)
   (last-name :read :initarg :last-name :reader employee-last-name :type string))
  )

では我々の会社に新入社員を迎えることにしよう。

(make-instance 'employee :last-name "Hiroshi" :first-name "SATO")

サトウ・ヒロシさんが入社してくれた。続いて、今の全社員、正確には今データストアに入っているものを出力してみよう。

(all-store-objects)

を評価すれば、

(#<EMPLOYEE ID: 0>) 

と、返ってくるはずだ。このたった一人のIDが0の社員がサトウさんらしいから、ちょっくら呼び出してみる。

(store-object-with-id 0)

とすれば

#<EMPLOYEE ID: 0>

当然だが、こうなる。彼がサトウさんか確認したければ、

(employee-first-name (store-object-with-id 0))

としてやれば

"SATO"

とくるはずだ。もうわかったかもしれないが、クラスをインスタンス化した瞬間にデータはデータストアに書き込まれている。 all-store-objectsしてその中から愚直に検索することもできるし、bknr.indicesindexed-classを用いればインデックスを貼ることもできる。

では、彼のデータをブラウザから呼び出せるようにしてやろう。まず、JSONのエンコーダを書くのは面倒なので、ライブラリに手助けしてもらおう。

(ql:quickload "yason")
(defpackage :app
  (:use :common-lisp
        :hunchentoot
        :bknr.datastore
        :yason
        )
  )

さて、このYASONにサトウさんをJSONエンコードさせるための処理を書こう。

   (defgeneric object-to-json (object))
    (defmethod object-to-json ((employee employee))
      (with-output-to-string (stream)
        (encode-alist (list (cons "id" (store-object-id employee))
                            (cons "first_name" (employee-first-name employee))
                            (cons "last_name" (employee-last-name employee)))
                      stream)
        )
      )

単に関数にしてもよかったのだが、様々なクラスのインスタンスJSONエンコードすることになることを想定して、総称関数object-to-jsonを宣言した。defmethodではobject-to-jsonの引数objectemployeeクラスのインスタンスだったときだけ、引数をemployeeとして処理を実行するようにしてある。YASONのencode-alistは連想リストをJSONエンコードし、ストリームに結果をかきこむ仕掛けになっているので文字列ストリームを用意してやった。

(object-to-json (store-object-with-id 0))

この結果は、こうなる。

"{\"id\":0,\"first_name\":\"SATO\",\"last_name\":\"Hiroshi\"}"

なお、Common Lispの総称関数は多重ディスパッチという方式が採用されている。これを駆使すると、例えば社員と部署どちらでも出力することになるIDの出力部分を一度しか書かない、といったことができるようになる。興味があったら調べてほしい。

さて、JSONエンコードもできたことだし、get-handlerを改良しよう、と言いたいところだが、先にエラー処理のための関数を書いておこう。

(defun error-message (status-code message)
  (setf (return-code *reply*) status-code)
  (with-output-to-string (stream)
    (encode-alist (list (cons "message" message)) stream)))

HTTPステータスコードとメッセージを受け取って、ステータスコードをセットして、メッセージをJSONに包んで返す関数である。利用されている*reply*がレスポンスを取り扱う変数である。HUNCHENTOOTはこの手の変数の扱いが大好きで多用するのだが、はっきり言って危険なのであまり好きではない。

(defun get-handler (request)
  (let ((id (get-parameter "id" request)))
    (when (null id)
      (return-from get-handler (error-message +http-bad-request+ "Parameter 'id' is not found.")))
    (let ((object (store-object-with-id (handler-case (parse-integer id)
                                          (t ()
                                            (return-from get-handler (error-message +http-bad-request+ "Parameter 'id' is not integer."))
                                            )))))
    (when (null object)
      (return-from get-handler (error-message +http-not-found+ (format nil "Object (ID=~a) is not found." id))))
    (handler-case (object-to-json object)
      (t ()
        (return-from get-handler (error-message +http-service-unavailable+ "Sorry, system cannot encode this object."))))
    )))

さあこれでget-handlerが一応の完成を見た。お好きなブラウザやcURLなどのソフトウェアからhttp://localhost:2001/?id=0を叩けばJSONエンコードされたサトウさんが、なにかやらかせばエラーメッセージが返ってくるはずである。

さて、ではよりアプリを拡張していくとして、と行きたいところだが、月曜日が40%オフの早期入稿締め切りなのである。ちょっとコツを教えておくと、POSTPUTで送られてきたデータは

(raw-post-data :force-text t :request request)

で取得できる。取得したJSONデータはYASONのparseメソッドでハッシュテーブルにして扱えるだろう。

ただし、DELETEのパラメタはget-parameterで取得できることを忘れてはいけない。

それから、オブジェクトはdelete-objectで削除できるし、スロットの値は(setf (slot-value object ‘slot-name) value)で設定できるが、これらは(with-transaction () (setf …))として、with-transactionで包んでやる必要がある。

好評だったら続きを書くかもしれないが、多分、ないだろう。

ガールズ&パンツァー最終章第一話について

僕は8年前に映画を撮ったとき「演出とは時間の使い方」と定義してことに臨んだ。庵野秀明総監督が細かな動きの時期にこだわって作品を作り出しているところを去年確認し、今年もこういう作品に出会えて、あの時の判断は間違っていなかったな、と思える。49分の上映時間はとても長く感じられて、それは非常に豊かで楽しい時間だった。

劇場版で素晴らしいものを見せてくれた作画は今回も健在で「総天然色漫画映画」として本当に楽しかった。小さな動きの質がとても高く、じっくり何度も眺めたいと思ったものだ。不穏な話も漏れ伝え聞いているが、なんとか大勢の納得できる形に収まって欲しいと思うばかりだ。

それから、音響は相変わらず素晴らしく、ここ数年のアニメ作品の中では並ぶものがいない出来である(歴史を振り返ったら08年にスカイ・クロラというのがあったのを思い出した)。ただ音が大きいのは映画館なら当たり前のことで、どんな音が鳴っているのかその音色の豊穣さや滑らかさを映画館では楽しみたい。本音を申し上げると、シン・ゴジラに最優秀録音賞を与え、ガルパンに優秀録音賞すら与えない日本アカデミー賞はこの点を問われるべきだ、もっと率直に言えば国内最高峰の映画賞の有り様として誹りを免れないと思っている。

さて、ガルパンは女の子と戦車という大帝の男の子が大好きなキャラがメインのアニメである。このキャラがいかに活躍するかが大事なわけだ。だから、他のことをいかに端折るかという話になる。劇場版のストーリィもだいぶ雑だったが、今回は雑さに磨きがかかり、開き直って「じゃ、こういうわけで戦車するから」という具合である。潔くて大変よろしい。

さて、ガルパンでも内面の物語つまりドラマを楽しめるのではないか。という話を以前書いた。俺がまほケイダジが好きなのでまほに対する感情移入でばかり書かれているから要約してここに書くと、要は「西住みほという自己犠牲の精神しか持てず、優秀な野戦指揮官にはなり得るが決して指揮に徹することのできない妹が結局どうにもならなかった」にも関わらず「当人も周囲も概ね幸せになれた」のだからよかった、ドラマとして「読んだら楽しいよね」みたいな話である。

テレビシリーズ、劇場版と通じて西住みほの「社会」における成長と、「戦場」における限界が描かれたのである(そういう見方をすれば)。で、蓋を開けたら最終章は、河嶋桃という大洗女子学園において最初に登場したみほの苦手としていた「社会」の化身を隊長としてを置いて、その現場指揮を見守る、つまり「社会」における成長したみほが「戦場」における限界に達したみほを通じて誰かを育てる、社会と戦場の融合が発生したのだ。なるほどそう来たか、と思ってとても期待している。

押井守監督はヒーローの物語とはヒーローが何かを為すことで自身をが変えることだと言っており(世界の半分を怒らせる。第14号を参照のこと)、西住みほは確かに大洗女子学園やその生徒たちを救うことで自らが救われたのだ。そして今、再び誰かを救うことで自信を、さらなる成長を見せようとしているのでは、ないか、そう思うのである。そしてもし、彼女が「自己犠牲の精神」以外の何かでダージリンを打ち倒すことができれば、これは大変素晴らしいことなのではないのだろうか。

ともかく、はじめ方として本当によく出来ていると思ったし、こうしてもう一度内面のお話、ドラマを作り出し、目的のために洗練された外面のお話ストーリィを持っているのだから、しっかりと6話でTV版第一話から始まった「大洗女子学園に生きる戦車道チームの物語」を不可逆かつ継続不可能な形で終わらせてほしい、完成させてくれたら本当に嬉しいし、今後の流れに関わらず作品として期待している。

さて、大波のフリント嬢を演じられた米澤円さんは大変お歌のお上手な方で、彼女の1stアルバムに収録されている「ハートフル・ドリーマー」という曲は彼女の声の良さを存分に引き出した大変良いお歌なのだが、あまり知られていないので書いておきたい。iTunesでも配信されていて試聴できる。それから、彼女の実質的な1stアルバムであるWHITE ALBUM2 ORIGINAL SOUNDTRACK~setsuna~は廃盤になってプレミア価格になってしまって、配信だと「深愛」が聞けないそうなのだが、とにかく良いアルバムなのでオススメである。くわえて、津田朱里さんとデュエットした「White Love」が存在するのだが、これはディスクにしか収録されていない。しかし、これも大変良いのでオススメである。

1stアルバム発売以後、僕の知る限り彼女の歌うたいの活動というのはあまり目立ったものがないのだが、是非これで人気が出て二枚目の個人のアルバムが出てほしいなと思っているのである。

GODZILLA怪獣惑星と、ある意味最もゴジラシリーズと相反する脚本家・虚淵玄の作家性

GODZILLA 怪獣惑星が公開されて一週間が過ぎた。いくつかレビューをみたが、その中で本作の終盤の展開が「脚本が虚淵玄らしい」という評価を読んだ。が、僕はちょっと違う見方をしているので、それを書こうと思う。

終盤の展開、つまり倒せたと思っていた敵だったがもっと強い敵がいた、という展開は別に虚淵玄らしさだとは思わないし、驚きもしなかった。三部作の映画であっさりタイトルロールが殺されるわけがないのだ。本体は他にいるに決まっている。

まあ、そんな僕の感想はどうでもいい(かなりひどいことを書きそうだし)。僕は虚淵玄の作家性は次の三点に集約されると思っている。それは1. 文明への信頼、2.論理を積み重ねた物語の展開、3. 倫理を踏みにじる根源的な悪だ。

どういうことか説明しよう。僕が最初に触れた虚淵氏の作品はFate/Zeroだが、当作の主人公衛宮切嗣は魔術師でありながら現代的な火器を駆使して魔術師を殺めるものと設定されている。剣と魔法の物語に銃と爆薬での決着を持ち込むのがこの作品である。 翠星のガルガンティアでは「人間らしさとは知性をもって文明を作り出すことであり、生物としての幸福と快楽を追求するだけなら知性は不用であり、人間としての尊厳を保つために知性と文明を否定する存在とは戦わなければならない」と文明を否定することを断罪してきた。 PSYCHO-PASSにおいて、主人公常守茜は人類が生み出したあるいみ叡智の結晶である裁定システムかつ悪の塊であるシビュラシステムを「今の世の中がシビュラ抜きでは成り立たないのも事実」と肯定し、「きっと新しい道を見つけてみせる」とさらなる文明の進歩を目指していく。

また、虚淵氏は「"理にかなった展開"だけを積み上げて構築された世界は、どうあってもエントロピーの支配から逃れられない(フェイト/ゼロ 1 第四次聖杯戦争秘話)」と自身の作風をFate/Zeroの時点では嘆いていたが、魔法少女まどか☆マギカでは、論理で宿命を逆手にとってやりこめる中学生の姿を描き、幸運な結末を導いた。さらに、翠星のガルガンティアでは論理を積み重ねた結果、救いを得た物語と破滅へ辿り着いた物語の両方を描いている。PSYCHO-PASSは感情を制御して論理に基づき法と正義を執行しようとする女の物語である。

そして、騎士道精神を謳って無駄に命を消耗させた輩や、魔術師の探究心といった下らぬもののために無辜の人々を虐殺して厭わない輩どもをFate/Zeroでは糾弾し、魔法少女まどか☆マギカでは少女たちの絶望による宇宙の維持を神の力でねじ伏せ、集団を恐怖で支配した人工知能翠星のガルガンティアでは退場を言い渡し、PSYCHO-PASSでは大義のために多くの人間を殺した犯罪者を容赦なく射殺した。楽園追放でも悪は「嘘つき」として明確に倫理的観点から批判されている。

僕は世間一般が何を「虚淵玄らしさ」と呼んでいるのか、よくわからないが、あまり本数を見ていない僕からすると、以上の三点が虚淵作品の特徴である。

さて、虚淵氏がゴジラシリーズの脚本を書くということは、ある意味シリーズの根底に流れるものと、彼の作家性と真っ向から反するということである。ゴジラシリーズは当初から「人間の科学文明に対する警鐘」と見做されているフシがあり、もちろん第一作でも「もし人類がこのまま…」と山根博士が危惧を表明している。他にも例えばゴジラVSビオランテは最終盤のモノローグなどで文明を批判し、VSメカゴジラでも科学よりも命あるものが勝つんだと(よく考えたら意味不明なことを)言っている。2000ミレニアムも科学者たちが科学の進歩を批判するなどそういった主題が明確に打ち出されているし、シン・ゴジラは比較的オープンな姿勢とは言え、完全にそういったものを持たないわけではない。尾頭ヒロミは本当に怖いのは私たち人間かも、となんの脈絡もなく突然言いだすのだ。当然、ゴジラ対ヘドラもその系列にはいるだろう。文明の進歩は危険を招く、という態度が特に平成ゴジラには顕著であるが、本作の脚本を担った虚淵氏は繰り返し文明を肯定してきたのだ。

一方、GODZILLA 怪獣惑星は、論理を積み重ねてゴジラを駆除するのがお話の芯となっている。そして、この駆除作戦は明らかに文明の上に成り立っており、そこに対する憂いは微塵も感じられない。

となると、残る虚淵氏の作家性とは倫理を踏みにじる根源の悪である。冒頭、その影が見えたが、それは簡単に否定されてしまった。ハルオが批判した棄民は、当人たちの切実な願いと利害が一致してしまったからだ。

しかし、GODZILLA 怪獣惑星では文明を否定することを仄めかしたものがいる。僕は、彼こそが本作の「倫理を踏みにじる根源的な悪」であり、その悪行とゴジラは密接に関わっているのではないか、と思っている。

そして、虚淵氏の作品はある特定の歴史上の大きな出来事から構造を切り出したものが多い。PSYCHO-PASS魔法少女まどか☆マギカ翠星のガルガンティアがそうだ。その路線で行くのなら、おそらくメトフィエスは「CIA」という役どころになるのだろう、と想像している。

ゆるぎない、その日を。再び。 -Happy Birthday, again-

いつ、どこに行くのか。旅行はそれが問題だ。

f:id:TOYOZUMIKouichi:20171111233030j:plain

今日は、24年の長きにわたりスーパーあずさとして君臨したJR東日本E351系電車が退役するときき、別れを告げるために秋の信州へと旅立った。8時ちょうどのスーパーあずさ5号で、最後の旅へと出かけたのである。

今は亡き、さほど偉大でもない僕の父と、僕は何度か甲府や松本に行っている。父は給与の多くを血に溶かして便器に流し、煙と快楽物質に変えた男であったがドケチでもあったため、かいじきっぷで甲府に行くか、あの手この手を駆使して青春18きっぷで出かけるのが常だった。

そんな旅行の道中、横目に見たE351系グリーン車は輝いていて、とても憧れていた。あれから何年もの時が過ぎ、何度かスーパーあずさには乗ったが、それでもいざ、なくなるとなると、会いたくなってしまった。

晴れた車窓から外を眺めていると、美しい景色が流れていく。彼女に替わって新たに中央東線に君臨するであろうE353系の有志も一瞬見ることができた。抜けるような青空の下の河川敷には自慢の巨砲を構えた猛者達が連なり、最後の秋の姿を仕留めようとしている。

f:id:TOYOZUMIKouichi:20171111232633j:plain

先週の三連休は、長野と山梨、静岡に福島、山形そして秋田と栃木と旅行した。その長野ではE351系の姿を収めようと思ったのだが、時間が悪く、結局もう撮ることはないだろうということになっている。E351系の写真など山ほどこの世には存在する。それなら、自分はまだない写真を撮りに行こうと思った。

僕が鉄道や航空機を収めるためのレンズを揃えておらず、手持ちの望遠でまかなっているためにそれらしい鉄道写真が少ないのは、そのような用途に使う超望遠レンズが他の用途に使いづらすぎるからだ。そしてそういったレンズで撮れる写真は、誰が撮っても似たような写真になってしまい、そして専門にしていない自分の写真はそれらの中で最も劣る一枚になる。それなら他人が撮りにくい、自分が描いている情景を切り出す写真、自分の技術や感性が世界で最も輝く一枚を撮ろう、と思うからだ。

けれども、今日のトンネルの中で見ていた記事にE351系の写真が出てきたとき思ったのは、今までとちょっと違うことだった。

「僕はE351系を思い出す時、この写真を思い出すだろうか。例えば今はなき北越急行色のはくたかを思う時、どんな見事な鉄道写真よりも自分の撮影した写真を思い出しているのではないだろうかーー」

f:id:TOYOZUMIKouichi:20171111232707j:plain

よく「写真ばかり撮っていると思い出が残らない」と言う人がいる。僕はそうは思わない。一葉の写真を見たときにそこに至るまでの過程、どんな心持ちでシャッタを切ったか、その時の温度や湿度、その旅行で楽しかったこと、美味しかったもの、いろいろなものが思い出せるからだ。

たとえ誰かの作品と同じような構図となっても、それが他人に劣るものであっても、撮りに行ったときの様々なことはその車両のかけがえのない思い出で、大切な物語の一部になるのだ。

f:id:TOYOZUMIKouichi:20171111232754j:plain

今年は春先から小説を書いた。揃って言われたのは「文章が下手だ」ということである。とにかく読みづらい、と散々言われた。そして、自分でも読み返すとまったく訳のわからない文章を書いている。

小説に限ったことではない。このブログの記事もなんだよくわからない文章がつらつらと並べられている、そんなことが少なくない。後で見返すと、酔っ払っていたのではないか、と思う水準だ。

ただ、そんな中でもなぜか旅行記、紀行文だけは妙に評判がいい。もっと書くべきだ、読みたい、写真と合わせて売ったらどうか、そんなことを言われるので、ありがたいことにスペースを頂戴できた今年の冬のコミックマーケットでは、青森の写真集「わたしの青森の物語」を出す。場所は、日曜日東地区“P”ブロック-47bだ。

f:id:TOYOZUMIKouichi:20171111232816j:plain

帰りの北陸新幹線ではグリーン車に乗った。JR東日本の新幹線には「トランヴェール」という小冊子が背もたれのポケットに入っており、ここには沢木耕太郎の「旅のつばくろ」というエッセィが掲載されており、大変楽しみにしている。毎月新幹線に乗っているわけではないので、なんとかバックナンバをすべて揃えたいと考えているほどだ。

沢木耕太郎の文章はいつも切れているが、今回も上手いな、と思わされた。「ソフィスティケート」と彼は<洗練>を外来語としてカタカナで表現したのだが、彼がなぜわざわざ外来語の方を利用したのかが強く伝わってくる。カタカナの並んだときの異質な感じ、少し鋭すぎる感じが、その記事の意図するところには大変ふさわしく感じられた。

今は亡き、さほど偉大でもない僕の父も深夜特急を愛読していたので、彼の遺した初版本は彼の最後の旅路に持たせた。僕はその父に一度聞いたことがある。僕の名前の字は、沢木から取ったのか、と。

f:id:TOYOZUMIKouichi:20171111232902j:plain

10年前の今ごろ、大学生活始めての冬を迎えていた僕は、課題で映像作品を作るように要求された。そこで、他人が撮りにくい、自分が描いている情景を切り出すカット、自分の技術や感性が世界で最も輝く作品を撮ろうと考えた。

自分の知っている、自分だけが見ている情景を重ね、沢木耕太郎深夜特急を携えた青年が、御茶ノ水駅から中央本線に乗り旅に出る作品を作った。タイトルは「ゆるぎない、その日を。-Happy Birthday-」だ。その作品がすべてを回し始め、たくさんの作品を作り、今では映像を作って金を稼ぐようにさえなっている。写真も、あの頃とは比べ物にならないほど上手くなった。映像を作るために描き始めた当初の絵を見た人たちは皆「何が描いてあるのかわからないぐらい下手だった」という。そして絵を描くようになり、上手くなった。だから、文章も書いていけばきっと上手くなるだろうと信じられる。

もちろん、あの時もっと上手ければ、と思うこともある。遅すぎたのではないか、そう思うこともある。それしかない、と言ってもいいかもしれない。どんなことにも、10年の中を振り返るだけでも、数え切れないほどある。

f:id:TOYOZUMIKouichi:20171111232916j:plain

だが「今が、時だ」そう思うようにしよう。そして、今日、行くべきだったのだ。