しよたろのぶろぐ

しよたろがブログを始めてみました。よろしければ一度読んでやってください。

FreeBSD-12.1 インストールしてみた。gmirror でソフトウェアRAID構築編

はじめに

前回FreeBSDのインストールをお試しで実施してみました。FreeBSD-12.1のインストールは慣れれば10分程で終わるのでとてもお手軽ですね。今回はもう少し掘り下げて、gmirror を利用したソフトウェアRAIDの構築を行ってみたいと思います。

 

準備

RAID構築を行いますので、同じ容量のドライブを2つ用意します。

 

RAID構築実施

1)デバイスの確認

今回用意したHDD等のデバイスが2本認識できているかBIOS上で確認します。もしサーバー機でRAIDコントローラーが搭載されている場合はフィジカルディスクとして認識されていても、バーチャルディスクとして認識されていない可能性があるかもしれません。RAIDコントローラー上で認識するにはRAIDコントローラーの設定画面に入ってバーチャルディスクの作成を検討ください。

 

2)FreeBSDのインストール前半(パーティション作成の手前まで)

今回はFreeBSDがインストールを兼ねて実施します。手順は前回の記事を参考にインストールを進めてみてください。そしてパーティション作成の部分でシェルを選択して、シェルを起動します。

 

3)gmirror 作成

ここからgmirrorの設定に入ります。下記の手順を参考に進めていきます。デバイス名は適宜読み替えてください。

gmirror を作成

# gmirror load -v
# gmirror label gm0 /dev/mfid0
# gmirror insert gm0 /dev/mfid1
# gmirror status

 

gpart を作成(伝統的なファイルシステム構成で)

# gpart create -s GPT mirror/gm0
# gpart add -s 64k -t freebsd-boot -l "boot" mirror/gm0
# gpart add -s 1g -t freebsd-ufs -l "root" mirror/gm0
# gpart add -s 32g -t freebsd-swap -l "swap" mirror/gm0
# gpart add -s 4g -t freebsd-ufs -l "tmp" mirror/gm0
# gpart add -s 60g -t freebsd-ufs -l "var" mirror/gm0
# gpart add -t freebsd-ufs -l "usr" mirror/gm0
# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 mirror/gm0
# gpart show

ファイルシステムの初期化

# newfs -j /dev/gpt/root
# newfs -j /dev/gpt/tmp
# newfs -j /dev/gpt/var
# newfs -j /dev/gpt/usr    

 

fstabを用意

# echo "/dev/gpt/swap none swap sw 0 0" >> /tmp/bsdinstall_etc/fstab
# echo "/dev/gpt/root / ufs rw,noatime 1 1" >> /tmp/bsdinstall_etc/fstab
# echo "/dev/gpt/tmp /tmp ufs rw,noatime 1 2" >> /tmp/bsdinstall_etc/fstab
# echo "/dev/gpt/var /var ufs rw,noatime 1 2" >> /tmp/bsdinstall_etc/fstab
# echo "/dev/gpt/usr /usr ufs rw,noatime 1 2" >> /tmp/bsdinstall_etc/fstab
# less /tmp/bsdinstall_etc/fstab

 

mount実行

# mount /dev/gpt/root /mnt
# mkdir /mnt/var
# mkdir /mnt/tmp
# mkdir /mnt/usr
# mount /dev/gpt/var /mnt/var
# mount /dev/gpt/tmp /mnt/tmp
# mount /dev/gpt/usr /mnt/usr

 

シェルを抜ける

# exit

 

4)FreeBSDインストール(残り)

パーティションの構成が終わりましたので、後半のインストール作業を行います。手順は前回と同様です。

 

5)loader.conf設定

インストール作業が一通り終わって最後にリブートする手前の画面で、シェルに入るかどうかを問われます。その時に再度シェルを起動します。

# echo 'geom_mirror_load="YES"' >> /boot/loader.conf


6)リブートします

これで完了です。正しく設定ができていればgmirror上でFreeBSDが起動するでしょう。

 

