Software Design の2022年1月号について、
- ざっくり内容紹介
- 個人的に気になった記事やポイント
をまとめている記事です。
サマリー記事の一覧はこちら。
特集①:TerraformではじめるAWS構成管理
- Terraformの入門系コーナー。インストールからはじまる
- ほぼ書くことない
- 3章のチーム活用のところでtfenvでのバージョン管理など実用的な話題が挙がっていた
- 他にもasdfというのがあるらしい、terraform以外にも対応ツールが色々ある
- その他stateファイルのS3管理など
- DynamoDB lockというものがあるらしい
- CI/CD
- CodeBuild、CodePipeline、Terraform Cloud、GitHub Actions
- 4章の「ハマりどころ紹介」
- その前に使いどころ紹介、これはよい
- 金太郎飴なシステムで使う
- リスクの高い作業で使う
- チームで使う
- ローカル値を使おう
- 複数リソースの作成はcountでループ処理しよう
- 環境依存の値は変数で
- variavleはわかりやすく(いるこれ?)
- 関数をがんばろう
- element:配列内の任意のインデックス要素をピックアップできる
- format:変数と文字列の結合
- distinct:リストの重複を削除、mapだとmapで指定した値をだけをリストで返す
- concat:リストの結合
- あといつものworkspaceとmoduleの話
- その前に使いどころ紹介、これはよい
特集②:Pythonで自動化スクリプト
- シェルスクリプトは素晴らしい。少ない労力で大きな成果が得られる。でもチーム開発には微妙だよね… とのこと
- データ管理が苦手
- 配列しかない
- 長期管理はグローバル変数しかない、クラスもない
- 実装方法の個人差が大きい
- 特定の文字列を削除するだけでも4パターンある
- sedしか知らぬ…!
- 特定の文字列を削除するだけでも4パターンある
- Linux(UNIX)に詳しい人は多くない
- 定形作業の自動化から関心が離れていくという副作用
- データ管理が苦手
- ほならPythonでやろう!
- ファイル操作
- os.pathとPath.pathlib
- メソッドチェーンできるしパス区切り文字の自動性などPath.pathlibのほうがよいとのこと。なるほど。
- openだのcloseだのcopy(2)だの
- os.pathとPath.pathlib
- コマンドラインツールを作る
- オプション設計
- argparserとか
- ユーザーからの入力有無
- 標準入力(input())を受け付ける、その待機など
- while True: で囲んでinput()で分岐
- 標準入力(input())を受け付ける、その待機など
- デバッグログ
- 標準モジュールのloggingを使う
- 設定ファイル
- ユーザーが触れるものという前提があるのかないのか考える必要がある
- それをYesとしてこの記事ではtomlを採用していた。非エンジニアならどれも変わらん気はするがたしかに見やすいかな…?
- ユーザーが触れるものという前提があるのかないのか考える必要がある
- i18n
- ローカライズが必要になるほどのものをお手軽スクリプトで作る可能性があるのか?と思わなくもない
- ドキュメント
- これと下の配布方法、なんか内容がカットされてた?
- 配布方法
- 普通にファイル配る以外になにかあるんだろうか。WindowsだとPython入ってないと使えないとかはたしかにありそう。でももともとがシェルスクリプトの代替ならそれは考慮しなくてもいいか
- でもmacOSの標準Pythonって2系よね… あれ、今は違うっけか?
- 普通にファイル配る以外になにかあるんだろうか。WindowsだとPython入ってないと使えないとかはたしかにありそう。でももともとがシェルスクリプトの代替ならそれは考慮しなくてもいいか
- オプション設計
- あとはAPIなど。
- これはシェルスクリプトでやろうとしてたことの範囲の外ではという気もいたしますね。
- ファイル操作
Extra Feature
- リアルタイム通信アプリを支える技術「近年のリアルタイム通信への要求」
- いま楽しみなコーナー。今回はQUICとRUDPについて
- WebSocketをスケールしたい場合サーバー自体を増やす必要がある、でもクライアントは1個にしか繋げないので増やされても意味がない
- 例えばRedisを使って非同期にする
- 知らなかったけどPub/Subの仕組みらしく、トピック購読している別のクライアントに情報を共有するということのよう
- でもこれRedisがボトルネックになるよん~
- このあたりWebSocketはTCPを使っているところに絡んでくる。パケット詰まりしてしまうのをHead-of-line blockingという
- WebRTCはUDP
- 例えばRedisを使って非同期にする
- QUICははHTTP/3で標準化されているプロトコル
- 末尾Pじゃないのね!!!!
- トランスポート層
- ベースはUDP、輻輳や再送の制御(WebSocket時にTCPがやってたこと)やTLS1.3相当のセキュリティも取り込んでいる
- なんかHTTP/2のときよりストリームというのがいっぱいあるらしく、パケづまりしたとしても問題は受けにくいよ、的なことらしい
- RUDPは特定用途向け
- Reliable UDP(信頼性のあるUDP)ってそれもうUDPじゃないんじゃ…
- なんか難しい話が多かったけど、なんでもオンライン対戦ゲームの開発などでかなり昔(1999年頃~)から開発されていたらしい
- 標準化はされていないため実装はばらつきがある
- 主な特徴
- 再送機構による信頼性向上
- パケット到達順序の保証
- スライディングウィンドウ的送信
- なにこれ:受信側からは受け取ったデータについて受信確認を返信するが、送信側では到着が確認できた容量の分だけウィンドウを後ろへずらし、ウィンドウの範囲内にある未送信のデータを連続的に次々に送出する
- RUDPとUDPを選択できる
- ブラウザで使う場合、Sandbox化されて動作するという性質上JSからTCPやUDPのソケットを開けないため、HTTP/3を通じてQUICを使うことになるとのこと
- わからん
Column
- 分解教室
- ハードを分解して色々見るというコーナー、がっつり興味範囲だがソフトウェア関係なかったので取り上げるのは初めて。
- 今回は最新のApple製品の分解で、基板とか見えたので目に留まった
- 2021年のM1 Macはファン2つで丸く大きくくり抜いたメイン基板の掲載。想像より部品の数や密度はかなり小さかった。あの化け物みたいなスペックは本当にチップが頭おかしいということなのかな、なんで同じ人類でこんなに差が出るんでしょうね。
- ハードを分解して色々見るというコーナー、がっつり興味範囲だがソフトウェア関係なかったので取り上げるのは初めて。
- エンジニアも知っておきたい法律知識「フリーランスとして働くエンジニアが知っておきたい、フリーランスガイドライン」
- 長いので要約しないが、ここに何かが書いてあったことはメモしておく
- チームで仕事をする「なぜ、ソフトウェアプロジェクトは人数を増やしてもうまくいかないのか」
- プロジェクトの工期は工数の3乗根に比例する、とよく言われるらしい
- なんか計算で論理的な説明をする記事だった、面白そうな話題だと思ったがけっこう真面目な話だった
そのほか
- Python試験情報局
- Python3.10についての記事、ちょうど少し前に新機能リリース内容などを見ていたので読んだ
- match文がついに追加されたというのがたしかに大きくて使ってみたいと思っていた
- あと全然関係ないけどバージョン番号のチェックをアプリケーションの中でしていたとき、「3.9 -> 3.10」で数字処理失敗して死んだみたいなネタ(実例?)を思い出した。アルゴリズム問題でもよく見るパターンですね
- ITエンジニア必須の最新用語解説「NewSQL」
- Noの次はNewですかい
- と思ったら従来のRDBMSとNoSQLのハイブリッド型らしい
- RDBMSはACIDでデータ一貫性が強いが水平方向のスケールに弱い、NoSQLはその逆、ということで一長一短だった→新しいものほしいという流れっぽい
- ACIDトランザクションもありつつ分散システムがある、SQL書ける
- Noの次はNewですかい
Software Design 2022年1月号
この号の分のみ単品で読みたい方は、普通にAmazonで買うのがおすすめ。
紙 or 電子書籍で選べます。