Rのつく財団入り口

ITエンジニア界隈で本やイベント、技術系の話などを書いています。

【感想】青春の痛みに学ぶデザパタ:『デザインパターンなのに、エモい。』@ #技術書典 5

エモく学ぶ4つのデザインパターン

 2018/10/8に盛況のうちに終了したエンジニア向け技術本の同人誌祭典・技術書典5の感想シリーズです。さあ表紙から何やら人間のエモーションを揺さぶる摩天楼の夕日、一見デザインパターンと関係なさそうな独特の情緒、エモさが既に漂っています。
技術書典当日もブース近辺では「JavaScriptで音楽を鳴らすとか人間を疎結合にするとかちょっと理解不能な言葉が飛び交っていた」などの談話が囁かれていたもよう。エモist出版という謎の出版元の正体は、独特の文才を持つ鬼才かろてん氏のサークルだったのだぁ!
 内容はオブジェクト指向の設計パターンで有名なGoFデザインパターンのうち数パターンを解説したもの。どれもストーリーがついており、理屈よりも情緒に訴えかけてエモさでなんとなく理解することができます。
 元のQiitaの記事ではprototype拡張で書かれていたのでサンプルコードの言語はJavaScriptなのですが、本書のサンプルコードはAltJS言語であるTypeScriptで書き直されています。さすがは2010年代の同人誌ですね。
 2000年代に日本で広まったのでオブジェクト指向の書籍やネット記事というとたいてい基本はOOPの元祖であるJavaあるいはC#あたり。自分のやっている言語でも書いてみた…という記事が時々あるぐらい。TypeScriptを取り上げたものは割と珍しいのではないでしょうか。言語特有の書き方はまったく出てこないので、クラスやメンバ変数やメソッドやインターフェースの基本がだいたい分かっていれば、TypeScript未経験でもエモく理解できるので大丈夫です。

f:id:iwasiman:20181027005621j:plain:w250

2章: observer pattern ~私、オタクの名前を覚えなくていいんだ!~

  • 同名記事でQiitaユーザを騒然とさせたいいね800以上、あの地下アイドル記事の改良版。
  • 物語はまだライブに来てくれるファンが数人しかいない悲しい地下アイドル、ChikaIdol クラスから始まります。顔も名前も覚えているファン一人ひとりへの感謝を込めて、Otaku クラスは ChikaIdol クラスの中で変数で持って心を込めて getCd() していきます。
  • しかしだんだん売れてくる ChikaIdol クラス。アイドル稼業も世知辛いもの、Otaku インスタンスの名前をいちいち憶えておくのがだんだんうざく……いやいやエンジニャー的に言うと変更に弱いクラスになってしまいました。武道館ライブができる頃には技術的負債まったなしです。
  • そこで地下アイドルが思いついたのがメンバ変数の配列で……
    ア゛ア゛ア゛ア゛!!! (以下省略)

  • という、Observerパターンを分かりやすく解説したインパクトのあるお話。とにかくインパクトがあるのでエモく理解できます。

  • オタク一人一人を表すがQiitaの記事だとvarで宣言されていたのがletに変わっていたり、TypeScriptでさらに分かりやすくなっています。

  • 元記事ではメンバ変数 name を持って getCd()メソッド内の処理を更に簡略化させたIppanPeopleクラスがいたのですが、本書では一般ピーポーどこかに行ってしまってルナとたっくんの2人のオタだけになっています。TypeScriptでもインターフェースでなく親クラス継承にし、親がメンバ変数 name を持って継承させる形式にすればいいはずですが…一般ピーポーは別ジャンルに行ってしまったのかな?

3章: strategy pattern ~もう自分が何をやっているかなんて、知らなかった~

  • 舞台変わって今度は企業世界のお話。巨大企業である朱羽コーポレートグループに晴れて入社、37F営業部に緊張しながら現れた後輩ちゃんが主人公となっています。あぁ^~社会人の成長物語、いいっすね~^
     脳内補完でもするならば、いきのこれ!社畜ちゃんとか…いやいやいやまだ、お仕事アニメとかNEW GAME!あたりを連想すると捗るでせう。
  • そんな、営業畑に飛び込む後輩ちゃんの前に登場するデキる女感マシマシの先輩。7つの習慣ならぬ、たった3つの営業にとって大事なことを教えてくれます。
  • 処理的にいえば sayHello(), sellSomething(), sayGoodbye() の3つのクラスメソッド。この3つを道具に、後輩ちゃんは徐々に営業の仕方を覚えていくのですが……
     ア゛ア゛ア゛ア!!! (以下省略)

  • というお話。「3つの言葉<インターフェース>」とか「薬物<ストラテジ>」とか独特の用語が飛び交い、ラノベ感マシマシで楽しめます。

  • 新人の女の子のハートフルな成長物語→ブラック企業の苦しみ→サイコパスなやつ→会社っていうか社会福祉公社的なアサシネーション→夜のTOKYOの組織強襲アクション→ミナトク・スゴイタカイビルに居を構えるメガコーポのディストピアサイバーパンク的な感じでバンザイヤッター と世界観は目まぐるしく変わり、鬼才・かろてん先生ワールドを存分に堪能することができます。
  • このStrategyパターンのミソは各クラスがメンバ変数でStrategy型の戦略処理クラスを持っており、これをカチャっと入れ替えるだけで自在に処理を変えられること。これをカチャッカチャッと注入するイメージが非常に想起しやすいストーリーになっており、エモ〜くイメージしやすいです。

