下町柚子黄昏記 by @yuzutas0

したまち発・ゆずたそ作・試行錯誤の瓦礫の記録

螺旋を制御する

ポエム第五弾。

どっちつかずの中庸ではなく、極端と極端を行き来させることでバランスを取りましょうという話。

例:「機能軸組織」と「事業軸組織」

例えば。組織運営で「機能軸組織」と「事業軸組織」のどちらにするのかという議論があります。 機能軸組織とはデザイン組織、データ組織、QA組織のようなものです。事業軸組織とはXXXプロダクトチームのようなものです。

マトリクス型組織というのもありますが、メンバーを指導・評価する上司が事業軸もしくは機能軸の片方に寄らざるを得なかったり、360度評価で時間を掛けて丁寧にやっていたりするので、口で言うほど簡単な運用ではありません。 どちらかに軸足を置きつつ、留学制度や社内勉強会でもう片方の弱みを補うような制度設計で工夫しているのが実情でしょう。

では事業軸と機能軸のどちらが良いのでしょうか。 それはビジネスや組織のフェーズ、あるいは市場環境によります。

あるフェーズでは機能軸組織に該当分野のプロフェッショナルを集約することで該当分野の知見を貯めて品質を高めます。 しかし、ずっと機能軸組織だと、事業コミットへの力学が働きにくくなり、価値の創出やニーズへの柔軟な対応ができていないと感じる場面が出てきます。

あるフェーズでは事業軸組織に多様な分野のプロフェッショナルを集結することで事業ニーズに柔軟に対応します。 しかし、ずっと事業軸組織だと、複数の部署で同じようなことをやって、品質・速度・コスト面で無駄を感じる場面が出てきます。

つまり、2つを交互に入れ替えながら、徐々に組織を成長させていくことになるのです。 そこではコンテキストのリセットと再発見が螺旋のように繰り返されるのです。

例:「中央集権」と「現場判断」

例えば。社内標準システムを中央集権的に作るのか、それとも現場判断で作るのか。 現場と言っても人数が増えてきたら、今度はチームごとにツールを分けるのかどうなのか。 ドキュメント管理をそれまで使っていたConfluenceで全て管理するのか、チームによってはScrapboxやGoogleDocsを使うようにするのか。

統一したら使いにくいと言い出す者が現れて分散する。 分散したら混乱を招くと言い出す者が現れて統一する。 ひたすらこの繰り返しです。 徐々に適応したものが生き残ることで、進化していくのです。

ソースコードを共通化するのか分けるのかと同じです。 その都度リファクタリングしながら分離・結合を繰り返してシステム設計を進化させていくのです。

通化の問題については、ある程度までは共通化して、ある程度からは自由にすることになるでしょう。 国が定める国法もあれば、地方公共団体が定める条例もあります。 しかし問題は、その「ある程度」が時代と共に変わっていくということです。

だからこそ「監査」や「選挙」といった形で、定期的に見直しが行われるような破壊・再生のプログラムが設計されるわけです。 その一貫として、事態が共通化に寄れば断片化を求める声が生じ、事態が断片化によれば共通化を求める声が生じるのです。 自己進化可能なシステムが必要だということです。 ソフトウェア開発のツール選定についてであれば、レトロスペクティブのようなセレモニーで、そしてチームがスケールしたらScrum of Scrumsのような横断機会で、会話がなされるわけです。

揺れ動きをハックする

強力な原理・原則はアナロジーによって万物に適用できるものです。 子供の友情も同じです。喧嘩と和解を繰り返して相互理解を深めているのだと、解釈することができます。 バイオリズムも同じです。呼吸も、食事も、睡眠も、発汗も、筋肉痛も。 景気循環や潮の満ち引きや季節が巡るのも同じです。

循環があることで、停滞や腐敗に対して、刺激や新陳代謝になるわけです。 「振り子ではなく螺旋」(by 技術選定の審美眼 / Understanding the Spiral of Technologies - Speaker Deck)という言葉で表現されるように、その循環では少しずつ何かが変わっているはずです。

揺れ動かない組織は、レバレッジの効いていない組織であり、成長を諦めた組織だとも言えます。 組織とはエコシステムの一種であり、動態なのだと思います。

そこで求められるマネジメントとは、Chaosにする(刺激を与える)だけでもなく、Lawにする(秩序をもたらす)だけでもありません。 揺れ動きによって許容外の被害が出ないように制御したり、再びもう一方へ揺れ戻すときに対応できるようにすることもまた重要な役割です。 ルールを統一するけど逸脱したい人は逸脱できる余地を持たせるとか、自由にやれるけどその範囲は限って小さく始めるとか、そういった制御が必要になります。 組織の成長が螺旋であることを踏まえて、現状への静的な最適化ではなく、将来の動態を踏まえて最適化するようにメタ視点からマネジメントするのです。

螺旋を駆け上がる

先日、自分が頑張って整理した組織が、また混乱していくのを見て「なんだかなぁ」と思ってしまいました。 新規参画者の無邪気な提案を受け入れたくない、という気持ちになったのです。 しかし、これで良いのだと理解しました。自分が老害になりつつあることを自覚しました。 新しいフェーズに成長して、さらなる螺旋を駆け上ることを、喜ぶべきだったのです。

