PHPカンファレンス関西2018で「続・SOLIDの原則ってどんなふうに使うの? オープン・クローズドの原則 センパイのコーディングノート編」を話しました

7月14日に開催されたPHPカンファレンス関西2018で、『SOLIDの原則ってどんなふうに使うの? オープン・クローズドの原則 センパイのコーディングノート編』というトークをしました。

2018.kphpug.jp

今回のスライドは以下です。60分という長めのセッションでしたが、聞きにいらしてくれた皆様、ありがとうございました!

 

SOLIDの原則シリーズのトークはこれで完結

PHPerKaigiから3回にわたって、「SOLIDの原則ってどんなふうに使うの?」シリーズのトークをしてきました。私の中では、それぞれのトークのポイントは次のようになっています。

どの回も私にとってはチャレンジングな内容でした。PHPerKaigi版では、いかにオープン・クローズドの原則のポイントのようなところを、腑に落ちるように伝えられるかというところが難しく、最終的な形式になるまでにかなり苦労しました。なお、オープン・クローズドの原則を直球で説明している部分も、「アジャイルソフトウェア開発の奥義」に書かれていることをベースに、よりクリアにした私オリジナルの内容になっています。

PHPカンファレンス福岡版では、PHPerKaigi版の内容をブラッシュアップしつつ、伝えたい内容を追加してすこしフォーカスをずらしたので、話のまとめ方、そして時間配分に苦労しました。

最後のPHPカンファレンス関西版では、福岡とはまた違った内容をプラスしていて、この部分の話をちょうど良い感じにまとめるだけでもかなり苦労しました・・・。追加したい内容の部分がかなりのボリュームになってしまったので、削りつつ、ストーリーを変更するということの繰り返しですね。

そして今回の関西のトークで、オープン・クローズドの原則を軸にした一連のトークは、完結となりました。聞いていただいた方には、やや消化不良な箇所があったかと思いますが、それは今の所の私の力量不足です。スミマセン! この一連の話は私の持ちネタとして、少しずつ改良を重ねていく予定です。

裏話:掛け合い方式がなぜ生まれたか?

センパイとコウハイの掛け合い方式は、最初からそのように考えて作ったものではなく、偶然の産物としてできたものでした。私はソフトウェア開発者としてある程度の経験を持っており、そのような立場として設計などについて説明すると、どうしても説明を端折ったり、そんなこと知っていて当たり前、というような空気で前提を作ってしまうところがあります。そういう、言い方は良くないですが「上から目線的」な話がウケる場合もあることは確かですが、今回の一連のトークでは、それとは違うアプローチにしようと思っていました。それは、より多くの人にきちんと伝わるトークにする、というものです。そのために、話の細部に渡って、聞いている人が「なぜそうなるの?」とか「あれ? わからない」となって話についていけなくなる、という箇所がなくなるよういろいろ工夫しました。その工夫の中で、話す内容についていちいち自分で「なぜそう言えるのか?」「新人が聞いても分かるか?」「新人ならどう考えるか?」などと自問しながらストーリーを磨いていました。そんなことをしていると、ふと、「この質問自体を共有した方が伝わるんじゃないか?」と気づいたんです。

これを入れたのは、今の私のトークスキルとしては、成功だと思っています。

もっとうまいやり方はあると思いますし、話者が質問を最初からいれなくても、会場からのリアルタイムな質問を引き出されば、もっと面白いですよね。そして、熟練した話者なら、そんなリアルタイムの質問にうまく答えつつ、それさえも自分の話の流れに組み込んでしまうものですよね。そんなふうになれるよう修行せなばと思います。 

今回のトークの反省

  • スクリーンの左側に立つパターンに慣れていなかった。マイクを左手で持って、右手でスライド操作&水を飲むという感じで、スクリーンの方を指す場合は右手を使うのだけど、方向が逆なのでちょっとやりづらかった。右手マイクでやれる方がよいのかもしれない(対策未定)。
  •  思っていたより、スライドの下の方まで見えるようにスクリーンが調整されていたので、スライドでは下いっぱいまで使った方がよかったかも。
  • スクリーン表示が予想よりちょっと小さく、クラス図やコードの文字は読みづらそうだった。このあたりは、コード量が多いプレゼンテーションの場合の正解が分からない。(話している部分を拡大というのを手軽に作れればよいのだけど。。。)

イベントについて

