「頭がいい人」で終わらせない思考様式の種類の話

  • ARTICLES
さて、ここは自分のブログなので自分語りであれなんであれ、好きなことを書いていいのだ。なんという自由。自由は素晴らしい。その自由の前にはこれが株式会社エス・エム・エス Advent Calendar の一部 (12⁄18 の回) であることなど些細なことである。 2024年を迎えて2月になると、今の会社へ入社をして10年目に突入する。これまで転職が多く、長く同じところにいるイメージが少ないからだろうか、「なぜ今の会社にいるのか・続けられるのか」という質問を度々受ける。プライベートで会った知人にも聞かれるし、カジュアル面談のような場でも聞かれる。 決まって答えているのは「上司に不満がない状態でいられるから。そして、その行き着く先である経営に不満がない状態でいられるから」である (本題ではないので説明はしない。気になる人は直接聞いてください) のだが、もう少しその内訳を考えてみた。で、その中で思考様式の相性の良さというものに気づいたので、思考様式の種類について説明してみたい。 思考様式に種類があるということへ自覚的でなかったときには、それを知性 (≒知的能力) と同一視していた。知性というのは一般に有無で表され、「知性がある ( または、ない)」という扱いをするものだと考えていた。あくまでそれは知性という同じカテゴリのものの中でのレベルの違いであり、専門分野の違いによる事前知識を抜きにすれば優劣がつくものだと考えていた気がする (優劣をつけたいと思ったことはなかったと思うが、「すごいなー」と思う裏には知性の優秀さへのリスペクトがあったと思うし、何かしら人へ不満を持ったときにそれを相手の知性の不足と (今思えば安易に) 結論付けていたことは正直に言って幾度となくあったと思う)。 一般に頭の良さとされやすい情報処理能力の高さ それを顕著に感じていたのは前職のディー・エヌ・エーの在籍時で、あの会社はそれはそれは皆頭がよかった (それを私は知性が高いと感じていた)。ミーティングに30分参加をしていたとして、そのうち20分の会話が理解をするのが精一杯で、ラスト10分に自分の理解のための確認をして、ミーティング後に自身の理解不足を埋めるというようなことはざらにあった。これは別に周囲が不親切なわけでなく、とにかく会話のスピードが速いのだ。そして、その会話の一言で皆が理解するコンテキストが多い。それはコンピューターサイエンスの基礎知識であったり、社内固有の事情であったり、最新のトレンドであったり多岐にわたるが、1を聞いて20も30も文脈を含んで話が先へ進むので、理解が追いつかない。しかし、圧倒的に情報処理能力が高い人達が集まり、そんなスピードで物事が決定していくので、そこを引っ張る優秀な人たちによって尋常じゃないスピードで仕事が進んでいく。そんな会社だった。2年も居ればそのスタイルにも慣れたが、それでも自分の知性の不足を感じることが多い会社だった。 今はそれは知性の不足ではなく思考様式の違いを含んだギャップでもあったと認識ができる。「情報処理能力」と表現をしたが、あれはまさに情報処理能力の高さだった。瞬間に流れる情報に対して、そこから受け取る情報量を最大化して、それを高速に処理をして高い専門性から論理的に結論を導き出して進めていく。その処理量が多ければ多いだけ仕事は大量に進む。あのときの体験は、思考様式としては情報処理性能を重視したものだったと言える。 思考様式の3つのサンプル 今は自分の思考様式の特徴へもう少し自覚的なため、大量高速情報処理だけが思考の優秀さではないということを知っている。そして、自分の強みが別の場所にあることもわかった。ここでは、他にどんな思考様式があるのかを自分の特徴・思考の癖だと考えているものを例に挙げていこう。なお、思考様式はそれぞれ共存し得るのでどれかが近いから、他のなにかがまったくできないというようなものではない。考え方の特徴的な習慣をカテゴリーに分類しているだけだ。 問題解決型思考 問題解決型思考とはなにかというと、2023年の今でもこのエントリーを紹介するのが説明として一番しっくり来る。「圧倒的に生産性の高い人(サイエンティスト)の研究スタイル」にあるような思考様式だ。思考の特徴を安宅さんが整理しているのでそのままに並べると、 まずイシューありき 仮説ドリブン アウトプットドリブン メッセージドリブン となる。ここでとくにこの思考様式の優秀さというのが表れるのは「ちなみにこの白黒を付けるという姿勢がどの程度あるか、どのようなことに白黒つけようとするのかで、経営課題の場合、problem solverとしての質はほぼ規定される。」という文章によく表現されている。なにをイシューとみなすかという課題設定能力が優れていることが問題解決型思考の優秀さになる (この点で情報処理能力と独立している)。 この課題設定能力 (イシューの見極め) は、同じ安宅さんの HBR への寄稿「知性の核心は知覚にある」からの引用ではこのように説明されている (『イシューからはじめよ』の「よいイシューの3条件」よりも良い整理だと思う)。 イシューを見極めるということは、①答えを出すことにインパクトがあり、②答えが出せ、③明確かつ力強く人に伝えうる、問いを立てるということだ。 一つの事物からの多層的な思考 情報処理能力の高さを一つの思考様式の優秀さとするのならば、この一つの事物からの多層的な思考というのはそれとトレードオフの関係にある思考様式になる。これも言語化にあたっては安宅さんのブログから「噛みしめることを大切にしよう」の助けを借りたい。読んでもらった前提で、追加で解説をしていく。 世の中の情報を解析するステップとして、なにかを見たり体験したりしたときに、その情報を構文解析のように解釈可能な単位に分解し、意味解析をして個々へ意味づけをしていくとしたら、この思考様式は意味づけのプロセスにおける見解や選択肢の多さを特徴としている。たとえば、「チームがリリースを延期した」という一つの出来事にあたっときに、どんなことを考えるか。ぱっと考えつくところとしては、「延期の影響はどこに出るのか」「原因はなにか」「次の打ち手はなにか」「チームの受けとめ方やモチベーションはどうか」あたりだろうか。人によっては「謝罪」「防衛」などが浮かぶかもしれない。この辺は経験からの思考のパターンがあって、出てくるところだろう。 ここで多層的な思考と呼んでいる思考様式は、ここからもう一段も二段も考えを巡らせることを指している。先ほどの考えに加えて、「原因はなにか」に対してなぜなぜ分析で考えを深めていったり、「チームがリリースを延期する前に支援することはできなかったのはなぜか」「それは組織文化の問題に起因するのではないか」「組織がそのような課題を持つとしたら、なにができるか」といった方向へ考えを発展させたりする。あるいは、「リリースを延期する前にそのような不確実性を解消しておけなかったのはなぜか」「開発プランの設計でケアできなかったのはなぜか」「開発プロセスの理解はチームでそろっていたか」などプロセスとの側面で発展させることもできるだろう。同じように採用時の人材要件へ考えを発展させることもできたりする。 このように「一つの事物からの多層的な思考」はいくらでもあり得た可能性を広げることができるので、現実とつなぐためにはどこかで収束させることが必要になる。高速に情報処理をするにはトレードオフが発生する傾向はあるが、それでもこの思考様式が強い人は一つの事象から物事を理解する学習能力が強い傾向があり、使いこなすことができれば優れた特性と言える。 割りきらず複雑なままに扱う ロジカルに考えるというのは、現実をモデル化する中で情報を切り捨てる側面を持っている。そうしないと、論理的に議論をすることができないため、本来は様々なノイズを含んだ現実を単純化する。「割りきらず複雑なまま扱う思考」はそこで切り捨てるようなものも含めて、本当に評価が必要なときまではホールドしておき、極力複数の変数の相互作用による演算結果の違いが表れるのを遅延させるような思考様式だ。現実は複雑なので、なるべくそこから逃げずに考える。これもまた、情報処理能力の高さとはトレードオフの関係にある。なぜかというと、たとえば時間軸での変化の影響であったり、個人・チーム・組織・他組織といった人への計算しにくい影響であったり、そういった答えの出しにくいものを「なかったこと」にせず、常に影響しあう可能性として考え続けるからだ。そのために必要なのは脳みそのCPUでなくメモリーであり、一部の変数を変えたときの影響をシミュレーションし続けながら、最適解を探り続けるような頭の使い方が求められる。 さらに難しいのは、現実世界ではどこかでは割りきらないと (ある程度モデル化して判断において取り扱える程度に単純化しないと) 判断ができなかったり、少なくとも他者への説明ができなくなるので、複雑なままでは判断の役に立たずモデル化する必要がある点だ。脳内シミュレーションだけで終わらせず、ある程度の段階で評価をしてやる必要がある。その意味で、遅延評価的だ。 思考様式の種類は自身の価値観や気持ちよさに大きく影響している ここまでで、情報処理型と3つのサンプルで合わせて4つの思考様式を説明してみた。私が言語化できていないだけで、他にも様々な思考様式があるはずだ。これらはあくまで思考の特徴であって、どれかだけを使っているということはなく、組み合わせて思考をしている。ここで重要なのは、これらの思考様式の違いに人による得意不得意があり、それは能力や技術に依存をしていることに加えて、自身の価値観や気持ちよさにも大きく影響をしているという点だ。 冒頭の「なぜ今の会社にいるのか・続けられるのか」の話で言えば、私は現職のエス・エム・エスの思考様式と相性がよかったと感じている。これまで自身でもあまり自覚していなかった思考的な特徴を「良いもの」として評価してくれたのは、この会社が初めてだった (というか、思考的な特徴を良いにしろ悪いにしろ、言及されたこと自体も初だった)。思考様式は生来の習慣である場合もあるし、価値観から選択し身につけたものである場合もあるが、それが環境によっても後押しをされるというのは良い体験だった。 世の中に求められる思考様式の種類は画一的ではない 人やチーム、会社のような組織として見たときに、同質性が高いほうが働きやすさにもつながるし、一方で多様性はその組織の選択肢の多さになるので強さにもつながる。この思考様式の違いにおける自身のやりやすさや気持ちよさ、価値観からどういった組織へ所属すると快適かというのが違ってくるということを知っておくだけで、少し人生が過ごしやすくなる。思考様式の違いでもトレードオフという言葉が何度か出現している通り、思考様式はあくまで特徴の違いであって、どれかが最強の思考というようなものではない。解こうとしている問題や局面によって適した思考様式は違ってくる。違いがあるということを知ること。そして、自身の特徴にあった場がきっとどこかにあるということを知っておくことは、様々な場面で選択肢を広げることになると思う。

