nekoTheShadow’s diary

IT業界の片隅でひっそり生きるシステムエンジニアです(´・ω・`)

『関数型ドメインモデリング』を読んだ

www.e-hon.ne.jp

関数型プログラミングドメイン駆動設計を進めるためにはどうすればよいのかというちょっとマニアックな切り口の本です。

読者層に関して、関数型プログラミング初心者でもOKという前提にはなっていますが、正直なところまったく触れたことのないレベルだと読むのは厳しいかもしれません (初心者に対してかなりわかりやすい記載にはなっていますが)。ただF#については、関数型プログラミング言語の一例として利用している感じなので、ほかの関数型プログラミング言語の経験があれば、なんなく理解できると思います。F#特有の知識が特別必要だったり、そればかりが紹介されたりもありません。

関数型プログラミング初心者だと厳しいとしましたが、ドメイン駆動設計初心者に対しては、むしろおすすめできるレベルだと思います。いくつかドメイン駆動設計に関する本を読んできましたが、そのなかではもっとも簡潔でわかりやすいと感じました。ドメイン駆動設計導入にはぴったりでしょう。

読んでみての感想として、本書の内容すべてをビジネスに取り入れることは難しいが、しかし多くの示唆に富んだ本であると思いました。現代のプログラミング言語フレームワークには、関数型プログラミングドメイン駆動設計のパラダイムが取り入れられていることも少なくないので、純粋な関数型プログラミングドメイン駆動設計を指向しなくとも、本書にて紹介されるエッセンスを現場のソフトウェア開発で導入できるのではないでしょうか。

多くの示唆に富んだ本と書きましたが、個人的に感心したのは、ワークフローを型で表現する点。たとえば、顧客から注文があり、その注文の内容を検証するというワークフローがあったとします。このワークフローでは注文伝票の製品コードをチェックしたあと、顧客住所をチェックする場合、本書のやりかたにのっとれば、まず次のような関数型を定義します。

type ValidateOrder =
    CheckProductCodeExists  // 依存関係
     -> CheckAddressExists  // 依存関係
     -> UnvalidatedOrder    // 入力
     -> ValidatedOrder

そのあと、この関数型を満たす関数を実装します。

let validateOrder : ValidateOrder =
    fun checkProductCodeExists checkAddressExists unvalidatedOrder -> ...

このやり方のよいところは、型宣言を見ればワークフローで何をするのかが一目でわかること、そして仕様変更に強いことです。たとえば、仕様変更が発生して、注文の内容を検証する際に、顧客のメールアドレスをチェックする必要が増えたとします。この場合、まず型宣言を修正します。

type ValidateOrder =
    CheckProductCodeExists  // 依存関係
     -> CheckAddressExists  // 依存関係
     -> CheckEmailExists    // 依存関係
     -> UnvalidatedOrder    // 入力
     -> ValidatedOrder

すると、この関数型の実装関数であるvalidateOrder関数はコンパイルエラーになります。これはつまり仕様と実装に差異があることをコンパイラによって機械的に検出できているといえます。自分の仕事柄「Excel仕様書の中身とソースコードの実装が違って困る」ということが多々あるので、こういう仕様と実装の一致を強制できる仕組みには本当に感動しました。

これ以外にも本書にはソフトウェア設計に役立つさまざまなアイディアが紹介されています。全293ページと分量はほどほど。図表も多くてわかりやすく、なにより翻訳がこなれていて、非常に読みやすいので、自分のソフトウェア設計の持ち駒を増やしたい、新たな風を取り入れたい人は読んでみて損はないかと思います。

『つくって、壊して、直して学ぶ Kubernetes入門』を読んだ

honto.jp

「つくって、壊して、直して」という不思議なワードがタイトルに入っているので、Kubernetesに特殊なアプローチで迫るものと思いきや、しごくまっとうなKubernetes入門書です。今年のGWに読んだのですが、素晴らしい内容の本だったので、読書感想文をBlogにてシェアしたいと思います。

まずわたしのバックグラウンドを述べておくと、普段はとあるSIerシステムエンジニアとして働いていて、マネジメントよりはテクニカル系、インフラよりはアプリケーション系のキャリアが長いのですが、Kubernetesは基礎的な研修を受けた程度で、開発や本番運用は未経験。コンテナやDockerについては、こちらも実務レベルの経験なしですが、日曜大工ならぬ日曜プログラマ活動ではよく利用するので、ある程度理解はしています。

本書のターゲットは、コンテナ技術の利用経験があるアプリケーション開発者が、すでに用意されたKubernetesに対して、アプリケーションをデプロイしたり、問題が起きたらトラブルシュートできるようになろうというものです。なので、"Docker is 何" レベルの人だとやや苦しいですし (実際、Dockerに関する記載はほぼない)、Kubernetesを1からサーバにインストールするぜというインフラエンジニアにはやや物足りないと思います。ただ自分にはレベル感がちょうどぴったりだったので、かなり勉強になりました。

本書の特徴はなんといってもハンズオンの充実ぶり。「手を動かして覚えよう」というコンセプトがあるのでしょう。とりわけ自分はこの手のアプローチが好みなので、高く評価したいです。また、このハンズオンですが、全体的な導線がかなり練られているという印象を受けました。説明が簡潔でわかりやすいこともさることながら、ハンズオン同士のレベル感もうまく調整されています。個々のハンズオンの初めには「このハンズオンではXXが必要なので、XXを参照して準備してね」というようなことがあり、一方、終わりには次のハンズオンに向けての後片付けがきちんと書かれていたりと、ハンズオンひとつひとつをとってみても、講義としてのクォリティが高い。

あとは技術書に対してこういう評価を下すのはいかがなものかとも思うのですが、視覚的な意味で妙に読みやすいですね。デザインや組版が良いんですかね…? ところどころ差し込まれる絵もかわいくて、説明の補足になっているだけでなく、読書のモチベーションにもつながります。

目立った誤字・脱字もなく、非常に丁寧に作られている一冊です。もちろん内容もわかりやすく、自分のようなアプリケーション屋さんがKubernetesの概要や基本的な使い方をつかむにはうってつけでした。そんな機会が訪れるかは謎ですが、Kubernetesにお仕事で関わることがあったら役にたつと思いました。

Covid-19体験録

発症はゴールデンウィーク最終日の5/6(月・祝)の夕方ごろ。立川駅近辺で買い物をしていたところ、猛烈な頭痛と倦怠感に襲われたため、その日は帰宅。夕食をとる元気もなく、そのまま布団に倒れこむように就寝。次の日、5/7(火)は出勤日だったため、いつも通り7:00ごろ起床したところ、頭痛と倦怠感はほとんどおさまっておらず、熱を測ったところ、38℃と体温が高めな自分にしてもかなりの高熱。さすがにまずいと思い、会社へはSlackで欠勤の連絡をしたあと、近所の開業医に行ったところ、Covid-19陽性との診断でした。ちなみに、検査は鼻に綿棒を入れて数分待つというものでしたが、この鼻に綿棒に入れるのが結構痛かったです。

10日間は外出を控えるよう注意されたあと、処方箋と診断書をもらって、診察は終了。近所の処方箋薬局で、Covid-19陽性であることを告げると、別室に隔離。そこでロキソニンとトラネキサム酸5日分をもらって、自宅へ帰宅しました。診察料が3450円、薬代が790円の出費。なお、医者曰く、症状がひどい人はゾコーバという薬が必要になるそうですが、これは15000円ぐらいするらしく、それを考えると、4000円ちょっとで済んだのはよかったのかもしれません。

症状の経過としてはまず、5/7(火)は頭痛と熱があったものの、ロキソニンのおかげで頭痛はかなり楽になりました。もっとも仕事ができるような状態ではないので、欠勤して一日中布団の中。5/8(水)は熱・頭痛はかなり引いたものの、のどの痛みが出始めました。当然、ここも仕事は病欠。5/9(木)は熱・頭痛はほぼ完治したものの、のどの痛みがピークで声も出ない状態に。倦怠感もあわせてピークになり、何もする気になれず、この日も病欠。5/9(金)になって、のどの痛みがなくなり、倦怠感もましになってきたため、ようやく働けるぐらいには回復したと判断し、一応お仕事には復帰しました。もちろん、リモートワークです。ただ、倦怠感がやっかいで、発症から10日以上たった今でも、少し残っています。Covid-19後遺症でよく言われる、味覚嗅覚の消失やブレインフォグのような症状はないのですが、この倦怠感はもう少し続きそうです。


Covid-19にかかってみての感想ですが、けっこうつらかったです。体が丈夫で、かぜも年単位でしか引かない自分にとっては、ここ数年でもっともきつい病気でした。少なくとも3日も体調不良で欠勤するのは社会人人生で初めてでした。ワクチンも3回打っていてこれなので、打っていなかったらと思うとぞっとします。Covid-19はただの風邪というようなことをいう人がいますが、まったく違いました。自分でこのつらさなら、お年寄や持病を持つ人が亡くなるのも納得です。あとは10日間の外出規制もたいへんでした。自分はジムで筋トレするのが趣味のひとつなので、これが制限されるのが一番嫌だったかも。食事なんかも出前や宅配などで耐えたのですが、お金もかかれば飽きもきます。スーパーやコンビニで外に出てものを買うという行為が自分にとってリフレッシュになっているということがよくわかりました。

薬については、ロキソニンはめちゃくちゃ効果がありました。ロキソニンが切れると露骨に頭痛と倦怠感が襲ってきます。ロキソニンは神(極端)。トラネキサム酸はちょっと体感わからなかったですね…。ただネットの口コミを見ると、これがよく効いたという人もいるので、個人差ありなのかもしれません。ただこのトラネキサム酸は美容目的で悪用されており、最近は供給不足とか。本当に必要な人の手に渡るようにしてほしいですね。閑話休題。思い返してみるとなにより、寝るのが一番効果があったような気がします。療養中はかなり睡眠をとりました。眠れなくても、布団の中で目をつぶるだけで、身体が休まり、回復に効果があったと思います。


世間ではCovid-19が終息したような風潮ですが、別に病気自体がこの世からなくなったわけではなく、自分のように感染する人もいます。そして感染すると、つらい病気です。身体もそうですし、行動にも制限がかかります。自分は平気でしたが、これがきっかけで後遺症に長く苦しんだり、最悪亡くなったりするケースもあります。ひとごみに行くときはマスクをつける、手洗いうがいを徹底する、こまめに消毒するなど、感染しないよう注意いただきたいです。

読書メモ: 『実務で使えるメール技術の教科書』『実践Rustプログラミング入門』『詳解Go言語Webアプリケーション開発』

nekotheshadow.hatenablog.com

わけあって、今年の3月の終わりに長期休養をとっていたのですが、その際に読んだ技術書について読書メモを残しておきたいと思います。

『実務で使えるメール技術の教科書』

honto.jp

神奈川県の公立高校の入試出願システムでメール関連のシステム障害があり、受験生や教師が困るというニュースがありましたが、たまたまその近辺で出版が公表されたということで、ちょっと話題になった本ですね。自分もその話題で知って読みました (ミーハー)。

タイトルにある通り、メールに必要になる技術について、体系的に幅広く記載されています。内容的には初学者向けで、気になるトピックなどあれば、RFCを読むなり専門書をあさるなりすればよいかと思います。自分はシステムエンジニアですが、メールはもっぱら使うのが専門。メールに関する仕事にがっつりかかわったこともなく、応用情報技術者試験程度の知識しかなかったので、本書のレベル感はぴったりでした。

個人的にはけっこう身になった一冊です。仕事に必要になったら、手元においてリファレンスとして活用することになりそうです。

『実践Rustプログラミング入門』

honto.jp

近年のRustの注目度は高く、数多の入門書が上梓されていますが、そのなかで本書の特筆すべき点はハンズオンの充実ぶりでしょう。CLIアプリにはじまり、Webアプリ・GUIアプリ・組み込みアプリにいたるまで、さまざまな領域のハンズオンが用意されています。Rustの守備範囲の広さを堪能しつつ、Rustを書いて覚えたいという需要にはぴったりです。また、衛生的なマクロやunsafeなどの発展的な内容も含め、いろいろな開発ノウハウも紹介されており、きわめて実戦派の一冊になっています。

一方、文法や仕様や言語機能のような、Rust言語そのものに関する記述はややあっさりめなので、そこは別に補完したほうがよいかなとも思いました。ただ自分はそっち方面はすでにある程度学習済み。そこから実際にどうモノを作るのかについて迷っているところだったので、この本は自分にとってはかなりためになったという感覚があります。

『詳解Go言語Webアプリケーション開発』

honto.jp

本書はGoの入門書ではなく、GoでWebアプリを作る段階の入門書です。したがって、Goの基礎的な文法や仕様については知っている前提になっています。

本書は大きく2部構成になっており、まず前半ではGoでの開発で知っておくべきノウハウやTipsが紹介されます。Go趣味勢・Goをお仕事で使わない勢の自分にとっては、この前半部分を読むだけでけっこう勉強になりましたが、本書のアドバンテージは後半のハンズオンでしょう。ここでは手法としてテスト駆動開発を採用し、インクリメンタルにTODOアプリを作成していきます。Go開発のコツ・テストのコツをつかめるだけでなく、テスト駆動開発の雰囲気も学べるということで、一石二鳥な内容になっています。

コードをパッチしながら進めるという形式にもかかわらず、どのファイルを修正すればよいのかわかりにくい箇所が多かったり、誤植が目立ったりと、気になるポイントは多少あるのですが、GoによるWeb開発をはじめたい人は取り組んでおいて損はなかろうと思います。

もうすぐ自主休職が明ける

2024/03/18~の2週間、自主休職をしていました。というか、今日(2024/03/28)時点でその真っ最中です。自主休職とはなんぞやという話ですが、これはわたしの造語で、とどのつまり2週間連続して有給休暇をとったということです。休職というと病気を理由に長期に業務から離れるというイメージがあって、自分の場合、制度は違えど、それに近い感じで2週間有給を使用したので、この期間を自主休職と勝手に名付けました。

自主休職にいたった理由はずばり精神的疲労です。仕事に対する熱意がわかず、成果物の品質は下がり、なお悪いことはそれを改めようという気すら出てこない。一応クライアントワークということもあり、この状態ではお客さまに迷惑がかかるというのと、何よりこの状態が続くと自分が壊れかねないということから、とにかく休もうと決断。ラインマネージャ・プロジェクトマネージャ了承のうえで、2週間の自主休職となりました (有給休暇は労働者の権利とはいえ、事前に相談と調整はしました)


自主休職をしてみての感想ですが、めちゃくちゃよかったです。かなりの気持ちのリフレッシュになりました。何より、明日の仕事のことを考えず、夜眠りにつけるのはほんとうにうれしかったし、気分爽快でした。自主休職明けの仕事が楽しみ――なんてことは、まったくないのですが、ちょっとはパフォーマンスがあがるのでは? と期待しております。

なお、自主休職中はひとり暮らしのアパートでたまっていた家事や掃除を片づけたあと、大阪の実家へ帰省。家事手伝いをしつつ、プログラミングの勉強をしたり、ジムで筋トレしたりと、まさに骨休めをしていました。ここで読んだ技術書については後日読書メモをブログに残したいと思います。また、いつも通っている神奈川のジムはPrecor製のマシンしかないのですが、実家の近くのジムはHAMMER STRENGTH中心で、そっち方面でも普段と違う新しい刺激を味わえました。


ところで、なぜ自主休職が必要なほど、精神的に疲れ果ててしまったのか?

第一は今のプロジェクトに対して、あまりにもモチベーションがわかないから。とあるシステム開発プロジェクトで、こまごまとしたドキュメントを作るのがいまのわたしの仕事です。どちらかというと、プログラムやコードをいじるほうが好みの自分にとって、エクセル・パワポで資料を作るだけということ自体、超つまらないですし、そもそも誰が読むのかわからないということで、作る資料の必要性について、腹落ちできていないというのもやる気がそがれる原因です。

そもそもプロジェクトの方針にも不満があって、守秘義務があるので詳細は控えますが、新システムだDXだとうたっているわりに採用した技術はロートル中のロートル。システムスコープも政治的な都合で削りに削られ、「せっかく新システムを作るのだから、こういう悩みを解決したい。こういう新機能を盛り込みたい」というユーザの要望にはまったくこたえられていません。開発して誰がうれしいんだ、このシステム? クライアント側のシステム部門はもちろん、なにより実ユーザがまったく納得していないもの。これを何年もかけて開発するんだぜ。それはそれは精神にこたえるというものです。

あと、会社と自分の方向性があわないというのも悩みの種だったりします。自分はどちらかといえば技術屋寄りですが。会社としてはコンサルワーク・プロマネワークを伸ばしていきたいという思惑があります。昨今はDXバブルで、システム投資熱が高い中、限られた人員をより高単価な上流工程に割きたいという会社の意図はよく理解できます。いっぽう、その方向性のもと、自分のような技術系のロールは冷遇ないし、追い出していく流れがあります。つまり、この会社にいても、やりたい仕事はまずできないし、それどころか冷や飯を食わされるだけと思うと、目の前の仕事にやる気がでなくて当然というわけです。


話は大脱線しますが、この記事をもって、ブログのデザインテーマを変えることにしました。

これまで使っていたテーマ

blog.hatena.ne.jp

これから使うテーマ

blog.hatena.ne.jp

これもリフレッシュの一環(´・ω・`)