PHPカンファレンス福岡でも感じましたが、このPHPカンファレンス関西でもスポンサーさんがたくさん集まっているというのが本当にすごいなと思いました。また、参加者もたくさんいらっしゃって、カンファレンスがすごく盛況だなと感じました。

スポンサーブースを回ってカードを集めるという面白い企画も用意してあって、このカード集めの際に、自然とブースの方と話せるようになっていて、上手い企画だなとも思いました。

いろいろな工夫をしてカンファレンスを準備してくださったスタッフの方々、ありがとうとざいました!

次回は?

未定です!

東京で開催されるPHPカンファレンス(12月15日) か、何か他の小さなイベントなどでも、気分やネタの準備状況によっては参加するかもしれません。

参加するならやはり発表者として参加し続けたいので、次なる渾身のトークアイデアを練ろうかと思います。

phpcon.php.gr.jp

 

PHPカンファレンス福岡2018で「SOLIDの原則ってどんなふうに使うの? オープン・クローズドの原則編(拡大版)」を話しました

6月16日に開催されたPHPカンファレンス福岡2018で、『SOLIDの原則ってどんなふうに使うの? オープン・クローズドの原則編(拡大版)』というトークをしました。

phpcon.fukuoka.jp

 

スライドは以下です。スライドだけでも十分内容が伝わるように作っていますが、しゃべりでしか言っていないこともたくさんありますので、動画がアップロードされたらそちらを観ていただきたいです。

 

このトークにかける思い

私はプログラマになりたての頃から、ソフトウェアの設計が好きでした。これまで独学だったり師匠や先輩方からのご指導だったりで揉まれながら、さまざまなことを学んできました。そんな学びの結果、私に身についたといいますか、師匠や先輩方から授かったという方がよいのかもしれませんが、ソフトウェアやコードの設計に対する「目」というものがあります。この「目」は、ソフトウェアのソースコードを見た時に、その設計の具合を嗅ぎ取る目です。

自分のことを振り返ってみても、決して最初から意識してこのような目を手に入れることを目指した、ということはありません。さまざまなことをしてきた結果、そのようなものが身についているらしいということにやっと気づいたというのが正直なところなのです。

ですので、「この目を手に入れる方法」を自分ではっきり見いだせているわけじゃないんです。そのかわりに、「この目では、物事がどのように見えているのか」を伝えてみよう。それが、今年の一連の「SOLIDの原則ってどんなふうに使うの?」シリーズのトークにかける私の思いです。

この「私の目に見えている物事」は、言い換えると「コードの設計的側面の機微」というものかと思います。それはとても些細な違いだったり、僅かな兆候だったりするものなので、表現して人に伝えるには、緻密で正確な描写が必要になるものだと思っています。

しかし、このような描写は言うほどたやすいことではありません。また、そもそもこのような描写を行うためには、対象となる物事自体を相当緻密に観察し、かつ、理解し、自分のものとなっていなくてはいけません。このような点でいえば、今の私の観察、理解、表現はまだまだ発展途上です。今年の一連のトークを通して、より緻密に自分の「見え」を伝えられるよう、磨きをかけていきたいと思っています。

このようなトークで私に見えているものをお伝えすることで、「設計の面白さ」を一人でも多くの方に味わっていただけたらと思っています。

 

今回聞きにいらしてくれた皆様、どうもありがとうございました!

イベントについて

オープニングのスポンサー紹介を聞きながら、あらためてスポンサーがたくさん集まっているということに驚きました。スポンサーブースの数も多く、スポンサーブースの部屋に活気がありました。この部屋にAsk The Speakerのコーナーもあり、私もそこで質問に答えていましたが、部屋自体に活気があるからなのか、質問者の方と楽しい雰囲気で会話することができたように思います。このような場の空気が作れているのは、素晴らしいことだと思いました。

 

トークの反省

  • しゃべりはじめの頃、マイクの音量がつかめなかった。ボリュームが大きくてハウっていたようで、スタッフさんが途中で調整してくれたとのこと。最初の段階で自分から調整した方がよかったかも。
  • 前回のPHPerKaigiでは、水をこぼしてしまうという事件が発生したので、今回はコップに水を注いで飲むようにした。これは安心感があってよかった。 

次は

7月15日のPHPカンファレンス関西2018で、懲りずに同じテーマの『続・SOLIDの原則ってどんなふうに使うの? オープン・クローズドの原則〜センパイのコーディングノート編〜』というトークをします!

2018.kphpug.jp

