ついに来たか!?統一言語

開発ではいくつもの言語を習得していく必要があって、習得する順番なんてお話を以前にしましたが最近になって「開発言語を統一しちゃおうぜ!」的なプロジェクトが進められているそうです。WEBでもそういった記事を目にすることが多くなってきたので、そうなったときのこを想定してみたいと思います。

「Wyvern」(ワイバーン

ワイバーン - Wikipediaって何かな~って思ったら最強のドラゴンなんだそうです。調べてみると映画とかでも中世ヨーロッパっていったらこんな紋章が出てきそうなドラゴン。非常に有名なんですね。(^^)
画像もいっぱいありました。ワイバーン - Google 検索

なんでいきなりこんなドラゴンの話と思ったら今回のプロジェクト名が「Wyvern」というのだそうです。『これさえあえれば何もいらない』とでもいいたいのでしょうか?なんとも傲慢な・・・。

事の発端は?

開発をするのに必要な開発言語(プログラミング言語)ですが、挙げるとホントにたくさんあります。あるだけではなく結構使っているんですよ。
僕が普段使っているものは「ネイティブ開発言語」といわれる類のものでマルチプラットフォームでは動かないのですが、特定のOSや端末で動作するための言語。DelphiPascal言語)はその典型です。C#JavaVMと言われるOSの上に専用のプラットフォームを準備しておくことで動作する言語ですね。こういった言語はその言語だけを知っていれば比較的単一言語で開発することができるのですが、最近はWEBでブラウザで動作するものだったりスマホタブレットといった多種多様なプラットフォームで動作するものが求められています。そうなるといくらC#Javaでもそれ用に開発しないと動作しません。
そこで出てくるのがHTMLなどの言語ですが、これが曲者。簡単に記述できるのですが、HTML言語だけでは足りません。

これらを知らないとWEBページ一つ作成することができないのです。








何だか名前が無駄にかっこいいんですが…。

HTML5JavaScriptPHPCSSXMLなどなど…挙げだせばキリが無いプログラミング言語。分野ごとに違ったものがスタンダードをとっている為、プログラマー複数の言語を学ばなければならないケースが多いです。そんな問題を解決するため、アメリカ国家安全保障局(NSA)がカーネギーメロン大学に出資して、1つの統一言語を作るプロジェクトを進めているんだそう。

伝説上のドラゴンの名前を取って、その名も「Wyvern」(ワイバーン)と名付けられたこのプロラミング言語は、アプリケーションやウェブサイト作りにおいて複数の言語が入り乱れている状況を改善するべく、開発が進められているんだとか。

開発者は以下のように語っています。


今日のウェブ・アプリケーションは全く統一性のない複数の言語で書かれており、ごちゃまぜ状態です。例えば、1つのウェブ・アプリケーションを作るのに、クライアント側ではJavaScriptが使われており、サイト構造を表すのにはHTML、見た目はCSSで、通信にはXMLが、果てにはJavaやプレーンテキストの文章まで登場する…という具合に。この雑多性は多くの言語を学ばなければならないという意味で開発者の負担を高めているし、セキュリティの観点から言っても、多くの言語が乱立していることはシステム全体の安全性を低下させています。

NSAがこのプロジェクトの為に出資しているのは、おそらく最後のセキュリティの問題が原因でしょう。今でこそインターネット上でのスパイ行為が取り沙汰されている同局ですが、アメリカのインターネットの安全性を守るのは元はと言えばNSAの仕事です。

目的がどうであれ、「統一言語」の普及によりウェブサイトやアプリケーション作りへの敷居が下がれば、アメリカだけでなく世界全体にとっても良いことだと言えます。何と言っても、新しくプログラミングを学ぶ人にとっては、1つ学ぶだけで良いというのは魅力的ですよね。ただし、Wyvernがスタンダードとして普及せず、「新たな1つの言語」の立ち位置に甘んじてしまった場合のことを考えると、これってますます混乱が高まるばかりなのでは…? との懸念もあります。ともあれ、今後もその進展に注目していきたいですね。

開発バラバラ事情

一昔まえ前ではC/S(クライアント/サーバー型)と言われた処理が主流でしたがいまではほとんど見なくなってきましたね。今日は多層処理についてお話したいと思います。

時代の変化

