Masassiah Blog

現役サラリーマンのスキルアップのための読書まとめ

良いコード/悪いコードで学ぶ設計入門

コードを作成する機会が増えてきたので,2022年話題になった『良いコード/悪いコードで学ぶ設計入門――保守しやすい 成長し続けるコードの書き方』(仙場 大也,技術評論社,2022年5月12日)を読了。

すでに広く使われ確立している技術や解決法が存在しているにもかかわらず,知らないか,または意図的に無視して,新たに同じようなものをつくり出してしまうことを車輪の再発明と呼びます。(131 ページ)

意図しない車輪の再発明は避けたいところだが,意図して車輪を再発明することで実力をアップにつなげたい。

DRY 原則(Don't Repeat Yourself)と呼ばれる原則があります。直訳すると「繰り返しを避けよ」。一部では,DRY 原則が「コードの重複を許すな」といった解釈で広まっているようですが,原点『新装版 達人プログラマー 職人から名匠への道』では以下のように説明されています。

すべての知識はシステム内において,単一,かつ明確な,そして信頼できる表現になっていなければならない。(151 ~ 152 ページ)

コードの重複がないか,気を付けよう。

神クラスとは,1 クラス内に何千何万行ものロジックを持ち,あらゆる責務のロジックが,乱雑に絡み合うように書き殴られているようなクラスです。(177 ページ)

神クラスの御心を把握することは難しい。

目的駆動名前設計は,名前から目的や意図が読み取れることを特徴とします。そして名前「設計」と冠しているとおり,これまで紹介したオブジェクト指向設計や単一責任原則を守る設計のように,問題解決を意図したつくりにします。(205 ページ)

目的駆動名前設計を意識して設計を行う。

ラバーダッキングと呼ばれるデバッグ手法があります。これはプログラミングで何か問題が発生したときに,それを誰かに説明すると自ら原因に気づき,自己解決する手法です。ラバーダッキングの観点からも,声に出して話すのは分析行為として理に適っているのです。(214 ページ)

プログラミングの問題を言語化することで,原因に気づくチャンスを増やす。

プログラマーは職業柄,プログラミング関連のことで頭がいっぱいです。すると,命名のしかたがプログラミング用語やコンピューター用語由来のものになってしまうことがあります。技術ベースでの命名を技術駆動命名と呼びます。(224 ページ)

色々な命名がある中で,技術駆動命令もあることを知っておく。

パレートの法則と呼ばれる法則があります。ほんの一部分が全体要素を生み出しているとする法則で,「売上の 8 割は,全商品の内 2 割の商品が生み出している」「ソフトウェアの処理時間の内 80 % は,ソースコード全体の 2 割の部分が占めている」などの事象としてたとえられています。80:20 の法則とも呼ばれています。(338 ページ)

パレートの法則は,本当に色々な分野に適用できるのだな。

「3 日後の自分は他人」……,プログラミングの世界にはこんな言葉があります。自分が書いたコードでも 3 日も経てば意図を忘れてしまい,読むのに苦労してしまう,という格言です。(365 ページ)

たった 3 日後でも,意図を忘れてしまう。自分のためにも,意図を残しておこう。

学習のための指針(372 ページ)

  • インプットは 2,アウトプットは 8
  • 設計効果を必ず意識すること

インプットばかりしていないで,アウトプットに取り組む。

Masassiah Blog の検索パフォーマンス 2022

「Masassiah Blog」の 2022年1月1日から12月31日までの検索パフォーマンス分析を行う。この分析に用いるデータは,Google Search Console のデータである。

日次のクリック数,表示回数

2022年1月1日から12月31日までのクリック数の推移を示す。日次のクリック数は青線,7 日間移動平均は赤線,28 日移動平均は緑線で示している。

クリック数は大きく伸びることなく推移している。

まずは,1 日 100 クリックくらいを目指そうか。

図 クリック数の推移

図 クリック数の推移

2022年1月1日から12月31日までの表示回数の推移を示す。日次の表示回数は青線,7 日間移動平均は赤線,28 日移動平均は緑線で示している。

表示回数はやや増加しており,2022年に 125 記事を増やしている影響と推察。

図 表示回数の推移

図 表示回数の推移

日次のクリック数,表示回数の相関を見るため,表示回数を横軸,クリック数を縦軸とした散布図を示す。

正の相関はありそうだが,それほど強い相関ではなさそう。

図 日次の表示回数,クリック数の散布図

図 日次の表示回数,クリック数の散布図

クリック数,表示回数のパレート図

クリック数(N= 8,601)のパレート図を示す(クリック数 10 未満のページは足切り)。

クリック数の上位 20 ページでクリック数の約 80 % を占めている。

図 クリック数のパレート図

図 クリック数のパレート図

なお,クリック数の上位 10 ページは以下のとおり。

  • 第 1 位: 日米通算28シーズン,イチローの安打と打率の推移 ?: ?2213
  • 第 2 位: 【DIY】木製ギタースタンド(4本用)を作製 ?: ?740
  • 第 3 位: 日本人というリスク 橘 玲 ?: ?664
  • 第 4 位: Dell Inspiron 15R (5537) のメモリ増設 ?: ?475
  • 第 5 位: 集中荷重を受ける単純支持はりの SFD,BMD,たわみ曲線の計算・グラフ化 ?: ?439
  • 第 6 位: 学生相撲出身の大関を比較 2022年1月版 ?: ?403
  • 第 7 位: 藤原氏の正体 ?: ?276
  • 第 8 位: これまで食べた揚げ出し豆腐 ?: ?185
  • 第 9 位: Cafe レストランガストのねぎとろ丼のごはんは酢飯ではありません ?: ?182
  • 第 10 位: 等分布荷重を受ける単純支持はりの SFD,BMD,たわみ曲線の計算・グラフ化 ?: ?166

表示回数(N = 260,697)のパレート図を示す(クリック数 10 未満のページは足切り)。

表示回数の上位 20 ページで表示回数の約 80 % を占めている。

図 表示回数のパレート図

図 表示回数のパレート図

各ページのクリック数と表示回数の相関

各ページのクリック数と表示回数の相関を見るため,散布図を示す。散布図の横軸は表示回数,縦軸はクリック数としている。

表示回数が多いがクリック数が伸びていないページのテコ入れを行っていきたい。

図 クリック数と表示回数の相関(各ページ)

図 クリック数と表示回数の相関(各ページ)

クエリの分析

バブルチャートを用いて,クエリの分析を試みた。

クエリの分析(クリック数)

まず,横軸を CTR,縦軸を掲載順位として,クリック数をバブルの大きさで表したバブルチャートを下図に示す。

クリック数が上位 30 には,データラベルとしてクエリを付与した。

図 クエリの分析(クリック数)

図 クエリの分析(クリック数)

クエリの分析(表示回数)

次に,横軸を CTR,縦軸を掲載順位として,表示回数をバブルの大きさで表したバブルチャートを下図に示す。

クリック数が上位 30 には,データラベルとしてクエリを付与した。

図 クエリの分析(表示回数)

図 クエリの分析(表示回数)

バイスの内訳

クリック数(N = 9,375),表示回数(N = 297,384)それぞれにおいて,デバイスの内訳を調べる。

Masassiah Blog のユーザの約 6 割はモバイルを用いていることがわかる。

図 デバイスの内訳(クリック数)

図 デバイスの内訳(クリック数)

図 デバイスの内訳(表示回数)

図 デバイスの内訳(表示回数)

参考文献

king-masashi.hatenablog.com

更新履歴

  • 2023年1月9日 新規作成
  • 2023年2月4日 誤記を訂正

御子柴弁護士シリーズ4 悪徳の輪舞曲

『悪徳の輪舞曲』(中山七里,講談社,2019年12月1日)を読了。

「何事も非難する輩だけではない。道理の分かった者もいる。ただ道理の分かった者は大声を上げることがないので目立たないだけだ」

「声を上げなかったらいないも同然じゃないですか」(114 ページ)

声を上げなければ,何も変わらない。

確かに年を経れば経験も積むだろうが,だからといって誰もが観察力を養ったり,老人らしい賢明さを獲得したりするとは限らない。中には愚鈍さや浅ましさ,欲深さ愚かさのみを濃縮させる老人だっている。(127 ページ)

愚鈍さ,浅ましさ,欲深さ,愚かさを濃縮させた老人は,何人も思い浮かぶ。

人間ちゅうのは実に弱い者いじめが好きでな。折あらば自分より立場の弱い者をいたぶってやろうと,心の底で手ぐすねを引いとる。これに大義名分が加われば鬼に金棒や。天下御免で集団リンチができる。(139 ページ)

天下御免の集団リンチは,見ていて気持ちのいいものではない。

「こういう仕事をしているから余計に思います。およそこの世に,人が口にする正義ほど胡散臭いものはありませんよ」(141 ページ)

胡散臭く思われないよう,正義は口にしない。

人間というのは見たいものしか見ようとしないし,聞きたいと思うことしか聞こうとしない。記憶もそうでしてね。こうあってほしい,こうでなきゃ駄目だというかたちに変えてしまうんですよ。(212 ページ)

人間の記憶には,バイアスがかかっていると考えた方がよい。

法律によって刑の執行を免れた者には,法以外の裁きと責めが待ち受けていることを知らない。いや,知ろうとしない。知れば加害者に対する憎悪が減じるのを,本能的に察しているからだ。(244~245 ページ)

法以外の裁きと責めは,わかりにくい。

どんな人にも理解できる単純明快な話というのは,ある目的を持った団体なり勢力なりに利用されやすいですしね。そこからこれは自戒を込めて言うのですが,所詮人間というのは自分の知識の範囲でしかものを考えられません(252 ページ)

なんとなく知識の範囲に入っているような単純明快な話を使って,うまく人を使うようにする。

深層学習の原理に迫る――数学の挑戦

『岩波科学ライブラリー 303 深層学習の原理に迫る――数学の挑戦』(今泉允聡,岩波書店,2021年9月22日)を読了。

深層学習が持つ特性として,「使える分野を特定しない汎用性」が挙げられる。深層学習は,極言すれば数字の列に変換できるものであれば全てのものを扱うことができる。(18 ページ)

デジタル化(数字の列に変換)しておけば,深層学習を適用することができる。

グーグル社やフェイスブックFacebook)社などの IT 大企業は深層学習のための整った計算ライブラリを無料で公開しており,研究に参入する障壁は非常に低い。(18 ページ)