「パターン、Wiki、XP ーー 時を超えた創造の原則」参加報告 (セッションは2009年に行われたものです)

  • ARTICLES
個人の Wiki に 2009 年に参加したトークセッションのメモ書きが残っていた。2019年の今読むとまた面白いのでブログの記事として公開してみる。トークセッション自体は 2009 年に行われたものだ。 パターン、Wiki、XP ーー 時を超えた創造の原則 20090710:トークセッション「時を超えた創造の原則」参加報告。 『パターン、Wiki、XP』という本の刊行を記念したトークセッションへ参加してきました。これらの源流に建築家クリストファー・アレグザンダーの思想と思考と哲学を見出し、ソフトウェア開発との接点を探るという内容でした。 構成は 『パターン、Wiki、XP』の概要説明 (江渡浩一郎さん) XP とアレグザンダーについてのトークセッション (かくたにさん、懸田さん) の二部構成。 『パターン、Wiki、XP』について。 Wiki qwikweb の開発者 機能拡張をするときに機能を追加したのに悪くなることがある.なぜだろう?と考えた Wiki の本質を強化する機能は良い機能である しかし Wiki の本質って何ですか? パターン デザインパターンで何だろう? アレグザンダーのパターンランゲージを元にしたと紹介されるけど、全然違う 一番最初のパターンの論文 (ケント・ベックとワード・カニンハムの書いた論文) を読んでみた。おもしろい! そこにあった言葉。「コンピュータユーザーは自分自身のプログラムを書くべきなのである」 つまり、本来目指したのは「使う人間のためのパターン」 使う人間が自分のほしいものを表現し実現するためのパターンランゲージを志向していた。 XP クライアントと開発現場の関係を根本から見直す必要がある オンサイト顧客のような開発に参加するクライアントという関係を築くためには、いついつまでに何を作りますよ。それで支払はいくら発生しますよ。というコミットメントの関係ではむずかしい。 その関係性自体を変えるよう切り込まないと本質的な解決にならない Wiki, XP, パターンはあるものでつながっている。それは問題意識。顧客との関係性という問題意識でつながっている。Wiki はパターンや XP の土台になるもの。 クリストファー・アレグザンダー 初期と後期で全然言っていることが違う 「形の合成に関するノート」(1964) デザインするという行為を数学的な問題に落とし込む 「都市はツリーではない」(1965) 自然都市と人工都市の二項対立 「オレゴン大学の実験」(1975) 利用者参加の建築へ舵を切る 「パターンランゲージ」(1977) 建築は要求条件が多すぎてデザインしきれない 利用者が建築の設計を自分たちで参加できないか 「時を超えた建築の道」(1979) パターンランゲージの背景を解説した理論書 「無名の質」 自然都市に表れるような言葉で表現できないけれど何かよいというような質 形を科学することの本質的困難性

