LAB NOTES– category –
-
LAB NOTES
Protocol Buffersのschema evolution設計|field番号・reserved・unknown field・Python
Protocol Buffersはfield名ではなく番号でdataを運ぶ Protocol Buffers(Protobuf)は、.protoでmessageのfield、type、番号を定義し、compilerが各言語向けのclassを生成するschema付きserialization形式です。JSONのようにfield名を毎回送るのではなく、... -
LAB NOTES
CBORで構造化データを小さく交換する設計|型・tag・決定的encoding・Python
CBORはJSONに近い構造をbinaryで運ぶ CBOR(Concise Binary Object Representation)は、map、array、整数、文字列、真偽値、NULLなどの構造化dataをbinaryへserializeする形式です。RFC 8949では、小さなmessage、実装codeの小ささ、拡張性が設計目標に挙... -
LAB NOTES
CSVを表計算へ安全に渡す設計|数式注入・先頭ゼロ・型崩れ・Python
CSVの構文が正しくても表計算では壊れる CSVは、行とfieldを区切って表形式のdataを交換するための単純な形式です。しかし、CSVをExcelやGoogle Sheetsで開くと、各cellは単なる文字列として保持されるとは限りません。先頭が=の文字列は数式、00127は数値... -
LAB NOTES
APIの条件付きGETで無駄な転送を減らす設計|ETag・If-None-Match・304
条件付きGETが解決すること APIを定期取得する処理では、データが変わっていないのに毎回同じJSONを転送し、検証し、DBへ書き直すことがあります。数十件なら目立ちませんが、BOM、CAD属性、商品マスターのように表現が大きくなると、帯域・CPU・書き込み... -
LAB NOTES
SQLite schema migrationを安全に設計する|user_version・transaction・段階移行
schema変更を手作業にすると再現できない SQLiteは単一fileで配布しやすいため、デスクトップツール、CAD補助アプリ、計測端末、ローカルWebツールの保存先として使われます。しかし、運用開始後にcolumn、constraint、index、参照関係を変更すると、利用... -
LAB NOTES
SQLite同時更新を壊さないtransaction設計|BEGIN IMMEDIATE・WAL・busy_timeout・Python
SQLiteの同時更新で何が壊れるのか SQLiteは小規模なWebツール、デスクトップアプリ、計測端末、CAD補助ツールなどで扱いやすいデータベースです。ただし、接続が複数になると「同時に読める」と「同時に書ける」を混同しやすくなります。 代表的な事故は... -
LAB NOTES
XML名前空間を壊さない設計|QName・XSD・Python検証
XML連携はtag名だけを見ても設計できない XMLはCAD交換、部品表、受発注、装置設定など、長く運用されるデータ連携で使われます。要素を入れ子にでき、属性や名前空間も持てるため表現力がありますが、partやidという文字列だけを見て処理すると、別仕様の... -
LAB NOTES
YAMLをJSONへ安全に変換する設計|暗黙型・重複key・alias・Python
YAMLを読めてもJSONへ安全に渡せるとは限らない YAMLは設定ファイルや人が編集するデータに向き、JSONはAPIやDB連携で広く使われます。そのため「YAMLで入力し、JSONへ変換して他systemへ渡す」構成は便利です。しかし、構文解析に成功しただけでは安全な... -
LAB NOTES
SQLiteを安全にバックアップする設計|Online Backup API・整合性検査・復元テスト
バックアップは「ファイルがある」だけでは成立しない SQLiteは1ファイルで扱えるため、稼働中の.dbをそのままcopyすればバックアップになるように見えます。しかし、copy中に書き込みtransactionが進むと、copy先に古いpageと新しいpageが混在するおそれ... -
LAB NOTES
JSON Schemaで入力契約を固定する設計|型・必須・定義再利用・Python検証
JSONを受け取れただけでは入力契約にならない JSONはAPI、設定ファイル、CAD属性などで広く使われます。しかし、JSONとして構文解析できることと、業務データとして正しいことは別です。 たとえば部品データのmass_kgが文字列になっている、必須のpart_id... -
LAB NOTES
SQLiteの外部キーで参照切れを防ぐ設計|PRAGMA・CASCADE・遅延制約
外部キーが解決する「存在しない参照先」の問題 部品表、顧客と注文、記事とカテゴリのように、実務データは複数の表をIDで結びます。ところが、子側の表へ存在しないIDを保存できる設計では、参照先を削除した瞬間に「材料が不明な部品」「顧客が存在しな... -
LAB NOTES
CSVに型と参照関係を与えるCSVW設計|metadata・datatype・foreignKeys
CSVだけでは型と関係を共有できない CSVは、表計算ソフト、Python、データベース、CADの間で使いやすい交換形式です。しかし、CSVファイルだけを渡しても、各cellが整数か文字列か、空欄をNULLとみなすか、どの列が主キーかは伝わりません。 たとえば部品...