要件定義の時に思い出したい2つの言葉

「KISSの原則」

はじめまして、企画設計グループの法貴です。

企画設計グループは、その名のとおり、システムの企画や設計(要件定義を含む)をしたり、プロジェクト全体のマネジメントをしたりするグループですが、今日は、私が要件定義や設計の工程で迷ったときに、いつも思い出すようにしている言葉を紹介します。

「KISSの原則」

「Keep it simple, stupid! 」で、略してKISSです。

意味は、「それをシンプルに保て!マヌケ野郎」。

Stupidとつくあたり、勢いがあって好きですが、レビューとか公式の場では説明しづらいのが難点。

f:id:monex_engineer:20190226162434j:plain

システムやプログラムにおいて、複雑さは悪です。

それは、スパゲッティコードは避けよ、という意味の、ミクロなレベルでも当てはまるし、
システムのアーキテクチャ設計という、マクロな視点でも当てはまります。

ちなみに最初にこの言葉を使った人はstupidの前にカンマを付けずに、
「Keep it simple stupid」としていたそうです。
この場合、stupid は会話の相手に向けられているのではなく、itにかかります。
つまり、
「それをシンプルでマヌケに保て!」という意味です。
これも含蓄ある言葉だと思います。つまり、プログラムを賢く(=多機能)してはダメで、1プログラム=1責務という、シンプルな構成にしておけ、という意味だと思います。Unix(=Linuxの先祖)コマンドの精神ですね。

ところで、シンプルがいい、というのは、エンジニアならば、誰でも、直感的に分かりますよね?

それなのに、なぜ、巷には、
スパゲッティコードや、密接にサブシステム同士が絡み合う、複雑でモノリシックなシステムが溢れているのでしょうか。

単純に、エンジニアのスキル不足が原因のことが多いでしょう。

でも、時に、スキルの高いエンジニアであっても、
KISSの原則を守れないことがあるのです。

例えば、次に説明するYAGNIの原則を守れなかった結果、KISSの原則も守れなくなるケースもあると思います。

YAGNIの原則」

「You ain’t gonna need it!」で略してYAGNI です。
意味は「そんな機能はいらん」です。

もう少し具体的にすると、
「その機能作っても、将来、使うことないから、作る意味ないよ。」
とか、
「運用で回避できるんだから、その機能はいらないよ。」
という感じです。
(若干、私の拡大解釈が入ってます)

将来必要かも、と思って機能を作り込んでも、実際には使われないことがよくあります。その機能を開発するためにかけたコストはドブに捨てたことになります。

また、あまり使われない例外的なユースケースのために、プログラムの条件分岐が複雑になったり、開発工数が倍になったりすることも、まま、あります。これが、YAGNIのせいでKISSの原則を守れなくなるケースです。

スキルの高いエンジニアほど、プログラムを汎用的に作りたいものです。しかし、その汎用性は本当に必要なのか、は見極めるべきです。もしかしたら、それはYAGNIの罠かも。。

KISSの原則を守れるならば、YAGNIな機能を実装しても大した害は無いですが、YAGNIな機能を実装したために、KISSの原則を守れなくなったら最悪です。

私は前職でSlerのエンジニアでしたが、その頃は、発注元がYAGNIな要件を指定してきても、立場上、それはYAGNIだと指摘するメリットがありませんでした。指摘したらその機能を開発する工数分の契約が削られるだけなので。

今は、自社サービスを開発する立場なので、YAGNIと気付いたら、その要件のシステム化を避けられないか、交渉するようにしています。

YAGNIYAGNIと言えるのも、自社サービスのエンジニアの良いところかも知れません。

納得感のある要件定義・設計ができたとき、そのサービスを世に出して、その成長を見守ることは、とても楽しいですよ!

f:id:monex_engineer:20190226165841j:plain

法貴 大輔システム開発部 企画・設計グループ

現代に残るタイプライターの文化

こんにちは。システム開発部の牛崎です。

先日、とある駅のプラットフォームでトムとジェリーのポスターを見ました。某遊園地とのコラボレーションのようです。
僕は小学校1~2年生の頃にトムとジェリーをよく見ていて、中でも「Saturday Evening Puss (土曜の夜は)」という回が好きでした。
この回の中で黒猫がピアノを演奏するシーンがあるのですが、黒猫やピアノの挙動がタイプライターを打ち込んでいるようにも見えていた事を思い出しました。
そんな訳で、今回は「タイプライター」について少しお話しようと思います。

ã¿ã¤ãã©ã¤ã¿ã¼ã®ã¤ã©ã¹ã

改行コード

テキストエディタを使っていると、CRやLFという文字を見かけますね。
これらコンピュータで改行を表す制御文字であり、改行コードと呼ばれています。
通常、WindowsではCRLF、LinuxMac OS XはLFを改行コードとして認識します。適切な改行コードを使ってプログラムを書かないと、動作不良の原因になるので注意が必要です。

