ざきの学習帳(旧 zackey推し )

日々の学びを書きます

Design It!の輪読会が終わった / 実際の開発メンバーと輪読会すると効果が高い本と思った

challenge-every-monthというコミュニティで行なっていた、Design It!の輪読会が終わりました。

yoshitaku-jp.hatenablog.com

Design It! ―プログラマーのためのアーキテクティング入門

Design It! ―プログラマーのためのアーキテクティング入門

  • 作者:Michael Keeling
  • 発売日: 2019/11/25
  • メディア: 単行本(ソフトカバー)

まだ、全体振り返り&打ち上げの意味を含めた、座談会を残していますが、Design It!を読んで&輪読会を経て、とくに自分が記憶に残った学びや気づきをメモしておきたいと思います。

輪読会について

輪読会の「輪読1」は

数人が一冊の本をかわるがわる読んで解釈し意見を交わすこと。

と言う意味です。

今回、自分が輪読会に参加したのは、以下の理由からです。

  • 読破するモチベーションを高める
  • 理解を深める(1人だと理解が曖昧なところを、他人と意見を交わすことで深掘りできる)

会社でも輪読会を実施されているところがあるようです。

実施方法

以下のような形で実施しました。

  • 参加人数 ... 5人
  • 読書ペース ... 1章/週
  • 使用ツール ... Slack / Zoom / Jamboard / Google Slides

輪読会メンバーに感謝

輪読してくれるメンバーがいることで、議論が発生・理解が深まりました。本当にお疲れ&ありがとうございました!

(以下、輪読会に参加された方のブログリンクです)

Design It!について

読もうとした理由

なぜこの本を読もうと思ったかの理由は以下です。

  • プロダクト開発において、詳細設計・開発だけでなく、ステークホルダーとどのように関われば良いかの指針を知りたい
  • チーム開発において、設計の判断をどのように記録・インデックス付けするかを知りたい

学び・気づき

いますく実践できるということに着目し、学び・気づき点を記載します。

ステークホルダーには、開発チームも含まれる

「4章 ステークホルダーに共感する」では、ステークホルダーは誰なのか?解決すべき問題をどのように話し、設計を始めるのか...ということを教えてくれています。

本章にて、ステークホルダーは「ソフトウェアに興味関心を抱く人たち」と定義されている。ステークホルダーには、実際に使用するユーザーはもちろん、開発チームも含まれています。

なぜ、開発チームがステークホルダーに含まれるのか?
それは、品質特性・トレードオフ・技術的負債を議論するために必要な、ビジネス目標(ソフトウェアを使って、何を達成したいか)を定義するためです。

ビジネス目標の例(社内システムを使い、売り上げをたてるイメージ)

ステークホルダー ビジネス目標
ユーザー 担当業務の効率化、利益向上
開発チーム(改善) 要求分析〜リリースまでの時間短縮
開発チーム(新機能) 保守しやすいアーキテクチャ設計

ユーザー・開発チームに限らず、ソフトウェアに関わる人々をステークホルダー、ビジネス目標を定義することにより、何をどのような優先度で開発を進められる...という点が学びとなりました。

手法「ステークホルダーマップ」

ステークホルダーを洗い出し&視覚化する手法として、「ステークホルダーマップ」という手法が紹介されていました。

uxdaystokyo.com

アーキテクチャを記録する「アーキテクチャデシジョンレコード(ADR) / アーキテクチャ俳句」

11章「アーキテクチャを記述する」では、アーキテクチャを明文化し、チームメンバーへアーキテクチャを伝えるマインドや手法が紹介されていました。

印象的だったのは、以下の手法です。

手法 概要 参考資料
アーキテクチャデシジョンレコード(ADR) アーキテクチャの意思決定を記録する Architecture Decision Records導入事例 | Fintan
アーキテクチャの意思決定を記録する Lightweight Architecture Decision Records について - Tbpgr Blog
アーキテクチャ俳句 アーキテクチャの重要部分を1枚絵に収めて説明する Architecture Haiku

