あたしは成熟を目指す

プログラミング、思索、読書などの遍歴をとりとめもなく

名盤再訪: 「New York」 Lou Reed

en.wikipedia.org

いわゆるThe New York Albumである。

Lou Reedの活動は、大きく分けて、4つの時期に分類できると思う。

  1. Velvet Undergound時代
  2. グラム・ロックの時代
  3. 低迷期
  4. 全盛期

1はVelvt Undergroundという、パンクロックのオリジネイターのひとつとも言えるバンドでの時代。1960年代である。

2はVelvet Undergroundを脱退したLouが、David Bowieのサポートを受けつつ、ソロアーティストとしての立場を確立した時代。「ワイルドサイドを歩け」など、ロック史を語るときによく言及される楽曲はこの時代のものが多い。

3はもちろん低迷期なので、あまり語られない。

4はアルバム「Blue Mask」以降のすべてである。

大事なことは、Lou Reedの全盛期は、キャリアの後半にこそあり、しかもそれが長かった、ということだ。

 

Lou Reedの全盛期は、「Blue Mask」以降のすべてということになるが、その中でも、この「New York」は、ひときわ輝かしい一枚だと思う。

第一に、楽曲がバラエティに富んでいて、何度聴いても飽きない。

第二に、前項と関連して、演奏が素晴らしい。引き締まった緊張感ある演奏だが、絶妙な軽みがあり、聴いていて疲れない。タイトでエキサイティングなのに、疲れない。凄いことである。

第三に、歌詞が円熟の粋に達している。それぞれが短編小説になりそうなスケッチになっており、意味深ではあるが、ハッタリ臭さがない。瞬時に意味がわかるような歌詞ではなく、何度も聴き込む必要があるが、それだけに味わいがある。

以降のLou Reedは、このアルバムが示した水準がベースになっている。次回作の「Magic and Loss」なども素晴らしいが、まずはこの「New York」の成功があってのものだと言って良いと思う。

Lou Reedを聴くなら、ここから入れば良い。

ライブ映像版も優れた出来である。