今回とはまた少し違った設計の観点を攻めるトークです。

ぜひ聞きにいらしてください!

そして、よろしければご感想、ツッコミ、提案、批判、その他いろいろな声をお聞かせください!

 

村上春樹の小説を初めて読んだ(雑文集、職業としての小説家、騎士団長殺し)

私はこれまで、村上春樹の作品を避けてきた。まともに読んでもいないのに。

まわりから聞こえてくる噂から、私の中で村上春樹作品は、(いろいろな方面で失礼な書き方になってしまうかもしれないが)官能小説のようなものとカテゴライズされ、そして未熟な頃の私は、それを自分には不要なカテゴリーだと決めつけて人生を生きてきたように思う。

ところがここ最近の私は、小説というものになぜだか興味が湧いている。そこで語られるストーリーはもちろんなのだが、どちらかといえば、ストーリーの語り方、語る順番、言葉の選び方などといった部分に。「小説技術」とでも言うのだろうか。何らかの意図を伝えるのに必要な構造としての小説、そのような側面にすごく興味が湧いている。もちろん、そこに「設計」と通ずるものがあると個人的に感じているからだ。

 そのような最近の傾向もあって、書店へ行くとかなり幅広くいろいろなジャンルの棚を回って、目についたタイトルの本を手にとってパラパラとめくってみる。その時その時で自分の追いかけているテーマやキーワードがあって、そのものズバリではないのだけれど、ふと引っかかる言葉が見つかったりする。過去に気になって調べていたことや、どこかで聞いた言葉が、それとは思いもしなかったタイトルの本の中にたまたま出てきたりする。そういう期待ばかりを求めているわけではないのだけれど。

 

そんな風にして書店で偶然手に取ったのが『村上春樹 雑文集』だった。手に取る時点で私には若干のためらいがあった。何しろこれまでの人生で、ずっと避けてきたカテゴリーのものだったのだから。しかし私の「小説そのものへの興味」がその時はわずかに勝ったようだった。

村上春樹 雑文集 (新潮文庫)

村上春樹 雑文集 (新潮文庫)

 

この本に収められている、最初のエッセイ「自己とは何か(あるいはおいしい牡蠣フライの食べ方)」は、次のような文で始まる。

小説家とは何か、と質問されたとき、僕はだいたいいつもこう答えることにしている。「小説家とは、多くを観察し、わずかしか判断を下さないことを生業とする人間です」と。 

この一文を読んで、私は続きを読まずに本を閉じた。一文を見ただけで、この本を買うことに決めてしまったからだ。

私がこの本と出会った頃、ある人と「ソフトウェア設計者の資質」について話していた。何らかの領域を生きる道として歩いている人に備わる傾向、それがソフトウェア設計という領域ならばどのようなものなのか。何らかの基準なのか、能力なのか。先天的に持つものなのか、後天的に獲得しうるのか。そんな話をしていた時だった。そのようなテーマを脇に抱えていた私は、この「小説家とは」という文に強く惹かれた。

雑文集には牡蠣フライのエッセイ以外にも、エルサレム賞受賞時の挨拶文や、音楽についてのエッセイなどが掲載されていた。短いエッセイからでも、この文章を書く村上春樹という人が、小説というものをどのように捉えているのか、そして小説という構造をどのように生みだしているのかが、垣間見えた。

そうこうしているうちに、村上春樹という作者への興味がだんだんと強くなってきた。もう一冊村上春樹の本を読んでみよう。その時点でも、村上春樹の小説作品はまだ、私にとって「避けたいカテゴリー」に属したままだと感じていたが、この雑文集のようなエッセイはとてもおもしろく、同じようなものが他にあるのではないか、あれば読みたいと思った。そして見つけたのが、『職業としての小説家』だ。

職業としての小説家 (新潮文庫)

職業としての小説家 (新潮文庫)

 

 タイトルを見た瞬間に探していたのはこれだと思った。そして、ものすごく興味深く読んだ。この本を読んでいるある時点から、私の中では「村上春樹とはすごい人だ」という認識に変わった。

またソフトウェア設計の話にそれるが、最近学んでいる本で大きなテーマとして取り上げられているキーワードの1つに「長期的」というのがある。「時を超えた」とも表現される。かなり長い時間を基軸として物事を考える姿勢だ。たとえばスチュアート・ブランドのTHE CLOCK OF THE LONG NOWには、1000年や10000年で1まわりする時計を自己の内側に概念として持つことが提案されている。そのような概念的な時計を持つことで、長期的な視点に立てるのだと。