のような運用方法が推奨されています。アーキテクチャ俳句を読むことで、全体像(またはアーキテクチャの重要部分)を理解、詳細はADRを辿る...というような導線ですね。

「どのような歴史を辿り、今のアーキテクチャに至ったのか?」「なぜAというFWを採用し、Bを選ばなかったのか?」というアーキテクチャの歴史を知ると、(とくに参入時期の浅いメンバーの)アーキテクチャへの関心と理解が深まり、今後どのような設計にすべきかも考えやすくなります。

アーキテクチャの歴史は、自分の経験上、以下のような方法で知ることが多いです。

上記は理解の個人差が発生してしまいますが、アーキテクチャ俳句 x ADRの手法を用いることで、「アーキテクチャの歴史」理解を平準化の方向に持っていける...という点が学びでした。

おわり

座談会でさらなる気づきも得られると思いますが、とりあえずここまでです。

Design It!は、実業務がアーキテクトではなくても(プログラマーであっても)、個人からでも始められることが書いてありました。

しかし、実際の開発(会社)のメンバーでDesign It!の輪読会を行うと、アーキテクトの考えをメンバー全体で咀嚼・実践でき、効果が高いと感じました。

もし、今からDesign It!を読もうと思っている方がいらっしゃいましたら、ぜひ開発メンバーを誘い、輪読会またはディスカッションの場を設けることをお勧めします。

じぶん Release Notes ver 0.30.8

f:id:kic-yuuki:20200705205224p:plain

気づけば、2020年も後半戦。転職して1ヶ月が経ち、時の流れの早さを感じています。

2020/06の取り組みの成果を書いていきます。

先月分はこちら -> じぶん Release Notes ver 0.30.7 - ざきの学習帳(旧 zackey推し )

  • 学んだこと
      • 読書中
      • 完了
  • 勉強会・コミュニティ
  • プライベート
    • トピック(出来事)
      • タンパク質取りすぎて、腎臓が悪くなった
      • ミリオンライブがアニメ化始動
    • 記事(じぶんリリースノートを除く)
    • PV数
  • Challenge Every Month
    • 2020/06の結果
    • 2020/07の目標
  • おわりと所感
続きを読む

HTML5 の Local Storage / Session Storage についての考えメモ

ローカルストレージは認知していたのですが、使ったことがない。また、セッションストレージの存在をいまさら知り、それぞれの特徴について学んだのでメモしておきます。

Web Storage API

developer.mozilla.org

ローカルストレージ / セッションストレージとも、Web Storage APIの仕組みとして括られています。

ローカルストレージ / セッションストレージの違い

ざっくりまとめると以下となります。

特徴 ローカルストレージ セッションストレージ
生存期間 永続(明示的に消すまで有効) タブが削除されるまで
有効範囲 ブラウザ全体 タブごと

詳しくは以下をご参照ください。

利用用途

特徴はわかったけど、それぞれどんな使い道があるんですかね... 🤔
自分がパッと思い浮かんだのは以下です。

  • ローカルストレージの場合
    • 複数タブにわたって情報を引き継ぎたい機能
      • ドキュメント編集(Google Docsとか 実際にはわからない)
      • プレーンテキストではない、スタイル情報を含めたテキストやオブジェクトのコピー
  • セッションストレージ
    • SPAなサイトでの情報引き継ぎ(具体例あんま思い浮かばない...)

他、何か使い道があれば、ご教示いただけると助かります。🙏

ローカルストレージのアンチパターン

以下の記事で、ローカルストレージは使わないでね的なことが書いてありました。

techracho.bpsinc.jp

咀嚼すると、

  • ローカルストレージは簡単にアクセスできてしまうセキュアではない情報だよ
    • とくに 個人情報 / 認証情報(JWT ジョット とか) 等は保存しちゃだめだよ!
    • (セッションストレージも同じく、アクセスできちゃうから注意必要だよ)