楽曲解説

  1. Romeo Had Juliette: ルーのギターが、少しダルな感じのリフを刻み、続けてワン、ツーとカウントを呟いて曲がスタートする。ドラムのフレッド・マーが、かつてなく軽快なビートを叩く。歌は、ほとんど語りであって、メロディ的な抑揚やコーラス的なハーモニーとは縁遠い。しかし、シャープすぎず、むしろどこか飄々とした味わいがある。おや、おもしろいぞ? と感じることができると、すぐに二曲目がやってくるはずだ。
  2. Halloween Parade: これは、ちょっと泣かせる歌だ。LGBTのパレードの話なんだと思うが、去年まで必ず来ていたアイツがいない...AIDSで死んだらしい、というのである。ルーとマイク・ラスケのツインギターとロブ・ワッサーマンのベースの「飄逸さ」が逆に悲しみをじわりと浮き上がらせる。
  3. Dirty Blvd.: 前2曲の「大人しさ」からすると、この曲は比較的ストレートなロックンロールになっている。歌詞も、短編小説風ではあるが、言うなればS&Gの「ボクサー」の90年代的な解釈である。こんな町になんかいたくないと思いつつ、成功するためには出ていくわけにはいかない(だが、ほんとうはどこかへ飛んで消えてしまいたい)。
  4. Endless Cycle: これはシンプルな歌で、ドメスティックヴァイオレンスの被害者が、長じて子を成した結果、その子に暴力をふるってしまう「おわりなき悪循環」を描いている。悲惨な内容に不釣り合いなほど、マイク・ラスケのギターがエレガントである。
  5. There Is No Time: Dirty Blvd以上にストレートなロックンロールナンバー。ぐずぐずしている時間はない。今すぐ走り出さなくては!
  6. Last Great American Whale: 環境保護団体グリーン・ピースの出していたチャリティアルバムにも収録されていた歌だが、環境保護の歌というよりは、USAの愚かさ、無邪気さを(あまり諧謔にならないように)切なく批判し、このまま愚かなままでいいのだろうか? ということを訴えているようにおいらには感じられる。なお、くじらの泣き声のような歌は、シンバルをスティックでこすって出していたことが、映像版で明らかになる。この曲と最後の曲では、モーリン・タッカーがパーカッションで参加しているという(が、あまり印象的ではない)。
  7. Beginning of a Great Adventure: ロブ・ワッサーマンの演奏するウッドベースを大々的にフィーチャーしたジャズっぽい一曲。内容は、はじめて子育てを体験することになったルーが、子供を育てるってことはたいへんな冒険だぞ? と感動しながらおどけている。なお、メインのギターはルー本人。
  8. Busload of Faith: 生きていくには「バス一台分の信念」が必要だ、というシンボリックな言葉を繰り返し歌う歌。意味はわかるようなわからないような感じだが、都会で生きていくためには他人をあてにすることはできず、自分も失敗だらけだから、へこたれずに生きていくには信念が必要だ、みたいな意味のことを色々な比喩とともに語っている(と思う)。いい歌だ。
  9. Sick of You: 幻惑的な、あるいは実際にドラッグをやって観た幻覚を描いているのか、悪夢的なイメージの本流の中に、バブル当時の日本がUSの会社その他を買収しまくっていたことについてのニューヨーカー側の気分が描かれたりする。うんざりだよ、まったく!
  10. Hond on: 殺伐としたエピソードを描きつつも、どこかギャグのような雰囲気ただようシニカルな一曲。NYではどんなことだって起きるから、目を離しちゃいけないぜ?
  11. Good Evening Mr. Waldheim: NYにいる様々な人種の人々の間にある葛藤を描いている(と思う)。軽快で、ノリの良い曲に、こういう歌詞を載せてくるのが、いかにもルーっぽい。曲中のギターソロも、いかにもルーらしいシンプルで効果的なものだ。
  12. Xmas in February: 沈鬱なアルペジオからスタートする。ベトナム帰還兵が今だに苦しんでいることを描いているように思うが、読みが浅いかも知れない。この曲調は、このアルバム以降の数作で繰り返し出てくるパターンだと感じる。そう思うと、おいらはそれほど注目して来なかったが、実は大事な歌なのかもしれない。
  13. Strawman: 大仰なギターリフからスタートする、ちょっとハードロック的ですらある曲だが、歌詞もハードロック的な大仰さだと感じる。人間の貪欲さを批判し、このままだと世界を滅ぼしてしまうぞ? と警告する感じ(だと思う)。おいらは、あまり好きではない。
  14. Dime Store Mystery: アルバムの最後を飾るのは、ちょっと不気味な曲である。歌詞には様々な宗教や哲学の単語が登場するが、意味はまったくわからない。不気味なバイオリン(ヴィオラ?)のフェードアウトとともにアルバムは終わる。ちょっと不完全燃焼的な、モヤモヤの残るエンディングであるが、ある意味では印象的なエンディングとも言える。

その後のFlyway

Flywayは順調にバージョンアップされている。信頼感がありますな。
しかし、世間ではクラウドサービスのRDBMSが流行ってきていて、自分が今後構築するときにはクラウドサービスのものを選ぶと思う。
FlywayでクラウドサービスのRDBMSを管理することをちょっと考えてみたい。
(これからね...)

Flywayを試す

昨年、Laravelを使ったプロジェクトのヘルプに入った。

Laravelに触れた結果として、データベースマイグレーションツールの魅力を再認識した。

自分がデータベースマイグレーションツールを最初に触ったのは、RailsのActive Recordのマイグレーションだったと思うが、当時はそこまで便利だとは思わなかった。Laravelに触れて、ああ、なるほど、と思うところがあった。

最近、私は記憶力が低下してきており、複数の仕事を同時に進めると、すぐに何をしていたのか思い出せなくなり、前回の仕事のおさらいを何度もする羽目になっている。それで作業メモを作りまくっているのだが、結果として、似たようなメモを繰り返し書いていることに気付く。

データベース上のテーブルの定義やテストデータの挿入についても似たようなことがあり、あるプロジェクトの仕事を少しずつ、コツコツと進める必要があるとき、しかも、移動先ではノートPCで作業し、自宅ではデスクトップPCで作業したい、というような要請もあって、リモートレポジトリにファイルを置いて、その履歴を見ることで、それまでの作業を複数の環境でリワインドできるようにしたいのである。

データベースマイグレーションツールは、まさにその目的にピッタリである。複数人で作業できる、ということは、自分が忘れっぽかったり、複数の環境を使っていることと、同じことである。

前置きが長くなった。

私は、現在、2年近くゆっくり取り組んでいるプロジェクトがあり、今度こそ、ちゃんと完結させたいと思っている。着実に前進させるために、ここでデータベースマイグレーションツールを導入したい。そのプロジェクトはJavaで書いているので、データベースマイグレーションツールもJavaで動くものにしたい。

