アプリケーション

クリーンコードクックブック ―コードの設計と品質を改善するためのレシピ集

アプリケーション

クリーンコードクックブック ―コードの設計と品質を改善するためのレシピ集を読んだ。 本全体を通して、全単射と偶発的複雑さの概念について教えてくれる本であり、コードの設計と品質を改善するテクニックを学ぶことができる。 よく見知った法則なども網羅的に書かれているので、手元に置いておきたい一冊。 ...

設計

初めてのGo言語 第2版 ―他言語プログラマーのためのイディオマティックGo実践ガイド

アプリケーション

初めてのGo言語 第2版 ―他言語プログラマーのためのイディオマティックGo実践ガイドを読んだ。 久しぶりに業務でGoを書く機会に恵まれたので、新しい情報のキャッチアップや復習を兼ねて読んだ。 この本は単なる入門書ではなく、Goの思想やイディオムを沢山紹介しており、Goという言語の理解を深めることができる。 他の入門書は拾わなさそうなことも拾われており、良書であった。 ...

Golang

継承より委譲について

アプリケーション

はじめに オブジェクト指向プログラミング(OOP)は「現実のモノをプログラムで表現する」ための考え方である。しかし、現実の分類や言葉の定義をそのままプログラムへ持ち込むと、思わぬ破綻を招く。 本記事では、「四角形と正方形」という具体例を通じて、以下の3つの重要な概念を解説する。 ダックタイピング - 名前ではなく振る舞いで型を判断する リスコフの置換原則(LSP) - 振る舞いの互換性を保証する...

ダック・タイピング リスコフの置換原則 委譲 継承 Golang

テストダブルとは何か

アプリケーション

はじめに 単体テストを書く際、テスト対象のコードが外部のデータベース、APIサーバー、ファイルシステムなどに依存していると、以下のような問題が発生する: テストの実行が遅い テスト環境の準備が複雑 テスト結果が不安定(ネットワークエラーなど) 特定の状態やエラーケースの再現が困難 これらの問題を解決するために使われるのがテストダブル(Test Double)である。 テストダブルとは、テストに...

Golang テストダブル テスト

なぜインターフェースの方が実装より変更頻度が低いのか

アプリケーション

クリーンコードクックブック ―コードの設計と品質を改善するためのレシピ集を読んでいて、インターフェースの実装よりも変更頻度が低いという主張が気になったので、言語化してみた。 インターフェースは「契約(contract)」であり「抽象」 インターフェース(interface)は、 「この機能はこう使える」という"契約"を表すものである。 一方で実装(implementatio...

Golang インターフェース

Singletonパターンはなぜアンチパターンなのか

アプリケーション

はじめに シングルトンパターンは、デザインパターンの中でも最もよく知られ、広く使われているパターンの一つである。しかし、クリーンコードや保守性の観点から見ると、多くの問題を抱えている。 本記事では、シングルトンパターンの主要な問題点について、具体的なGoのコード例を交えながら解説する。 シングルトンパターンとは シングルトンパターンは、クラスのインスタンスが常に1つだけ存在することを保証するデザイ...

シングルトンパターン Golang

TUI開発で役立つターミナル仕様の理解

アプリケーション

はじめに TUI(Terminal User Interface)アプリケーションを開発する際、vimやhtopのような既存のTUIライブラリを使えば簡単に実装できる。しかし、その裏でターミナルがどのように動作しているのか、なぜRaw Modeが必要なのか、ANSIエスケープシーケンスとは何なのかを理解していないと、高レベルのAPIが何をしているのかわからず、問題が起きたときに対処しづらい。 本記...

TUI termios ターミナル UNIX Golang

ストリートコーダー

アプリケーション

ストリートコーダーを読んだ。 ストリート(現場)でのtipsをジョークを交えて語っている本。 アルゴリズムやテスト、リファクタリングからセキュリティや性能最適化まで幅広く扱い、現場で遭遇する課題にどう向き合うべきかが具体的に示されている。 初心者には実践のイメージを、経験者には自身の技術や姿勢を振り返る機会を与えてくれる。 ...

コーディング

なっとく!関数型プログラミング

アプリケーション

なっとく!関数型プログラミングを読んだ。 Scalaで関数型プログラミングの丁寧に解説した良書であると感じた。 途中からScalaの言語仕様の話が多いように感じる部分もあったが、言語に関係なく関数型のエッセンスについて易しく学ぶことができる。 ...

関数型

Goでプロセス・goroutine・メモリを覗いてみた

アプリケーション

概要 Goを使って、プロセスのアドレス空間・goroutineの動作・スタックとヒープを軽く覗いてみる。 子プロセスとアドレス空間の違いを確認する Goでは標準的にos/execパッケージを使って新しいプロセスを起動する。 os/execは内部的にUnix系OSではfork()+exec()相当の処理を行い、新しいプログラム(この例では自分自身)を実行する。 親子プロセスで同じ変数のアドレスを表...

Golang メモリ ヒープ スタック プロセス スレッド