M12i.

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

V・ウルフ『ダロウェイ夫人』再読

ダロウェイ夫人 (集英社文庫)

ダロウェイ夫人 (集英社文庫)

2年ぶりに再読。最近岩波書店から発刊された『船出』上巻を読んで、その作中にダロウェイ夫妻が登場するので、下巻が発刊されるまでの間にもう一度読んでみたくなったのです。

わたしは一度、サーペンタイン池に一シリング銀貨を投げ入れたことがあった。でもそれだけ。だけどその青年はそれ以上のものを投げ出したのだ。わたしたちは生きつづける〔・・・〕わたしたちは年をとってゆく。だけど大切なものがある──おしゃべりで飾られ、それぞれの人生のなかで汚され曇らされてゆくもの、一日一日の生活のなかで堕落や嘘やおしゃべりとなって失われてゆくもの。これを青年はまもったのだ。死は挑戦だ。人びとは中心に到達することの不可能を感じ、その中心が不思議に自分たちから逸れてゆき、凝集するかに見えたものがばらばらに離れ、歓喜が色あせ、孤独な自分がとり残されるのを感じている──だから死はコミュニケーションのこころみなのだ。死には抱擁があるのだ。〔328-329ペ〕

『船出』よりは読みやすい、でも『私だけの部屋』よりは読みにくい。そう感じました。ともあれ。自身のこころの感じたままに行動し、感じたことをそのまま言葉にすること。たとえそれがシェルショックによって連続性を喪失しひどく混乱したものであっても、他者による矯正に屈しないこと。自分自身を保ちながら他者に対峙し続けること。けれども当の「自分」の本質はいったいどこにあるのか? 仮にそれがあるとして、それだけに頼って私たちはこの生を耐えることができるのだろうか? 例えばクラリッサはダロウェイ夫人という立場に、ピーターは大英帝国の官僚という立場に自身のアイデンティティが分かちがたく結びついてしまっているのに?──そのような問いかけを聴いた気がします。

Angular CLIで「こういう設定ないかな?」と思ったとき

※この記事を執筆している時点の "Angular CLI" の最新バージョンは "v1.0.0-beta.32" です。情報の新鮮さの判断基準として考慮してください。

Angular CLIで「こういう設定ないかな?」と思ったときどうすればよいでしょう。例えば本番稼動に向けてビルド中にスクリプトをminify/uglifyさせたいとき。例えば開発環境で実行するにあたり"localhost:4200/api/..."配下の要求への応答はバックエンドのWebサービスに委譲させたいとき。

なぜこんなことを言うかというと、公式サイトのドキュメントの整理状況がとても心もとないからです。トップページのメニューにある"CLI COMMANDS"はコマンドリファレンスっぽいPDFへのリンクになっていますが、内容を読むとどう考えても網羅性がありません。このPDFを読んでも「開発サーバで起動する方法」も「開発/本番稼動用にビルドする方法」もわかりません(なのになぜか「GitHub Pagesにデプロイする方法」は記載されていたりします)。StackOverflowやQiitaなど各所からのリンク状況(事実上のリンク切れ=遷移先に対応する"#"がないものばっかり!)から察するに、GitHubリポジトリの"README"には、以前はもう少し詳しい情報が載っていたようですが、今はプロジェクトの初期化方法とBetaバージョン間でのマイグレーションの方法くらいしか載っていません。

半ば路頭に迷いつつ調べて今のところの結論は──

  1. まず"README"を読む。たいてい頼りにならないがここから始めよう。
  2. 次にプロジェクトの"Wiki"を読む。これもメンテ状況が中途半端な感じだが"README"の次に読みやすい。
  3. "doc/"配下のMarkdownドキュメントを読む。おそらく以前は"README"に記載されていたものもこちらに移されているようだ。

例えば、冒頭で例として上げたバックエンドのWebサービスとの連携の方法は"Proxy To Backend"で知ることができます。またビルドに関わる諸種のオプションについては"ng build"にコマンドの例で示されています。

Angular2の"Quickstart"で"Angular AOT Webpackプラグイン"を使おうとして挫折

※この記事を執筆している時点の "Quickstart" の最新バージョンは 2.4.0 、"Angular CLI" の最新バージョンは "v1.0.0-beta.32" です。情報の新鮮さの判断基準として考慮してください。

きのう、Angular2のガイドから「デプロイ」(原典)の内容を抄訳しましたが、その"Webpack (およびAOT)"のセクションに紹介されていた方法を"Quickstart"プロジェクトを対象にして試してみました。

Webpack(およびAOT)

Webpack 2はテンプレートとスタイルシートのインライン化、バンドル、コード縮小、そしてコード難読化のためのもう1つの有力な選択肢だ。Angularガイドの"Webpack: an introduction"を読めば、AngularとともにWebpackを使用する方法について初歩的な事項を学ぶことができるだろう。

Webpack 自体のコンフィギュレーションに関しては公式プラグインAngular AOT Webpackプラグインの使用を検討してみてほしい。このプラグインはTypeScriptアプリケーション・コードをトランスパイルし、遅延ロードされる独立したNgModule群をバンドルし、AOTコンパイルを実行する。ソースコードに対する変更は必要ない。

しかし結果は失敗。というか挫折。。。

「"Angular AOT Webpack プラグイン"のドキュメントが素っ気なさ過ぎてわかりにくい」とか*1、「記述されたとおりに設定ファイルを作ってもWebpackコマンドを実行するとモジュールの解決でエラーになる」とか*2、いろいろ障碍があるのですが、最終的にビルド自体は成功したようにみえても、"npm start"*3で開発サーバで動かしてみると、「The selector "my-app" did not match any elements」というメッセージとともに実行時エラーになります。

だいたい開発時の依存関係として"Angular CLI"が入ってくるのにビルドは依然として"npm"や"webpack"コマンドで行うというのにも何だか違和感があります。"Angular CLI"は半年前にモジュール・ローダーをSystemJSからWebpackに代えたというのですから *4 、端から"Angular CLI"のコマンド("ng"コマンド)を使用したほうが話がシンプルになる気がします。しかしそうだとすれば"Quickstart"プロジェクトをベースにしてそこに徐々にコードを追加して自分のアプリケーションにしていくという戦略は捨てねばなりません。斯様な次第ではてさてどうしたものかと考え中です。

m12i.hatenablog.com

*1:これは私のWebpackに関する知識が浅すぎるのが原因でしょう。最初、プラグインのREADMEに記載された情報のコンテキストがまったく掴めませんでした。

*2:これはAngular CLIのバグらしいです。こちらのissueを参照のこと。"Quickstart"プロジェクトの場合"entryModule"の値を __dirname + '/app/app.module#AppModule' としたところビルド・エラーはなくなりました。しかし後述の通り実行時には別の問題が起きます。

*3:"Quickstart"プロジェクトのpackage.jsonの"scripts"の中で"start"コマンドは定義されています。このコマンドによってNode.jsランタイム上で"lite-server"が起動します。

*4:1.0.0-beta.11-webpack リリース時点、つまり2016/08/02時点でそうなったらしい。プロジェクトのCHANGELOGを参照のこと: https://github.com/angular/angular-cli/blob/master/CHANGELOG.md#100-beta11-webpack-2016-08-02