「職業としての小説家」には、いくつか時間にまつわる話が書かれている。物事を語るリズムとしての時間、オリジナリティと時間といったもの。それはこの本のメインコンテンツではないけれど、今の私にはよく響く内容だった。 

そして私はついに、このような考えや態度のもとに、この村上春樹が書いた小説は、どのようなものなのか知りたくなった。もうこれは読んでみるしかないと思った。そうして選んだのが、村上春樹のもっとも新しい長編小説『騎士団長殺し』だ。

騎士団長殺し :第1部 顕れるイデア編

騎士団長殺し :第1部 顕れるイデア編

 
騎士団長殺し :第2部 遷ろうメタファー編

騎士団長殺し :第2部 遷ろうメタファー編

 

本屋へよく通う私は、「騎士団長殺し」の存在を発売前から認識していた。どの本屋でも大きくキャンペーンされていたからだ。しかし私はできるだけそれを避けるようにしていたので、どのような内容なのかはまったく知らなかった。

読んでみようというタイミングになって本を手に取った時、そのサブタイトルに驚いた。「第1部:顕れるイデア編」「第2部:遷ろうメタファー編」。私は哲学も大好きなのだ。このサブタイトルを見ただけで、「何、何、どういうこと?」と好奇心を抑えられなかった。この本は最後まで読むだろうと直感し、1部と2部を同時に購入した。

内容には特に触れないが、私のいろいろな感情や知識や魂を刺激してくれるもので、読み終わってとても満足している(だからこうしてブログまで書くことにしたのだ)。

私は騎士団長殺しという物語を読みながら、その背後や物語の中に村上春樹自身を見、それと同時に、自分自身を見ているようだった。この本に至るまでの流れからも、必然的に読まれるべき作品を読んだような気がする。それはとても不思議でもあり、また、それはありふれたことなのかもしれないとも思う。

 

引き続き村上春樹の小説を読むかどうかはまだ分からない。今回は運良く読まれるべき本に出会えただけなのかもしれない。しかし、もう少し幅広くいろいろな小説を読んでみようという気持ちは強くなった。

Netflix「ワイルドワイルドカントリー」を観た

Netflixオリジナルドキュメンタリー「ワイルドワイルドカントリー」を観た。人から薦められたということは一切なく、Netflixで「自然」の映像を探していたところ、たまたま目にとまったという偶然だった。

www.netflix.com

「あるカルト宗教の興隆・没落を記録したドキュメンタリー」と聞けば、多くの視聴者は「カルト宗教に入信しない、一般市民」の側に自身を自然と位置づけるだろう。しかし、ワイルドワイルドカントリーは、どちらかといえば、カルト宗教内部にいた人たちへのインタビューに、多くの時間がかけられており、市民側前提で観ようとしていた私は最初戸惑った。カルト宗教の導師であるバグワンが、アメリカのオレゴンへ行く前、インドにいた頃から話は始まるのだが、その頃のバグワンのコミューン(アシュラム=道場と呼ばれていたそうだ)には、とても活気があり、クリエイティブな活動も活発だったようだ。そこに住む人々は幸せそうだった。やや奇妙な教え(性に対して開放的なこと)もありはしたが、全体的にみて、この宗教がものすごく狂っているとは思えなかった。

そのように思えたのは、この作品の演出によるものなのかもしれない。しかし私が「この人たちはまともな人たちだ」と思えたのには、カルト宗教内部の人としてインタビューに答える人たち、とくにシーラという、一時期教団の実質トップだった女性の話し方などから、聡明さや強さといったことを感じたことも大きい。作品全編を通して、「今現在の」シーラへのインタビュー映像が多く使われる。彼女は過去に教団の内部の人間として、数々の犯罪行為を主導したその人だ。そのような人にも関わらず(いや、そのような人だからなのか)、過去を話す口調に迷いがなく、力強い。

罪を犯した。これは良くないことだ。しかしその行動に至るさまざまな状況で、教団側は常に悪だったのだろうか。教団と一般市民との間に摩擦要素があることは仕方ないことだが、どちらか一方のみを悪と決めつけて良いことではないと思う。もし私がこの市の住民なら、または、教団側の人間なら、どのように考え行動するだろうか。

 

観て笑って楽しむような作品ではないのだけれど、いろいろなシチュエーションにおかれた人から何かを感じとりたい方にはお薦めかと思う。そして是非最後まで観て頂きたい。

 