じゃあどうすればいいの?の答えは、

  • 認証情報はサーバーサイドセッション使おうよ
  • 純粋な文字列や数値だったら、IndexedDBを使おうよ
  • オフライン(PWA)でデータを扱うならCache API使おうよ

と書いてあります。

新規開発や小規模なアプリケーションでは、これらを考慮した作りに切り替えることが容易だと思います。

しかし、絶賛稼働中かつ中規模以上のアプリケーションでは、影響範囲調査や改修コストと戦うことになると予想できます。そんな状況下、優先的に対応するとしたら、ローカルストレージから個人情報を排除する(個人情報の代わりにIDを保持、APIアクセスして取得するようにする など)かなと思いました。

おわり

以上です。

気になる点などありましたら、FBいただけると助かります。🙏

VSCode Remote Container でPythonお試し環境を作った時のメモ

Pythonのバージョン管理をpyenv、ライブラリ管理をpoetryに頼っているのですが、現場(業務)ではコンテナ上で動かすものが多い印象です。

コンテナ上での開発であれば、VSCode Remote ContainerでPythonの補完を効かせて開発したいと思っていたのですが、なかなか手が出ない状態となっていました。

そんななか、kdnaktさんの以下記事を拝見し、まずはRemote Containerで開発環境を構築する素振りをしてみました。

kdnakt.hatenablog.com

本記事では、Remote Container上でPythonお試し環境を動かすため、以下を作成した際のメモを書いていきます。

参考記事

お世話になった記事を先に書いておきます。

起動方法

python-remote-containerは、READMEに記述している通り、コマンドパレット(Macだとcommand+shift+p)でRemote-Containers: Reopen in containerを選択すると、Remote Container(コンテナ起動→コンテナのディレクトリをVSCodeで開く)が起動します。

f:id:kic-yuuki:20200623212817p:plain

各種設定ファイル

.devcontainer.json

.devcontainer.jsonには、

  • Remote Containerを起動するまでの設定
  • Remote Container上で有効化するVSCode拡張機能
  • etc...

といったことを記述します。詳しくは以下を参照どうぞ。

ワークスペースフォルダの指定

Dockerfileでソースを配置したフォルダと、同じフォルダを.devcontainer.jsonに記載します。

# Dockerfile
ADD . /code
WORKDIR /code
// .devcontainer/devcontainer.json
{
    "workspaceFolder": "/code",
}

この設定をしておくと、Remote-Containers: Reopen in containerしたときのカレントディレクトリがソースを配置したフォルダとなります。

VSCode拡張機能

Remote Container上でもVSCode拡張機能が利用可能です。

利用するには、拡張機能の...

f:id:kic-yuuki:20200623215511p:plain

赤枠部分をextensionsに記載します。以下設定例です。

// .devcontainer/devcontainer.json
{
    "extensions": [
        "ms-python.python",
        "atisteo.vscode-django",
        "bibhasdn.django-snippets",
        "bibhasdn.django-html",
        "editorconfig.editorconfig",
        "donjayamanne.githistory",
        "eamodio.gitlens"
    ],
}

docker-compose.yml

今回はサーバー等を起動しないため、コンテナ起動後に即終了してしまいます。(Remote Containerもできない状態)

コンテナを起動し続けるため、ttyを有効にします。

# docker-compose.yml
version: '3'
services:
  python_remote:
    tty: true

おわり

以上になります。

自分のためのメモですが、参考になれば幸いです。

じぶん Release Notes ver 0.30.7

f:id:kic-yuuki:20200612230427p:plain

気づけば30歳も後半戦。

6月半ばになってしまいましたが、2020/05の取り組みの成果を書いていきます。

先月分はこちら -> じぶん Release Notes ver 0.30.6 - zackey推し

  • 学んだこと
      • 読書中
      • 完了
  • 勉強会・コミュニティ
  • プライベート
    • トピック(出来事)
      • 3回目の転職
    • 記事(じぶんリリースノートを除く)
    • PV数
  • Challenge Every Month
    • 2020/05の結果
    • 2020/06の目標
  • おわりと所感
続きを読む