Rust入門にあたって読んだ2冊: 『Rustの練習帳』『コンセプトから理解するRust』

最近はRustの勉強をしています。世間で大流行しているし、新しい言語を勉強するのは好きだし、それぐらいのきっかけではじめたのですが、なかなかおもしろい言語だということで、マイブームになりつつあります。競技プログラミングの問題を解いたり、ちょっとしたスクリプトを書いたりするだけですが、けっこう楽しいです。そういうわけで、この記事では自分がRustをはじめるにあたって読んだ2冊を紹介したいと思います。

『Rustの練習帳 コマンドラインツールの作成を通してRustを学ぶ』

honto.jp

実はこの本を書店で見かけたのがRustをはじめる直接のきっかけだったりします。lsやgrepやfindなどのLinuxコマンドを実装して、Rustの基本的な文法やお作法、ライブラリ類やツール類の使い方を習得しようというコンセプトの本になります。自分はこういう手を動かす系の本が好みということもあり、かなり勉強になったという感覚があります。ただ題材がLinuxコマンドだけということもあり、写経中、やや冗長に感じる部分がありました。またRust学習者のモチベーションとして、借用やライフタイムなどのRust特有の概念を知りたいというものがあると思いますが、そういう小難し話題について、本書はほとんど言及がありません。

  • プログラミングの経験はあるがRustは初歩的な文法すらわからない
  • コンセプトは勉強したけど実際にどう手を動かしていったらいいのかわからない
  • 細かいことは後回しにしてまずはRustを書いてみたい

