YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

資産運用に取り組み始めた

はじめに

こんにちは、南国旅行から帰ってきたものです。日本寒すぎ。今年もあと10日ほどとなりましたがみなさんは楽しくお過ごしでしょうか。

この記事は pyspa Advent Calendar の21日目の記事です。前日は @takabowの旅行記 でした。

去年は 健康に気を遣って筋トレを始めた 話を書きましたが、今年は健康に加えて今後のライフプランを考えて資産運用を始めた話を書こうと思います。

TL;DR

FPに資産運用の相談をして資産運用を開始したら、色々面白くなってFP技能試験を受けることにした。

みんなが欲しかった! FPの教科書 3級 2017-2018年 (みんなが欲しかった! シリーズ)

みんなが欲しかった! FPの教科書 3級 2017-2018年 (みんなが欲しかった! シリーズ)

何をしたのか

資産運用すると言っても人それぞれの事情があり、すべての人に最適な唯一の資産運用プランというものは存在しませんので、あくまでこれは自分の話です。しかしながら計画をする際にはまず現状を明らかにすることは必要で、まずそこから始めました。 ちょうど資産運用をしなきゃなあと思っていたところに独立系ファイナンシャルプランナーの方と話す機会が得られたので、じっくりと時間を使って資産運用計画を練りました。

具体的には次のような流れです。

  1. 保有資産の把握
  2. 月次の資産の流れの把握
  3. 今後の人生計画の明文化
  4. 各ライフステージにおける費用の概算
  5. 短・中・長期での保有資産の割り振りと計画
  6. 各計画に応じた資産運用の実行

それぞれは当たり前に聞こえますが、一連の作業をちゃんとやるとそれなりに時間がかかる作業でした。

1. 保有資産の把握

まず何はともあれ、保有資産の把握です。これがわからなければ、資産の短・中・長期での割り振りなどができないので、現状の資産を洗い出しました。幸か不幸か、おおよその資産は預金、個人向け確定拠出年金、少ない銘柄の株しかなかったので、Money Forwardに登録していたこともあり、すぐに把握することができました。

2. 月次の資産の流れの把握

次はキャッシュフローを把握する作業をしました。当たり前の話ですが、固定費は毎月かかってくるものなので、ここが改善できると毎月資産を積み上げていけることになります。無駄なものにお金を払っていないか、日々の生活を振り返る上でもとても有意義な作業でした。

たとえば、保険の見直しや、確定拠出年金の掛け金の見直し、月々の光熱費の把握から始まり、職業柄各種オンラインサービスに登録しているので、その必要性など、さまざまな角度から現状を理解していきました。

3. 今後の人生計画の明文化

なんとなく「これからの人生はこんな感じかなあ」と思っていても、どういうイベントにどのくらいの費用がかかるのか、実際に書き出してみないとしっかりと把握することはできません。

結婚、住宅、育児、老後など、考えることは無限にありますが、大まかにどういうイベントが何歳ごろに起きそうなのかを書き出していきます。この中には予期せぬ病気や怪我なども含まれています。あくまで予想で、何年以内に何回ぐらい大病や怪我で収入が得られなくても耐えられるのかなどの把握をするためのものです。

人生計画と書くと大げさに見えますが、例えば数年おきにラップトップを新調するとか、年に1回は旅行に行くといったものも、定期的にまとまったお金が出ていくようなイベントは挙げていきます。

4. 各ライフステージにおける費用の概算

どういうイベントがいつに起きそうかわかったらそれぞれにかかる費用を計算していきます。簡単な算数です。どのタイミングでどれくらいの費用が必要かわかれば、現在保有している資産をどういった金融資産に割り振るかが決まるわけです。

よくある話としては老後はどういった生活をしたいか、です。年金制度が仮にいまのまま続いたとしたら年金でいくらもらえて、インフレ率がどれくらいになるはずなので、月にいくらかかって、など予想で計算していきます。当たり前の話ですが、あくまで予想なのでこれで完璧になるわけではありませんが、備えがないよりはよっぽどマシです。