もしかしたら自分たちが当時上手くいかなかったことでも、時間が経過して状況が変わって、やってみたら上手くいくかもしれません。 やらせてみてダメだったら、口で説明するよりも早く同じ目線に立ってもらうことができて、むしろ協働しやすくなるかもしれません。 中途半端に時間を稼いだところで、いずれ変化は生じることになります。停滞や硬直化は、腐敗や相対的劣位を招き、変化を促す者が台頭します。 だったら、どんどんやりたいようにやって、良いものは取り入れて、ダメなものは切り戻して、組織自体についてABテストを高速に繰り返したほうが生産的です。 螺旋を駆け上り、時計の針を進めるのです。

もしかしたら抽象度をあげていくと、仏教の六道輪廻転成も同じことを指しているのかもしれません。 先日、奈良の寺院で和尚さんの話を聞いて思ったのですが、輪廻からの解脱とは「時の螺旋」に振り回されずにマネジメントすることなのではないかと。 物事の本質が変わらないのであれば、時代背景や姿形は違えど、論理の行き着く先が同じだったとしても不思議ではないですよね。川は流れていくものですから。 そう考えると、1000年前を生きた人たちの思考や言葉が、巡り巡って自分の考え方に影響を及ぼしたということになります。 同じように、自分のやったこと、たとえそのままの形では残らなかったとしても、螺旋の一部として、道しるべとして、何かが残り、行く末に影響を及ぼすのかもしれません。

なので、過ぎたことに執着せず、変化に対して柔軟に向き合い、同じことの繰り返しと思えるような事柄に対しても前向きに捉え、螺旋が上に登るように適切に制御していきましょう。

枕草子 (角川ソフィア文庫―ビギナーズ・クラシックス)

枕草子 (角川ソフィア文庫―ビギナーズ・クラシックス)

影響力を行使する

ポエム第四弾。

何かしらの問題が生じた時に、自分の人生を自分でコントロールすることが大切だという話です。 結論は「変えられないこと」は受容して(あるいは距離を置いて)「変えられること」にフォーカスする、ということになります。

言動は選べる

私たちは1人の個人として、周囲の環境から影響を受けるのと同様に、周囲の環境に対して影響力を及ぼすことができます。 例えば「目の前を歩いている人がハンカチを落とした」という視覚情報をインプットしたときに、「拾って声を掛ける」という動作を選ぶこともできますし、「無視する」こともできます。 こうした意思決定の連続で、私たちは大なり小なり周囲に影響力を及ぼしています。 相談してみたら道が開けたり、声を挙げることで課題が打開できたり、感謝の言葉を伝えることで信頼関係が築かれたり、自分の言動によって誰かが動いて物事が変わることはいくらでもあるわけです。

yuzutas0.hatenablog.com

抽象的な話をすると、システム全体は要素(Node)と関連(Arc)によって構成されます。 1つの要素(=自分)が、Inputの対象を変えたり、Inputに対するOutputを変えたら、システム全体の振る舞いは変わります。 システム思考やら数学やら経済学やらコンピュータサイエンスやら、分野によって説明や用語は違えど、似たようなことが語られているはずです。 理論モデルを数式で構築するというのは、まさにこの関係性を描く取り組みだからです。 様々な分野で同じ考え方がされているということであれば、非常に汎用性の高い原理・原則だと認識して差し支えないでしょう。

変えられないこと

大抵の物事は変えられると思います。 変えられないように見えるのは、存在しないはずの制約を、勝手な思い込みで設けてしまっているからです。 Googleの「10倍で考える」やメルカリの「Go Bold」、リクルートの「自ら機会を創り出し、機会によって自らを変えよ」はそういった制約を取っ払うことで高いパフォーマンスを実現することだと私は解釈しています。

ただ、人生は有限ですので(意図的に)自分では「変えないこと」はあるかもしれません。 影響力の行使対象をコントロールするということです。

変えられること

貴重な時間を投下してまで解決するような課題か。 信用や金銭面でのコストも踏まえて、本当にROIは高いか。 もっともシンプルかつ有益な判断基準は「エドガー・シャインの問い」だと思います。

  • 自分の能力で出来ることか
  • やりたいと思えることか
  • 周囲から求められていることか

これはキャリアデザインのための問いではありますが、日々の意思決定にも当てはまるはずです。 環境問題の標語である「Think Globally, Act Locally(地球規模で考え、足元から行動せよ)」ということだと思います。

逃げることも戦い

そう簡単には変えられないこともあるので、逃げてしまうのも一手です。 相手が強いから逃げるのではなく、自分がROIを勘定した結果の判断として逃げるのです。主体は自分です。 自分のフィルターを通して意思決定して、たとえ何度逃げようが、いつかチャンスは掴んで勝てるように。

ただし、負け癖や逃げ癖が付いてしまわないように、勝つべきところでは勝ち続けるように。 レバレッジを掛けることで道が開けることもあるので、ROIの判断は短絡的にならないように。

yuzutas0.hatenablog.com

逃げ方を学ぶ

