Google Apps Scriptでスプレッドシートを操作してみる ―株式投資の運用実績のグラフ化を例として―

最近初めてGoogle Apps Scriptを書いてみて、案外快適にスプレッドシートを操作することができたので、最初の取っ掛かりを得るまでのポイントを整理したい。

スクリプトエディタを開く

Googleスプレッドシートのメニューの「ツール」から「スクリプトエディタ」を選択すると、新しいタブにスクリプトエディタが開く。ここにコードを書くことで、スプレッドシートを様々に操作することができる。


onEdit(event)の中に処理を書く

onEdit(event)の中に書いた内容は、スプレッドシートが編集された際に動くので、取り敢えず最初はこの中に処理を書いておけば手軽に動かすことができる。

アクティブシートを取得する


セルの値を二次元配列として取得する

getValues()で、複数のセルの値を二次元配列として取得することができる。例えば、前回の記事で使ったこの表の値を二次元配列として取得するには、次のように書く。

(行,列)の形式で、(2,1)のセルを起点として、9行と7列の範囲を取得するという意味だ。

この二次元配列はvalues[行][列]のように各セルの値を指定できるので、あとは思い通りに値を操作して、最後にsetValues()で配列の値をシートに再セットすれば良い。


利用例

上掲の表を更新して、先日始めた株式投資の運用実績(終値ベース)を、TOPIXの騰落率をベンチマークとしてグラフ化するスクリプトを書いてみた(グラフの作り方は前回の記事に書いた)。

Yahoo!ファイナンスポートフォリオ機能を活用して、「株式時価総額」の列と、「TOPIX」の列に手動で入力すれば、残りの部分はスクリプトが埋めてくれる仕組みになっている。

Googleスプレッドシートでグラフを簡単に作る

Googleスプレッドシートを使うと綺麗なグラフが簡単に作れることを知ったので、その方法を共有したい。最近私は株式投資を始めてTOPIXの騰落率をベンチマークとする運用実績(終値ベース)のグラフを書いているので、それを例にして説明する。

1. データの入力された表を用意する

f:id:fuyu77:20170515211705p:plain

2. グラフに使いたい列を選択する

Ctrlキーを押しながらクリックすると複数列選択できる。

f:id:fuyu77:20170515212415p:plain

3. メニューの「挿入」から「グラフ」を選択する

f:id:fuyu77:20170515212836p:plain

4. グラフの形式を選択する

グラフの形式を様々にカスタマイズできる。今回はシンプルな折れ線グラフを選択。

f:id:fuyu77:20170515213140p:plain

5. 完成

f:id:fuyu77:20170515214815p:plain

対象の列の新しい行に値を入力すると、自動でグラフが更新される仕組みになっている。

次回は、Google Apps Scriptを使って、この表の更新を手軽に行う方法を紹介する

株式投資を始めました

先日結婚した際に、一族からお祝い金や支援金を大量に貰ったので、それを元手に株式投資を始めることにした。

証券会社

証券会社は松井証券にした。1918年創業の歴史の長い証券会社で、深緑の「六」のロゴが渋い。手数料体系もシンプルで分かりやすい。取引に関する機能も過不足無いものが揃っている。

ただ、松井証券よりも手数料が安い証券会社や、より多くの機能を提供している証券会社はあると思うので、本気でコスパを追求するなら最適な選択肢ではないと感じている。

投資対象

東証一部上場の日本株に限定して売買する(東証一部に限定するのは、出来高の大きさやリスク回避の観点から)。現物のみで、信用取引はしない。

投資戦略

株マップ.comの簡易スクリーニングで、PER、PBR、配当利回りROE自己資本比率でスクリーニングして、残った銘柄の業績安定度を会社四季報でチェックし、問題なければ投資することにしている。素人が感情的に売買すると身を滅ぼすと思われるので、機械的に売買できるようなルールを一応考えてある。

最初の投資銘柄

6210東洋機械金属

射出成形機とダイカストマシンを作っている会社。5/1の9:00に689円で3500株買った。決算の増益予想と増配で4/27にストップ高を記録し、出来高も急増している。相当にリスキーな状況だけれど、まだ割安感はあると思う。