また資産運用は目標がないと正しい判断を下せなくなるので、このステップで貯蓄目標を立てます。

5. 短・中・長期での保有資産の割り振りと計画

資産がわかったら、各ライフイベントにあわせて短・中・長期で保持していく資産の割り振りを行います。

大まかに短期=直近5年、中期=5年〜15年、長期=それ以上くらいに必要になりそうなまとまった費用をそれぞれのカテゴリに分けて運用していきます。まずはざっくりとすでに持っている保有資産を割り振ったあとに、キャッシュフローから月にいくらずつそれぞれの資産とし割り振っていくかを決定します。

このとき資産の持ち方も考えます。いままで何も考えてなかったのでおおよそ日本円で預金の形で保有していましたが、なんともったいないことをしていたのかと思いました。資産運用は投資と直結しますが、それぞれの金融資産の流動性とリスクを加味して、割り振ったあとの資産をどの金融資産でどれだけ保有するかも考えます。普通預金、定期預金、財形貯蓄、団体保険、積立保険、債権、投資信託ETF)、株式、不動産、など、それぞれに特徴があります。たとえば短期資産を不動産で持とうという人は少ないでしょう。 また運用をする際にも確定拠出年金(企業型・個人型)、NISAなど税制上優遇されるものもあるので、そうした制度の仕組みを把握することもこのタイミングで行いました。

これは人それぞれの状況(経済状況、家族構成、年齢、リスク許容度など)によって変化するので一概にどういう形で持つべきであるとは言えません。ただ自分で納得のいく運用ができることが大事だと感じました。この納得の行くポートフォリオを組む部分がまた面白いところでもありました。

6. 各計画に応じた資産運用の実行

計画ができたらあとは実行するだけです。例えば、いままで特に困ってなかったのでメガバンクのと外貨用にシティバンクしか口座を持っていなかったのを、いくつかのネット銀行の口座を開設してメインバンクの変更をしたり、ネット証券の口座を開設してNISAでの運用を始めたり、個人型確定拠出年金iDeCo)の口座を変更したりなど様々です。

この時期はまとまったお金が動くので気持ちとして落ち着かないところもありましたが、いまは持っている資産をきちんと割り振ることができたので、ようやくスタート地点に立てたかなという気持ちです。ここからきちんと運用していくことが大事になるので、定期的に自分でも振り返りを書いています。

FP技能検定を受けることにした

ファイナンシャルプランナーに相談しているうちに、お金周りの身近な制度や資産に関して興味が出てきたので色々調べていたら、結局FP技能検定用のテキストを読むのが一番早いという結論に至って今読んでいます。

ファイナンシャルプランナーというのは士業ではないため、資格がなくても事業が始められますし、また別途資格がなければできない業務内容があったりします。(cf. 税理士、証券外務員、保険外交員など)そのためFP技能士の資格を持ってもどうということはないのですが、ITパスポート試験などと同じで、とりあえず網羅的に理解をするためのきっかけとしての受験はありかなと思って面白半分で受験申請をしました。

pyspaの人にもファイナンシャルプランナーのことを話して、上記のようなことをしたと共有したら、多くの方が同じファイナンシャルプランナーに相談して、皆が「良かった」と言っていました。皆それぞれにしっかりとしたエンジニアなんだけれども、いざ自分の資産計画となると、まだまだ考えることがたくさんあったようで、自分と同じく良いきっかけになったようです。

自分があったことある人ならもうちょっと具体的な話を共有できるので、興味あったら教えてください。まずは試験に受かるようにがんばります。

明日は @shiumachi の記事です。

or-done-channelでコードの可読性を上げる

はじめに

こんにちは、キーボード自作おじさんです。このエントリはGo Advent Calendar 2017の4日目の記事です。 今年のエントリーは大作が並ぶアドベントカレンダーの休憩用のエントリーと思っていただければ幸いです。

Goの並列処理のパターン