ソフトウェアを設計するということ

  • ARTICLES
『オブジェクト指向入門』という本がある。今は第2版が出版されていて、原則・コンセプトをテーマにしたものと方法論・実践をテーマにした二分冊になっている。この本はオブジェクト指向によるソフトウェア構築 (Object-Oriented Software Construction) とはなにかについて、緻密に基礎の基礎から話を積み上げ、その全体像を描き出す他にない名著だ。ぼくはまつもとゆきひろさんが推薦する本として最優先に挙げていたのを見て当時出ていた第一版の翻訳を買って読んだ。 最近になって必要があって読み返して驚いたのだけど、今でも自分の設計の指針となっているベースはとことんこの本の内容だった。技法ではなく、設計をするというときに考える思考の観点はこの本からもらったもので、その観点を実現するにはどんなことを理解し考えないといけないかをその後学んで実践し続けてきたのだということに気付くことができた。ソフトウェアを設計するということができるようになるために、方法論を理解しその実践を通して設計ができている状態を目指しているような人にこそ読んでみてほしい本だ。 この本は丁寧に理論が構築されているので、いきなり美味しいところから入ったりはしない。最初はソフトウェアの品質から始まる。 工学の目的は品質である。したがって、ソフトウェア工学は、品質の高いソフトウェアの生産を意味する。 自分の設計の指針となっているベースと書いた内容は第 3 章にある。ここでは、モジュール性をテーマにその 5 つの基準 (criteria)、5 つの規則 (rule)、そして 5 つの原則 (principle) が説明される。 5 つの基準 基準は「モジュール性がある」と呼ぶときに満たしている必要がある基準を挙げている。 分解しやすさ (Decomposability) 組み合わせやすさ (Composability) 分かりやすさ (Understandability) 連続性 (Continuity) 保護性 (Protection) 5 つの規則 これらを保証するために守らなければならない 5 つの規則というのが規則として挙げられているもので、これが「設計の指針となるベース」として設計のことを考えるときに常に頭の中で考えている観点そのものだった。 直接的な写像 (Direct Mapping) 少ないインタフェース (Few Interfaces) 小さいインタフェース (弱い結び付き) (Small Interfaces (weak coupling)) 明示的なインタフェース (Explicit Interfaces) 情報隠蔽 (Information Hiding) 直接的な写像 ソフトウェアシステムというものは何らかの問題領域の必要に対処しようとする。ある問題領域を記述する良いモデルがある場合、ソフトウェアによって提供される解決手法の構造と、モデルとして表現される問題の構造の間の写像 (マッピング) を、明快に保つことが望ましいことに気づくはずだ。このことから次の第 1 の規則が導き出される。 『ソフトウェアシステムの構築過程で考案されたモジュール構造は、それに先立つ問題領域のモデル化の過程で考案された任意のモジュール構造との互換性を維持していなければならない。』

