とあるプログラマーの技術ブログ

Reactサンプルアプリ開発 プラニングポーカー まとめ

いったんサンプルアプリとしての機能は完成したので、まとめ。 React Hooksの勉強のため、プラニングポーカーを題材にしたサンプルアプリを開発した。ソースコードはGitHubにアップしてある。また、サンプルアプリはHerokuにデプロイしてある(無料枠だが)https://pp-a-pp.herokuapp.com/ テクノロジースタックは以下。 フロントエンド言語TypeScriptツールBabelWebpackcreate-react-appUIライブラリReactReact HooksReact Transition Group (CSSトランジッション)react-i18next …

キーブレイク処理をジェネリクスで汎用化する

キーブレイク処理とは 業務アプリケーションの開発をやっていると、キーブレイク処理を書く場面にしばしば遭遇する。COBOLerなど昔からプログラムを書いている人にはお馴染みの処理であるが、知らない人のために說明すると、(ソート済みの)明細データの集合を順次処理していき、特定のキー項目が変わったタイミングで何らかの処理を差し込みながら出力を行っていく処理方法のことである。 具体例を示そう。以下のような売上明細クラスがある。※C#となっているが実際はJava public class SalesLine { // 売上日 private String salesDate; // 商品コード priv…
books

【読書記録】Complete Guide to Test Automation (1)

Complete Guide to Test Automationというテスト自動化に関する本(洋書)を読んでいるので、そのメモを少しずつ残す。今回は1章と2章。 https://www.amazon.co.jp/Complete-Guide-Test-Automation-Maintaining/dp/1484238311 この本の分量だが、ペーパーブックで560ページとのことなので、そこそこの量である。英語の本に読み慣れている人でも少し覚悟のいる分量かなと思う。全体は2部構成で、第1部は8章から成り立ち、テスト自動化のWhyとWhatについて述べられている。9章以降の11章分が第2部となっ…
2021-04-07
books

【読書記録】アジャイルソフトウェア開発の奥義(6) ソフトウェアを腐敗させないためのSOLID原則 L

OODの名著『アジャイルソフトウェア開発の奥義』を久しぶりに読み返しながら、少しずつ感想やら気付きやらをブログにまとめていっている。 (前回)【読書記録】アジャイルソフトウェア開発の奥義(5) ソフトウェアを腐敗させないためのSOLID原則 O 今回はSOLIDの3つ目L。 第10章 リスコフの置換原則(LSP) Barbara Liskovによる原則の定義は以下の通り。 S型のオブジェクトo1の各々に、対応するT型のオブジェクトo2が1つ存在し、Tを使って定義されたプログラムPに対してo2の代わりにo1を使ってもPの振る舞いが変わらない場合、SはTの派生型であると言える。『アジャイルソフトウ…
2021-03-28
books

【読書記録】アジャイルソフトウェア開発の奥義(5) ソフトウェアを腐敗させないためのSOLID原則 O

ちょっと間が空いてしまったが、前回に続きSOLID原則。 第9章 オープン・クローズドの原則(OCP) オープン・クローズドの原則とは以下である。 ソフトウェアの構成要素(クラス、モジュール、関数など)は拡張に対して開いて(オープン:Open)いて、修正に対して閉じて(クローズド:Closed)いなければならない。『アジャイルソフトウェア開発の奥義』p.128 開いている、閉じているという表現がわかりづらいけれど、アプリケーションの仕様変更に際して、新たな振る舞い(を実装する要素)を追加することでその変更に対応できるということが、拡張に対して開いているということである。そして、そのように振る舞…
2021-03-28
books

【読書記録】アジャイルソフトウェア開発の奥義(4) ソフトウェアを腐敗させないためのSOLID原則 S

前回の記事 引き続きボブおじさんの名著を読み直している。 第7章 アジャイル設計とは? ソフトウェアの仕様は常に代わり続けるもので、仕様変更に耐えられず設計が劣化していくなら、それは自分たちの設計やプラクティスに問題があるのだとボブおじさんは言う。 ソフトウェアが腐敗し始めた兆候として以下の7つが挙げられている。 硬さもろさ移植性のなさ扱いにくさ不必要な複雑さ不必要な繰り返し不透明さ ソフトウェアの腐敗を防ぐために、アジャイル開発者はクリーンな設計を保つ努力をしなければならない。「アジャイルな設計とは何か?」について以下のように締めくくられている。 アジャイルな設計とは「プロセス(流れ)」や「…
2021-02-19
books