Goが公開されてからもう8年になり、Goが得意とする並列処理にもGo特有のパターンなどがコミュニティ内で蓄積されてきました。 その中でもよく聞くものとしては

  • for-select loop
  • or-channel
  • or-done-channel
  • tee-channel
  • fan-in, fan-out

などがあります。今日はその中でも or-done-channel について書こうと思います。

どういうときに or-done-channel を使うか

上限の数が決まっているような処理を行う場合に

  • データのソースからの入力が終わってしまった場合(channelのcloseに対応)
  • 上限の数に達してしまった場合(doneに対応)

のいずれかに当てはまる場合に便利なパターンです。

rangeを使う場合

まずchannelがcloseするまでの処理を行う場合は、range キーワード使って forループを回すのが便利で可読性も高いです。

for v := range ch {
    something(v)
}

しかし、この場合は処理の上限に達してしまった場合が対応できません。何らかの形で ch と done の両方を受けてあげる必要があります。

for-select loopだけを使う場合

そうなるとGoで複数のchannelを使った並行処理を書こうと思った場合には for-select loop が一番良く出てくるので、それを書きたくなります。

LOOP:
for {
    select {
    case v, ok := <-ch:
        if !ok {
            break LOOP
        }
        something(v)
    case <-done:
        break LOOP
    }
}

これでとりあえず希望の処理は書けるのですが、どうも見た目が大きくなってしまいます。そこでこの処理を別途まとめて、rangeの書き方に持ち込むのが or-done-pattern です。

or-done-channel

deferの性質を使って done が来ても ch からのデータ取得が終わった場合にも、かならず stream を close しています。これで得られる stream が閉じられたどうかだけ意識すればよくなるため、普通に range のパターンに持ち込めるわけです。

func orDone(done <-chan bool, ch <-chan Data) <-chan Data {
    stream := make(chan Data)
    go func() {
        defer close(stream)
        for {
            select {
            case <-done:
                return
            case v, ok := <-ch:
                if !ok {
                    return
                }
                stream <- v
            }
        }
    }()
    return stream
}

for v := range orDone(done, ch) {
    something(v)
}

Goはシンプルな文法ながら、 goroutinechannelfordefer などの機能をうまく組み合わせると非常に柔軟な書き方ができるので、こういった書き方との出会いがたくさんあって日々勉強になっています。皆さんも面白いパターンを知ったらぜひ教えてください。

明日は @cia_rana さんです。

package.el + use-package で落ち着いた

はじめに

こんにちは、Arch Linuxをメインマシンにしてから毎日盆栽の手入れのように設定ファイルを弄くりましているものです。今日はEmacsのパッケージ管理を結局 use-package にしましたという話です。

アンケートを取ってみた

なんの気なしにアンケートを取ってみたら100人以上の方にご回答頂きました。ありがとうございました。結構 package.el だけの人っていうのは多いなあという印象でした。

なんでuse-packageも使うようにしたか

次のような考え方が前提にありました。

  • 外部コマンドに依存したくない
  • 依存パッケージの管理を別ファイルで行いたくない
  • init.elで管理対象の拡張は領域ごとに分けておきたい

1つめの条件でCaskが消えました。2つめの条件でel-getは若干対象外としました。 package.elだけの場合、custom変数が保存される、ということだったけど、複数台のマシンで共有してたら中身がところどころ抜けてしまい、あまり信頼できない状態になってしまったのでやめました。

use-packageの設定

まず init.el は、とりあえず use-package.el が入ってなかったらインストールして、あとは必要に応じて use-package で拡張を呼び出しています。 :ensure t によって自動でインストールされるのは便利ですね。

(require 'package)
;; Added by Package.el.  This must come before configurations of
;; installed packages.  Don't delete this line.  If you don't want it,
;; just comment it out by adding a semicolon to the start of the line.
;; You may delete these explanatory comments.
(package-initialize)

;;;;; add melpa and orgmode for packages
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
    ("melpa" . "http://melpa.org/packages/")
    ("org" . "http://orgmode.org/elpa/")))

(unless package-archive-contents
  (package-refresh-contents))
