コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

緊急度、優先度の4象限のアイゼンハワーマトリクスについてざっくりまとめる

「緊急度と優先度の4象限」と言ってこれ自体の出自よくわかってないなと思ってまとめる

故障について

"Eisenhower Matrix"(アイゼンハワーマトリクス)がよく呼ばれる名称だが、 "Eisenhower Method" や "Eisenhower Principle" などとも呼ばれる。

出自

第34代アメリカ合衆国大統領であったドワイト・デイヴィッド・アイゼンハワー氏の演説にて、とある大学学長の言葉として以下のフレーズが紹介された

「私には2種類の問題があります。緊急な問題と重要な問題です。緊急な問題は重要ではなく、重要な問題は決して緊急ではありません。」

書籍「The 7 Habits of Highly Effective People(7つの習慣)」でこのフレーズにインスパイアされた4象限が紹介されたのが初出とされている。

考え方

タスクを下記の事象のいずれかに分類する

象限1. 緊急かつ重要 象限2. 緊急ではないが重要 象限3. 緊急だが重要ではない 象限4. 緊急ではないし重要でもない

順番が重要とされており、象限1の次は象限2に取り組むべきだが象限3や象限4に取り組んでしまいがちなので見極めるべきということが語られている。

なかでも事象3は「自分自身にとっては重要ではないが、緊急であるということは誰かにとっては重要なので移譲するべき」という考え方なので、事象3のアクションが移譲となる。

関連リンク

ふりかえりの手法に関して困ったときに見ると良いページ『ふりかえりを更に拡張する「ふりかえりカタログ(コミュニティ版)」』

たまに見返したくなるのでそのための道しるべとしてのメモ。

対象となるページ

ふりかえりを更に拡張する「ふりかえりカタログ(コミュニティ版)」 #アジャイル - Qiita

みどころ

様々なふりかえりの手法が紹介されているだけではなく、手法がカテゴライズされており、ざっくりどんなものがあるか眺めるということもできるし、類似のものを探す場合にも重宝する。

またMiroで運用されているので実際に使ってみた人々の感想が記載されており、参考になる部分が多い

関連リンク

Architecture Decision Recordsという用語と事例についてざっくりまとめる

ADRの始まりや各社事例を整理しておきたいのでまとめる

Architecture Decision Records(ADR)とは

ADRについて記述されているadr.github.ioでは下記のように書かれている。

アーキテクチャ上の決定(Architectural Decision:AD)アーキテクチャ上重要な機能的または非機能的要件に対応する、正当な設計上の選択である。アーキテクチャ上の重要な要件(Architecturally Significant Requirements:ASR)はソフトウェアおよびハードウェアシステムのアーキテクチャと品質に測定可能な影響を与える要件である。ADR(Architectural Decision Record)は、1つのADとその根拠を記録するもので、プロジェクトで作成・維持されるADRの集合は、その決定ログを構成する。これらはすべてアーキテクチャナレッジマネジメント(Architectural Knowledge Management:AKM)のトピックに含まれるが、ADRの使用は設計やその他の決定(「あらゆる決定記録」)に拡張できる。

上記のように「アーキテクチャ上の決定に関して根拠を記録するもの」として紹介されている。また呼び方にはブレがあるが上記サイトでは Architectural Decision に連動して Architectural Decision Record と呼ばれているが意味合いとしては同じ様子。

提唱されたブログ

書籍「ソフトウェアアーキテクチャの基礎」によるとMichael Nygard氏が「Documenting Architecture Decisions」にて提唱した方法論がはじまりとされています。

このPostそのものがADRのフォーマットを体現した状態での内容になっている。提唱されているフォーマットは以下の5つの要素を持つ.

  • Title(タイトル)
  • Context(コンテキスト)
  • Decision(決定)
  • Status(ステータス)
  • Consequences(結果/影響)

各要素と記述内容は以下