【読書記録】アジャイルソフトウェア開発の奥義 (3) 写経したい第6章

ボブおじさんの名著『アジャイルソフトウェアの奥義』を読み返しながら感想などをつらつらと書き連ねる、その3。 【読書記録】アジャイルソフトウェア開発の奥義 (1)【読書記録】アジャイルソフトウェア開発の奥義 (2) 第5章 リファクタリング エラトステネスの篩というアルゴリズムを使って素数を作るプログラムを題材に、少しずつリファクタリングしていく様子を実演する章。 リファクタリングは食後のキッチンを片付けるようなものだ。最初は後片付けをしなければ、それだけ食事時間は短くて済む。しかし、片付けておかないと、翌日の食事の用意をするときにもっと時間がかかってしまう。『アジャイルソフトウェア開発の奥義』…
2021-02-07
books

【読書記録】アジャイルソフトウェア開発の奥義 (2)

ボブおじさんの名著『アジャイルソフトウェアの奥義』を読み返しながら感想などをつらつらと書き連ねるシリーズ2回目。 第3章 プラニング この章では、XP(エクストリームプラニング)のプラクティスのひとつ「計画ゲーム」について説明されている。特筆すべき点はないので割愛。 第4章 テスティング テストコードを書くこと、テスト駆動で開発を行うことの重要さが説かれている。 つまり、テストを最初に書くという行為は、設計上の判断をふるいにかける行為でもあるのだ。『アジャイルソフトウェア開発の奥義』(第4章, p. 35) プログラムが解決しようとしている領域において、どの概念が他の概念より重要なのか、重要な…
2021-02-06
books

【読書記録】アジャイルソフトウェア開発の奥義 (1)

ボブおじさんことロバート・C・マーチンによる名著の第2版。長らく積ん読状態だったが、少しずつ読み進めながら感想などつらつらと書いていこうと思う。 https://www.amazon.co.jp/%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA%E3%81%AE%E5%A5%A5%E7%BE%A9-%E7%AC%AC2%E7%89%88-%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%…
2021-02-03

JavaScriptの配列のソートの話 (3) – lodash _.orderBy()

前回の記事 lodashのorderByについて書くのを忘れていたので簡単に。sortByよりも柔軟なソートを手軽に行うことができる。 it('_.orderBy()でソートできる', () => { // Act const sortedUsers = _.orderBy(users, , ); // Assert expect(sortedUsers).toEqual() }); 上の例は、第1ソートがuserプロパティの値の昇順、第2ソートがageプロパティの値の降順であることを示している。以下のようにネストされたプロパティの指定もできる。 it('_.or…
2021-01-24
books

Bookレビュー:Test-Driven React

https://www.amazon.co.jp/dp/B07VB5SFZ5/ 本の概要 タイトルのとおり、テスト駆動でReactアプリケーションを開発していく方法を学べる本。紙の本だと170ページとのことで、分量はそれほどでもない。ただ、チュートリアル形式の本なので、実際に手を動かしながら読んでいくのがよい。そうすると少し時間がかかる。 簡単なテストケースからスタートして段階的にコンポーネントを作成しながらReactについての説明もされるが、ある程度の知識(公式のドキュメントやチュートリアルを読み、簡単なReactアプリケーションを作成できるレベル)はあった方がよいと思われる。とくに5章のH…
2021-01-24

JavaScriptの配列のソートの話 (2) – lodash _.sortBy()

https://blog.ynkb.xyz/296/ の続き。Array.prototype.sort() は操作が破壊的である点や、柔軟なソートに耐えられないという決定があり、多くの場面では使いづらい。 プリミティブ要素のソート まずは _.sortBy() から。_.orderBy() はまた次の投稿にて。 null と undefined の扱いは Array の場合と異なる。null と文字列の 'null' は同一視されない。 null は undefined よりは前に来る。 it('nullとundefinedの扱い', () => { // Arrange…
2021-01-19