Magnolia Tech

いつもコードのことばかり考えている人のために。

『継続的デリバリーのソフトウェア工学』...ソフトウェア工学とは何か?

書名の「継続的デリバリー」はCI /CDの解説書かな?とも思わせてしまうので若干ミスリードなんだけど、「工学とは何か?」「ソフトウェア工学とは何か?」「工芸と工学は何が違うか?」ということを解説した1冊。

本書を通じて語られているのは、ソフトウェア開発においていきなり正解に一発で辿り着くことはなく、下記の5つの考え方を実践していく必要がある、という点です。

  • 反復的な作業
  • フィードバック
  • 漸進主義
  • 実験主義
  • 経験主義

前半は、それらがいかに大事な考え方であるかを一つ一つ事例を交えながら解説が続いていきます。ウォーターフォールと、アジャイルの対比のあたりは、ちょっと「悪い事例の見本としてのウォーターフォール」に偏りすぎじゃない?とは思いましたが、極端な事例を対比させることで論点を際立たせる手法だと捉えておくとよいかな、と思いました。

後半は、ソフトウェアの複雑性と戦うための指標としての

  • モジュラー性
  • 凝集度
  • 関心の分離
  • 情報隠蔽と抽象化
  • カップリング(結合度)の管理

といったキーワードへの解説が行われます。

テスト駆動開発や、ドメイン駆動設計も当然のように出てきます。


主に考え方や、概念、振る舞い、といったことと、それがどのような背景から由来するものか、というところに焦点が当てられている内容なので、具体的なツールの解説や使い方にフォーカスすることを期待しているとちょっと違うかも、と思われるかもしれません。一人で読んで考える、というより読書会などで色々な人の考え方を聞いて、良いプラクティスを理解した上で現実の課題にどうアプローチすべきか、ということを考えるきっかけにすると良いですね。


途中で出てきた「私の友だちのなかには、読めるPerlを書ける人さえいます。」というくだりは笑ってしまった...普通書けないことが前提になっていますね、これ...

Atermの「DHCP固定割当エントリ」設定時には、DHCPサーバの「割当数」の範囲内のIPアドレスを選ぶ

相関チェックくらいしてくれよー、と思ったけど、引っかかったのでメモ

au ひかりのホームゲートウェイは、NECAtermが使われている。

DHCPで、IPアドレスmacアドレスを元に固定設定する場合は、「DHCP固定割当エントリ」のページでmacアドレスIPアドレスをセットで設定する。

この時、使用できるIPアドレスの番号帯は、「IPアドレスDHCPサーバ設定」の「DHCP」の「割当数」の範囲内に収まる必要が有る。

自動設定にしておくと、64個が割当数になっているので、192.168.0.65までが利用できる範囲。

うっかり、65を超える数字、例えば100とかを設定しても無視される。

以上、メモでした。

『マスタリングLinuxシェルスクリプト 第2版』、こういう1冊手元に有るとずっと使える本はちゃんと買っておきたいですね

令和最新版のシェルスクリプトの入門書とリファレンスがセットになった1冊。手元に置いておくと安心感ありますよね。

令和最新版なので、冒頭からデバッグしたいならVisual Studio Code がオススメ、と出てきます。

コンテナ使おうと思ったらシェルスクリプトの読み書きの出番がどんどん増えていって、コンテナに一番必要なスキルはシェルスクリプトのスキルでは?と思っている今日この頃です(違います)が、そのくらいの用途に必要な要素は全部盛り込んであり、シェルスクリプトの文法と実践的な使い方に加えて、一緒に利用されることの多いgrepawksedといったコマンドの解説も併せて載っています。

とりあえず手元に置いておくと便利。

あ、あと訳註がやたらと充実していて、痒いところに手が届く補足がめちゃめちゃ多いので、翻訳書にありがちな「書いた通りには動かない、条件が変わっている」みたいなところが無いところも本書のおすすめポイントです。