4章: decorator pattern ~スタ○バックスだ!~

  • ところ変わって舞台は中世ファンタジー風の異世界、旅人の街ダルムシュタット。鍛冶屋があったりギルドがあったり教会の鐘が鳴ったりしています。最近ではなろう系の異世界転移もので小説/漫画/アニメでもお馴染みです。あぁ^~元RPGゲーマーのワイ、こういうの見ると落ち着くわ~^
  • しかし街の教会の向こうには文明レベルや技術レベルをまったく気にせず、平然とスタ○バックスが営業しています。スタ○バックスです。あぁ^~この適当な感じの世界観いいっすね~^
  • このスタ○バックスで例の長い呪文を唱えるシーンがあり、どうもこの世界でもふつうのコーヒーが飲みたいだけの人は苦労するようです。
  • 長いデコレーションの呪文で頼んでシャレオツなドリンクをキメた女性の旅人が出てくることから、このダルムシュタット周辺の世界は女性が旅していてもゴブリンとか魔導王の不死の軍勢とかが襲ってくることもないようで、治安はまあまあいいようです。
  • さて本題はそんな街の鍛冶屋リーナスを営むマスターと助手の話。統一インターフェースを鋳型にし、FireSwordColdSword クラスを鍛えて cost() メソッドを実装、モンハン…じゃなかった剣を必要としている客に売って生計を立てています。
  • しかし強力なライバル店出現、人海戦術でどんどん剣を鍛えていきます。しかもモンスターの属性が7属性に増加、7属性全てを備えた剣も理論的には必要な模様。組み合わせは7の階乗、7!で5040通りに。従業員が2人しかいない鍛冶屋リーナスはどう立ち向かうのか?というお話。
  • タイトルになっているDecoratorパターンのアイデアをこの世界のスタ○バックスのシャレオツなデコレーションと連想させているのは分かりやすくてよいですね。属性を付加した剣を鍛える話にしているのも、ゲーム世代には馴染みやすいのではないでしょうか。

  • この世界のモンスターの7属性が独特で面白いですね。ワイはオールドゲーマーなので属性といったらまず地水火風の4大エレメンタルを考えてしまうのですが、地がなくてさらに+4種となっています。

  • ものすごくどうでもいいtypoを指摘すると、ライバル店が作っていた水闇剣クラス、水闇破剣クラスの水属性のスペルが Waterでなく Warterになっていました。ウォルターさんみたいです。お、ヘルシングの執事ですか?(ガチオタ発動)

5章: mediator pattern ~こんなことなら、出会わなきゃよかったんだ~

  • 全章の中でもっともエモく、人の心の悲しみと絶望を呼び起こす話ではないかと思わせる第5章。今度は現代日本の世界観、春の学校となっています。あぁ^~この青春ラノベな感じ、いいっすね~^
  • 主人公は桜の舞う春の学校でもクラスに馴染めず、毎日保健室登校を繰り返しているぼっち君。最初の頃は doesGoHokenshitsu() メソッドが不要なぐらい自然に保健室に直行していたのですが、ある日、色白で黒髪の美少女(想像)と思われるヒロインのきさらぎさんとの出会いが…。あぁ^~このラブコメな感じ、いいっすね~^
  • さらに保健室仲間はくろさわ君も増えて賑やかになっていきます。このくろさわ君も最初は、ぼっち君の気持ちを第三者視点から読者に伝える賑やかし役に思えて安心です。
  • そして……ある事件をきっかけにぼっち君はある願いを先生に訴え、疎結合ワールドが保健室に広がってしまい…
     ア゛ア゛ア゛ア゛!!! (以下省略)

  • というなんとも切なく絶望的なお話となっています。もう頭をテクノロジーの世界に呼び戻すしかありません。

 記述によると疎結合のもにょもにょで、ぼっち君はくろさわ君を巻き込んでオールフォーゲットに持ち込んでなかなかエグいとのこと。
 しかし私的にもうひとつ、大きな悲しみを覚えた箇所がありました。ロジック的な処理を集中させた Teacher クラスの中、生徒たちの保険室に行くかの判定ロジックを集中させた doesGoHokenshitsu() メソッドの内部処理です。本書に敬意を表しつつ、色白で黒髪の美少女と思われる(想像)ヒロインのきさらぎさんの処理を引用したいと思います。

    // きさらぎのばあい
    if (colleague instanceof Kisaragi) {
        return true;
    }

何の判定もなくシンプルに真を返し、保健室に行っています。何の条件も誰の条件もなくです。