このCRとLFですが、Carriage ReturnとLine Feedの頭文字を取ったもので、これはタイプライターのキャリッジを戻す動作 (=Carriage Return)と、紙を送って改行する動作 (=Line Feed)の事を表しています。
普段何気なく使っているキーボードのBack Space・Shift・Tabといったキーも元々はタイプライターの機構から来ています。

LinuxUnixにはターミナルの標準入出力に使用しているデバイスファイルの名前を表示するttyコマンドがありますが、これは「Tele Typewriter」の略、つまり遠隔のタイプライターを意味しています。
ただし、sshコマンドで遠隔地のコンピュータにログインした場合は疑似端末 (Pseudo Terminal)に接続されるため、ttyコマンドで表示されるデバイスファイルの名前はptsになります。
ローカルだとttyなのに、遠隔だとpts。ややこしいですね。

キーボード配列

また、一般的なキーボード配列であるQWERTY配列もタイプライターから来ています。
何故こんな不思議な配列になっているかはよく分かっておらず、打鍵速度を落として故障を防ぐためであるとか、モールス信号の打鍵用にデザインされたなど、諸説あるようです。
上から2段目のキーだけでTYPEWRITERと打てるのは... タイプライターから来てるかどうかは分かりません (笑

f:id:monex_engineer:20190129095134p:plain


ちなみに「The Typewriter」という楽曲もあり、タイプライターが楽器として使われていたりします。偶然にも、Saturday Evening Pussの初公開と同じ1950年の楽曲でもあります。
実機のタイプライターだからこそ演奏できる楽曲ですが、メカニカルキーボードを強打すればタイピング音くらいは真似できるかもしれませんね。
https://www.youtube.com/watch?v=g2LJ1i7222c


デジタルな形になっても、タイプライターの文化が現代のコンピュータの中で生きているというのは凄いですよね。
こういった意外な繋がりを知るのもエンジニアとして働く1つの面白さではないでしょうか。

 

牛崎 洸システム開発部 開発グループ エンジニア

ロボアドエンジンのコンセプト

f:id:monex_engineer:20190212142400j:plain


お客様が保有している資産を分析しアドバイスをするいわゆる「ロボアドバイザー」は、マネックス・ラボで開発したものだけでMONEX VISIONβ、answer、マネックスアドバイザーなどが挙げられます。

 

多岐に渡るサービスを開発してきましたが、どのようなコンセプトでこのエンジンが開発されているのかをマネックス・ラボで金融工学コンサルティング業務でご協力いただいております、野口能也氏(@equilibrista)にご解説いただきました。

ポートフォリオとは

MONEX VISIONβ では、お客様に対して、複数のリスク資産を組み合わせたポートフォリオの提案を行います。そもそも推薦する銘柄を一つ選ぶのでなく、なぜ複数の銘柄を組み合わせたポートフォリオを提案するのか。その背景について説明します。

リスク資産の投資成果には、必然的にバラツキがあります。買ったものの値段は、上がるときもあれば、下がるときもあります。大きく上下して、ヒヤッとするときもあれば、小さく上下して、比較的安心できるときもあります。2つの銘柄を組み合わせるとき、それらは同時に上げ下げすることもあれば、互いに逆方向となることもあります。特に後者によって、組み合わせない場合と比べて、バラツキ度合いは落ち着いたものになります。

 

確率分布の和の分散

統計学ブームによって、最近では確率変数、平均、分散、標準偏差相関係数といった用語も、頻繁に見かけるようになりました。そうした用語を使って上記を説明すると、「(確率変数の)和の標準偏差は、標準偏差の和よりも小さい」となります。まず教科書に載っている、確率変数の和の分散の公式を見てみます。

式(1) V(X+Y) = V(X) + V(Y) + 2√V(X)√V(Y)Corr(X,Y)

簡単にするために、XとYの相関係数を1とします。

式(2) V(X+Y) = V(X) + V(Y) + 2√V(X)√V(Y)

右辺をくくりたくなります。

式(3) V(X+Y) = (√V(X) + √V(Y))^2

両辺の平方根をとりたくなります。

式(4) √V(X+Y) = √V(X) + √V(Y)

標準偏差は分散の平方根ですが、このとき(確率変数の)和の標準偏差は、標準偏差の和と一致しています。さて、相関係数は-1と1の間のどこかをとります。もう一度、式(1)を見てみると、つまり(確率変数の)和の標準偏差は、(相関係数が1のとき)標準偏差の和と一致する(式(4))か、または(相関係数が1未満のとき)それよりも小さいと、言えることがわかります。

2つのリスク資産を組み合わせるとき、両者が異なる動きをすれば(相関係数が1未満のとき)、互いに補うことでバラツキ度合いは、より落ち着いたものになります。

余談ですが、2つのリスク資産の和の標準偏差は、あたかも三角形の三つの辺のように、あるいはベクトルの和のように、考えることができます。相関係数を-cosθと思って、「余弦定理」を思い出してみて下さい。そのような絵を描いてみると、また参考になります。

 

マーコヴィッツの仕事

1990年にノーベル賞を受賞したハリー・マーコヴィッツの仕事は、上記のようなポートフォリオ選択論でした。投資家は、各銘柄に対して収益を期待し、またバラツキを見積もり、そして銘柄間の相関についても評価します。そのとき、複数の銘柄を組み合わせたポートフォリオに対しても、その期待する収益と、バラツキを見積もることができます。もちろん、収益は大きいほど望ましく、バラツキは小さいほど望ましい。そう考えつつ、各銘柄への配分を探るとき、「最適な」組み合わせは一つに定まります。

1950年代と現在とで大きく異なるのは、計算機のスピードと値段です。当時は簡単でなかった、多くの銘柄に跨るデータの整備や大規模な計算は、今では手元の端末でさえ扱うことが容易になっています。他方で、各銘柄にいくらの収益を期待するのか、各銘柄にどれだけのバラツキを見積もるのか、それらは互いにどんなふうに相関すると思うのか。そうした見通しを扱う難しさは、変わっていません。

 

CAPM

よくあるポートフォリオのひとつに、例えばTOPIX東証株価指数)に連動するものがあります。最近では日銀が政策の一環として、こうしたETFを買い入れています。これは、東証一部に上場する全銘柄を、その時価総額に応じた比率で保有して、つまりミニチュアをつくろうという発想のもとに構成された商品です。