1972三晃金属工業

金属屋根大手。新日鉄住金系。5/9(今日)の9:00に3135円で800株買った。配当利回りが高く、割安感があったので買ったけれど、どういうトレンドなのかは良く分からない。

運用実績の記録

Googleスプレッドシートに、日々の運用実績を終値ベースで記録し、TOPIXの騰落率をベンチマークとしたグラフを作成している。

証券会社の特定口座にある現金残高や、手数料、配当、税金等による増減も含めて、元手から何倍になったのかを示すのが青いグラフで、TOPIXの騰落率が赤いグラフになっている。最初からTOPIXにボロ負けしていて、前途多難な滑り出しという感じだ。

共働き世帯の理想と現実 ―忍び寄る「男性稼ぎ手モデル」の影―

今年の4月2日に結婚式を挙げ、妻との共働き生活も一年ちょっとになる。

当初は妻に頻繁に怒られることに悩んでいたものの、最近は随分と穏やかになって、仲良く暮らしている。現状の家庭運営はかなり上手くいっていると評価できると思うのだけれど、どこか私の考える理想の共働き世帯の姿とずれているということがいつも気になっている。

私の中の理想の共働き世帯 ―男も女もキャリア形成と家事参加の機会を十分に持てる―

まず、私の中にある理想の共働き世帯の有り方として、労働と家事の分担が対等に近く、その両方の活動に充実感を持って参加できているということがある。これを実現するためには、キャリアプランの形成に性差別が無いことと、労働時間が(家事を行うために十分な余裕が持てるほど)短いことが必要になる。具体的には労働時間は1日7時間以下であるべきだと感じている。

現実 ―「男性稼ぎ手モデル」の追認と子育ての不可能性―

しかし現実には、家事は妻が多く、生活費負担は私の方が多くという分担になっている。具体的には、風呂掃除とゴミ出しと休日の料理と休日のクリーニングと休日の洗濯物の取り込みは私の担当で、その他の平日の料理や掃除洗濯全般は妻の担当になっている。家事についてはほぼすべて妻がやっているということだ。

死ぬほどキツい日本の「メンバーシップ型雇用」の働き方

日本において長時間労働の根本的な原因は、雇用システム、および労働市場の問題です。この根本的な問題に踏み込まない限り、いかなる「改革」なるものも「改善」にすぎないものになるのではないかと私は捉えています。

前者においては、メンバーシップ型雇用のもと、労働契約時も、その後も任される業務の範囲が必ずしも明確ではなく、どんどん書き換えられていきます。仕事に人を就けるのではなく、人に仕事をつけるシステムです。

私は中小IT企業で、この記事で語られているというような「メンバーシップ型」の働き方をしている。とにかく何でもやらされるので、一日のタスク数が10を越えることも珍しくない。今の私は朝起きたら脳内で何度も仕事の優先順位のシミュレーション(イメージトレーニング)を重ね、仕事の中で新しいタスクが舞い込む度にそのシミュレーションを更新し、一つずつタスクを完了させるようにしている。仕事への集中度は常に限界レベルで本気を出してやっている(そうしないととてもじゃないけれど定時に仕事を終らせることができない)。一日中パソコンと向き合う仕事ということもあり、目の負担も凄まじく、仕事を終える頃にはほとんど廃人のように消耗している。帰ったらぼーっとして、11時前には寝るのが最近のスタイルになっている。帰ってから料理を作ったりする余裕はまったくない。今の仕事は一切やりがいが感じられないつまらないもので、上の人間からドヤされるなどして溜まるストレスも尋常ではなく、残業も月20時間前後は発生するため、毎日11時前に寝ても仕事のストレスは一週間を通じで蓄積し、土日は一日中寝ないと回復しないので、実質的に余暇も無い。私には趣味がたくさんあったけれども、そのほとんどは失われ、今はファイアーエムブレムのソシャゲくらいしかやっていない(そのソシャゲさえもしんどいと感じるときがある)。こうやってブログを書いているのもGWなので例外的にできているのだ。労働によって私の人生は破綻しかけている。

壊滅している妻のキャリアプラン