すべてはインターネットの普及から始まっています。社内ネットワーク(イントラネット)であらゆる業務を行っていたことは外部とのデータ交換も定形手順で交換していました。JCA手順や全銀手順、HULFTなどの通信ソフトもその一つでしょう。使えるポートもセキュリティもそんなに気を使わなかったのに最近ではグローバルネットが当たり前で使えるポートも限られる。どんどんセキュリティ要求が高くなる。それもそれもインターネットが当たり前になり、高速になり、安価になった結果なのかもしれません。なんて時代だ!

昔から開発している人

サーバーでデータを一元管理できるだけでもすごく便利ですよね。データをそこに取りに行けばなんでもある。とりあえずデータを取ってきてあとはクライアントでゴリゴリゴリゴリ。一覧表示したりグラフにしたり印刷したり。そういったロジックを記述するのがプログラミングだったな~。特にデータ取得を高速化したり、ソートのロジック変えてみたりしてね。
データベースで管理するようになってからデータの取得の高速化はSQL文の書き方やモデリングに変わり、ソートなんてろくすぽロジック書かないし。ロジック=SQL文って感じですよね。クライアントアプリでSQL文をカリカリ書いてるもんだから同じような処理があってもまた新たに記述したりして。ロジックが分散するので不具合もたくさん発生していました。一箇所直しても他は直らないなんて当たり前だったのではないでしょうか。

魔法の80番ポート

SQLサーバーだと1433番というポートを使っていますが、処理によっていろんなポートを使って通信しています。ところが「セキュリティポリシー」というものがこういったいろんなポートを使わせてくれなくなってしまったのです。よくわからないポートは使用禁止。外部から攻撃を受けそうなものは停止。ブロックできるところだけでしか開けちゃダメ。ってことで80番や443番ポートしか開けてくれないんです。これはHTTPとHTTPSというポートでWEBブラウジングするためのポートですね。いまではこのポートを駆使してシステムって作られているんです。

処理を分割して対応

80番ポート(HTTP)で処理できる命令はやっぱりHTTPの命令な訳でどうやってデータベースからデータを取ってくるのか?
それが本題の「粒度」に関連してきます。そのままデータを取ってくることは出来ませんので、HTTPのPOST命令を使って「データをちょうだい」って命令します。命令を受け取ったWEBサーバーが実際にSQL文などを発行してデータベースからデータを取得します。でもデータベースの取得したものをそのままクライアントに受け渡せないので、JSONXMLなどの形式に変換してクライアントに受渡しているのです。
これが処理の分割といって、このリクエスト単位を「粒度」って言っています。
単純にデータベースのマスタ情報であれば、テーブル単位=粒度になるのだと思うのですが、幾つものマスタから情報を取得して作成される伝票データのようなトランザクションデータはテーブル単位というわけにはいきません。僕的にはこの「粒度」は処理単位に設計しています。

処理の単位

処理って何かなというと、画面単位だと考えていただくと良いと思います。ボタンを押したらその画面に表示する情報をリクエストしクライアントに受け渡す。更新するときは更新する内容をリクエストし、更新に必要な計算はサーバーで行って付随する必要な情報もサーバーで補完してデータベースに更新します。こうすることでロジックの分散を防ぐわけです。処理は分割するのにロジックは分割したくない。ロジックを分割すると不具合も分割されます。分割されるってことは増えるってことですね。(笑)

最近よかったって思います

WEBサーバー側とクライアントの表示部分と両方開発しなくてはいけないので面倒だと思っていましたが、気がつけば良いことも多い。なんといっても使いまわせる。パソコンだけじゃなくて、タブレット用やスマホのアプリにも流用できるんです。その時にはWEBサーバー側は作る必要がないことも多い。クライアント側だけ作れば良いってことですね。色んな物を分割することで手間は増えるけど時間的なスピード感も求められています。分割したことで顧客に提供するモノも分割することができるようになったのは良かったことなのではないでしょうか。


こうなったらもっと分割してみたらいいのかな?
物事には限度があります。細かく分ければ良いってわけではなく適切に分けることが重要なんですね。
みなさんも仕事を分割してみてはいかがでしょうか?

選択は自由なのか