この発想の土台にある、やはり1990年にウィリアム・シャープノーベル賞を受賞した、CAPMの考え方は魅力的です。いくつか仮定が必要になりますが、簡単に言えば、まず(現在のインターネットから想起されるように)情報の流通は非常に速く、誰もがすべての情報に即座にアクセスできると仮定します。そして同時に、先のマーコヴィッツの仕事のように、誰もが組み合わせた収益とバラツキを気にして、ポートフォリオの構成比率を探すと仮定します。

このとき、世界中のすべての投資家は、同じポートフォリオを持つはずです。同じような情報にアクセスして、同じようにポートフォリオを構成するはずです。そして、世界中のすべての投資家が同じポートフォリオを持つのなら、それは必然的に、世界の全体(のミニチュア)であるはずです。時価総額の比率で、まんべんなく投資するという、いわゆるパッシブ運用の考え方です。先のTOPIXは、日本という「部分」に限定した「世界」ですが、考え方は同じです。

 

世界の投資家のポートフォリオ

さて、しかしながら実際に多くの投資家が、世界のミニチュアのようなポートフォリオ保有しているかといえば、そうではありません。いくつか典型的な乖離があります。例えばGPIF(年金積立金管理運用独立行政法人)の基本ポートフォリオは、以下のような構成になっています。

国内債券: 35%
国内株式: 25%
国債券: 15%
外国株式: 25%

それぞれのカテゴリの中を覗けば、時価総額の比率に近い投資になっています。しかし全体として見ると、債券でも株式でも、世界の全体と比べて、外国よりも日本の比率が高い状態になっています。こうした「自国への偏り」は、多くの諸外国でも見られます。

理由を考えてみると、一つには、CAPMの前提となっていた「誰もがすべての情報に即座にアクセスできる」点が気になってきます。例えば日本の債券や株式は、第一に日本語で、その基本的な情報が公開されます。また言語の壁はもちろんのこと、文化的な背景まで含めて、諸外国に暮らす人々と日本国内の我々と比べて、同じ水準の情報量を得られているかといえば、そうでないと考える方が自然にも思われます。

あるいはまた、それぞれのカテゴリの中で、投資に関する情報を手に入れて分析し解釈しようとするとき、誰しも例えば分野によって得手不得手があります。そして優れた分析や解釈が、広く皆に共有されているかといえば、必ずしもそうでもないというのが現状です。「忘れられている」銘柄も、世界中を見渡すとき、思ったよりも沢山見つけることができます。少なくとも、そう思われているからこそ、単にミニチュアを追い求めるパッシブ運用だけでなく、「上がる」銘柄を探すアクティブ運用も根強い人気があります。もちろんGPIFもアクティブ運用を採用しています。

 

実践的なポートフォリオ

すこし整理します。CAPM時価総額ポートフォリオは、実際の投資成果を見てみると、打ち負かすことが難しい、非常に強いポートフォリオの一つです。他方で、まったく世界を模倣するだけでなく、そこから意図的に乖離を考えるべき理由も、いくつか存在します。日本国内の資産への偏重、特定の銘柄やカテゴリへの見通し、外国投資における為替リスクの考え方、投資商品の手数料等が、それらの例となります。

こうした様々な点を考慮に入れ、多くの顧客のポートフォリオについて、個別に分析できるよう定量的なモデルを組み立てることが、ロボアドバイザーの基本です。個別のいくつかのトピックについて、以降の記事では、別途取り上げていく予定です。

Yoshi Noguchiマネックス・ラボ コンサルティング