【#も読】マイナポータルのCSV、読みやすいコード、Pythonの定数(@shunsock)のトップ画像

【#も読】マイナポータルのCSV、読みやすいコード、Pythonの定数(@shunsock)

投稿日時:2025/03/25 03:00
しゅんそくのアイコン

ファインディ株式会社 / データエンジニア

しゅんそく

Xアカウントリンク

「あの人も読んでる」略して「も読」。さまざまな寄稿者が最近気になった情報や話題をシェアする企画です。他のテックな人たちがどんな情報を追っているのか、ちょっと覗いてみませんか?


マイナポータルのCSV

Xで、マイナポータルで出力されるCSVが、CSVと言えるのか、と話題になっていました。

たしかに、一般的なフォーマットではないので正しい形式かRFCを読んでみました。

RFC 4180 - Common Format and MIME Type for Comma-Separated Values (CSV) Files 日本語訳

確認したところ、CSV形式には正式な仕様はないとのことでした。

CSV形式にはさまざまな仕様と実装がありますが(Ex。[4]、[5]、[6]、[7])、CSVのさまざまな解釈を可能にする正式な仕様はありません。ファイル。このセクションでは、ほとんどの実装が続くと思われる形式を文書化します。

紹介されているABNFを見る限り、マイナポータルのCSVはValidでしょう。

   file = [header CRLF] record *(CRLF record) [CRLF]
        
   header = name *(COMMA name)
        
   record = field *(COMMA field)
        
   name = field
        
   field = (escaped / non-escaped)
        
   escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
        
   non-escaped = *TEXTDATA
        
   COMMA = %x2C
        
   CR = %x0D ;as per section 6.1 of RFC 2234 [2]
   DQUOTE =  %x22 ;as per section 6.1 of RFC 2234 [2]
        
   LF = %x0A ;as per section 6.1 of RFC 2234 [2]
        
   CRLF = CR LF ;as per section 6.1 of RFC 2234 [2]
        
   TEXTDATA =  %x20-21 / %x23-2B / %x2D-7E

確かに、CSVのようなheaderとrecordで構成される形式では、無意識のうちに第一列にカラムは入らないと考えがちです。しかし、正式な仕様がなく、データ形式として正しいのであれば、安易に非難できないのかなと思いました。

読みやすいコード

「読みやすいコード」を依存グラフで考える

コードの要素の依存をグラフとして表現することで、コーディングのベストプラクティスとされるものの理論的背景が見えてとてもよかったです。

本編ではなぜimmutableな変数の方がmutableな変数より良いのかやglobalな値が良くない理由などがかかれていましたが、システム設計レベルでも同様に考えてよさそうだなーと思っています

Pythonの定数

友人から「コードベースがでかくてmypy入れられないんだけどどうしたらいいかな?」と聞かれたので、調べてZennの記事にまとめました。紹介したなかだとenumかdataclassを使うと良さそうです。

Pythonで定数を扱う方法 (mypy無し版)

from dataclasses import dataclass


@dataclass(frozen=True)
class Constants:
    PI: float = 3.14
from enum import Enum


class Constants(Enum):
    PI = 3.14
29
29