みなさんはシーナ・アイエンガー教授をご存知でしょうか?
2011年NHKの白熱教室でも放送されたコロンビア大学の教授です。この講義の中には非常に興味深いことが題材として使われています。今日は彼女の講義をみなさんと一緒に見て行きましょう。

6種類のジャムと24種類のジャム

小売業では「品揃え」ということを耳にしますね。「品揃え」ってどういう意味でしょうか?

お客が望んでいる商品、あるいは求めている商品を適切に把握し、それらの商品を取り揃えること。単に商品の種類ではなく、ブランド、サイズ、色、柄、価格など消費者ニーズを捉えたキメ細かな品揃えが重要となる。今日のように競争が厳しいマーケットでは自店の特徴を出さなくてはならない。By 流通用語辞典

同じ商品でもいろいろ揃えることでニーズを掴みなさい。そうしないと厳しいマーケットでは勝ち残れないよ!って感じでしょうか?

彼女はこの「品揃え」に一石投じています。
アメリカのスーパーマーケットで実験したところ、試食に立ち寄っったお客様の数は24種類のジャムを用意した時のほうが6種類のジャムよりも多かったそうですが、実際に購入した人は僅か3%だったそうです。対して6種類のジャムで試食した人は30%の方が購入したそうです。10倍ですね。

多すぎる選択は悪?

この実験はスーパーマーケットだけではなく、401Kでの株式ファンドでも同様の結果になったそうです。401Kの株式ファンドの数は600種類ほどあるそうですが、その数を60種類まで絞った結果加入率が20%増えたそうです。
人は与えられたものだけでは満足出来ないにも関わらず選択肢が多すると選択すること自体を諦めてしまうのです。これは小売業にとっては機会損失ですよね。
一般的な小売業では約45,000アイテムが販売されており、世界最大の小売業であるフォールマートの品揃えは常時100,000アイテムが販売されています。凄いですね。ただし世界第9位のALDI(ドイツ)では1,400アイテムだそうです。トマトソースは1種類しか置いていないとか。この違いはどう捉えるかはみなさんの判断としたいと思います。

選択しやすくする方法

講義の中では課題を投げかけるだけではなく解決方法も提示されています。

  1. カットすること
  2. 具体化すること
  3. 分類を分けること
  4. 選択に慣れさせること
カットすること

無意味に重複した選択を無くすことで売上高は向上しコストを抑えることが出来ます。

具体化すること

その商品を選択することで他とどういった違いがあるのかを具体的に示すことです。具体化することを逆手に取っているものがあります。それは「クレジットカード」です。「クレジットカード」で買い物をした時、お金を消費したという実感がわかないために15%~20%ほど現金よりも多く買い物をするそうです。

分類を分けること

もし商品数が多いのであれば商品の分類を分けることで顧客の選択を助けることが出来ます。分類を分けるときは提供する側の意図ではなく、選択する顧客にとって意味のある分類分けをしてください。「日配」「生鮮」なんてもってのほか。顧客には何も意味のないものです。

選択に慣れさせること

最初に多くのことを選択させると選択することを諦めてしまいます。少ない選択から徐々に選択肢を広げることで人は「選択すること」に慣れ選択することを学ぶのだそうです。
なぜスーパーの店内では野菜から買い物をさせるのでしょうか?定説に囚われず売場を革新することで顧客の選択の方法も変わるのではないでしょうか?

商品を選んでくれることを待つのではなく顧客に積極的に選択してもらうためになにをすべきか。「品揃え」を良くするだけではなく顧客にとってよい「選択」のできる「品揃え」を考えることが必要なのではないでしょうか。

方眼ノート

最近話題の方眼ノートですがご存じですか?
書店に行くと本の横に方眼ノートが一緒に並んで販売されています。
今回は方眼ノートの使い方を見て行きましょう。

方眼ノートの効果

方眼ノートのには6つの効果があると書かれています。

  1. 記憶力が向上する
  2. ロジカルシンキングができるようになる
  3. 問題解決力が向上する
  4. プレゼンが上手になる
  5. モチベーションが上がる
  6. 勉強力が上がる

ノート3法則

わ~!すごいですね。こんな効果があるのなら使わない手はないですよね。でもノートでそんなに変わるものなのでしょうか?
この効果を出すために3つの法則があるそうです。

