写真提供:マイナビニュース

写真拡大

○「国民の祝日」データを年ごとに切り分ける

先ほど(執筆時)興味深いツールが公開された。GitHub上の「RoliSoft/WSL-Distribution-Switcher」は、WSLのLinuxディストリビューションをDocker Hubを使って置き換えるスクリプトである。Pythonベースで記述しており、Debian GNU/LinuxやFedora、CentOS、openSUSEなどに変更できるという。今回は時間の都合で試せなかったが、興味をお持ちの方は是非試してほしい。

さて、内閣府は国民の祝日をWebページ上で公開し、本稿執筆時点では2016年(平成28年)から2018年(平成30年)までのデータをCSVデータとして公開中である。これは国民の祝日に関する法律の一部を改正する法律(平成26年法律第43号)を施行し、2016年から「山の日(8月11日)」が加わったためだ。

問題はそのCSVファイルである。Microsoft Excel上で単に祝日名称と祝日月日を入力し、そのままCSV形式で出力したと思われるが、X方向に2016年、2017年、2018年と並んでいるため、1行に3年分の祝日が並ぶという通常ではあまり考えられないものだった。2017年2月前後の公開直後は一部のSNSで話題になったため、ご存じの方も多いことだろう。

残念ながら筆者は、その時のCSVファイルを破棄しているため、お見せすることはできないが、その後も改善が進んで、「2016-01-01,元日」と1行ごとのデータに置き換えられた。だが、Webサーバーのディレクトリ名は「shukujitsu」、CSVファイル名は「syukujitsu.csv」。"shu"と"syu"が混じるなど目を伏せたくなるようなミスも多いものの、改善する姿勢がある点は評価したい。

だが、3年分のファイルがひとまとめになると、他のシェルスクリプトで使う際も加工が必要になるだろう。そこで今回は「国民の祝日」CSVデータを年ごとに切り分けるシェルスクリプトを作成した。いつもどおり任意のテキストエディターに以下の内容を入力し、必要に応じて出力先のパスなどを変更してから、「chmod」コマンドなどで実行権限を与えて動作を確認してほしい。

本シェルプログラムを実行すると、Webサーバー上から内閣府が用意したCSVファイルを取得し、「2016.csv」「2017.csv」「2018.csv」の3ファイルをCSV形式のまま、デスクトップに出力する。詳しくは後述するものの、出力するファイルの文字コードはUTF-8に変換しているため、そのままではExcelで開くことはできない。

それでは、順にシェルスクリプトの内容を紹介しよう。まず3行目でダウンロードするCSVファイルのURL、4〜6行目で出力ファイル名を変数で定義し、8〜10行目で一部の出力ファイルが残っている場合は、すべて削除している。続いて12行目ではcurlを使ってCSVファイルを取得し、文字コードを変換するiconvを使って変換した内容を配列「Array」に格納した。

13行〜23行目のforは配列Arrayに格納した数だけループを回し、格納した文字列の先頭が「2016」なら15〜16行目、文字列の先頭が「2017」なら17〜18行目、文字列の先頭が「2018」なら19〜20行目に振り分けて、そのまま内容を出力している。

前述のように出力したCSVファイルをBash上(UTF-8)ではなく、Windows 10上のExcel上(シフトJIS)で使う場合は、12行目の「Array=($(curl -s $URL | iconv -f SJIS -t UTF8))」を「Array=$(curl -s $URL)」に変更して、iconvの処理を削除すればよい。

阿久津良和(Cactus)

(阿久津良和)