『現場で役立つシステム設計の原則』への些細な批判

増田亨さんの『現場で役立つシステム設計の原則』について、こちらの記事で私の解釈を書いた。(未読の方はご一読いただければ幸い)

背後の原理を理解した上で、私の意見として述べておきたいことがあるので、この記事を書いている。

なお、この批判は、増田さんの方法論の成り立ちの部分に対するものだ。方法論全体を間違いだと否定するものではないし、この方法論によって構築されたソフトウェアや、方法論を現場で利用している方々を否定するものではないことは、どうかご理解願いたい。

重箱の隅をつつくような、細かな話をしているように感じる方もいらっしゃることと思う。しかし、そのようなところにこそ「方法論の機微」が見え隠れするものだと思う。設計や方法論を探求したいと思われている方には、考えを深めるわずかなヒントになるのではないかと思う。

(以下、書名を「現場で役立つ本」、この本で述べられる方法論を「増田方法論」と記載。)

独自進化した「変更容易性」という強すぎる観点

「現場で役立つ本」に書かれた増田方法論における「変更容易性」は、私の解釈では次のような定義だ。

ソフトウェアに変更が必要な時に、ソースコード上で変更しなければならない箇所を特定する時間の短さの度合い。および、変更作業にかかる時間の短さの度合い。

このような定義を前提におけば、増田方法論の理屈はとても分かりやすい。しかし、いくつかの問題が生じていると思う。

1つ目。上のような定義はソフトウェアの変更容易性と呼ばれる考え方の中で、ある1つの狭い領域でしかなく、また、決して主流の捉え方というわけではない。にもかかわらず、増田方法論では変更容易性としてこの観点しか取り上げない。これは、増田方法論の中では、変更容易性という言葉を、一般的なものとは別の意味で採用しているということだ。しかも、本には上のような定義がされているわけではなく、暗黙的にそうなっているというのがまた厄介だ。

すでにある概念を転用するならば、一般的な意味との違いの明示などを丁寧にやることで、無用な混乱を避けられるはずだが、そのようなこともされていない。

2つ目。「ソースコードを変更することがかんたん」という、非常に分かりやすい観点は、その分かりやすさの代償として、他の設計観点を押しつぶしてしまう。どういうことか。ソフトウェアの設計においては、歴史的にさまざまな知見が積み上げられてきた。実績をともなって機能してきた正真正銘の方法論や設計ノウハウがあり、研究されエッセンスが抽出されて、いくつかの設計原則として語り継がれている。そのような設計原則の中には、コードに対するパッと見のかんたんさとは相容れない観点を要求するものがある。たとえば抽象化による情報隠蔽を適用すると、具象部分である細部のコードへトップダウンにアクセスすることは、多少難しくなる。しかしそれでもなお、情報隠蔽にはソフトウェア設計として価値がある。なぜなら、そのような情報隠蔽によってこそソフトウェアの構造が整理され、コードが読みやすくなる側面があるからだ。そしてこれは私個人の意見というわけではなく、多くの人がそう言っていることなのだ。

しかし増田方法論における変更容易性には当てはめづらいように思われる。なぜなら、トップダウンでコードにアクセスしづらくなるということは、増田方法論においては「コードがわかりにくくなる」ことだからだ。したがって、これは私の単なる推測の域を出ないのだが、情報隠蔽やモジュール化、デザインパターン等々、コードが一見小難しくなる設計は、増田方法論においては遠ざけられてしまうのではないだろうか。

結局のところ「ソースコードの変更がかんたん」という観点が、ソフトウェア設計に利用するには強すぎるのだと思う。これを中心に据えてしまうと、設計のための方法論としてのバランスを保てないように思う。 

おわりに

増田さんの本に書かれた内容(の私の解釈)に対しての、私の意見を書いてみた。私のこのようなやり方は、一歩間違えば「藁人形論法」に陥ってしまう危険性がある。そうならないよう、解釈がそれ自体きちんと成立するよう誠実に行ったつもりだ。

 

私の意見の根本的なポイントは、杉本さんの記事で言われていることと同じだと思っている。未読の方は是非ご一読頂きたい。

 

PHP Mentors -> 「現場で役立つシステム設計の原則」批判 (1) ~何のために、「データとロジックを一体に」するのか?~

PHP Mentors -> 「現場で役立つシステム設計の原則」批判 (2) ~ポリモーフィズムは何のために?~