影響力を行使すべきでない物事に対する執着を、どのように捨てたらいいか。

禅やマインドフルネスではメタ認知の重要性を訴えています。 自分が執着しているという事実にまず気付くことが第一歩だというのです。

また、「死の五段階」仮説によると、人は自分がもうすぐ亡くなることを知ると、否認、怒り、取引、抑うつ、受容の段階を経ることになります。 執着している自分の心を葬り去って、新しい考えへとシフトするときにも、同じような心の動きが生じているのではないでしょうか。 であれば、時が解決してくれることを祈りながら、心のままに進むしかないでしょう。

yuzutas0.hatenablog.com

比較の呪い

執着の典型例が「誰かと自分を比較すること」ではないでしょうか。 比較しても良いことはないですが、社会というのは人を比較しがちな構造ですよね。

何歳で学校に入学・卒業して、身長順に並んだり、テストの点数や足の速さを比べたり。 受験にせよ新卒一括採用にせよ、生まれた年の塊で複数の人間が一括でバッチ処理される仕組みになっています。 受験や就職をしたかと思えば今度は学校内クラスだとか花形部署だとかでまた比較。 転職やら婚活やら住んでいる場所でだって誰かと比較されることもあります。 自分が何かを選ぶのと同じくらい、誰かに自分の何かを選ばれるものです。

冒険しよう

比較の呪いに対して、どうやって受容するか、どうやって逃げるか。 結局のところ狭い世界に閉じこもっているから自分で自分を誰かと比較してしまうわけですよ。 今の時代、飛び級や学び直し、野良研究や週末起業など、多様な選択肢が増えつつあります。

外に目を向けて、掛け算を組み合わせて「この分野だったら自分が1番だ」と思えるもので、自分に対して自分をブランディングして見せてやればいい。

  • (専門の研究者には勝てないけど)数学の趣味コミュニティの中で
  • (他の分野はよく知らないけど)ゼータ関数について
  • (内容自体ではなく)人に紹介するのは

これなら自分が一番だ、とかね。

まずはそこからで良いのではないでしょうか。 勝つ戦いではなく、逃げる戦いについては、なるべく派手に開き直って逃げましょう。

そう思うと「市民」とか「野良」としての動き方はなかなか面白いですよね。あるいはOSSコミッターとかコミュニティ運営とか。 『HUNTER x HUNTER』のハンターや、『鋼の錬金術師』の国家錬金術師のような立場があったら楽しそうだなぁと思ったりもします。 研究者のような、非営利団体のような、ビジネスのような、何とも言えない活動。 境界がどんどん曖昧になっていく昨今だからこそ、そんな冒険者として時流や機会を活かしていきたい。

冒険図鑑―野外で生活するために (Do!図鑑シリーズ)

冒険図鑑―野外で生活するために (Do!図鑑シリーズ)

勝ち癖をつける

ポエム第三弾。

「何をするか」よりも「誰とするか」

企画や仕事に取り組むとき、何をするかということ以上に大切なのは、誰と一緒にするかだと思っています。

ではどのような人とコラボレーションしたいか。 1人1人、性格や得意なことは違うので、一概にこうだと言うのは難しいものです。 それでもあえて私自身の考えを挙げるとするならば「勝ち癖がある人」と一緒にいたいです。

勝ち癖がある

言い方は色々あります。勝ち癖がある。成功体質である。勝ち方を知っている。 要するにPDSサイクルを回して、成功体験を積むということです。 たとえスタート地点での実績やスキルが低くても、改善や成長のスピードが速く、早期に成功体験を共有できれば、自然とお互いに謙虚・尊敬・信頼が生まれるのだと思います。

成功体験を得るために必要なのは、 思考の深度 x 試行の頻度 です。

  • 思考の深度:いかに仮説を立てて情報を集めて学習するか
  • 試行の頻度:いかに素早く小さくアクションするか

行動に繋がるように学び、学びに繋がるように行動する。その繰り返しで人は成長します。 これが出来ると、逆境や困難が立ちはだかったときにも、上手くレバレッジの機会にできるはずです。

勝つ流れを作る

勝ち癖がある人たちに囲まれると、お互いに刺激を与え合い、物事が前進しやすいように思います。

バスケでゴールが続く感じとでもいいますか。 どう動けば良いのか、体が勝手に判断してくれて、何をやっても上手くいく。 そういった勝つ流れができるのです。

この流れの中にいると、多少のミスや一瞬の気の迷いがあっても、仲間のポジティブな声掛けやカバーを受けて、すぐに持ち直すことができます。 生産的で、合理的で、何よりも前向きな世界です。

勝ち癖が育つ環境

勝ち癖のある9人で構成されたチームに、まだ経験の浅い人が1人参画すると、その1人も環境の影響を受けて自然と育ちます。 しかし、勝ち癖のある人の比率が低いと、その影響も薄まってしまうように思います。 ですので、焦ってチームを拡大するのではなく、勝ち癖が全体に浸透して受け皿が出来てから、次の1人にジョインしてもらうのが望ましいです。