深層学習を使うハードルは,非常に低いので,チャレンジしてみようか。

過適合を実現象にたとえると,入学試験を受ける受験生の例がわかりやすい。(中略)ここで過適合とは,受験生が過去問では高得点が出せるが,肝心の入学試験で正解できない状況を指す。正しい学習では,過去問を通して汎用的な知識を習得し,そして入学試験の新しい問題にも正解することが理想である。しかし,過去問の解答を丸暗記するような受験生は,汎用的な知識の獲得に失敗しているため,全く新しい問題を解くことができない。これが,過去の事例に過剰にフィットするという意味で,過適合と類似する現象と言える。(83 ページ)

資格試験の勉強において,過去問から汎用的な知識を習得できるように心がける。

ニューラルネットワークの層やパラメータを増やすことは,関数表現能力を高めるが,その結果学習されたパラメータは不安定化し,過適合を起こす。古典的な数学・統計学の理論では,この現象をバイアスとバリアンスの二律背反(トレードオフ)と呼び,その二つの間でバランスをとることがデータ解析の上で大事だとされている。(87 ページ)

ニューラルネットワークの層やパラメータのバランスをとることにノウハウがある。

より具体的なパラメータを選ぶ方法として,勾配降下法(gradient descent method)という方法が広く使われている。これは,(訓練)損失関数の値が小さくなるようにパラメータを探索しながら少しずつ更新していく方法で,あたかも損失関数の坂(勾配)を下るように更新することから,勾配降下という名前がつけられている。(125 ページ)