主人公ぼっち君にとって学校に行く原動力、心の支えであった彼女。

kisaragi.getIsInHokenRoom() の判定条件からも、
ストーリの描写からも明らかに読み取れる、
ぼっち君が彼女に寄せる淡い思いも……

そして、保健室のベッドの上で、
身体的接触があった可能性を匂わせる描写がある、
くろさわ君のことも……

Kisaragiクラスのロジックには恐らく最初からまったく関連がなく、
疎結合が保たれている状態――

つまり、彼女は最初から、2人のことを特には……

 

うっ、失われて久しい青春の痛みに胸が張り裂けそうでこれ以上書くことができません。この痛み…これがエモさ…これがエモさで学ぶデザインパターン……!

 
 

 なおこんな悲しくなる終わり方はイヤだ! ボキュはぼっち君ときさらぎたんがもっとミーツするハッピーエンドが読みたいんだ!(バンバンバン)というめんどくさい方に朗報です。なんと二次創作としてこの5章のアフターストーリーを、あのVTRyoさんが書いてくれています!

blog.vtryo.me

 あぁ^~美人の先生とか出てきていいっすね~^ 有名ラノベだと、あにべん!でもファンが多かった俺ガイルあたりの映像や空気感で補完する感じで読むとさらによしなに捗ると思います^

iwasiman.hatenablog.com

まとめ:エモ〜く学べるデザインパターンの本

 プログラムが動くようになり、オブジェクト指向の理解が進み、その先でプログラマの一般教養的によく出てくるデザインパターン。設計には唯一の正解がないので最初は分かり難かったり議論の的になったりするところですが、本書ではエモさを補助輪にして理解を進めることができます。これからOOPを学ぶ方にもオヌヌメです。
 後書きでもかろてん先生の独特の文才が遺憾なく発揮されています。この情報過多のインターネッツ時代に警鐘を鳴らし、ネットを断って颯爽と旅に出ることを推奨する談話も読めます。特に最後の一文は必見です。

リンク集

電子書籍はboothで読めます。ラノベと同じ感覚で手軽に買える500円なのでどうぞ。 booth.pm

就職や転職でお馴染みのWantedlyに突然登場した謎の読み物。なるほど、わからん…と思いつつ最後まで読むと、徐々に社員募集のようなものに変容していきます。さすがかろてん先生です。 www.wantedly.com

本書の元になったQiitaの記事群。 qiita.com qiita.com qiita.com qiita.com

しがない界隈でもおなじみのgremitoさんらが開始したPodcast『ものラジ』#3、なんとこのかろてんさんがゲストです!
本書を読んだ後に聴くと裏話その他が知れてなかなかニヤニヤな感じです。来年以降の技術書典に向けて、続編も続くとのこと! monorazi.hateblo.jp

Podcast:ナノキャス

著者かろてんさんのブログはエモさ全開の標高3000mの登山話などで知られていますが、最新記事にて、なんと1回5分のPodcastを始めることが告知されました!

karoten512.hatenablog.com

新創作コミュニティ:JapaScript

そしてこのかろてん氏とVTRyo氏のコンビがまた何か企んでいるようで、新しい創作活動コミュニティができました。その名もJapaScript
typoではなく、昔あったJavaScript日本語化の試みともまた別です。この2人がやるならまたなんか面白いことになるのに違いありません。エモい文章が読めそうです。

blog.japascript.jp

おまけ:デザインパターンオブジェクト指向プログラミング

 デザインパターンOOPを知っていると、ゼロから作る時以外にも、うまく作られた既存のアプリケーションのコードを触る時や、よく作られたフレームワークの内部のアーキテクチャを理解したり拡張することになった時にも役立ちます。ある程度プログラミングを学んだら嗜みとして知っておくと、いつか役に立つ時があると思います。

 当ブログで以前感想記事にしたところでは…『オブジェクト指向でなぜつくるのか』は経験が浅い人にも分かりやすく書いてあるし文句なしの鉄板ですね。 iwasiman.hatenablog.com

オブジェクト指向設計実践ガイド』は言語がRuby限定ですが、これもRubyプログラマの方にはよく話題が上がります。 iwasiman.hatenablog.com

『現場で役立つシステム設計の原則』も良書としてよく名が上がります。ドメイン駆動設計の考えにかなり寄っていること、一部理想論的で過激な主張もあるので、書いてあることが100%正しいとは思わず読んだ方がいいかも。(人によりますが自分的には70-80%ぐらいかな)

iwasiman.hatenablog.com

 ちなみに今「デザインパターン」でググったら、トップが炎上中で話題の某侍エン●ニア塾でまたヘイトが溜まってしまいました(笑)。
Qiitaで大いに指摘されたC言語の記事に比べたらこの記事のデザパタ解説は別に間違ってはいないけど……広告とか冗長な文章がなんかイラっとするんだよなぁ…。「デザインパターン -site:sejuku.net」でググりなおしてエモイッシュして気分転換だ!

nlab.itmedia.co.jp

qiita.com