ちなみに採用業界では行動特性を見極めるに当たって、コンピテンシー面接という手法が有用だと言われているそうです。 『コンピテンシー面接マニュアル』を最初に読んだときは、まさに「勝ち癖のある人を見極める方法じゃないか」とも思いました。 が、言うは易しで、やはりこの手の話は、短期間で良いので一緒に働いてみるのが確実です。

2人目が大事

とはいえ、まず勝ち癖のある9人で構成されたチームを作るにはどうしたらええねん、という話になります。 最初から勝ち癖のある人と一緒に何かを始めるだとか、初期メンバーにはこだわるといったよくある話になるのかなと。 少なくともプロジェクトのスケールの成否を決めるのは2人目を誰にするかだと思います。「最高の2人目」なのか。 (2人目に限らず1桁メンバーは同じことが続くでしょうし、理想を言えば100人、1000人といった規模になってもそうあるべきなのでしょうが。)

もし適任者がいないなら、プロジェクト案がどんなに良いものに見えても、今の時代に成功することは難しいでしょう。 さっさと畳むか、お蔵入りにするか、血眼になって適任者を探すか、適任者が見つかるまで1人でやっていくか。 いわゆる採用の戦略・戦術のような話になるといくらでも世に知見はあるのでそれらを参考にしていくことになるでしょう。

もしかしたら「最高の2人目」が必要な段階になってから該当者を探し始めるようだと遅いのかもしれません。 すぐに一緒に何かをやる・やらないに関係なく「いつか一緒に何かをやる日が来るのが楽しみだ」とお互いに思えるような関係性を、普段から築けるかどうかなのかもしれません。

まずは自分から

理想は、自分自身が勝ち癖のある存在として、普段から周囲に影響を与えている状態だと思います。 いつどこで誰と何をやっても勝つ流れを作っていけるような、そういう力強い存在になれたら理想ですね。あくまで理想ですが。 何事も与える者のところに集まるものですから、まずは自分がしっかりすることが第一歩かもしれません。

全てで勝利しろとは言わないけれど、せめて自分が頑張りたいと思えることに対しては、何かしらの成功体験を得るところまでやり抜く自分でいたい。 その積み重ねが勝ち癖をつけるということだと思っています。

やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける

やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける

鬼速PDCA

鬼速PDCA

心のままに進む

ポエム第二弾です。

生死に関わることや取り返しのつかないことでなければ、心のままに進むということを大事にしたいなぁという話です。 某社の「Follow your heart」(自分への問い掛け)と「お前はどうしたい?」(相手への問い掛け)という言葉、個人的には気に入っています。

レンズを通して物事を見る

人は自分が見たいものだけを見てしまいがちです。 知識や経験や感情というレンズを通して物事を見ているように思います。

知らないことについて背伸びして難しい本を読んだり人の話を聞いても、表面を上滑りするだけで地肉にならないものです。 特にそれが自分のレンズでは未対応の内容だった場合は「頭では分かるが腹落ちしない」ということになりかねません。

レンズをアップデートする

たとえ間違っていたとしても、自分が正しいと思うやり方で、まずは行動してみるのが良いのではないでしょうか。 1度は自分で経験したほうが、結果的に早く学べることもあります。

おそらくはアンチパターンを踏襲することになるでしょう。 多くの人が直感に従って行動して、その結果として陥るパターンだからこそ、アンチパターンと呼ばれるわけです。

アンチパターンを1度踏んで痛い目を見ると、次に同じ話を聞いたときには、実感を持って理解することができるのです。 挑戦して失敗したあとに該当分野の名著を1冊読むと「まさにこれじゃないか!」「本当はこうすべきだったんだ!」という気付きを得ることができます。 そうやって心のレンズをアップデートしていくわけです。

賢者は多くない