※ 手順5の段階で、gmirror status を実行して、もしミラーリングが完了していなければ、ミラーリングの完了を待ってリブートする方が良いかもしれません。

 

 

以上になります。本日はgmirror を利用したソフトウェアRAIDの構築をお届けしました。これで万が一HDD障害が起きてもサービスを止めずに稼働する事ができますね。

FreeBSD-12.1 インストールしてみた

はじめに

前回はFreeBSDipfwを導入する手順を記載しました。引き続き詳細な設定に入っていきたい所ですが、ここでひとつ最新のFreeBSDの環境を構築しておきたいと思います。という訳で本日はOSのインストールの手順をざっくりと書いていきたいと思います。

 

インストール手順

インストール用CD(DVD)の準備

まず最初はインストール用のCDを事前に準備します。FreeBSD公式サイトを見て、最新のFreeBSDのリリース版のバージョンを確認。

 

FreeBSD

https://www.freebsd.org/ja/

 

下記リリース情報を見ると、最終リリースは「FreeBSD 12.1-RELEASE」

https://www.freebsd.org/ja/releases/

 

という事で、「FreeBSD を入手する」のリンクからインストールCD用のイメージ「インストーラーイメージ」を入手します。今回は64bit向けである「amd64」のイメージを利用するので、それを選択してダウンロード。ファイル拡張子が「.iso」となっているファイルを取得。あとはライティングソフト等を使ってインストールをCDへ書き込みます。

 

事前に決めておくと良い事項

はじめてのインストール時には何を求められるか分からないかもしれませんが、下記の情報を決めておくと良いかと思います。パーティションの構成はautoがありますので、よくわからないという人も特に気にする必要はありません。

 

DHCPを使うかどうか

 ・IPアドレス

 ・DNSサーバー

パーティション構成

・ユーザアカウント

インストール実施

1)CD(DVD)を入れて起動

端末の電源を入れてCDからブートして起動させます。必要があればブートマネージャーを起動して、CDブートになるように切り替えてください。

 

2)Welcome画面

<Install>を選択します。

f:id:syotarow:20200108201528j:plain

3)Keymap設定

「Japanese 106」を選択します。

f:id:syotarow:20200108201705j:plain

 

4)Hostnameの設定

好きなサーバー名を入れましょう。

f:id:syotarow:20200108201901j:plain

 

5)Distributionの選択

選択肢がこれまで見てきたものと少し違う項目になっている。

ドライバーをインストールする可能性もあるので、srcは追加するようにしましょう。

f:id:syotarow:20200108202028j:plain


6)パーティションの設定

ディスク領域の割り当てをここで行います。ZFSの項目もありますね。

いわゆる「伝統的なファイルシステムパーティション」を作成するならば

<Manual>を使用ください。

 

また<Manual>だけでは細かい設定には対応できませんので、上級者向けに<Shell>が用意されています。

 

が、今回はお試しなので<Auto(UFS)>を選択します。

f:id:syotarow:20200108123746j:plain

 

 シンプルですね。<Finish>⇒<Commit>と選択して進めます。

f:id:syotarow:20200108123824j:plain

7)管理者パスワードの入力

rootのパスワードを入力して次へ進みます。

 

8)ネットワーク設定画面

 続いてネットワーク関連の設定に進みます。

・使用するニックを選択。

IPv4の設定について<YES>を選択。

DHCPを使用するかについて<YES>を選択。

(※DHCPを使用しない場合は適切な方を選んでください)

IPv6の設定について<NO>を選択。

・resolve設定について、DHCPを有効にしていますので自動入力。

(※DHCPを使用しない場合はDNSサーバーの指定を入力ください)

f:id:syotarow:20200108202419j:plain

 

9)Time Zone設定

サーバー機の時刻設定についてUTCかどうか、<NO>を選択します。

f:id:syotarow:20200108202609j:plain

 

地域選択について、<Asia>を選択します。

f:id:syotarow:20200108202726j:plain

 

国の選択について、<Japan>を選択します。

f:id:syotarow:20200108202834j:plain

 

