レガシーコードからの脱却を読み終わりました

レガシーコードからの脱却を一通り読み終えたので書評です。

O'Reilly Japan - レガシーコードからの脱却

評価

★★★★★★★★☆☆(8/10)
評価の目安はこちら

オススメできる人

  • サービスを運用するエンジニア
  • チームのコードをよくしたいリーダー

コードをバリバリ書くタイプではないリーダーの人でも
チームとしてどう言うことをすれば改善できるのかを知るために良い書籍だと思います。

オススメできない人

特になし。

感想

タイトルの通り、レガシーコードからどのようにして脱却するための手法が書かれています。
ラクティスが9つもありますが1つ1つの導入自体は難しくないので少しずつ試せる内容になっています。

サービスの運用をする上ではコードの改善を進めながら進めていく必要がありますが、
その改善を進めていく上での道標となるような内容だと思いました。

運用設計の教科書を読み終わりました

運用設計の教科書を一通り読み終えたので書評です。

運用設計の教科書 ~現場で困らないITサービスマネジメントの実践ノウハウ:書籍案内|技術評論社

評価

★★★★★★☆☆☆☆(6/10)
評価の目安はこちら

オススメできる人

  • 受託開発に携わっているエンジニア
  • 運用が回っていなくて疲弊しているエンジニア

オススメできない人

  • サービス系の運用を行っているエンジニア

サービス開始後は運用については運用改善として扱っているようなので、この本の対象から外れていると思います。
ただ、考えるべきことの参考にはなると思います。

感想

業務システムを構築するプロジェクトにおいてどのように 運用設計をしてテストと引き継ぎをするかといった内容になっています。

開発も運用も同じメンバーでやるようなチームの場合だと少し当てはめにくいかなと感じました。
それでも運用すべき項目として当てはめられる部分もあるので読んで損はないと思います。
運用となった時にどのような運用をすればいいかの洗い出し方や管理方法など参考になると思います。

運用系の教科書的な書籍はあまりみたことがないのでこの本はその名の通り教科書として使えると思います。

データ指向アプリケーションデザインを読み終わりました

データ指向アプリケーションデザインを一通り読み終えたので書評です。

O'Reilly Japan - データ指向アプリケーションデザイン

評価

★★★★★★★☆☆☆(7/10)
評価の目安はこちら

オススメできる人

オススメできない人

  • データストア周りの初心者 情報量が多いので初心者が読むものではないと思います。

感想

RDBMSやNoSQLなどデータを処理するためのライブラリやツールについての包括的な内容が載っています。

ページ数が660ページもあるので読んで全部理解できたかというと怪しい部分はあります・・・
個人的には第II部分散データのところが非常に参考になりました。
非機能要件を実現する上で考えるべきことがいろいろ載っているなと感じました。

RDBMSやNoSQLなどバックエンドを知るためには良い本だと思いました。
ただ、ページ数が多いので一回で理解するというよりはデスクの横に置いといて都度参照するというのが良さそうです。

mongoimportでネストされたオブジェクトとしてインポートする

概要

mongoimportでネストされたオブジェクトとしてインポートするためのメモです。

前提条件

  • MongoDB v4.0.10

今回使用するデータは公式ドキュメントのサンプルセットの中から、Inside Airbnbのデータを使わせていただきました。

元々は勉強用コードで見つけた内容なのですぐに試したい環境が欲しい場合はここを参照してください。
(勉強用に色々と触っているので内容は変わると思います)

結論

下記のように.で区切るとネストされたオブジェクトが作成されます。

listingId.int32()
date.date(2006-01-02)
available.string()
price.value.string()
price.adjusted.string()
nights.minimum.int32()
nights.maximum.int32()

インポートしたデータの取得結果です。
ネストされていることがわかりやすいように整形しています。

{
  "_id" : ObjectId("5d3ba3182101bb0c912c29d1"),
  "listingId" : 1600758,
  "date" : ISODate("2019-06-28T00:00:00Z"),
  "available" : "f",
  "price" : {
    "value" : "$3,300.00",
    "adjusted" : "$3,300.00"
  },
  "nights" : {
    "minimum" : 2,
    "maximum" : 7
  }
}

詳細

今回はfieldFileオプションを使って取り込みむのでfieldFileを作成します。
中身は結論で書いた内容と同じです。
columnsHaveTypesオプションを使っているので()つきの部分は型になります。

listingId.int32()
date.date(2006-01-02)
available.string()
price.value.string()
price.adjusted.string()
nights.minimum.int32()
nights.maximum.int32()

次にデータを取ってきます。

$ curl http://data.insideairbnb.com/japan/kant%C5%8D/tokyo/2019-06-27/data/calendar.csv.gz -O
$ gunzip calendar.csv.gz

mongoimportでデータを取り込みます。
コマンドは下記のような感じになります。

mongoimport \
    --db ${DB名} \
    --username ${ユーザ名} \
    --password ${パスワード} \
    --host ${ホスト}:${ポート} \
    --collection ${コレクション名} \
    --type csv \
    --file ${ダウンロードしたデータのパス} \
    --columnsHaveTypes \
    --parseGrace skipRow \
    --fieldFile ${作成したfieldFileのパス}