一方で、妻の仕事が楽かと言えばそんなこともまったくない。妻は小売店で販売員をやっているけれど、この会社が無償労働サービス残業等何でもありの典型的なブラック企業で、それでも業界の中では一番ホワイトな部類だというのだから訳が分からない。人手不足で他店舗へのヘルプを含む出鱈目なシフトが組まれていて、休日は平日に不定で、7連勤なども普通にあったりしてキツそうだ。そして月給が安く、昇給の見込みもほぼ無い。この会社が業界の中で一番マシということなので(他社から転職して来た同僚が口々にそう言うらしい)、新卒の就職先をこの業界に決めた時点で妻のキャリアプランは終っていたということだろう。一応唯一のキャリアアップのモデルとして、副店長、店長、エリアマネージャーのように昇格し、プライベートを犠牲にする過酷な労働と引き換えに僅かな昇給を得るというものがあるけれど、現在妻の会社で副店長格以上の社員はほぼ全員男性となっている。

と、ボロカスに書いてしまったけれど、私と違って妻は仕事にやりがいを感じていて、また体力的にタフなので、家事をテキパキと効率良くこなしつつ、休日にはいつも友達と遊ぶ予定を入れたりしていて、充実した日々を過ごしている。妻が疲れているときは、私も出来る限りのサポートをするように努めている。

子育てとかできないよねっていう

という訳で、現状は、

  • 私:奴隷のような労働で廃人化しつつ、生活費を稼ぐ。
  • 妻:奴隷のような労働をしつつ、家事をこなし、交友関係も充実している。

このような感じになっており、労働と家事の対等な分担という理想からは遠いものの、概ね上手くやれていると言えなくもない。

ただ、子育ての可能性まで考慮すると話は別だ。もし子育てをするなら、妻は負担の少ない仕事に転職するか退職し、より私の生活費負担を重くしなければならない(妻の今の会社で育休がまともに取れたという前例は過去に一度もない)。結局のところ旧態的な「男性稼ぎ手モデル」に収斂していくという訳だ。しかも昔の男と違って、私の場合は一人で余裕をもって家計を支えられるほど昇給する見込みが無いし、個人主義的な教育を受けて育ったので、心を殺してひたすら会社に奉公する人生にあと何十年も耐え続けられる自信も無い。2人とも子育てをしてみたいという気持ちはあるものの、今のところ私たちはその可能性を無期限に保留することに決めている。

*1

日本の少子化は最早手遅れというレベルで進行しているけれど、私の今の立場からは、

この2つが共働き世帯が子育てに取り組むハードルを低くするために必要だと言いたい。

子育ての問題に限らず、性役割に柔軟性を持たせることは生きやすさの観点で重要だと思う。今の私は、「逃げ場がない」と感じている。あともう少しでGWも終り、地獄の会社労働が再開する。既にストレスの予感で胃にいつもの痛みの兆しが顕れ、柔軟な思考は失われ始めている。本当に他にどうすることもできないのだろうか。こんなことはすぐにでも辞めたい。

*1:2019/02/09追記。リンク切れのため、はてブページに差し替えた。

内閣府の「国民の祝日CSV」をプログラミングの練習に使ってみる ―PowerShellで祝日の日付と名称を相互に検索する―

内閣府の「国民の祝日CSV」が批判されている。私もほとんど素人なのでデータ形式について大した見識を持っている訳ではないけれど、この内閣府の形式だと、ほとんどExcelで開いて目視で確認する用途にしかまともに使えず、データの使い勝手が非常に悪いということだと思う。

ただ、初心者がちょっとしたプログラミングの練習をするにはこの国民の祝日CSVは面白い題材だった。以下PowerShellで祝日の日付と名称を相互に検索するスクリプトを書いてみる。

CSVを整形する

国民の祝日について - 内閣府

内閣府のサイトから国民の祝日CSVをダウンロードし、テキストエディタで開いて適切な形式に整形する。