そんな人に向けた1冊だと思います。

『コンセプトから理解するRust』

honto.jp

先述した本が実践系なら、本書は座学系の1冊です。型やトレイトや所有権を中心にRustに特有の概念を学ぼうというのが本書のコンセプトになります。ほかのプログラミング言語と比較したり、わかりやすい図やサンプルコードや図表を用意したりと、全体的に丁寧で説明はかなりわかりやすいです。少なくとも自分はRustのコア部分をかなり理解できた気でいます。Rust入門に必要な知識がぎゅっとつまっているといってよいのではないでしょうか。ただし実際にどう手を動かすのかといった点にはまったく触れられていません。それが本書のよいところ――すなわちそういった記載を省くことで、ページ数が減ってコンパクトになるというメリットもあるのですが、とはいえ「知識は得たが、では実際のアプリはどう作ればよいのか」というところについては、別のところで勉強する必要がありそうです。

『限界分譲地 繰り返される野放図な商法と開発秘話』を読んだ

honto.jp

主として高度経済成長期に乱開発され、その利便性の悪さから空家・空地として現代まで放置されている分譲地。本書のタイトルにある限界分譲地をひとことで言い表すとこうなるでしょう。土地を買う=そこに家なり工場なりを建てて、その土地を活用するという現代の価値観ではなかなか信じがたいですが、高度経済成長期は土地の値段がどんどん上がる時代で、ある種の投資商品として土地が買われていました。要するに、自分で住むためではなく、将来値段が上がった際に売って利益を上げるために分譲地を買っていたわけです。ちなみに首都圏の通勤需要、開発規制のゆるさ、成田空港開港にともなう周辺需要の高まりなどの理由から、こうした投資用分譲地は千葉県北東部に多いとのこと。本書のメインターゲットもこのエリアになります。