法則1:方眼ノートを使う
法則2:見出しをつける
法則3:3分割して使う 「現状」→「課題」→「行動」

方眼ノートを使うっていうこと自体が法則なんですね(笑)

3分割

この方眼ノート。3分割ってことなんですが、実際は4分割です。上に「見出し」エリア。下を3分割して左に「現状」真ん中に「課題」右に「行動」を書いていきます。それぞれのエリアに書いていく内容は。

「見出し」
新聞の見出しのようにテーマみたいなものを一言で言い表します。最初はこれが難しいようです。
見出しの他に「論点」と「結論」もこのエリアに書きます。お客様とのヒヤリングやコンサルティングを行っているような場合に「論点」がズレてしまっていることが多々あるようです。論点がずれていては結論が正しいなんてことありえないですよね。この論点が基盤となって考察していきますのでここも重要です。

「現状」
発生している事柄を事実に基づいて並べていきます。
何が起きているのか。「事実」を書く。

「課題」
左の事実によって発生している問題点、課題を並べていきます。

「行動」
左の課題を解決するために何をするべきかを並べていきます。

左から右に向かって情報を基に自分の考えを書いていくカタチです。
その結果最初の論点を踏まえて「結論」を導き出すわけです。これで左回りのサイクルが完成しますね。
補足ですがこの3分割の方法というのが東大ノートとか有名コンサルティング会社などで使われる手法なんだそうです。
「そんなに珍しいことじゃないな~」って思っていたのですが実際こうやってノートを取ったことがなかったのでやってみると「お!なんか違うな」って感じます。

いままではただ単に書き写すだけしかやってこなかったように思います。情報を書き写すことを「メモをとる」と言い、情報を活用できるように変換することを「ノートを取る」と言うそうです。これから「ノートを取る」ほうで仕事に活かしてみたいと思います。

あなたはどちらですか?

Oracle Java8 セミナー

第1回 Java SE 8 & IoT セミナー

 7月24日に開催されたセミナーに参加してきました。18時30分からの開催でしたが、仕事終わりの人たちで満員でした。

3月18日正式リリースされてかれこれ4半期ですが、日本では結構静かな感じがしていました。このタイミングでなぜ第1回なのか疑問もありましたが行ってみてなんとなくわかりました。

機能が盛りだくさん

今回のJava8はVMなどのバックエンド機能というよりも、文法的な大きな変更が発生していることが今回のセミナー開催の一つの要因だったようです。ここ2年ほど関数型言語スタイルというのが話題で、DevOpt2013でもScalaなどの関数型言語に話題が集中していました。マルチコアプラットフォームでどうやって並列処理や高速処理を行うかの鍵になっているのがラムダ式。現状の言語としてラムダ式の対応が一番遅かったのがJavaなのではないでしょうか。C#だとLINQで対応していますよね。僕自身なんとなくしか理解できないラムダ式。概要はわかるけど奥が深くてなかなかプロジェクトチームに浸透させることができませんでした。

説明上手って羨ましい

今回のセミナーはこのあたりの引っかかりやすいところを重点に「こうやって使うんですよ~」的なセミナー。でもちゃんと内部処理やここに至った経緯や目的などを説明して少し突っ込んだところまで理解することができした。上辺だけじゃないところが重要ですね。スピーカーはJava寺田佳央さん。何度かセミナーでお見受けしたことがありますが、今回が一番よかった。やっぱり好きなんだろうねって思っちゃいますよ。ぼくもこうでありたいと羨ましく思いました。

さっそく

現在、WEB系を中心にJavaを利用していますが、Java7SEで止めています。関数型言語スタイルへの適用なんかも考えて止まっていたのですが、今後はJava8SEとScalaの両方で攻めていくつもりです。Javaで開発するところで関連しているのがフレームワークですが、ぼくはPlay大好きっ子になっているので、Playフレームワークを中心に考えてしまうところがあります。現在リリースのPlay!2はJava用とScala用の2つがあります。今後はどちらを使っても高パフォーマンスを期待できるかもしれません。また、JavaFXがJava8から標準になったことでWindowFormの開発がC#からJavaに移行できそう。ということも大きい点です。JavaFXは2から8に一気にジャンプアップ!DataTimeAPIも大幅に改善され、調べることもたくさんですが今回のJavaは面白そうです。