要素名 意味
Title(タイトル) 決定に対してのタイトル、例では「ADR:Ruby on Rails3.0.10へのデプロイ」など通し番号とドキュメントの端的な説明の文となっている
Context(コンテキスト) この決定に関しての前提となる事実など、決定に作用している予備情報を記述する
Decision(決定) 具体的に決定した内容を記述する。能動態の文章とするべきで「私達は◯◯します」と記述する。
Status(ステータス) このADR文章自体の取り扱い状況について記述する。例では「提案」「承認」「非推奨」「置換」の4つを持つ。「提案」がされ、合意形成がなされて同意を得られた場合は「承認」となり、その後別のADRに取ってかわわれた場合は廃止を意味する「非推奨」や他のADRに置き換えられた旨の「置換」のいずれかになる。
Consequences(結果/影響) この決定を適用したあとに対する結果や影響を記述する。例ではポジティブなものもネガティブなものも含めて結果を記述することが望まれている。

参考リンク

各社原典の内容を基軸にアレンジが加えられて運用がされている。事例なども含めてリンクをまとめる。

ADRそのものについて

ADRを運用してみての体験談

RailsでViewからControllerのメソッドを呼び出したいときはhelper_methodで定義するとできるが利用には気を払う

便利そうだが、いとも簡単に複雑化してしまうので備忘としてメモ。

環境

$ bin/rails -v
Rails 7.1.2
$ ruby -v
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [aarch64-linux]

helper_methodの使い方

Controllerに存在するメソッドをViewで呼び出したいときに、helperのように扱えるようにするメソッド。またメソッドの呼び出し制限がprivateでも適用可能。

例えば下記のように設定する

▼app/controllers/users_controller.rb

class UsersController < ApplicationController
  helper_method :test_text

  def index
  end

  private
  
  def test_text
    "テストテキストです"
  end

end

▼app/views/users/index.html.erb

<h1>Users#index</h1>
<%= test_text %>

というように定義すると以下のようなhtmlが出力される。

<!DOCTYPE html>
<html>
  <head>
    <!-- 中略 -->
  </head>

  <body>
    <h1>Users#index</h1>
テストテキストです

  </body>
</html>

利用しないほうがいいポイント

予測がし難い

helper自体が定義の仕方によっては定義場所の特定がわかりにくいので、view側から特定するのが難しくなります。 また、superクラスやconcernで読み込んだメソッドも同じように扱えてしまうので、より特定がしづらくなります。

Controllerでの記述がViewにも影響を受けやすくなる

多くの場合は以下のようにインスタンス変数を取得したい場合などで使う

class UsersController < ApplicationController
  helper_method :access_user
  
  def index
  end
  
  private

  def access_user
    @user ||= User.find(params[:id])
  end
end

上記のようにcontroller上でインスタンス化された値などを再利用するケースでは一見便利なように見える。

しかしながら、上記のような記述だと一見してこのcontrollerでしか使わないように見える access_user メソッドが helper_method の影響でpublicメソッドと同じ扱いになるので、メソッドの露出範囲がわかりにくくなる。

そのため利用するときは影響範囲を気を払う必要がある。

関連リンク

GoogleAnalytics4にてどのイベントでどのディメンションが付与されるかはドキュメントがある

GoogleAnalytics4(以下GA4)をゴリゴリ設定していたのでそのときの備忘として

GA4におけるディメンションとは

GA4はすべての計測が「イベント」という単位で行われ、その発生したイベントにパラメータを持たせてイベントの種別をつけられるようにしている。詳しくは以下サイトの説明がまとまっているので以下を参照。

GA4のイベントの基本的な考え方 | アユダンテ株式会社

このイベントに対する「パラメータ」にあたるものがGA4のドキュメント上では「ディメンション」と呼ばれる。

GA4で予め想定されているイベントとディメンションについて

前身であるUniversalAnalyticsでは「イベントカテゴリ」と「イベントラベル」が設定できたので、自由記述できる情報は「名前」「カテゴリ」「ラベル」の3つだったのだが、GA4では等しくイベントに設定できる情報は名前である『イベント名」だけになっている。ではGA4でイベント独自の情報はどこで設定すべきかというと、ディメンションを使うようになっている。

また、GA4では設定すると自動で収集されるイベントがあり、それらのイベント名とディメンション名(パラメータ名)は決まっている。一覧は以下のページに有る。

[GA4] 自動収集イベント - アナリティクス ヘルプ

