(2024-05-08 初稿 )
新NISAが始まって、株を始めた方も多いのではと思う。
筆者も、最近、株をボチボチやっているのだが、最近、株価や為替相場が乱高下して日々の株価が気になっている。
そこで、少しでも楽ができるようにBashを用いて、楽天証券からダウンロードした保有商品一覧ファイル(CSV)から筆者が必要と思うデータを抽出し、エクセルファイル(xlsx)に変換するスクリプトを作ったので記事にする。
なお、CSVファイルの修正、加工方法及びCSVファイルからエクセルファイルへの変換方法については、以下の記事を参照願う。
楽天証券から保有商品一覧ファイル(CSV)のダウンロード
赤丸の「保有商品一覧」をクリック。
赤丸の「CSVで保存」をクリックすると、例えば「assetbalance(all)_20240508_075058.csv」等というファイル名のCSVファイルがダウンロードできる。
ダウンロードしたCSVファイルから必要なデータを抽出、加工
ダウンロードしたCSVファイルのファイル名の変更、必要なデータの抽出、口座名の変更などを行い、自分の使いやすいエクセルファイルに加工する。
ファイル名の加工
上述のとおりダウンロードしたファイル名は「assetbalance(all)_20240508_075058.csv」のようになるので、ファイル名は「rs-20240508_075058.csv」とする。筆者の好みで決めた名前なので、好きに変更願う。
なお、最終的なエクセルファイルは、このページのスクリプトだと「20240508_075058.xlsx」になる。
filename="assetbalance(all)_20240508_075058.csv" csvfilename=rs-${filename#*_}
bashの文字列置換は便利だね。
必要なデータ
必要なデータは人により異なると思うが、一例として筆者は以下のとおりとした。
"銘柄","口座","保有数量","[単位]","平均取得価格","[単位]","現在値","[単位]","時価評価額[円]","評価損益[円]","評価損益[%]"
各自お好きなように変更を。
口座名の簡略化
新しいNISAが始まって、名称も古い「つみたてNISA」、新しい「NISAつみたて投資枠」、「NISA成長投資枠」とやや長い名前が多かったので、短い名前に変更している。
具体的には、「つみたてNISA ⇒ 積立」、「NISAつみたて投資枠 ⇒ 新積立」、「NISA成長投資枠 ⇒ 成長」としているが、この辺もお好みで変更して欲しい。
なお、「特定」はそのまま「特定」で使っている。
IFS='"' read -a vary <<< "$1" #echo "${vary[@]}" case ${vary[7]} in "つみたてNISA") class="積立";; "NISAつみたて投資枠") class="新積立";; "NISA成長投資枠") class="成長";; *) class=${vary[7]} esac
CSVファイルをエクセルファイル(xlsx)に
上記リンクにも記述したが、以下のとおりLibreOfficeを用いてCSVファイルからエクセルファイル(xlsx)を作成する。
# 44 カンマ区切り 34 ダブルクォート # 文字コード 76: UTF-8 60: Windows-932 64: Shift-JIS 72:ISO-2022-JP $ /usr/bin/libreoffice --headless --convert-to xlsx --infilter=xlsx:44,34,76 "$csvfilename"
スクリプトの全体と使い方
上記の処理を含んだスクリプト全体としては、以下のとおりである。
なお、スクリプトの名前は「r-stocks」としたが、お好きなように。
#!/usr/bin/env bash # rakuten stocks list # 楽天証券からDownloadしたcsvファイルを加工、表示 # 2024-04-24 ver0.01 start # 2024-04-29 ver0.03 csv filename and add xlsx file Usage="r-stocks rakuten downloaded stocks list csv file modify and display program [Usage] r-stocks target-csv " CTitle='"銘柄","口座","保有数量","[単位]","平均取得価格","[単位]","現在値","[単位]","時価評価額[円]","評価損益[円]","評価損益[%]"' put_value() { IFS='"' read -a vary <<< "$1" #echo "${vary[@]}" case ${vary[7]} in "つみたてNISA") class="積立";; "NISAつみたて投資枠") class="新積立";; "NISA成長投資枠") class="成長";; *) class=${vary[7]} esac echo \""${vary[5]}"\",\""$class"\",\""${vary[9]}"\",\""${vary[11]}"\",\ \""${vary[13]}"\",\""${vary[15]}"\",\""${vary[17]}"\",\""${vary[19]}"\",\ \""${vary[29]}"\",\""${vary[33]}"\",\""${vary[35]}"\" } if $# != 1 ; then echo "$Usage" exit fi csvfilename=rs-${1#*_} #echo $csvfilename # (必要があれば)文字コードをUTF-8に変換 conv_file=$(/usr/bin/iconv -f SHIFT_JIS -t UTF-8 "$1") prn_flag=0 echo $CTitle > "$csvfilename" while read line; do $line =~ "種別" && prn_flag=1 $prn_flag == 1 && ($line =~ ^\"米国株式\" || $line =~ ^\"投資信託\") && put_value "$line" >> "$csvfilename" done <<< "${conv_file}" # options from https://qiita.com/shota243/items/0ef67d786785bcf5b60f # 44 カンマ区切り 34 ダブルクォート # 文字コード 76: UTF-8 60: Windows-932 64: Shift-JIS 72:ISO-2022-JP # https://qiita.com/j0306043/items/fcc9546056eeca5b025a # Warning: failed to launch javaldx - java may not function correctly # apt install default-jre libreoffice-java-common /usr/bin/libreoffice --headless --convert-to xlsx --infilter=xlsx:44,34,76 "$csvfilename"
上記のスクリプトに実行権を与えて、実行する場合は以下のとおり。
$ chmod +x r-stocks # 初回のみ $ r-stocks ~/Downloads/assetbalance(all)_20240508_075058.csv
実行結果は、カレントディレクトリに「20240508_075058.xlsx」が作成されるので、このファイルを開くと以下のとおり。
ほとんど、筆者の趣味のスクリプトだが、どなたかの参考になれば幸い。