パラメータを選ぶ方法のメソッドを知っておこう。

過去の科学の流れの中で,発見された一つの現象を数学的理論で記述することで,人類はその知識を体系立てて,より高度な科学技術の開発を可能にしてきた。例えばライト兄弟が飛行機を発明したのち,その原理を記述できる流体力学の理論が発展し,その理論がより高性能な飛行機やロケットなどの発明を可能にした。現代においても,深層学習という新しく発見された技術をきちんと数学で記述することで,人類による知のレベルを底上げし,未来の人類がより優れたデータ解析技術を発明する基盤を作ることが可能になるのである。(149 ページ)

科学の発展のためにも,深層学習を活用してみようか。

戦略コンサルタントが大事にしている 目的ドリブンの思考法

『戦略コンサルタントが大事にしている 目的ドリブンの思考法』(望月安迪,ディスカヴァー・トゥエンティワン,2022年3月25日)を読了。

そもそも,僕らの仕事は「作業」そのものに意味があるわけではない。その作業を通じて生まれる「価値」の部分にこそ意味はある。(5 ページ)

作業を通じて生まれる価値が生み出さなければ,単なる徒労である。

”何を” ではなく ”何のため” から始めること。最初の「目的」が明確であれば,そこに目がけて仕事のやり方を最適化し,成果に直結させることができるようになる。目的を頂点として仕事を駆動することが成果創出の原則であり,「目的ドリブン」で考えることのエッセンスはそこにある。(6 ページ)