もっとも本書が取り上げているような土地は値段があがることはありませんでした。むしろ土地の値段は下がり、現在では0円でも買い手がつかないケースも少なくないようです。理由はその利便性の悪さ。鉄道駅やバス停など公共交通機関へのアクセスが悪い・上下水道が整備されていない・駐車場や道路が過去の感覚で造成されており、現代の自動車で利用するには狭くて使いにくい・ミニ開発のせいで田舎のくせに分譲地が狭い――など、あげだせばきりがありません。80年代後半から90年代後半のバブル期にはそういった土地を活用しようと、家やアパートの建築ラッシュがおきたこともあったようですが、やはり上述したような理由から、住む人はおらず、空家・空アパートとして放置されていることも珍しくないとか。

本書はこうした限界分譲地の成り立ちからの歴史を紹介しつつ、その現状・将来・展望までを詳しくリポート。また、限界分譲地と性質が似たリゾートマンションや別荘地についても紙幅が割かれています。筆者がこうした限界分譲地の一画に実際に居住していることもあり、戦後日本の土地政策の失敗としてセンセーショナルにあおるのではなく、より現実感・生活感があるルポになっているのが本書のよいところです。

なお本書をチェックするきっかけになったのが、筆者のYoutubeチャンネル。ニッチなジャンルながら、内容の濃密さや独特の語り口で、いまや登録者10万人を超える人気チャンネルです。こちらのチャンネルの動画は本書の内容とリンクしていますので、観ると本書の理解が深まるかと思います。また、別に単著もあり、こちらも面白かったので、興味がある方はぜひ。

www.youtube.com

honto.jp