Ruby で自分のための問題を解決していく話 (個人の Wiki を esa に移行した話) : 続き

  • ARTICLES
Ruby で自分のための問題を解決していく話 (個人の Wiki を esa に移行した話) の続き。前回は文章とコードでの説明ばかりになってしまったので全体的にやっていることを図にしてみた。 PukiWikiをesaへ移行する流れ 作戦としては、 一連の PukiWiki のファイルはローカルに置いて失敗があれば最初からやりなおせるようにする esa の記事作成以外は繰り返し実行可能にする Markdown の変換で PukiWiki と esa の仕様の差分を吸収できるようにがんばる 最終結果を esa 上で確認し、意図しない表示になっているものは Markdown の変換からやりなおして差分が出た記事について esa へ更新をかける という流れで、実行制限のある esa の API 呼び出しを最小限にしつつ、Wiki 内のページリンクなど PukiWiki 資産を最大限に活かせる形を考えた。実際はここまで全部最初から考えてやったわけではなくて、やりながらやっぱり Wiki 内のページへのリンクも有効にしたいなとか #ls もただ機能をつぶすのじゃなくて活用したいなとか考えては実装し、そして再度手順を実行し、という繰り返しだったのでやりなおせる構成にしたのは正解だった。 ここからは esa への新規投稿による記事 URI 確定と、二度目に Wiki 内リンクを解消した更新をかける流れを説明し、最後に繰り返し修正と更新を繰り返す中でどんな PukiWiki の仕様で引っかかったかとその対処を説明する。 esa への新規投稿で記事 URI を確定させる ページ名を日本語でもつけていることもあり、WikiName による Wiki 内のページのリンク機能を前提として書いている文章はさほどないが、[[Page name]] と囲むことでページ名を指定してのリンクは多用しているのでこれは活かしたい。 実際は記事の URI を確定させたいというだけなのだけど、esa 上に記事をつくるしかその手段がないので全記事を投稿して記事番号を採番してもらい、URI を確定させる。