例えばページ内でのクリックで遷移するイベントは、イベント名が click であり、独自情報であるディメンションとして link_classeslink_domainlink_idlink_urloutbound が設定されて記録される

ディメンションとGA4のデータ検索

GA4では「データ探索」という機能で、発生したイベントの情報を閲覧することが可能となっている。この際にイベントに付加されたパラメータを判別するために「ディメンション」という概念がある。たとえば「ページ タイトル」「日付」などが該当し、表を作る際の「列や行の項目」の役割で使われる。このディメンションはイベントによって変わる。

前段で例として取り上げたイベント名 clicklink_domain というキーを持っているが、「データ探索」上ではどの値かはわからない。

データ検索上のどの値に当たるかはわからない

実際のGA4の画面、link_domainとしてわたってきた値はどこにあるかは雰囲気的にわかるが、確証がもてない

これらのイベント上のキー名が「データ探索」ページ上にどれに当たるかを下記のドキュメントを見ることである程度追うことができる。

[GA4] アナリティクスのディメンションと指標 - アナリティクス ヘルプ

たとえば link_domain に関してはデータ検索上では「リンクドメイン」ということが以下の表からわかる。

表を見るとlink_domainが日本語表記ではリンクドメインということがわかる

関連リンク

[GA4] 拡張計測機能のパラメータがデフォルトのディメンションとして使用可能に | アユダンテ株式会社

CSSの技術名で似ているものをすごくざっくり整理する

混乱するのでざっくりフレーズベースでまとめる

大枠としての技術を示すもの

WebComponents

WebComponentsはHTMLをコンポーネント化するための技術の総称。主に以下の3つの技術をつかって実現を目指している。

  • CustomElement
  • ShadowDOM
  • HTMLテンプレート

詳しくは以下のページを参照のこと。

CSS in JS

CSSのグローバルスコープを解決する手法の一つとして、Javascriptの記述に織り込む形でCSSを構成する考え方があり、それらを体現したライブラリのことがCSS in JSと呼ばれている。代表的なものとして CSS Modules,Styled Component,Emotionなどがある

CSS Modules

CSS ModulesはJavaScriptからCSSをインポートするような記述で連動させる仕組みの名前、詳しくは以下のブログにまとまっているので参照のこと。

Styled-Component

ReactのJSXの範疇の中でCSSのスタイルを閉じ込める仕組みの一つがStyled-Compnent。詳しい仕組みなどは以下のブログに紹介されているので参考のこと。

特定の仕様を示すもの

@layer

CSSカスケードに関してレイヤーを追加する提供予定の記述のこと。2024年時点ではまだ仕様策定中。カスケードレイヤーとも呼ばれることがある。詳しい仕様としては以下参照のこと。

@scope

CSSの適用範囲を決める記述のこと.2024年時点ではまだ仕様策定中。Scoped Styleと呼ばれることもある。仕様としては以下の内容を参照のこと。

CSS Scope

CSS自体の適用の範疇を示す言葉、WebComponentsでのShadowDOMでは別の切り口でスコープが区切られるため、それらの説明などのときに使われるフレーズ。(適用の話に関してはこちらを参照のこと)

MDNのドキュメントに登場するので、詳しくは以下を参照のこと。

Scoped CSS

Vue.jsのSFC(Single File Component=単一ファイルコンポーネント)が提供するCSSの適用範囲を狭める機能のこと。詳しくは以下のVue.jsの説明を参照のこと。

その他

ViewComponent

Rails用のgemの名称。部分的なHTMLを作成するためのフレームワーク。詳細は以下参照のこと。

関連リンク

チームが成長しているときに読み直してたい記事『スタートアップの熱狂と急成長を両立させる野望』

何回か読み返したいタイミングがあったのでメモまで。

ブログ記事

スタートアップの熱狂と急成長を両立させる野望 - 株式会社ヘンリー エンジニアブログ

みどころ

スタートアップから成長していく過程で考えないといけないことに関して、筆者の経験や情報から書き上げられた記事。スタートアップという話を基軸に置かれているが、チームやプロダクトが成長しているときにも当てはまる部分は多くあるので、そういうシーンに遭遇したときに自分が見失っているものはないかというところの再点検につかえそうな記事でした。

関連リンク