最後に確認で<YES>を押します。

f:id:syotarow:20200108203009j:plain

 

10)日付と時刻設定

これは初めて見たUIですね。今回は<SKIP>を選びます。

f:id:syotarow:20200108124354j:plain

こっちも<SKIP>を選びます。

f:id:syotarow:20200108124400j:plain

11)起動時のサービスを選択

起動時に有効にしたいサービスを選択します。後でrc.confを修正すれば良いのでこのままで問題ありません。

f:id:syotarow:20200108203158j:plain

 

 

12)SYSTEM HARDENIN画面

これは主にセキュリティ関連の選択っぽいですね。初めてみました。

今回はデフォルトのままで<OK>を選択。

f:id:syotarow:20200108203311j:plain

 

 
13)ユーザアカウントの追加

必要に応じてユーザアカウントを作成します。

f:id:syotarow:20200108203630j:plain

 

14)Final Configuration画面

最後の確認画面です。設定漏れがあればここから再度設定できます。今回は[Exit]を選択してOKで進みます。

f:id:syotarow:20200108203746j:plain

 
15)完了画面

インストールをこのまま終えるか、シェルを起動して個別設定を行うかを聞かれています。loader.confに追記したい設定等があればここでシェルを起動します。今回は何もしないので、<No>を選択します。

f:id:syotarow:20200108203913j:plain

 

<Reboot>を選択してサーバー機を再起動させます。お疲れ様でした。

インストールCDが挿入されたままだとCDブートしてしまいますので、起動時にCDを抜くことをお忘れなく。

f:id:syotarow:20200108124514j:plain

 

以上でインストールは完了です。

問題無くインストールが成功していれば、起動時にはデーモン君がお出迎えしてくれます!次回はgmirrorを利用したソフトウェアRAIDの構成を構築したいと思います。ではまた。

 

FreeBSDにipfwを導入する 。まずは基本設定編

はじめに

前回ipfwのマニュアルに目を通して、基本的な設定例を確認して用意されている機能の理解を少しだけ掘り下げました。今後は実際のipfwの動作を見ながら、各設定の検証をしていきたいと思います。その為にも、まずは実機で動作する環境までの準備を進めてみたいと思います。という訳で今回はipfwの初期導入の触りをお届けします。

 

インストール参考

https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-ipfw.html

 

全体の流れ

ipfwFreeBSDカーネルモジュールとして含まれているので、インストールをしたりする必要はありません。ざっくりと下記の手順に沿って導入します。

 

ipfwを有効にする時は必ずコンソール上で行いましょう。sshで接続してリモート上で実行すると必ず痛い目に遭います。


1)/etc/rc.firewall のサンプルファイルを複製する。(/usr/local/etc/ipfw.rules等)
2)ipfw.rulesファイルを編集して、ルールを定義する。
3)/etc/rc.confに下記記載して有効にする。

[/etc/rc.conf]
firewall_enable="YES"
firewall_logging="YES"
firewall_script="/usr/local/etc/ipfw.rules"

 4)ipfw起動

# /etc/rc.d/ipfw start

 5)ipfwルール確認

# ipfw -a list

 6)通信のログの確認

# less /var/log/security

 7)何かあった時(停止)

# /etc/rc.d/ipfw stop

 

補足

コピー元のファイル(/etc/rc.firewall)には、firewall_typeが定義されていて下記の種類があります。

使用可能なタイプは次のとおりです。

open:すべてのトラフィックを通過させます。

client:このマシンのみを保護します。

simple:ネットワーク全体を保護します。

closed:ループバックインターフェイスを除き、IPトラフィックを完全に無効にします。

workstation:ステートフルルールを使用してこのマシンのみを保護します。

UNKNOWN:ファイアウォールルールの読み込みを無効にします。

filename:ファイアウォールルールセットを含むファイルのフルパス。

 

これらを利用するには、利用するには、rc.confに下記の様に1行追加しましょう。

firewall_type="open"

 