Ruby で自分のための問題を解決していく話 (個人の Wiki を esa に移行した話)

  • ARTICLES
はじめに 遅くても 2008 年ごろから使っている個人の Wiki があって、調べたことや頻繁に探すことをメモしたりして使ってきた。当時職場で使っていたのが PukiWiki で使い慣れていたという理由だけで使い始めた PukiWiki をそろそろさすがに別のものにしたいなと感じていたので esa に移行をした。そのときに考えたことやこうやって移行をしたという記録。移行対象となった PukiWiki のバージョンは 1.5.0 のため、以後の各仕様は v1.5.0 のものになっている。 最初に考えたこと まずなにはなくとも PukiWiki 記法を Markdown にする必要がある。それから自分の用途としてダウンロードした各種スライドを添付していて、中にはすでに WWW 上では見つけられないものもあるので添付ファイルを完全に移行したい。そこまでどうにかできればあとは互換性のない移行をあきらめることでどうにかなるだろう。 と、まあ、あまり細かいことは考えずに始めた。 PukiWiki 記法を解釈して Markdown に変換する 検索すると正規表現を使ってごりごりと変換していくサンプルはいくつか見つかったのだが、自分でこれを修正しながら互換性を上げていく土台としてはきついなというものが多かった。そこで、パーサジェネレータを使ってみたかったという興味もあり、Parslet で PEG スタイルのパーサを書いてみることにした。 Parslet のパース結果はツリーで Array として返され、Hash が入ってる。Hash は Symbol と Parslet::Slice でできてる。Parslet::Slice は出自の位置をもった String みたいなもの。to_s をすると文字列を取り出せる。 {:toc=>"#contents"@0} #=> [Symbol, :toc] [Parslet::Slice, "#contents"@0] 実装進めるにあたっては、他の実装を参考にするのが一番イメージがつかみやすかった。 https://github.com/kschiess/parslet/tree/master/example frsyuki さんの MessagePack パーサの実装 できあがった実装が pukiwiki2md として公開されている。この Gem を使うと、Parslet に則って、Parser#parse でパースし、その結果を Transform#apply で Markdown へと変換することができる。

実行力こそが違いとなる

  • ARTICLES