;;;;; ensure to use use-package
(when (not (package-installed-p 'use-package))
  (package-install 'use-package))
(require 'use-package)

;;;;; init-loader
(use-package init-loader
  :ensure t
  :config
  (init-loader-load "~/.emacs.d/inits"))

しばらくはこんな感じでやってこうと思います。いまのところ野良拡張の必要に迫られることなく使ってるけど、もし必要になったら、そのときは el-get の利用を考えます。

外部ディスプレイの設定をする

はじめに

こんにちは、最近自宅のメインPCをArch Linuxにしたものです。予想外にあっさりArch Linuxの設定ができたので、Linuxデスクトップ環境の進化はすごいなと感心しています。XPS13''(9350)でArch Linuxを動かしていますが、その外部ディスプレイの設定をしたのでメモしておきます。

USB Type-C - HDMI変換コネクタ

ハードウェアは相性があるので動作報告しといたほうがいいかなと思ったのでメモ。

これは2年弱前くらいから使ってたやつで、もともとWindows 10を動かしてたときに外部ディスプレイにつなぐために買ったやつだけど、もちろんArch Linuxを入れたあとでも動作しています。

XRandR

XRandRを使う場合はターミナルで簡単に設定できます。ここではeDP1というディスプレイとDP1というディスプレイがconnectedになっていて、DP1のほうが外部ディスプレイです。

% xrandr
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
eDP1 connected primary (normal left inverted right x axis y axis)
   1920x1080     59.93 +
   1400x1050     59.98  
...
   720x405       60.00  
   640x360       60.00  
DP1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 530mm x 300mm
   1920x1080     60.00*+  60.00    50.00    59.94  
   1920x1080i    60.00    50.00    59.94  
...
   640x480       75.00    60.00    59.94  
   720x400       70.08  
DP2 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

認識されているディスプレイがわかったら、また同様に xrandr コマンドにオプションをつけて配置します。

% xrandr --output eDP1 --auto --output DP1 --auto --left_of eDP1

これで外付けディスプレイをラップトップのディスプレイの左側に配置した感じになりました。便利。

また普段はラップトップを閉じた状態で外部ディスプレイにつないでいるので、その場合は備え付けディスプレイはオフにした状態で外部ディスプレイをprimaryにしたい。

% xrandr --output eDP1 --off --output DP1 --auto --primary

こんな感じで試してみていい感じになったらshellscriptなどに残して自動化などをすると良いでしょう。

ARandR

しかしもっと便利なものがあって、ARandRというRandRのGUIがあり、これで同様の設定ができました。 f:id:ymotongpoo:20171113004214p:plain

XRandRのときと同様にOutputのメニューから認識されているディスプレイを選択して、下の画面で任意の位置に配置します。配置が終わったらApplyすれば、そのような画面構成になります。レイアウトが気に入ったらセーブすれば次回以降呼び出すときに便利。

参考

Caskからpackage.elに戻ってきた

はじめに

こんにちは、Emacsユーザーです。最近開発マシンをArchにしたことに合わせて、設定ファイルの掃除などをしてるんですが、いろいろ考えた結果自分の用途ではCaskとかel-getとか要らないなって思ったんで、デフォルトで入ってるpackage.elに戻ってきました。

package-install-selected-packages

Emacs 25.1から M-x package-list-packages のリストからインストールしたパッケージに関してはカスタム変数の package-selected-packages に記録されるようになりました。(init.el とかに勝手に追加される)

この変数がきちんと管理されてれば、新しい環境で新規に立ち上げたときにも、M-x package-install-selected-packages とすれば普通にパッケージを持ってきてくれるので、依存する外部コマンドとかがなくて楽。

Customの書き込み/読み込み先

init.el に書き込まれるのが鬱陶しいなと思っていたら、同様のことを思っている人が大勢いました。

(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
(when (file-exists-p custom-file)
  (load custom-file)

これを init.el に書いて、Customが書き込んだ内容を .emacs.d/custom.el に移して無事完了。

参照