Date,Name
2016/01/01,元日
2016/01/11,成人の日
2016/02/11,建国記念の日
2016/03/20,春分の日
2016/04/29,昭和の日
2016/05/03,憲法記念日
2016/05/04,みどりの日
2016/05/05,こどもの日
2016/07/18,海の日
2016/08/11,山の日
2016/09/19,敬老の日
2016/09/22,秋分の日
2016/10/10,体育の日
2016/11/03,文化の日
2016/11/23,勤労感謝の日
2016/12/23,天皇誕生日
2017/01/01,元日
2017/01/09,成人の日
2017/02/11,建国記念の日
2017/03/20,春分の日
2017/04/29,昭和の日
2017/05/03,憲法記念日
2017/05/04,みどりの日
2017/05/05,こどもの日
2017/07/17,海の日
2017/08/11,山の日
2017/09/18,敬老の日
2017/09/23,秋分の日
2017/10/09,体育の日
2017/11/03,文化の日
2017/11/23,勤労感謝の日
2017/12/23,天皇誕生日
2018/01/01,元日
2018/01/08,成人の日
2018/02/11,建国記念の日
2018/03/21,春分の日
2018/04/29,昭和の日
2018/05/03,憲法記念日
2018/05/04,みどりの日
2018/05/05,こどもの日
2018/07/16,海の日
2018/08/11,山の日
2018/09/17,敬老の日
2018/09/23,秋分の日
2018/10/08,体育の日
2018/11/03,文化の日
2018/11/23,勤労感謝の日
2018/12/23,天皇誕生日

このデータをHolidays.csvの名前で保存する。

PowerShellで祝日の日付と名称を相互に検索する

CSVの形式がまともであれば、PowerShellImport-Csvコマンドレットを使用して各項目の値を配列として活用できる。

以下、祝日の名称を指定して日付の一覧を取得するスクリプトと、日付を指定して祝日名を取得するスクリプトをそれぞれ書いてみる。ps1ファイルと上のcsvファイルを同じディレクトリに置けば実行できる。

f:id:fuyu77:20170224211027p:plain

f:id:fuyu77:20170224211042p:plain

適切なデータ形式を用いることで、このようにデータの応用が容易になるということだと思う。

PowerShellで残業申請メールを送信する

タイトル:2017/02/05 残業1.5時間(累計 7.0H/週 15.5H/月)

(宛先)

残業内容を報告いたします。

◆時間

 18:30~20:00(1.5)

◆内容

 ・作業a 0.5H
 ・作業b 1.0H

以上です。よろしくお願いいたします。

私の会社では上のような残業申請メールを退社前に送信して残業を申請している。何気に入力項目が多くて、タイトルに週残業と月残業の累計を書かないといけないため、テンプレートを作っても書くのにそれなりに時間がかかる。下手をすると残業申請メールを書いているだけで残業5分延長などという事態にもなりかねない。IT企業なのにこのような非効率的な方法を採用していて良いのかという感じだけれど、給与計算を担当しているのが社長のお母さんで、この方法を気に入っているので変えることができない。

そこで、残業申請メールを自動で送信するスクリプトPowerShellで書いてみた。以下のps1ファイルとjsonファイル2つを同じディレクトリに保存して、ps1ファイルのメール送信に関する情報を実行環境のものに書き換えれば動く。

TotalOvertimeHourCutOffDates.jsonに週残業と月残業の累計、CutOffDatesに週締日と月締日の情報が保存してある。スクリプトを実行した日が締日を過ぎていたら新しい締日の情報に更新されて週残業と月残業の値がリセットされる仕組みだ(最初にjsonファイルに初期値を書き込んでおく必要がある)。

PS C:\>.\SendOvertimeReport.ps1 作業a,作業b 0.5,1 30

というように、第1引数に業務内容をカンマ区切りで、第2引数に各業務の残業時間をカンマ区切りで、第3引数に定時後残業開始前休憩時間を分単位で入力する(省略すると休憩なし扱い)。

f:id:fuyu77:20170205220009p:plain

スクリプトを実行すると、上のようにメールの内容が出力されて、送信確認のメッセージボックスが出現する。メール内容を確認して"OK"を押すとメールが送信されてjsonファイルの内容が書き換えられるようになっている。

参考記事

私はIT企業に勤めているけれど、私の部署は業務でプログラミングをしないので、JSONやメールの自動送信の知識は今回初めて学んだ。