ここまでがipfwの導入の基本的な手順になります。これからは引き続き設定ファイルを編集していく事で、実際の動作検証を行っていきたいと思います。今日のところはここまで。

FreeBSDでipfwを学ぶ。keep-stateって何ができるか、どう使うか知っていますか?

はじめに

前回の記事ではFreeBSDで使えるファイアーウォールの種類についていくつか調べてみました。それぞれの特徴やメリットを深く掘り下げるには至りませんでしたが、現在はipfwが最有力であることが分かりましたので、引き続きipfwを掘り下げて勉強していきたいと思います。

 

マニュアルを読む

英語は苦手なので翻訳されたサイトで読んで理解を深めていきます。

http://www.yosbits.com/opensonar/rest/man/freebsd/man/ja/man8/ipfw.8.html?l=ja

ファイアウォールの設定、または 規則セット は、1 から 65535 までの番号が付けられた 規則 のリストでできています。パケットは、プロトコルスタック中の多くの異なった場所からファイアウォールに渡されます (パケットの発信元と宛先によっては、ファイアウォールが同じパケットで複数回起動される可能性があります)。ファイアウォールに渡されたパケットは、規則番号の順序で、 規則セット 中のそれぞれの規則に対して比較されます (同じ数がある複数の規則が許可されます、その場合、それらは、挿入された順序で処理されます)。マッチしたとき、マッチする規則に対応するアクションが実行されます。

 

  • 規則セットは、1 から 65535 の番号の規則のリスト
  • 規則番号の順序で、 規則セット中のそれぞれの規則に対して比較される
  • マッチしたとき、マッチする規則に対応するアクションが実行される

「規則セットの番号順に評価されて、マッチした時にルールが適応される」という事ですね。アクション次第だけど基本はマッチした時点で処理を抜けるように設定していく。

 

規則セットが keep-state または limit オプションがある 1 つ以上の規則を含んでいるなら、ファイアウォールには、 ステートフル (状態依存型) の振る舞いがあります、すなわち、マッチにおいて 動的規則 を作成します、すなわち、それらの作成を引き起こしたパケットとして同じ 5 つの組 (プロトコル、発信元と宛先アドレスおよびポート) があるパケットとマッチする規則。生存時間が有限である動的規則は、 check-statekeep-state または limit 規則の最初に生じた時点でチェックされ、正当なトラフィックのみをオンデマンドで、ファイアウォールをオープンするために通常使用されます。

いきなり難しそうなのが出てきましたね。

  • 動的規則
  • ステートフルの振る舞い

「正当なトラフィックのみをオンデマンドで…」という表現から察するにセキュリティ面に配慮した機能になりそうな印象。このまま「使用例」の部分を見てみましょう。

 

最初に効率良く (動的規則を用いずに) アクセスを制限する方法は、次の規則を用いることです。

 

ipfw add allow tcp from any to any established
ipfw add allow tcp from net1 portlist1 to net2 portlist2 setup
ipfw add allow tcp from net3 portlist3 to net3 portlist3 setup
...
ipfw add deny tcp from any to any

また知らない用語が出てきました。setupestablishedは何でしょう。

setup

SYN ビットがセットされているが ACK ビットを持たない TCP パケットに適合します。これは、“ tcpflags syn,!ack”の短縮形です。

established

RST か ACK ビットがセットされている TCP パケットに適合します。

なるほど。TCPパケットに関しては、

setupを使う事でSYN ビットをチェックする。

established を使ってRST・ACK ビットを早期に適合させる。

というやり方が効率的なんですね。

 

verrevpathantispoofsetdscpは後で見るとして、次の「動的規則」へ。

 

にせの TCP パケットを含む怒涛の攻撃 (flood attack) からサイトを保護するために、次の動的規則を用いた方が安全です。

 

ipfw add check-state
ipfw add deny tcp from any to any established
ipfw add allow tcp from my-net to any setup keep-state
 