ちなみに本書も最後の章は「bashスクリプトの代わりとしてのPython」という内容で締めくくられていて、もうそこはPerlじゃないんだよなーって思いました、マル。

ケーブル類の収納にはジッパーバッグがおすすめ

長年の間に増え続けたたくさんのケーブル類のストック、要らない訳ではないけど、すぐに出番もない。そしてどれがどれだか、どこに何があるのかわからなくなる。

ケーブル類の収納はジップロックとか、ジッパーバッグに入れて分類するのが良い、という記事を以前見かけたので、やってみました。

こんな感じでジャンルごとに分けてバッグに入れて、箱の中に縦で入れておくとごちゃっとした感じが無くなって、良い感じですね。

ジッパーバッグ

1〜2mくらいの、柔らかめのケーブル(USBとか、DisplayPortとか、HDMIとか、LANケーブルとか)であればA4サイズがちょうど良いようです。

硬めのディスプレイケーブルだと1本で一つのバッグ、柔らかめのUSBケーブルとかだと2〜3本入れるぐらいがまとまります。

薄型のDVDドライブや、小型のUSB充電器なども、硬めのバッグだと型崩れせずに、縦に収納できるところがオススメのポイントです。

中身が見えづらいので、透明なものも探したんですけど、硬めで良さそうなものがなかったので、メッシュで硬めのものをAmazonで探して購入しました。

ジップロックを使う案も有りましたけど、上手く綺麗に縦に収納できなさそうなので、そちらは止めました。

というわけで、ケーブル類の収納にはジッパーバッグがおすすめ、というエントリでした。

Software Design 2023年2月号 特集「ドメイン駆動設計入門」と「ログの基本」の2本立てで凄い!

Software Design 2023年2月号、特集が「ドメイン駆動設計入門」と、「ログの基本」の2本立てなんですけど、どちらも凄く良い記事でした。

これは買った方がいいです!

ドメイン駆動設計入門

エヴァンスの「ドメイン駆動設計」で語られれていることをベースとして増田亨さんをはじめとする執筆陣による、とてもコンパクト、かつ分かりやすい解説が怒涛の密度で展開されます。この部分だけでも5000円くらいの価値が有るんじゃないでしょうか。

基本的な考えを把握する、という意味ではこの特集を読む以上に効率的な方法って無いんじゃないか、と思えるほどです。


あとは、この手の方法論を実際にコードに落とし込もうとすると、膨大な量の「こういう時はどうするの?」「原則通りにやるととても回りくどいけど、本当にそうするの?」「例外としてもいい境界線はどこ?」「例外として原則から外れる設計をどうやって後世に残す?」「そもそもこれを理解できる人材はいる?」「深いところまで理解しなくてもできるように、実際のドメインに合わせてパターン化するためにはどうすればいい?」みたいな、現実との戦いが待っているわけです。

そういう意味では設計方法論は、経験値から得られたノウハウを汎化して作られていくものなので、それ自体が「間違っている」ということは無いです。しかし、「向かないところへ適用しようとする」「設計方法論にとらわれて、肝心のビジネスと向き合っていない」みたいなアンチパターンが発生する可能性は有るので、そこは常に戒めていかないといけないんですよね。

レールを敷いておけば本質に集中できるぞ!と思ったら、目的を忘れて「レールから外れないこと(ルールを守っているか否か)」ばかりに関心が集中してしまった、ということは色々なところで起きてしまうのです。

今さら聞けないログの基本

Linuxのログの現代的な仕組み......journald導入以降の構成や、Webサーバのアクセスログの見方、アプリケーション側でログを出す方法まで、こちらもまず把握したいログの基本が全部載っています。この先にクラウド基盤のロギングの仕組みや、fluentdを使ったログ基盤の構築みたいなテーマが出てくると思いますが、まずはその手前で理解しないといけないことがコンパクトにまとまっているところがいいですね。

ここも5000円くらい払いたくなる価値があります。