目的は,しばしば見失う。目的を見失わないように進んでいく。

成果創出のつながりは<目的ー目標ー手段>という三層ピラミッド構造によって成り立っている(7 ページ)

目的,目標,手段のピラミッドを意識して手段を選ぶ。

目的を満たさなければ,業務としては終えても成果としては評価されない(37 ページ)

満たされた目的によって成果は評価されるべき。

「どのような状態・水準」を「いつまでに」実現するか,それを切り出すことが目標設定の基本だ(131 ページ)

「どのような状態・水準」を「いつまでに」実現するか,切り出された目標によって管理される。

完全な情報が揃わないからこそ "意思" 決定が必要なのであり,判断の本質は人間の主観性に根づいている(328 ページ)

機械的な判断ができるのであれば,意思はいらない。
(完全な情報が揃わず,)機械的な判断ができないからこそ,人間による意思決定が必要。

「知らないこと」は抽象化することで「知っていること」とつなげられる(354 ページ)

アナロジーは「類似性」「既知」「未知」の 3 つの要素から成り立つ(358 ページ)

共通目的を介して「既知」と「未知」はつながる

「知らない」からと言って目を背けず,「知っていること」につなげてみる。

 

御子柴弁護士シリーズ3 恩讐の鎮魂曲

『恩讐の鎮魂曲 御子柴礼司』(中山七里,講談社,2018年5月1日)を読了。

罪を犯し,逃れ,嘘を吐く咎人たちを見続けた者には到底理解できないに違いない。
救われないことがどんなに過酷なのか。
裁かれないことがどんなに過酷なのか。(54 ページ)

救われないこと,裁かれないことは過酷なこと。

何を欲し,何を護ろうとするのか。それは信条であり,価値観であり,そして行動原理だ。犯罪の動機を考える時,御子柴の考察する基盤もそこにある。その基盤が違うのであれば,動機から心理を探ろうとしても正解に辿り着けるはずがない。(178 ページ)

信条,価値観,行動原理がわからないければ,犯罪の動機は考えられない。

人の気持ちは悪魔でも分からない,という有名な諺がある。その昔,悪魔と呼ばれた当の御子柴も同感だ。(236 ページ)

人の気持ちを分かり合うことはできない。

未来 IT 図解 これからの IoT ビジネス

『未来 IT 図解 これからの IoT ビジネス』(IoT 産業技術研究会,エムディエヌコーポレーション,2018年11月1日)を読了。

製造現場では,生産性の向上や品質向上のために,稼働状態の確認や監視といった業務が欠かせないため,IoT への親和性が高いといえます。(22 ページ)

製造現場では、色々なものが動いているため、IoT で監視したくなるのだろう。

IoT プラットフォームの役割(39 ページ)

  • バイスマネジメント
  • データ収集・保存
  • データの可視化
  • データ分析

2023 年は IoT プラットフォームにチャレンジしよう。

KDDI の「KDDI IoT コネクト LPWA*1」(51 ページ)

KDDI が 2018年1月に国内で初めて開始した,月額 40 円/回線からの IoT 通信サービス。「省電力」「広域エリア」「低コスト」の 3 つの特徴を持っており,多様な分野での IoT 活用をサポートする。

とても手頃な価格で IoT 通信サービスが利用できる。

スマートウォッチなどのウェラブルデバイスに IoT を搭載することで,体重や睡眠時間を管理することができ,リアルタイムの健康管理が可能になります。社員の離職や休職を防ぐことができれば,生産性の向上につながるだけでなく,会社の評価も上がり,優秀な人材の獲得にもつながるかもしれません。(66 ページ)

健康状態を知ることで、生活を見直すきっかけにする。

建設現場では,人員不足や労働そのものの危険性が課題となっています。建設現場では,危険を未然に防ぐことを目標に IoT の導入が進められ,開発が行われています。(82 ページ)

建設現場の環境改善に IoT を活用していく。

IoT を活用した製品・サービスを開発したら,ビジネスにどう活かすかが重要な課題です。(142 ページ)

IoT を活用して、今までできなかったことを行い、ビジネスに活用する。

*1:Low Power Wide Area-network の略。その名のとおり,省電力かつ長距離での無線通信が可能という特長をもった通信技術の総称。