これらの規則により、ファイアウォールは、自分たちのネットワークの内側から到着する通常の SYN パケットで始まるコネクションに対してのみ動的規則を組み込みます。動的規則は、 check-statekeep-state または limit 規則の最初の発生に遭遇したときにチェックされます。規則セットのスキャン量を最小にするために、 check-state 規則は、規則セットの最初のほうに置くことになるのが普通です。実際の燃費は、変動します。

動的規則が出てきましたね。さっきの難しそうだった箇所。

keep-stateはセキュリティを考慮して利用するもの」という認識でしたが、check-stateは効率よく規則セットを捌く為に利用するように読み取れますね。念のためkeep-stateの説明を見てみましょう。

 

keep-state

適合する際に、ファイアウォールは、動的規則を作成します。作成される規則は、デフォルトでは、同じプロトコルを使用している発信元と宛先 IP/ポート間での双方向のトラフィックに適合するような動作となります。この規則には、有限の生存時間 ( sysctl(8) 変数の集合により制御されます) があり、生存時間は、適合するパケットが見つかるたびにリフレッシュされます。

 

つまりここでの設定は、

・keep-state 利用して双方向の通信を一時的に一定時間許可する。

established を利用して不正なパケットを遮断する。

check-state を利用して効率的に規則セット捌く。

という事ですね。

 

ユーザが開ける接続数を制限するには、次のタイプの規則を使用可能です。

ipfw add allow tcp from my-net/24 to any setup limit src-addr 10
ipfw add allow tcp from any to me setup limit src-addr 4
 
ステートフルな規則は、怒涛の SYN 攻撃により極めて大量の動的規則を作ってしまい、サービス不能攻撃を受けることになる可能性があります。

「動的規則」のサンプルの設定をしてしまうと全TCPパケットに適応される規則なので、全規則を動的規則とするとサーバー側の負荷が大きくなって機能が停止する恐れがある、という事のよう。もともとは偽パケット(ACKフラッド攻撃)を遮断する為にしてる設定だったけど、「SYNフラッド攻撃」を受けるとipfw側でハングしてしまう恐れがあるという事なのかな。そのために接続数にlimitを設けて「SYNフラッド攻撃」にも備えよう、という事でしょうか。

 

ちょっと理解が進んだので戻って「ステートフルファイアウォール」の項目へ戻ってみます。

 

動的規則の典型的な使い方は、ファイアウォールの設定を閉じた状態にしておきつつ、内部ネットワークからの最初の TCP SYN パケットに、そのフローに対する動的規則をインストールさせ、そのセッションに属するパケットがファイアウォールを通過できるようにするというものです。

 

ipfw add check-state
ipfw add allow tcp from my-subnet to any setup keep-state
ipfw add deny tcp from any to any

これが「動的規則」の基本形なんですね。最初にこっちを見るべきだった。。

・keep-stateを使う事で一時的に特定のセッションのパケットを双方向に許可する。

・ただしそれ以外のパケットは遮断する。

 

一時的に特定のパケットを動的に許可する事ができる。これがkeep-stateを使うポイントになるのでしょうか。奥が深いですね。

 

同様なアプローチが UDP に対しても使えます。内部から来た UDP パケットに動的規則をインストールさせ、その応答がファイアウォールを通過するようにします。

 

ipfw add check-state
ipfw add allow udp from my-subnet to any keep-state
ipfw add deny udp from any to any

これらのサンプルでは、内部から外部へアクセスした際のレスポンスを一時的に許可する目的でkeep-stateを利用する事で「セキュアな環境を維持しよう」としている訳ですね。動的規則の便利さがやっと理解できました。(あってるのかな?)

 

今日はここまで。マニュアルを読み進めるだけでも奥深くとても勉強になりますね。まだまだ実際の設定には至っていないので道のりは長いですが、引き続き勉強を進めます。もし理解が誤っている点があればご指摘頂けると助かります

 

 

 ※参考

DDoS攻撃の主な攻撃手法8つの特徴をまとめてみた

https://www.shadan-kun.com/blog/measure/1426/

 

FreeBSDで使えるファイアーウォールって何があるの?

はじめに