ちょうどjournaldの仕組みを知りたいと思っていたところだったので、journaldと、rsyslogの連携方法がバシっと説明されていてタイムリーな特集でした。journaldが導入されてLinuxのログ周りの仕組みも以前とだいぶ変わっていましたので、以前の知識をアップデートするにはちょうど良いですね。

その他

環境の再構築中だったので、『最強の開発環境探求の道』が、「シェルをカスタマイズする」だったのもタイムリーでした。プロンプト、変えたくなりますよね。

ここ、3000円払ってもいいです


ということで、今月号、お値段の10倍以上の価値があって、マジでお買い得感が凄いので、今すぐ本屋へダッシュです。

ドメイン駆動設計について、興味が出てきたら、エヴァンス本を読むも良いし、特集を執筆された増田さんの本、あと、最近わだいの「ちょうぜつ本」を読むのもおすすめです。

Dockerを使ってSambaサーバを立てる

引き続きThinkCentre M75q Tiny Gen2上にインストールしたUbuntu Serverの環境構築を続けます。

blog.magnolia.tech

メインPCとファイルを共有するためにSambaでファイルサーバを立てることにします。

直接Ubuntu Server上でSambaサーバを立ててしまうと管理が面倒なのでDockerで立てることにします。

Sambaのイメージを選ぶ

ネットを検索するとdperson/sambaというイメージを使って構築する事例がよく出てきますが、残念ながらイメージの更新が止まっているようです。

他のイメージを探したところ、servercontainers/sambaというイメージが見つかりました。

GitHubリポジトリを見たところ、具体的なバージョンを指定するのではなく、定期的にAlpineのイメージを取得してインストールできたSambaのバージョンをもとに、複数のイメージをビルド・アップするところまでが自動化されており、常に最新バージョンがDocker Hubにアップされてます。

github.com

具体的な起動方法は、サンプルのdocker-compose.ymlが提供されているので、こちらをカスタマイズすればOKです。

github.com

環境変数にユーザーを指定しておけば勝手にOS側のユーザーも作り、Samba用の設定までやってくれます。便利ですね。

起動する

docker-compose.ymlをコピーしてきて、ユーザー、グループの指定と、ディレクトリやゲストの許可有無等を指定すれば準備OKです。

      GROUP_family: 1500

      ACCOUNT_alice: alipass
      UID_alice: 1000
      GROUPS_alice: family

      SAMBA_VOLUME_CONFIG_aliceonly: "[Alice Share]; path=/shares/alice; valid users = alice; guest ok = no; read only = no; browseable = yes"

    volumes:
      - ./shares/alice:/shares/alice

起動します。

$ sudo docker compose up

次ははバックアップ運用とか、監視とかを考えていきます。

ルータ側の設定でDHCPでUbuntu Serverに配布されるIPアドレスを固定化する

前回のエントリでは、ルータ側のDHCPの設定でIPアドレスを固定化しようとしたけど、上手くいかなかったので、Netplanを使って固定化する方法を調べた。

blog.magnolia.tech

今使っているルータは、MACアドレス指定でDHCPで配布されるIPアドレスを固定化する仕組みを提供しているけど、Ubuntu ServerではDHCPを使ってIPアドレスを取得する際のキーがMACアドレスではなく、DUIDを使っていることがわかった。

IPアドレスを指定するためには、Netplanの設定で、dhcp-identifierという項目に、macと指定する必要があった。

結果的に、設定はこれだけになった。

network:
  ethernets:
    device_ethernet:
      dhcp4: yes
      dhcp-identifier: mac
      wakeonlan: true
  version: 2

ちなみに、IPv6IPアドレスはSLAACという仕組みで、ルータからプリフィクスが配布される設定にしているので、dhcp6を有効にする必要はない。

使っているルータのDHCPの配布指定が20エントリまでしか使えないのがちょっと心許ない。あと、全然説明が足りなさ過ぎて、困った。

自宅ネットワークでもルータ側でIPアドレスの配布は集中管理したいよね。