(2024-05-08 初稿 - 2024-08-19 追記)
(2024-08-19 追記)
最近、株価だけでなくドル円の為替の変動も大きいね。(-_-;)
そこで、スクリプトにドル円の為替レートも取得するように追加した。
(追記ここまで)
新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"
ドル円の為替レートの取得(2024-08-19追記)
最近為替の変動も大きいので、ドル円の為替レートも取得するようにスクリプトに追記した。
追記内容は、以下のとおり。
具体的には、次節のスクリプトを参照願う。
グローバル変数の設置
Dollar_Exchange_Rate="" # add 2024-08-19
行頭の「米ドル」行の読み取り
[[ $line =~ ^\"米ドル\" ]] && Dollar_Exchange_Rate=$line # add 2024-08-19
CSVファイルへの追記
echo "" >> "$csvfilename" echo $Dollar_Exchange_Rate >> "$csvfilename" # add 2024-08-19
スクリプトの全体と使い方
上記の処理を含んだスクリプト全体としては、以下のとおりである。
なお、スクリプトの名前は「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='"銘柄","口座","保有数量","[単位]","平均取得価格","[単位]","現在値","[単位]","時価評価額[円]","評価損益[円]","評価損益[%]"'
Dollar_Exchange_Rate="" # add 2024-08-19
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"
[[ $line =~ ^\"米ドル\" ]] && Dollar_Exchange_Rate=$line # add 2024-08-19
done <<< "${conv_file}"
echo "" >> "$csvfilename" # add 2024-08-19
echo $Dollar_Exchange_Rate >> "$csvfilename" # add 2024-08-19
# 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」が作成されるので、このファイルを開くと以下のとおり。
ほとんど、筆者の趣味のスクリプトだが、どなたかの参考になれば幸い。