ファイアーウォールと聞くと、CentOSが大人気の令和の時代、 iptables かfirewalld が頭に浮かぶところでしょうか。もしかしたらiptables自体もレガシーと言われかねない時代になってるのかも?豊富なリソースがあるのは良い事なんですが、どんどんと進化をしているものですね。

 

業務で関連するOSで一部FreeBSDも管理しており、さてどうしたものかと色々と調べる事数時間。どうやらこちらも歴史があって色んなソフトウェアが存在しているようです。ネットワーク周りにそこまで詳しくない自分の勉強の為にも、少し勉強していきながらメモを残していこうかと思います。

 

FreeBSDにはどんなファイアーウォールが存在するの?

FreeBSDでファイアーウォールの導入をするには、複数の選択があります。私が観測したもので下記の3種類です。

インターネット上にある記事を見る前にまずはマニュアルを

 

「第30章ファイアウォール

https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls.html

 

色々とあって選べるのは有難いようで迷う所、詳細を見てみましょう。

pf

https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-pf.html

FreeBSD 5.3以降、OpenBSDPFファイアウォールの移植版が ベースシステムの統合部分として含まれています。 PFは、サービスの品質(QoSを提供するALTQ(代替キューイング)をオプションでサポートする完全なフル機能のファイアウォールです 

 

ipfw

https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-ipfw.html

IPFWは、IPv4と IPv6の両方をサポートするFreeBSD用に記述されたステートフルファイアウォールですカーネルファイアウォールフィルタールールプロセッサとその統合パケットアカウンティング機能、ロギング機能、NATdummynet(4)トラフィックシェーパー、転送機能、ブリッジ機能、およびipstealth機能のいくつかのコンポーネントで構成されています 

 

ipfillter

https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-ipf.html

IPFILTERIPFとも呼ばれ 、クロスプラットフォームオープンソースファイアウォールであり、FreeBSDNetBSDOpenBSDSolaris ™ などのいくつかのオペレーティングシステムに移植されています。

IPFILTERは、ユーザーランドプログラムによって制御および監視できるカーネル側のファイアウォールおよびNATカニズムです。ファイアウォールルールはipfを使用して設定または削除でき、 NATルールはipnatを使用して設定または削除 でき、IPFILTERカーネル部分の実行時統計はipfstatを使用して出力でき、 ipmonは IPFILTERアクションをシステムログファイルに記録できます。

 

どれも良さげな事ばかりでどれが標準なのかよくわからないですね。どれが良く選ばれてるのかネットの情報を探ってみたいと思います。

 

第115回 blacklistd(8)を使ってsshd DoS攻撃を防止する方法 ipf編

https://gihyo.jp/admin/serial/01/bsd-yomoyama/0115

FreeBSDでこれから新しくファイアウォール機能を使う場合には,FreeBSDネイティブで性能が期待できるipfw(4)か,OpenBSD由来でなにかと便利なpf(4)かどちらかを選ぶというのが現在では主な選択肢ではないかと思います。ipf(4)はこれまで使ってきたipf(4)のルールがあるため継続して利用したいといった場合に使うことが多いのではないかと思います。

 

間もなく登場! FreeBSD 10.0、IT技術者なら知っておくべき11の新機能

https://news.mynavi.jp/article/20131230-s_bsd/5

FreeBSDにおいてもっとも開発が進んでいるファイアウォールipfw(8)だ。FreeBSDファイアウォールを使う場合はipfw(8)を選択するものだと考えておいて問題ない。ipfw(8)はマルチコア/メニーコアにおいて性能が発揮できるようによく開発が進められており、動作も軽快。

一方、OpenBSDで開発されたpf(4)もFreeBSDでは人気がある。pf(4)はフィルタルールの記述がわかりやすく強力な指定を記述できる。FreeBSD 10のpf(4)はさらにマルチコアへの対応も進められ、従来のバージョンよりも性能が発揮できるようになっている。

ただし、FreeBSDのpf(4)を使う場合にはいくつか検討した方がよい点がある。まず、性能の面ではipfw(8)の方が優れていること、ロバスト性の面でもipfw(8)がよいと見られていることだ。仮想環境で動作させた場合もipfw(8)の方が堅牢に動作する傾向がある。pf(4)を採用する場合には高負荷時にpf(4)がちゃんと動作するか検証した上で採用した方がよいといえる。

 

どうやら「ipfwを選んでおけば間違い無いだろう」という感じですね。またネットの記事のサンプル数を見ていくと確かにipfwの情報が一番豊富な印象も。という訳で、確実そうなipfwをこれから勉強していきたいと思います。

 

 

 

「失敗から学ぶRDBの正しい歩き方」を読みました

こんにちはしょうたろうです。

普段ブログは書いてないのですが、Twitterで書評希望の声を頂きましたので、少しばかり感想を書いてみます。

 

まず私個人の経歴ですが、ウェブ制作の受託開発を5年ほど。その後は同じ会社で、自社サービスのウェブシステムの開発を7年ほどやってきました。

 

いわゆるSIと呼ばれるようなカチッとした?システム屋さんとは近そうで実は遠い。ウェブ屋さんです。流石に長年やってますのでウェブの基礎知識はそこそこあるとは自負していますが、いわゆる「システム開発者」としての基礎は結構抜け落ちてるんじゃないかなーと。見る人からみればなんちゃってエンジニアに属する残念な人でもあるかなと、心の片隅で自負?しております。

 

f:id:syotarow:20190326204837p:plain

 

さて前置きはこのあたりで、「失敗から学ぶRDBの正しい歩き方」ですが読んだ感想は、

・読みやすい

・わかりやすい

・心が痛い

です。

 

読みやすい

技術書は各セクション毎に深堀りした内容を詰め込むタイプが多いですが、この本はアンチパターンの事例毎に章が分かれている。またありがちで陥りがちなストーリーを織り交ぜて説明されている。この事から文章がすっと頭に入ってきて読みづらさを感じる事なく一気に読めました。また難しい用語や仕組みについては深く掘り下げすぎず、概念を伝える程度に抑えた配慮が見られ、小難しくなることなく読み進められました。

 

わかりやすい

具体的なアンチパターンの事例に対して、それが何故ダメなのか、そしてどういう対応を取るのが理想なのか、を簡潔に記載しています。かと言って初心者向けとは感じませんでした。具体的な解決方法となるツールや技術名のキーワードを場面場面で紹介しており、この選定が的確である点が、読んでいて気持ちよい展開につながってると感じます。昔からある技術や最近のトレンドのツールも紹介されており、DBに関連する便利なツールを一通り抑える事ができる本書は知識の溝を埋める役割もあると感じます。

 

心が痛い

これですね。。たぶん私のようなウェブ屋さんが読んだら、みんな涙なしでは読めない本。エンジニアにとっての懺悔本になるのでは?と感じました。これまでデータベースについて深く学ばないまま、ウェブアプリを作り続けてきてしまった人にとっては…読んでいて心が休まらないかもしれない。「え!それもアンチパターンだったの!?」という章もちらほら…。

 

でももう大丈夫!そーだいさんから学んだ事で、これからは罪の意識を持ちながらアンチパターンを使う人になる事ができました(これも成長!

 

 

以上が所感です。

この本の対象者としてはわずかでもDBを使った開発経験がある人の方が理解できる場面が多く、面白い本かなと感じます。またある程度経験を積まれてる方でもロックやインデックスの仕組みの章などは大変興味深く、参考になるのではと思いました。また随所に、更に詳しく知りたい人は…といった風に書籍等の紹介があり、ステップアップを目指す人への配慮?サポート?もしっかりとされています。とても丁寧な本(著者さん)なんだろうなと感じました。

 

会社に1冊置いておいて置くことで、コードレビューの際に「これアンチパターンだよ」という第三者の声として使えますので、「知識の底上げと統一」からメンバーのスキルアップにつながるとともに、プロダクトの品質向上にも貢献できる、素晴らしい一冊ではないでしょうか。