CSVによるインポートなので--type csvを指定し、
型の指定も行なっているので--columnsHaveTypesとつけます。

CSVの一行目はタイトル行なのでスキップするために--parseGrace skipRowを指定します。
本当は読み取れない行をスキップするオプションなのですが、タイトル行をスキップするために使っています。

実際に自分のローカルで実行したコマンドは下記です。

mongoimport \
    --db single-db \
    --username test-user \
    --password test-password \
    --host 127.0.0.1:27017 \
    --collection calendar \
    --type csv \
    --file /tmp/mongo-data/calendar.csv \
    --columnsHaveTypes \
    --parseGrace skipRow \
    --fieldFile ./single-node/docker/mongodb/csv-fields/calendar.txt

mongodbにログインし、1件数取り出してみるとこんな感じです。

> db.calendar.find().limit(1)

{ "_id" : ObjectId("5d3ba3182101bb0c912c29d1"), "listingId" : 1600758, "date" : ISODate("2019-06-28T00:00:00Z"), "available" : "f", "price" : { "value" : "$3,300.00", "adjusted" : "$3,300.00" }, "nights" : { "minimum" : 2, "maximum" : 7 } }

まとめ

ドキュメントを探してみたのですがネストオブジェクトの方法が見つからなかったので試してみました。
JIRAのISSUEにネストオブジェクトがインポートされないバグがあがっているので、
.で区切った場合にネストされたオブジェクトして扱われるのは仕様っぽいですね。

ゼロからわかる Amazon Web Services超入門を読み終わりました

ゼロからわかる Amazon Web Services超入門を一通り読み終えたので書評です。

ゼロからわかる Amazon Web Services超入門 はじめてのクラウド:書籍案内|技術評論社

評価

★★★★★★☆☆☆☆(6/10)
評価の目安はこちら

オススメできる人

  • AWSを触ったことない人
  • AwSで一から構築したことない人

オススメできない人

「超入門」とあるように一度でも構築したことがある人にとっては目新しいことはないと思います。

感想

私自身はオンプレ環境でしか開発したことがないのでAWSは触ったことないです。
そろそろちゃんと入門しないとなと思って書いました。

数あるAWSのサービスの中からS3/EC2/RDSを使って、
Webサイトやブログを作って覚えていくという内容になっています。
アンマネージドサービスととマネージドサービスについても説明がされています。
構築の手順がキャプチャ付きで説明されているので実際に画面で触りながら試せます。

個人的には各サービスがどのような課金体系なのかが書かれているのが良かったです。
今後、課金体系が変わることはあると思いますが、
大体の課金体系のイメージをつけたかったのでちょうど良かったです。

タイトルの通り入門者には良い一冊だと思います。

分散システムデザインパターンを読み終わりました

分散システムデザインパターンを一通り読み終えたので書評です。

O'Reilly Japan - 分散システムデザインパターン

評価

★★★★★★☆☆☆☆(6/10)
評価の目安はこちら

オススメできる人

  • システム構成について勉強したい人

オススメできない人

  • コンテナの使い方を知らない人

ハンズオンでコンテナを使って構築するのでコンテナの操作に慣れていない人にはオススメしません。
ただ、単純に読むだけであれば問題ないと思います。

感想

パターンごとの概要とハンズオンという形で学習できます。
とはいっても私は通勤の時に読んでいるのでハンズオンは試していませんが・・・

サブタイトルで「コンテナを使った」とありますが、コンテナではなくても適用できる内容だったと思います。
コンテナだからこそやりやすいけど、コンテナではないといけないというものはなかったと思います。

個人的には「コンテナを使ったスケーラブルなサービスの設計」というのがちょっとしっくりこないなぁと。
ハンズオンとしてコンテナを使っているというのであって、コンテナじゃなくてもという感じです。
ただ、内容としては勉強になりました。

MongoDB 解体新書を読み終わりました

MongoDB 解体新書を一通り読み終えたので書評です。

MongoDB 解体新書(Amazonページ)

評価

★★★★★★★☆☆☆(7/10)
評価の目安はこちら

オススメできる人

  • MongoDB初心者

オススメできない人

  • MongoDBを使って運用をしている人

オススメできない人があまり思いつかないので、強いていうならすでに運用している人かなぁと。
サブタイトルで「入門書」と謳っているため運用している人であれば知っていることも多いと思います。

感想

概要、CRUD操作、設定/設計、実装という4部構成です。

概要とCRUD操作ではインストールから操作までとよくある感じの入門書の構成です。
目次を見るとわかるのですがデータベース・コレクションの作成や集計と一括処理もあります。
実際の仕事で使いそうな操作は一通り揃っているのかなという印象です。

設定/設計についてはパフォーマンス、セキュリティ、バックアップといった
実際の運用で必要となる内容が書かれています。
個人的にはこの章が一番知りたいだったので助かりました。

実装部分はJava、Node.jsでMongoDBを使ったコードが載っています。
私自身Javaで簡単なプログラムを書く予定でしたので
この章はささっと軽く流した程度にしてしまったため記憶があんまりないです・・・
雰囲気を掴むには良いかもなぁといった感じです。

運用するにあたって最低限の知識がまとまっていて良い本だと思いました。