(時間の)95%は企業がしっかりとその計画を遂行できるようにすること CEO と成長の苦しみ - Sam Altman とのインタビューを読んだ。全体にとても納得感があり、自分の感じるものと近いところの多いインタビューだった。 Sam Altman CEOという役職に求められるのは、企業が何をすべきかを見極めること、そして実際に企業がそれを行動に移すようにすること、基本的にはこの2点です。 (略) Sam Altman この難しい部分は、多くの人たちが最初にやるべき部分、つまり会社が何をすべきなのかを見極めることです。しかし実践において、時間的にはこの仕事は5%に過ぎず、残りの95%は企業がしっかりとその計画を遂行できるようにすることだと思います。ですが、こういう風に計画を確実にこなせるようにするというのは、要するに信じられないほどの繰り返しの作業なので、ほとんどのCEOにとっては面倒で厄介なことです。 そのためには従業員やプレスや取引先と何度も何度も同じやり取りをする必要があります。「私たちは今これをしている、これが理由だ、そしてこれがそのやり方だ」と繰り返し言うことになります。コミュニケーションを取り、企業のビジョンとゴールをエバンジェライズしていくこと。これこそがCEOが一番多くの時間を割いて取り組むべき仕事です。 『経営は「実行」』という本があって、英題はそのものずばり “Execution” というのだけど、今いる会社はこれを非常に重視していて、戦略とその実行というのが経営を支える屋台骨になっている。会社としての仕組みもそれを維持するために設計されていて、全社がそれで動いている。入社して最初に見たときにはこんな会社があるのかと心底驚いた。 今の自分はその会社では経営と近い立場で思考や実行をするべき役割をしていて、ただ一方で「開発は実行」と割りきってスピードと実行力だけを重視するというのは今まで自分が見てきた開発の実情と合わない部分があるなと感じ、じゃあはたしてなにを大切にするのがよいのだろうと考えながら働いてる。 その中で、フローの仕事だと目の前の流れる仕事の成果を最大化することを一番重視すると大体結果と「それははたしてよいことだったのか」というものが相関しやすいのだけど、ソフトウェア開発という仕事は少し特性が違っていて、開発という活動の結果はソフトウェアとして蓄積され、それが良いほうにも悪いほうにも将来に影響を与えるストック型の仕事だという理解が今の自分の理解になっている。 そして、Web のサービスとして提供し続けていくというのは時間の変化の中で提供をし続けていくことで、それをするためのチームやプロセスというのが必要になってくる。ソフトウェアの性質に引っ張られて、このチームやプロセスを維持する活動もストック型の性質になり、ただ「つくる」ということからイメージされるのとはやや違った価値観が必要になってくると考えている。 Talkin’ ‘bout my “Execution” さて、”Execution” だがこの大事さは理解しつつ、自分はこれが非常に苦手だ。「実現とそのための工夫」は好きだ。開発者なのでむしろそこには喜びを感じる。でもこの「実行」ってやつときたら、もっとつまらないもので、率直にいって創造性が少なくただやるべきことをやる 。それだけだ。それだけのことが多くの人ができないので、重要なのだ。 やることを決める。誰がやるか決める。いつまでにやるか決める。やったかどうかを追いかける。やっていなかったら実現するにはなにが必要か、実現されるまでフォローし続ける。 たったこれだけのことではある。でもやれない。人に嫌がられることもあるし、面倒になって手を抜きたくなるときもある。 以前いっしょに働いていた中にこれがとても得意だった同僚がいた。彼らは会議の場でも状況を聞くのだけど、折にふれてあちこちの場面で声をかけていた。席に来て、「あの件なんだけどどうなってる?」「ほんとに? どうもありがとう」「忙しいところ悪いんだけどさ、でもやっぱりどうしても大事なやつだからさ。よろしくね」「そこで困ってるんだったら協力してもらえないか聞いてみるよ」こんな言葉をかけて嫌らしさを感じさせずに物事を進行させていく名人だった。いつも「いや、ほんと悪いね」と言っていた。 割込されるのは嫌なものだ。だから、アジャイルの開発プロセスではこういったものが解決されるための仕組みというのをいろいろな場面でつくっている。でもあちこちでプロジェクトを見ていて、この “Execution” が弱いなと思う場面が多かった。プロセスの問題ではなくてそこで働く人たちの前提に置いているものだったりに左右される部分が大きいのだろう。同じプロセスで働いていても、この実行をするようにうながす役割を誰かがしてくれるだけで断然結果の出方とスピードが違ってくる。 この実行を支えるための一言はナッジングという呼び名もついているらしい。HIGH OUTPUT MANAGEMENT でアンディ・グローブも nudge することの重要性を書いていた。振る舞い方を間違うと嫌なマネージャーに見えがちな仕事だけれど、かつての同僚を見習って上手に nudge する人でいたい。