そういうわけでざっと検索したところ、Flywayというものが良さそうだったので、Flywayを試すことにしたのである。

参考にしたページは、以下である。

web-dev.hatenablog.com

少し古いページなので、参考にしつつも、現在最新の情報を参照しながら進めることにする。

 

まずは公式ページをチェックする。

flywaydb.org

私のプロジェクトはNinja Frameworkを使っていて、こいつはMavenを使うのが基本なので(Gradleは、私が試したときは、まだまともに動かなかった...今はどうだか知らない)、FlywayもMavenから使う方法を試すことにする。

いきなり本番プロジェクトを使うのは厳しいので、練習用のプロジェクトをBitbucketに作る。

Mavenアーキタイプからプロジェクトを作成した。

mvn archetype:generate -B \
     -DarchetypeGroupId=org.apache.maven.archetypes \
     -DarchetypeArtifactId=maven-archetype-quickstart \
     -DarchetypeVersion=1.1 \
     -DgroupId=com.tmiyapub \
     -DartifactId=my-first-flyway \
     -Dversion=1.0-SNAPSHOT \
     -Dpackage=com.tmiyapub.lesson.flyway

 

Flywayのチュートリアルでは、h2を使う場合の例が示されているが、われわれはPostgreSQLを使うので、そのための修正をpom.xmlに施そう。

 

<build>
  <plugins>
    <plugin>
      <groupId>org.flywaydb</groupId>
      <artifactId>flyway-maven-plugin</artifactId>
      <version>5.2.4</version>
      <configuration>
        <driver>org.postgresql.Driver</driver>
        <url>jdbc:postgresql://localhost:5432/flyway</url>
        <user>flyway</user>
        <password>flyway</password>
      </configuration>
    </plugin>
  </plugins>
</build>

 

ここで注意したいのは、Flywayのチュートリアルではなかった<driver>を指定することである。また、実際に使うドライバは<dependencies>の方に入れておく。

pom.xmlを修正し、src/main/resources/db/migrationにV1__create_person_table.sqlを作成する。

CREATE TABLE person (
  id INT PRIMARY KEY,
  name VARCHAR(100) NOT NULL
);        

そしてmvn flyway:migrateでテーブルの作成が行なわれる。

 カラムを追加したい場合には、src/main/resources/db/migrationにV2__alter_person_table.sqlを作成して、mvn flyway:migrateする。

ALTER TABLE person ADD COLUMN memo VARCHAR(255);

 つまり、V1から順番にファイルを作っていくことで、各ファイル内のクエリが1回だけ実行される仕組みとなる。V数字の後にアンダースコアを2つ置くことが大事である。

 

Flywayならではの機能があるのかも知れないが、今のところ知る必要がないので、ここまでの知識で実際の仕事に適用しようと思う。

 

設計

その昔、あたしは、とにかくコードを書いていた。

イデアがあると、まずコードを書いて試したかった。

最近は、まず確実に、設計を先行させている。

ある程度、コードの全体像が見えてくるまで、コードを書き始めなくなった。

npmとかwebpackとか

npmとかwebpackとか...なんというか、確信をもってWebに記事を書いている人って、少なそう。試行錯誤して、なんとなく動いているので、これでいいや、という感じの記事が多い印象。初心者であるおいらは、もちろん、そうなのだが...

とりあえず、さっき知って嬉しかったのは、これ。

h2ham.net

package.jsonに"private": trueを追加すると、repositoryフィールドがないよ、という警告が出なくなる。

正しい。実際、そういうつもりだから。

 公式のドキュメントにも説明があった。

docs.npmjs.com

If you set "private": true in your package.json, then npm will refuse to publish it.

This is a way to prevent accidental publication of private repositories. If you would like to ensure that a given package is only ever published to a specific registry (for example, an internal registry), then use the publishConfig dictionary described below to override the registry config param at publish-time.

というわけで本家のドキュメントも折にふれて読みましょう。

 

React DnD

github.comReactでドラッグ&ドロップが必要なSPAを書いている。

で、上のモジュールを試してみた。

なるほど、簡単だ。

よく書けているチュートリアルがあるので、じっくり手を動かしてやってみると良い。

 

うまくいかなかったNode.jsのグローバル側からのアクセス

なんのことはない。iptablesのINPUTルールの途中に、

REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

こんなのがいたからであった。

こいつをINPUTルールから削除して、あらためて最後の行に追加したところ、うまくいきました。