「愚者は経験に学び、賢者は歴史に学ぶ」(ビスマルク

と言いますが、残念ながら100人中99人は愚者なのだと思います。 せいぜい出来ることがあるとすれば、早く行動して、早く失敗して、早く学ぶことです。

行動する前から他人のアドバイスを聞いて上手くやれるほど大抵の人間は賢くないはずです。 よく分からないまま中途半端に言われたことをやって、中途半端な結果になって、中途半端にしか学べていないのではないでしょうか。 「神は細部に宿る」ものですが、よほど優秀な人間でもない限り、心の伴っていない取り組みでは、上手くいくものも上手くいかないでしょう。

yuzutas0.hatenablog.com

誰かに言われて行動するのではなく、いま自分がやるべきだ・やりたい・やったほうがいいと、本心から思えることからしか、人は学べないのではないでしょうか。 どんなに頭を使おうとしても、心のレンズを通さないと物事を見られない以上、最終的には自分の心が命じることには逆らえないのだと思います。

心のままに進み、遠回りすることが、1番の近道なのかもしれません。

「頑張れ、というのはさ」

「もともと、我を張れ、ってところから来ているんだ。我を張り通す。『我を張れ』が変化して、『がんばれ』だ。自分の考えを押し通せ! ってことかもな」

「あ、そういう意味では、頑張れ! っていうのは 『おまえの考えは間違っていないから、そのまま突き進め』という意味合いなのかもしれないな。頑張れ、間違っていないぞ、と」

『あるキング』(伊坂幸太郎)

心と気分は違う

心に従うことは大切ですが、気分に従うのはアンチパターンです。 気分とは、移り変わりの激しいものであり、極めて利己的なものです。 気分に従うだけでは他者を傷つけるだけです。

知恵と経験が足りていないと、自分の心と気分の違いを見極められないかもしれません。 それでも未熟なまま、心なのか気分なのか分からない何かに従うことで、道が開けるのでしょう。 人を傷つけることに対して良心が訴えて、いつかは心と気分の見極め方を学ぶことができるはずだからです。 人間である以上、社会生活の過程で誰かを傷つけて、誰かに傷つけられることは避けられないでしょう。 そうやって心を醸成していくのだと思います。

アルケミスト 夢を旅した少年 (角川文庫)

アルケミスト 夢を旅した少年 (角川文庫)

神は細部に宿る

ポエムが溜まっているので少しずつブログに書こうと思います。

今回は「企画」という仕事について。 私は私自身に対して企画屋であってほしいと期待しています。 だからこそ自分自身に対して文句を言いたいと思っています。

企画とは企(くわだ)てを画(えが)くこと

考えてみると企画というのは難しいものです。 アイデアを言うだけではなく、空想を現実にするために、企てを画かなくてはいけません。

斬新なアイデアなんかじゃない

この10年で台頭したサービスをいくつか見てみましょう。

  • Dropboxはファイルストレージ
  • Instagramは写真投稿
  • Netflixは動画配信
  • LINEはチャット
  • メルカリはWEBフリマ

サービス自体は突飛な内容ではありません。 ある意味では当たり前なものだらけです。 10年前の時点で、少なくともアイデアの概要だけなら、どれも類似サービスはありました。

むしろそれでいいのかもしれません。 突飛すぎたら誰も使えないからです。 誰も思いつかなかったアイデアではなく、誰もが思いついた(けど成功に至らなかった)アイデアを成功させるのが、企画の本質なのかもしれません。

「アイデアとは既存の要素の新しい組み合わせ以外の何ものでもない。」(ジェームス・W・ヤング)

「誰かがやるはずだった。自分がその誰かになりたかった。 」(カール・ルイス

「したい人、10,000人。始める人、100人。続ける人、1人。」(中谷彰宏

じゃあ出来るのか?

そのシンプルなアイデアをいざ実現しようと思ったら大変です。

仮に時計の針を10年前に戻せたとしましょう。 はたして、自分で同じサービスを立ち上げて、偉大な先人たちと同じように成功できるでしょうか。

どうやってたくさんの動画を集めるのか。 どうやって人を巻き込むのか。 どうやって出品してもらうのか。 どうやってその成功を再現するのか。

シンプルなコンセプトを実現して、価値を創出するのは容易なことではありません。 戦略を描き、行動を積み重ね、運を掴み取る。 言葉では簡単に言えますが「じゃあ実際にお前はできたのかよ」ということになります。 本当にできるのなら、10年前にやっているはずです。

もっと解像度を上げる

実際にやるためには、具体的な5W2Hを描き、行動に繋がるように設計することが求められます。 (と書いているこのエントリーが抽象的なのはブーメランですが。)

それっぽい戦略をそれっぽく言うことは誰にでもできるでしょう。 しかし、実際に行動と成果に繋がるレベルまで、プランを描けているでしょうか。

「だから何?」と自分に問い掛けられているでしょうか。 抽象論をいくら検討しても何も進みません。

ネクストアクションはいつどこで誰が何をすればいいのか?」と自分に問い掛けられているでしょうか。 行動志向を追求できているでしょうか。解像度を上げきれているでしょうか。

「本当にそれでいいのか?」と自分に問い掛けられているでしょうか。 自分で勝手に設けた制約をぶち破れるように、レバレッジを掛けられているでしょうか。

小さなこだわり、大きな仕事

解像度を徹底的に上げて、企画を徹底的に詰める。 その結果、捌くことになる作業の9割9分9厘は、とてつもなく地味なはずです。

その地味な細部をいかにこだわれるかが大事なのだと思います。 取引先の置かれた立場を聞き出すセールスも、1pxにこだわるデザイナーも、メソッド名にこだわるエンジニアも、メール文言を磨き込むカスタマーサポートも、プレスの体裁を整えるマーケッターも、それら全てが揃って初めて価値になります。 切り取られた世界における小さく深いこだわりが連なり、プロダクトを織り成し、顧客体験を形作り、価値の創造に繋がるのです。

コンセプトと戦略を踏まえて、個々の作業の小さなこだわりに反映されていく。 小さなこだわりが予期せぬ成功体験を生み、コンセプトや戦略に反映されていく。 その繰り返しで企画は動的に形作られるのでしょう。

そこまで深く潜り込めているでしょうか。

Deep Dive

深く潜り込むというのは、細部に気付いて改善アクションに移せるということです。 そのためには必要なことが2つあると思っています。

1つ目は習慣です。 日々の生活や仕事で120点を取り続けていれば、新しい企画に携わる時にも120点を取れるでしょう。

2つ目は狂気です。 経験や知識やスキルが不十分であっても、狂ったように熱中すれば、365日24時間アンテナを張り続け、見るもの全てからヒントを得ることができるようになります。

ただ、良い意味でバカにならないと、これら2つを継続することはできません。 学校の文化祭でダンスに打ち込むようなものです。 意味なんてありません。 踊り続けないと、覚めたら終わりです。

「それに何の意味があるのか?」と考えてしまったら、思考の迷路を彷徨い、行動できなくなってしまいます。 やがて「人はいずれ死ぬのになぜ生きるのか」「宇宙はいずれ消えるのになぜ後世に何かを託すのか」という考えに辿り着きます。 最終的には『実存主義とは何か』(サルトル)が主張するように「実存は本質に先立つ」(≒とはいえ生まれてしまったのだから、好きに生きればいいじゃん)という開き直りに至るのでしょう。

「踊らされるな、自ら踊れ」(西きょうじ

ダンスの振り付けにこだわるように、自分の人生や、担当する仕事や、趣味のプロジェクトや、そういうものの細部にこだわっていきましょう。 始めてみれば、続けてみれば、楽しさやモチベーションは後からついてくるものです。

狂人のすゝめ

そこまで自覚しておきながら、まだ細部に神が宿っていないのであれば、単純に行動が(そして行動を支える狂気が)足りていないのだと思います。

「狂人の真似とて大路を走らば、即ち狂人なり」(『徒然草』)

ということで、まずは1回だけでも、踊り狂ってみましょう。 企画を始めるのに必要なものは多分もう持っていて、1度踊り出したら、すぐに解像度が上がって、足りないところがどんどん見えて、企画を詰めるのに奔走しなければならなくなるはずです。

ゆえに企画屋とは、思考するために行動し、行動するために思考し、継続的に企てを画き続ける者だと心得ました。 めでたしめでたし。

創造の狂気 ウォルト・ディズニー

創造の狂気 ウォルト・ディズニー

Pythonで『恋するプログラム Rubyで作る人工無脳』を再現しました

概要

恋するプログラム―Rubyでつくる人工無脳 (Mynavi Advanced Library) という書籍を参考にして、Pythonで簡易的な人工無脳を作ってみました。 Githubリポジトリyuzutas0/nobypy になります。

f:id:yuzutas0:20180701214023p:plain

もくじ

実装風景・デモ画面

JupyterNotebookにてスクリプトを実行すると、キャラクターの画像、会話ログ、入力フォームを表示します。 この画面上でチャットボットとの会話を楽しむ形になります。

会話を積み重ねていくことで徐々に言葉を学習していきます。

f:id:yuzutas0:20180701212448p:plain

感情モデルやサブカル語録も習得します。 褒めると喜び、アニメの名言には続きを返すといった具合です。 話がたまに噛み合ったり噛み合わなかったりします。

f:id:yuzutas0:20180701212619p:plain

マルコフ連鎖ジョジョの名言集を学習させたところ、完全に会話が破綻するようになりました。

f:id:yuzutas0:20180701212943p:plain

ロジックや辞書ファイルや会話ログを見比べて原因分析&チューニングしたところ、ジョジョの名言はそもそも自然な日常会話ではなかったので、いくら学習させても会話としては成り立たないことが判明しました。 めでたしめでたし。

書籍内容

一時期は絶版となってしまい中古本が高騰していましたが、最近また再販されたようです。 私の手元にあるのは復刊ドットコム経由で購入したものです。

初心者向けにプログラミングの概念やRubyの文法を説明するところから始まり、ゆくゆくは人工無脳の本格的なコーディングまで案内します。 丁寧なイラストとサンプルコードで解説されているため、具体的な実装レベルで理解することができます。 例としてマルコフ連鎖についての解説を一部引用します。

f:id:yuzutas0:20180702090335p:plain
f:id:yuzutas0:20180702090439p:plain
f:id:yuzutas0:20180702090505p:plain

書籍の目次は以下の通りです。 引用元はマイナビ出版の商品紹介ページで、一部内容を割愛しています。

1-1 人工無脳ってなに?

1-2 ActiveScriptRubyのインストール


2-4 繰り返し

2-5 変数と条件

2-6 配列

2-8 ハッシュ

2-9 オリジナルメソッド

2-10 オリジナルオブジェクト


3-3 最初の人工無脳 proto


4-1 VisualuRuby計画(仮称)でGUI

4-2 コントロールイベントハンドラ

4-4 Responderをランダムに切り換える


5-1 辞書はファイルに

5-2 パターンに反応する

5-3 人工無脳のための正規表現

5-4 PatternResponderの作成


6-3 感情モデルの実装 ――Emotionクラス――

6-6 感情モデルの実装 ――表情の変化――


7-1 まるごと覚える

7-2 形態素解析

7-3 キーワードで覚える

7-4 テンプレートとして覚える


8-1 マルコフモデル

8-2 マルコフ辞書の実装


9-1 Googleと仲良くなろう

9-2 ググるプログラム

システム全体像

処理の全体像は以下のようになっています。

f:id:yuzutas0:20180702090042p:plain

  1. ユーザーからの発言を受けつける
  2. その発言を受けて機嫌が良くなったり悪くなったりする
  3. 辞書をもとに返事のテキストを生成する
  4. 会話ログをもとに辞書を更新する(学習する)
  5. 画面を再描画する=返事をする
  6. 以下同じ処理を繰り返す

開発手順

スモールステップで1つ1つ実装していきました。

  1. ユーザーが何を言っても「こんにちは」と返すシンプルなbotを最初に実装。
  2. 次にユーザーが「XXX」と言ったら人工無脳が「XXXって何?」と聞き返すように実装。
  3. ユーザーに何を言われてもランダム辞書からランダムな発言を返すように実装。
  4. パターンで返すように実装。ユーザーの発言に特定のキーワードが含まれていたら、パターン辞書から特定の返答を行う。例えば「おはよう」という言葉が含まれていたら「今日は良い天気ですね」と返す。
  5. ポジティブとネガティブの感情を持たせる。ユーザーが好意を示す発言を与えると、人工無脳の感情パラメータはプラスになり、画面上で笑顔を見せる。反対に、ユーザーがバカにするような言葉を与えると、人工無脳の感情パラメータはマイナスになり、表情に曇りを見せる。ネガポジは特定のキーワードが文中に含まれるかどうかで判定する。該当キーワードが含まれないと徐々に平穏な状態(数値としてはゼロ)に収束する。
  6. ランダム返信の語彙を学習させる。ユーザーの発言をそのままランダム辞書に追加する。
  7. 単語で返信パターンを学習させる。形態素解析で会話ログを分解してパターン辞書に追加する。ユーザーの発言に「牛乳」という単語が含まれていると「牛乳が飲みたい」という発言を返すようになる。
  8. テンプレートで返信パターンを学習させる。形態素解析で会話ログを分解して、テンプレ辞書を作る。「牛乳が飲みたい」という会話ログをもとにして「XXが飲みたい」というテンプレートを作成する。そうすると次からはユーザーの「緑茶」という言葉を受けて、人工無脳は「緑茶が飲みたい」という文章を生成するようになる。
  9. マルコフ連鎖で文章を生成させる。【文章の開始】に来る言葉は「私」(10%)で、「私」の次に来る言葉は「は」(70%)で、その次は「あなた」(50%)、「が」(70%)、「好き」(10%)、そして「好き」の後に【文章の終了】(50%)といった具合で「私はあなたが好き」と発言する。ある言葉の後に別のある言葉が繋がっていくことで文章となる。文章を生成するために、過去の会話ログを形態素解析で分解して、言葉同士が繋がる確率を辞書に反映させる。
  10. インターネットで検索して回答させる。形態素解析でユーザーの発言を分解して、出てきた名詞(キーワード)でGoogle検索した結果を返す。それまでの会話だけでなくインターネット上のテキストから学習できるようにする。

書籍を写経していくと、これらの内容をざっと自分の手で動かすことができます。

Pythonでの再現で工夫したこと

f:id:yuzutas0:20180701222036p:plain

f:id:yuzutas0:20180701214058p:plain

  • 書籍ではデスクトップで起動するGUIツールを使っていますが、今回はJupyterNotebookで画像表示をしました。その際、保守性を保てるようにクラスやファイルは分離しました。個々の処理は .py ファイルとして切り出して、JupyterNotebookからは描画クラスをインポートしています。
  • 形態素解析の辞書は、書籍で案内されている 茶筌 (Chasen) ではなく janome を用いました。Pythonでのインストール手順が1番簡単だったからです。
  • あとはRubyワンライナーPythonのループ処理で愚直に書き直したり、辞書ファイルをpickleで代替したりと、それなりに地味な修正を積み重ねています。Pythonスキルが0.5歩くらい向上しました。

さらなる工夫の余地

書籍自体は最高なのですが、10年以上前に出版された写経本なので、いまこの書籍にチャレンジするなら工夫の余地は多々ありそうです。

  • 内部設計
    • サンプルコードと文章説明だけなので、能動的に読み解く必要があり、なかなか骨が折れました。
    • クラス・メソッド設計をビジュアル化した補足スライドがあると進めやすいだろうなと思いました。
    • あるいはメソッドごとにテストコードを書くようにすれば、少なくともI/Oの見通しは改善するでしょう。
  • 辞書ファイル
    • 取り扱うファイルがShift-JISなので、JupyterNotebookやIDEで確認しにくいです。何か新しい機能を追加するたびに文字コードエラーが出ました。
    • タブや記号で項目を分けているので、Write/Read(パースなど)の処理を自前実装しなければいけないのが面倒でした。
    • SQLite3などの簡易DBを採択したほうが良さそうです。
  • 俺々スクリプト
    • ディレクトリ構成さえも特になく、直接トップディレクトリにスクリプトを置いているだけです。
    • これを例えば Vue.js (SPA) + Flask (WebAPI) + SQLite (RDB) 構成で実装・勉強できると、現代のWEB開発に準拠しているので教材としての価値が高まるかもしれません。
    • あわよくば開発環境や本番環境を構築してデプロイやサーバ運用についても学んだり、テストコードのカバレッジ測定などのCI構築ができると尚良さそうです。
  • ライブラリやツールの活用
    • 今回はロジックのほとんどを手動で実装しました。もともとそういう趣旨の書籍なのでこれはこれで妥当です。
    • しかし、近年のデータ処理ライブラリの充実を考えると、特にPythonならもっと簡単に高性能なものを作ることもできるかもしれません。
    • クラウド機械学習ソリューション(MLaaS)を活用してマッシュアップ的に作るのもアリですね。

色々と書き出しましたが、そもそもDBの利用などは筆者も分かった上で「今後の課題」として読者に委ねており、書籍の最後でカスタマイズ案が提示されています。 実際に、書籍の内容をWEBアプリケーション化したブログ記事も見つかりました。

恋するプログラムをSinatraでWebアプリにする - あかんわ

3・4人で集まって2泊3日の合宿をやれば、この書籍をベースにして「Pythonで作る人工無脳 2018」のソースコードと補足スライド、簡単なチュートリアル資料を作ることはできそうです。 要件定義→システム設計→コーディング→テスト→リリース→運用までの一連の開発プロセスも体験できるような内容だとさらに役立ちそう。 やってみたいなぁ。

まとめ

こんな感じで、Pythonで簡易的な人工無脳を作ってみました。 「プログラミング」や「自然言語処理」、そして「WEBサービス開発」を学ぼうとしている初心者のネタに向いているのではないでしょうか。 時代が変わって本の内容そのままでは使えない点が多々あるので、別のチュートリアル素材で簡単なシステム開発が出来るようになった人が、脱初心者を目指してチャレンジするのがちょうど良い位置付けになると思います。

市ヶ谷Geek★NightでGCPの相談LTをしました #ichigayageek

市ヶ谷Geek★Night#13GCPの相談LTをしました。 もはや1年前の話です。大人の事情で未公開でしたが、時効になったので資料を公開します。

スライド

GCP相談LT」

特に知見のシェアとかではなく、データ基盤を作り始めたが全然分からないので助けてくれ!という内容となります。

この会で色々な話を聞けたからこそ、後にPyCon JP 2017でベストトークアワード優秀賞を受賞した発表に繋がる成果を挙げることができました。 このイベントに参加したことがきっかけの1つだと思っているので、今更ではありますがしっかりブログに書いておきたいと思います。

ちなみに、このイベントで話したのが相談LT(GCP編)で、相談LT(Python編)が以下となります。

yuzutas0.hatenablog.com

反省点

あまり外部発表をしていなかった時期で、社内広報担当との連携に慣れていなかったのが一番の反省点でした。 そのため、せっかく主催であるオプトテクノロジーズ様のブログに掲載していただけたのに「匿名希望の通りすがりのエンジニア」という記載で調整いただきました。 これは本当に失礼で申し訳ないことをしたと今でも悔やんでいます。

#13 市ヶ谷Geek★Night 「GCPはじめました。Google Cloud Platform特集」レポート

内容面の反省としては「相談LTは難しい」という一言に尽きます。 社内勉強会だと部署横断のコミュニケーションを誘発する鉄板ネタなのですが、社外だとコンテキストを探るところからお互いに始めることになるので、スムーズに相談→助言というわけにはいきません。 せめて聞き手がコメントしやすいように「こうやった!でもここが困っている!」という伝え方をすべきだったのかなぁ。 まぁ、聞き手の立場からすると、せっかく時間を使って話を聞きに来たのに、逆に相談されても困りますよね……。

あと「自己紹介を長々と書いても誰も読まない」ということを思い知りました。 自己紹介を聞きに来たわけではなく、中身を聞きに来ているのだと。 ということで、これ以降のスライドは自己紹介欄が適当になっていきます。 ちなみにシーランド公国爵位はオンラインショッピングで買うことができます。

振り返って

f:id:yuzutas0:20180621100949p:plain

1年間を振り返るとデータ基盤について色々と試行錯誤したりアウトプットしてきたんだなぁと感慨深いものがあります。

yuzutas0.hatenablog.com

yuzutas0.hatenablog.com

yuzutas0.hatenablog.com

yuzutas0.hatenablog.com

yuzutas0.hatenablog.com

yuzutas0.hatenablog.com

yuzutas0.hatenablog.com

yuzutas0.hatenablog.com

まだまだ出来ていないことややりたいことが多すぎて、うわーっという気持ちにもなりますが。

宣伝

そんなこんなで一緒にやっていくチームメイトを絶賛募集中です。

  • データ基盤の開発・運用におけるベストプラクティスを追求したいSREエンジニア
  • データ活用による業務改善(RPA)で利益創出を目指したいアプリケーションエンジニア・機械学習エンジニア・UXデザイナー
  • データ分析による意思決定でプロダクト開発を支えたいアナリスト・データサイエンティスト
  • データ案件推進やデータ駆動文化の醸成を担いたいディレクター・プロデューサー

我こそはという方がいらっしゃいましたら、ぜひお気軽に@yuzutas0にお声掛けください。

クラウドエンジニア養成読本[クラウドを武器にするための知識&実例満載! ] (Software Design plusシリーズ)

クラウドエンジニア養成読本[クラウドを武器にするための知識&実例満載! ] (Software Design plusシリーズ)