M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

『ウィッチ』を観てきました


ダーク・ファンタジー『ウィッチ』予告編解禁

どういう経緯によるものか忘れましたがFilmarksで登録していた『ウィッチ』を観てきました。舞台は入植時代の北アメリカ。主人公は熱狂的なプロテスタントの家庭に生まれ育った少女。父親は信仰に関わる何らかの理由で入植者コミュニティと衝突。結果家族はコミュニティのプランテーションから追放されて、未だ開拓されていない原野、針葉樹の暗い森の近くに移り住みます。ところがその森には不穏な気配があり・・・。

観終わったところでの感想としては、魔女とそれをめぐる恐怖や狂気を取り扱ったものとしては何だか物足りないなという感じです。雰囲気の演出は悪くないと思います。物足りなく感じたのは「魔女」表象とそれを生み出す同時代人の感性の描き方。「魔女」を自分たちの日常世界からかけ離れたもの、それを侵害するもの、「野蛮」で「残酷」で「狂気」を孕んだものとして規定する、そしてそれに対する「自分たち」=「主人公たち」の恐怖を描き出す、というのはオーソドックスなものではあります。でも、歴史学社会学(あるいは文化人類学)で中世〜近代の農村社会のあり様の一端を垣間見たうえでこうした作品を見るとなると、やはり足りないと感じるのです。

「魔女」という表象を生み出す「主人公たち」もまた、なるほどそれにふさわしくというべきか、今現在の私たちからするとぎょっとするような「野蛮」で「残酷」で「狂気」に満ちた日常正解を生きていたはずです。それらの「異常」性は本作の主人公たちが元いたコミュニティから排除される要因となった(らしい)熱狂的プロテスタンティズムによってだけ説明されうるものではないでしょう。だから私たちが真の意味で「魔女」と対峙する時、私たちはまず最初に「主人公たち」=中世〜近代の農村社会の住人たちの日常世界に対する強烈な違和感と対峙することになり、次にそれらと本来同種でありながら対抗関係にある「魔女」たち(対抗するものとして「主人公たち」のコミュニティから弾き出された「魔女」たち)への違和感と対峙することになる、そういう順序なのだと思います。

もちろんこの作品を作った人たちの意図というのは、歴史考証を入念に行って社会史的な意味におけるリアリティを追求することではなく、現代以降の日常世界に生きる私たちが自分たちの感性を中世〜近代の農村社会の住人たちにそのまま適用するという一種のアナクロニズムを土台にして想像された「魔女」像を、そのできるだけ「生々しく」描くことなのでしょう。だからそこをあまり指摘しても仕方ないだろうとも思うのですが。。

志村貴子『淡島百景 2』

淡島百景 2

淡島百景 2

登場人物のだれがだれとどうしたこうしたがよくわからなくなってしまいました。。もともと物覚えは悪いのですが、発刊の間隔が長いこともあり、余計に。

第2巻を読んでいてふと気がついたのですが、この作品の主人公たちの屈託や葛藤、家族や友人たちに対するポジティブともネガティブとも一概に言い切れない感情のあり方、そしてそれらを抱えながら生きる(あるいは、生きてきた自分を振り返る)彼女たちの人生を、ときに数ヶ月・数年・数十年の隔たりを持つ複数の「場面」から構成してみせる方法、これはどうも夏目漱石なんかの小説の古典の類を読まされているような感覚です。

ちょっとしたエピソード、その中で登場人物たちが見せる表情や短いセリフ、それらの組み合わせでこんなに時間的にも空間的にも(≒社会的にも)深みのある物語が作られるなんてなぁ、と感心してしまいました。

TypeScript x Jasmine構成のnpmパッケージ・プロジェクトを試作

TypeScript x Jasmine構成のnpmパッケージ・プロジェクトを試作してみました。まずはNode.jsランタイムで利用するモジュールのためのパッケージです。これをもとに理屈上Browserifyなどによるバンドル化にも対応できるはずですが、まあそれはそれでいろいろありそうなので、今回はスコープアウトです。Node.jsやクライアントサイドMVCに関する書籍を読んでいても思うことですが、ECMAScript言語族(JavaScript、TypeScript、etc...)においてはモジュール・システムおよび依存性解決はとても重たいテーマです。

プロジェクト

ファイルセットは例によってGitHubにて公開しています。
「TypeScript x Jasmine構成のnpmパッケージ・プロジェクト」と言いましたが、もう少し細かく言うと、次の要件を満たす開発環境を構築するために作成しました:

  • npmによるパッケージ管理を行う
  • gulpによるビルド・タスク管理を行う
  • Visual StudioなどのIDEでなくAtomでコーディングできる構成にする
  • TypeScriptによるコーディングを行う
  • 依存パッケージのAPIへのアクセスは*.d.tsファイルが提供する型情報を通じて行う
  • Jasmineによる単体テスト作成を行う
  • 配布用ファイルには*.min.js*.d.ts*.min.js.mapを含める
  • メイン・コードにJasmineのAPIを利用するコードが絶対に紛れ込まないようにする

ビルド方法

開発環境にまだnpmgulp-cliがインストールされていないようであればインストールします。

その上でプロジェクトのルートディレクトリにてnpm installを実行すると、package.jsonの記述内容に基づいて依存性パッケージがダウンロードされます。

その後、次の各種コマンドを実行することでビルドを行うことができます:

コマンド 説明
gulp build main/配下のTypeScriptコードをトランスパイルし、圧縮・難読化(uglify)した上で、dist/配下にファイル出力します。このときメインの成果物である*.min.jsとともに*.d.ts*.min.js.mapも出力されます。
gulp test main/配下のTypeScriptコードとともにtest/配下の同コードもトランスパイルした上で、*.spec.jsを対象にしてJasmineテスト・ドライバーを実行します。圧縮・難読化やソースマップの生成は行いません。
gulp clean ビルド・タスクにより生成されたファイルをすべて削除します。

コーディング

開発環境にまだAtomがインストールされていないようであればインストールします。 AtomにはAtom TypeScriptパッケージをインストールしておきます。

ビルド方法のところで説明したnpm installまでが完了したら、プロジェクトのディレクトリをAtomでオープンします。 所定のディレクトmain/srctest/srcに格納されたTypeScriptファイルを編集し保存すると、自動的にトランスパイが行われて{main|test}/src/generated配下に*.jsファイルが生成されます。

テストのコードからメインのコードをインポートする場合は import ... from '../../main/src/(filename)'形式で記述します。

ファイル構成

├── LICENSE
├── README.md
├── dist                    ... gulp buildの成果物が格納されるディレクトリ
├── gulpfile.js             ... gulp.jsタスクランナーのためのタスク定義ファイル
├── main                    ... メインのコードと設定情報を格納するディレクトリ
│   ├── generated           ... トランスパイルの成果物が格納されるディレクトリ
│   ├── src
│   │   └── example.ts      ... メインのコード(の例)
│   └── tsconfig.json       ... メイン固有の`tsc`オプション
├── node_modules            ... このパッケージの依存性パッケージが格納されるディレクトリ
├── package.json            ... このパッケージのメタ情報
├── test                    ... テストのコードと設定情報を格納するディレクトリ
│   ├── generated           ... トランスパイルの成果物が格納されるディレクトリ
│   ├── src
│   │   └── example.spec.ts ... テストのコード(の例)
│   └── tsconfig.json       ... テスト固有の`tsc`オプション
└── tsconfig.json           ... メインとテストに共通する`tsc`オプション