もはや json を利用するのが PowerShell では最も楽な方法と思っています、今日この頃です。 以前は csv でも楽だなーとか気の迷いがありましたが、 再利用するデータなら 絶対に json です。

PowerShellJSONを扱う方法については上記のguitarrapc_techさんの記事で学んだ。私は「JSONとか何だか難そうだなあ」と字面だけ見て勝手に思い込んでいたけれど、学んでみたら簡単で便利な形式(例えば今回だと、プレーンテキストでは上の値が週、下の値が月みたいにするしかないのだけれど、JSONを使えば"Week"と"Month"をプロパティ名として設定できる)だったので、今後も活用したい。

メール送信にはPowerShellSend-MailMessageコマンドレットを使う。

Send-MailMessageに指定する-Credential(認証情報)の作り方はMSDNの記事に書いてあった。

PowerShell/PowerShellでメッセージボックスを表示する方法 - Windowsと暮らす

メッセージボックスを表示させる方法はこの記事で学んだ。

文系卒未経験で中小IT企業に入り、仕事でプログラミングを使えるのは全従業員の2割程度の開発部署の人間だけという現実に愕然としているけれど、PowerShellはそんな私にもちょっとしたプログラム開発の楽しさを教えてくれる素晴らしい言語だと思う。

私には物をめちゃくちゃ噛む癖がある ―様々な物体の噛み応えレビュー―

Twitterで鉛筆を噛むということが話題になっていたけれど、私の場合は子供の頃には物を噛む癖はなかったのに、今では様々な物をめちゃくちゃ噛んでしまう。

私の場合は、物を噛むことでリラックス効果と集中力増強が得られると感じているけれど、もちろん明らかに異常な行動を完全に自分の意志で選んでいる訳ではなく、嗜癖や依存症のようなものだと感じている。

中退した医学部で非常につらい経験をした頃から噛む癖が抜けなくなった。噛めそうなものは大概噛んで来たので、様々な物体の噛み応えをレビューしたい。

爪は今ではもう無意識のうちに噛んでいる境地に達していて、常にヤスリで綺麗に手入れしたような状態になっている。美容に対する意識の高い女性から「環さんの爪すごい綺麗ですね」と言われたときは何とも言えない気持ちになった。

爪は美味しいし、無限に伸びてくるし、ストレス解放力、集中力増強力ともに非常に高いので噛む対象としては定番と言って良いと思う。

ガム

素人は「ガムなら異常者扱いされず噛めるじゃないか」と思うかも知れないけれど、ガムは駄目だ。ガムの駄目なところを列挙する。

  • 砂糖が入っているものは論外。健康状態が悪化する。
  • 値段が高価。大量に物を噛む人間には使えない。
  • 柔らかく、噛み応えが無い。

ガムは使いものにならない。

鉛筆

冒頭の鉛筆はなかなか良いのだけれど、芯にまで到達すると鉛の味がしてとても噛めたものではない。

割り箸

割り箸も木材なので最初のうちは良さみがあるのだけれど、すぐにボロボロになる。安物ほどすぐにボロボロになる傾向があって、コンビニの割り箸などは一瞬で駄目になる。ただしセブンイレブンの割り箸は若干しっかりとした作りになっている。

ティッシュ

ティッシュはかなり良い。比較的長時間噛めて安価に大量に用意できる。ただ、ティッシュにも品質の差があって、やはり安物はすぐにボロボロになる。「大王製紙ティッシュはゴミクオリティ。日本製紙クレシアクリネックスなどは相当に良い作りをしている」というのは自分の歯で噛んでみた人間にこそ分かる違いというものだろう。

ネピア 鼻セレブ ティシュ 400枚(200組)×3個パック

ネピア 鼻セレブ ティシュ 400枚(200組)×3個パック

  • 発売日: 2008/11/07
  • メディア: ヘルスケア&ケア用品

鼻セレブは噛むとお菓子のように甘い味がして中毒患者になりそうだったので買わないようにしている。

ペットボトルの蓋

色々試した私の一番のオススメはこれ。硬くて噛み応えがあってなかなか崩れないので長時間楽しめる。無機質な味も良い。

ちなみにペットボトルはラベルもはがして嚙めるので無駄がない。