実装を直すのじゃなくて問題が起きないように直す

  • ARTICLES
文字列からリンクで開いて次のページへ進むというのが必要な場面で文字列が空のためリンクがクリックできず、意図した動作ができないというバグがあった。 実装をそのまま修正すると、 if name.present? link_to name, some_path(object) else link_to another_name, some_path(object) end てなかんじで、起きたバグに対処するように直す。 でも、自分で開発しているときはこういうのは不安があって、そもそも name が空文字や nil だというのも自分が想定してなかったからバグが出ている。 どうせ修正をするなら、ここでけして同じ種類の問題が起きないように直したい。 ということで、こんな風に直す。 name_candidates = [name, another_name, 'fallback name'] visible_name = name_candidates.find {|n| n.to_s.length > 0 } link_to visible_name, some_path(object) ここでの問題は実装上は present? かどうかというものだったけれど、意味上は空文字列だと表示がされずリンクが有効に働かないということ。なので、その問題を解消するようなコードにしておく。 これで、絶対に同種の問題は起きない修正になったと安心できる。 「fallback name となってしまうケースがそのまま表示され次に進めていいのか」というのはまた別の問題としてあって、それをケアするのならまた別のそれに適した場所で対応をしてやるといい。 細かい話ではあるんだけど、わりと「実装上のつじつまはあってる」というコードで push されているコードをよくみるので書いてみた。

Netlifyで Deploy previews に認証をかけたい

  • ARTICLES
仕事で聞く要望のうちいくつかは CMS 使うほうが今後のメンテが楽そうだなと感じる機会がよくある。Hugo でサイトを構築するとして、動かすのはなるべく楽に面倒見ずにすませたい。でも独自ドメインだったりある程度機能は求めたい。というわがままを Netlify なら叶えてくれるんじゃないかということで Netlify を試している。 その中で、本番はいいんだけど動作確認用の環境をどうしようかなーというので迷って Deploy previews で対応したことの記録。結論には Business plan で有効になる site access control by roles が必要なので仕事とはいえお金は Pro までしかかけられないという場合は使えないけど、そういうときはトレードオフで URL がばれなきゃいいっしょの精神でいけばいいと思う。 なお、同じ会社で Netlifyが仕事で使えるか試す(追記あり) という方法でやっている話へのアンサーソングでもある。 やりたいこと まずやりたいことから。 Netlify で動作確認をする環境は public に見える状態を避けたい Netlify を使う動機がリポジトリをつくったらあとはなるべく環境構築やその後のデプロイの手間をかけたくないというものなので手間かけたくない 本番となるべく近い形で動作の確認をしたい 考えてたこと 同じ会社で同僚が似たことをやっていたのでまずはその repo を見たり、軽く話を聞いたりしてたんだけど、好みからいくと本人も書いているとおり “しかし、Productionはデプロイの方法を別で作っておかないといけないという面倒なことになってしまう。つらいね。” についてはだいぶ後で嫌になりそうで回避したいなと感じたのと、Heroku で Review Apps の便利さを享受したことのある身としてはぜひ Deploy previews を活かしてやりたい。そして、環境に応じたあれこれをビルド時に考慮してやれば稼働環境は同一でいけそうな気がするので Selective Password Protection のやり方は筋がよさそうに感じる (というか Basic 認証ならこれでいい)。 ということで、 Identity と Visitor Access Control を使ってやってみた。 やってみたこと Makefile じゃなくて rake でやりたいなーとごちゃごちゃやった結果、 Makefile で書くのが一番シンプルだったというサンプル があるのでこのコードを見ながらやってみたことを解説。