2015年6月30日火曜日

【Azure】ソリューションチェック1

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

現在はMicrosoft Azureについて連載中です。
初心者につき至らぬ部分も多いかと思いますが、最後までお付き合い下さい。

クラウドの個性とは?

さて、そもそもとしまして、クラウド基盤を使うことにどんな利点があるのか?
そう問われれば、まず出てくるのが以下の辺りでしょう。

  • 自前でサーバを持たなくて良い。
  • 保守が楽。
  • コスト効率が良い。
  • 大量アクセスにも対応可能。

まあそうなんですけどね。

しかし、世の中にはクラウド基盤は沢山あるのです。
そして大概のクラウド基盤は上記の要件を満たしています。
(満たしていないのにクラウドを騙る詐欺サービスもありますが、私はそれをクラウドとは認めません)

では、どんなクラウド基盤でも上記の要件を満たすわけだからクラウド基盤はどれを使ってもみんな同じか?
違います。
クラウド基盤には個性が存在します。

「あっちのクラウド基盤には出来ないけど、私の所の基盤なら出来るよ!!」

という要素が存在するのです。
なので、クラウドの個性を意識せずに『クラウド』と言ってしまうのは、言わば以下のような感じ。

  • DBはみんな同じじゃないの?⇒いや、SQLが使えるのは同じだけど、OracleにはあるけどMySqlには無い機能もあるよ。
  • パソコンはみんな同じじゃ無いの?⇒いや、MACとWindowsで全然違うよ。
  • 温泉ってどこも同じじゃ無いの?⇒いや、あっちは風呂入って寝るだけ。こっちはマッサージも用意してある。
  • 洗剤ってみんな同じじゃないの?⇒使ってみれば直ぐ分かるけど結構違うよ。

クラウドの個性を知らずにクラウドを始めるのは、
こいくち醤油とうすくち醤油の違いを知らずに料亭を始めるようなもの。

こんなノリじゃマトモなサービスは提供出来ないですよね?
なので、クラウドを始めるときは、まずそのクラウドの個性を知るところから始めなければなりません。

ソリューションチェック

では、Microsoft Azureにはどんな個性があるか?
そこを調査していきたいと思います。

クラウドの個性と言っても、正直な話、機能や値段、拡張性、開発効率などなど色々あり過ぎて全部は追いきれません。
このため、今回は余り深掘りはせずに、ショートスタート。
とりあえず始めるにあたっての初歩的な所から調査していきたいと思います。


まず、Azureのトップページに載っているのがこちらです。


6種類のソリューションが載っていますね。
これがAzureのイチオシする6大機能と言って差し支えないでしょう。

それぞれ解説を以下に記載します

Web Apps

Azureの代表的サービス。SaaSと呼ばれるクラウドの中でも代表的な形態の一つ。
Webアプリケーションの展開に最適なパッケージです。

「Windows Server」と「SQL Server」が最初から用意されており、開発者は自前のアプリを載せる所からスタート出来ます。
楽チンですね。

しかし、逆に言えば「Windows ServerじゃなくてLinuxがいいんだけど」「SQL ServerじゃなくてOracle使いたい」みたいな要望には対応出来ません。
最初から決まった構成で構築済みのサーバにみんなで便乗するのがSaaSですから。
制約がある反面、安く使わせて貰えるのがメリットです。

Visual Machine

Azure第二の弾丸。IaaSと呼ばれるクラウドの中でも代表的な形態の一つ。
早い話が、仮想マシンを丸ごと1コ借りるイメージでしょうか。

Linux、Oracleなど大概の要件には対応出来ますが、自分で一から構築しなければなりませんし、そこそこ値段もするのがデメリット。

それなら自分でサーバを持つのと何が違うかって?

これは仮想マシンを借りるだけですので、物理的にサーバを買う必要が無く、それだけ初期費用が安いですよね?
また、サーバが物理的に故障することもありません。
地震でデータセンターが海の底に沈んでデータが消し飛ぶ心配もしなくて良いです。
物理的制約から解放されるだけでも価値があるのです。

地震が心配なら日本のデータセンターを使うな、という一つの結論がここにあります。

(まあ、Microsoftの運営する複数のデータセンターが同時に核ミサイルの攻撃を受けたら流石に終わりでしょうが、それを言っちゃあ何も出来ません)

なお、クラウド界の王者であるAmazonAWSも似たようなサービスを提供しています。

SQL Database

Microsoftの誇るデータベース「SQL Server」とは別の話なので注意!!
「SQL Database」という、大量処理に特化したデータベースを提供して頂けるようです。

「大量負荷に対応する為には、普通のDBではなく大量処理対応型DBが必要」

この要件に対応するためのものですね。

Mache Lerning

クラウド分析の予測サービスと言う触れ込みです。

「自分のサイトにログインしているこの人は、他にどんな商品に興味があるのかな?」とか、「最近の世の中の流行キーワードは?」とか、そういうことを分析出来る機能を提供している模様です。

私はこの手のマーケティング手法は未経験者ですので敷居が高いですが、連載を続けるにつれて、これらの機能についても検証していきたいと思います。

モバイルバックエンド

スマホアプリの拠点として稼働する各種機能を備えたソリューションです。

普通のWebサイトと、スマホ向けサイトって何が違うのかって?

例えば、スマホでSNSとかを使っていると、「○○さんが投稿しました」みたいな通知が来ますよね?
あれは「プッシュ通知」と言いまして、拠点となるサーバ側から情報を送り込んでいるのですよ。

そういうスマホ特化機能が目白押しのソリューションです。

RemoteApp

Windowsを展開するMicrosoftならではの必殺技。
シンクライアントでWindowsOSを使用出来ます。

今現在、私達は自分のPCにOSを入れていますが、近い将来は一般ユーザに至るまで全部シンクラ化する可能性も十分にありますね。

終わりに

上記はAzureのトップページに載っている情報をサラッと眼を通しただけですが、それでもこれだけ豊富な機能があることに驚きです。
逆に言うと、勉強するべき要素が多いということでしょう。

これから頑張って調査を進めていきます。

最初は一番の代表サービス「Web Apps」で何かサンプルアプリを作ってみたいと思います。

2015年6月16日火曜日

【Azure】Microsoft Azure チャレンジ編 初めに

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

ここ最近はクラウド基盤「Google App Engine(以下、GAE)」について連載を継続してきましたが、世の中には他にもクラウド基盤は沢山あります。
他のクラウド基盤も調査して行かなければ……。

と言うわけで、この辺りで別のクラウド環境「Microsoft Azure」にチャレンジしていきたいと思います。

クラウドのシェア調査

まずは以下の図をご確認下さい。
アメリカの調査会社「Synergy Research Group」がリサーチした、クラウド環境のシェア率です。

Synergy Research Groupによるクラウド環境シェア調査


  • 1位:Amazon:27%
  • 2位:Microsoft:10%
  • 3位:IBM:7%

そこから先はGoogleの5%、SalesForceの4%と続くようです。
やっぱりAmazonが最強ですね。

上記のリサーチだとAmazonのシェアは27%ですが、私としてはちょっと意外です。
ネット上のニュースを見ていますと、「クラウド=Amazon」くらいの勢いで情報が氾濫しているような……。
私の中のイメージだとAmazonのシェアは75%くらいだと思っていました。

私が頑張ったGoogleは4位の5%です……。
まあ、面白いものだと思いますが、業務用としては如何なものかという面は確かにありますからね……。

ちょっとした便利アプリを作ってリリースするとか、WebAPIの拠点に特化するとか、限定されたシチュエーションであればGAEは最強だと思っています。
しかしながら、その条件に合致する案件が見当たりません。
ビジネスの路線として掲げるには些か厳しいところがあります。
チャンスがあれば案件で採用したいところですが、しばらくは様子見です。(残念)

5位はSalesForceです。
私はSalesForceについてもチラッと触ったことがあるのですが、あれはSalesForceに対する専門知識が要求されますね。
非常に難しいです。
また、SalesForceは特に営業支援ツールとしては非常に無敵のパワーを発揮するものですが、一方でその機能が使えるからこそ意味があるもので、
それ以外の関係無い案件には大して利点もありません。

私が思うに、GAEもSalesForceも、クラウド環境としての圧倒的高性能を有しながら、案件として採用出来るパターンの狭さ故に遅れを取っているイメージがあります。
適した案件を安定供給して貰えるなら大歓迎なのですが、それが無いビジネス環境ですと、活躍する機会に巡り会えません。

対してシェアNo.1を誇るAmazonはIaaSと言いまして、細かいことはさておき、仮想サーバを丸ごと一個借りるのに近いイメージ。
何でもありなのです。

対して、2位のMicrosoft AzureはPaaS形式と言いまして、簡単に言えば最初から用意されているWindowsServerにアプリだけ載せるようなイメージ。
Amazon程ではありませんが、自由も結構効きます。

3位のIBMは、ちょっと詳しくは存じませんが、IaaSとPaaSの両方をやっているようです。

これらから総合するに、私はクラウド市場をこのように考えています。

クラウド環境のシェア=汎用性である、と。

もちろん値段とか機能とかも重要ですよ?
でも、GAEやSalesForceみたいに機能・性能こそ最強でも個性が強過ぎるクラウド環境は案件が付いてこないのです。

「要件定義を完全にコントロール出来るならGAEという選択肢もあるが、実際にはそう都合良く行かない」

という現実が横たわっています。

クライアントから無茶な要求を言われても対応しなければいけない、という切実な事情を踏まえると、とりあえずAmazonみたいな汎用性の高いクラウド環境を選んでおくのが一番無難なんですね。

このシェア率はリスクマネージメントの結果が反映されているのだと、Tacyは考えています。

なぜAzureか?

以上により、クラウドを始めるならAmazonを選ぶのが一番無難でオススメです。

しかしですね、Amazonは仮想サーバを1コ借りるのに近いイメージの体制を取っているだけあって、設定作業という名のサーバ構築がそれなりに大変なのです。

自由度とのバーターなので仕方ありませんが、省ける作業は省きたいでしょう?

と言うわけで、自由度は1ランク下げても良いから、もう少しお手軽なクラウド環境を選ぶとなると……、それがAzureなんです。

例えば、DBはSQL Server限定とか、渋い制約を課せられてしまう部分も少なくないですが、一方で「それくらいの制約なら、こっち側で合わせてあげることができるかな?」と思えなくも無い。

自由度を取るか、保守性やコストパフォーマンスを取るか、絶妙なバランス感覚を要求される所ですが、Azure程度なら丁度良いんじゃないかと思うわけですよ。

そして、同じ事を考えている人も多いのか、Azureは成長度が違います。

AWSの成長度が2014年で51%なのに対し、Azureは96%!!

Azureの成長力はAWSの2倍!!

シェアならAmazonですが、成長力ならAzureが上なのです。
これはAzureの絶妙なバランス感覚を物語った数字な気がします。
まだしばらくAmazonの優位が続くと思いますが、いずれAzureが逆転するかもしれません。

総括しますと、

  • 完璧を期するならAmazon。
  • 最適を狙うならAzure。
  • 最強を目指すなら個別に吟味。

私はこのクラウド環境にこのようなイメージを持っています。
そして今回、私は後者についてチャレンジしてみようと思い立つに至りました。

終わりに

というわけで、来週からは新連載「Microsoft Azure」を初めていきたいと思います。

調査を完了してから執筆するのではなく、手探りで進めながらその風景を実況するという体裁で進行します。

長期連載になりますが、応援よろしくお願い致します。

2015年6月10日水曜日

【GAE】メール送信

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

現在はクラウド基盤「Google App Engine(以下、GAE)」の連載中です。

今回のテーマはメール送信です。

実装


GAEのメール送信は簡単です。
まずはソースからどうぞ。

public void send() throws Exception {

        logger.fine("メール送信:開始");

        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);

        MimeMessage msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress("fromアドレス"));
        msg.addRecipient(
            Message.RecipientType.TO,
            new InternetAddress("toアドレス"));

        msg.setSubject("タイトル", Encode.ISO2022JP);
        msg.setText("本文");

        // 送信実行
        Transport.send(msg);

        logger.fine("メール送信:終了");

    }

特に特記事項はありませんね。
Java標準のメール送信ライブラリ「JavaMail」が使用出来ます。

サンプルはネット上に無数に転がっていますのでお好きなサイトを参考にして下さい。

特記事項:FROMアドレス

しかし、やっぱりGAEには特性があるんですね。
それは「FROMアドレス」の制限です。

メールというのは非常に脆弱性の多いツールでして、「スパム」というものがあります。日本語で訳せば迷惑メールです。
GoogleはGAEをスパムとして使われてしまうのを防ぐ為にスパム防止機能が入っています。それがFROMアドレス制限です。

以下の2種類のアドレスしかFROMに使用出来ません。

  • Google App Engine で Application の管理者として指定しているアドレス
  • 現在のログインユーザのアドレス

なので、「メール送信者は送信専用のダミーアドレスにしておきたい」とかは出来ないのです。
ちゃんと使用可能なアドレスをそのプロジェクトの『管理者』として登録する必要があります。ご注意を。

Gmai連動

しかし、不便なことばかりではありません。
GAEから送信したメールは、何とGmailと連動しているのです。

会社のアドレスなので画面キャプチャは載せられませんが、例えば上記の送信パターンの後者である「GAEアカウントでログインしているユーザのアドレス」で送信した場合、
Gmaiから「送信済みメール」を開きますと、GAE上で送信したメールの送信履歴が残っています。

なので、「メールの送信履歴を保存したい」という要望があった場合でも、自分で履歴管理機能を作り込まずとも、Gmailを見れば自動的に出来ているわけです。
これは凄い機能ですね。

業務用としては非常に信頼性を担保してくれるものだと思います。

費用

このようにキラリと光る便利なGAEメール送信機能ですが、大きな落とし穴も。
課金があるんですね。

ズバリ、
  • 最初の100通は無料。
  • 以後は、100通毎に0.01$
このような料金となっています。
メール如きで金を別枠にするなんて……、と思いますが、これもスパム対策なのかもしれませんね。

1通1円くらいの費用感覚ですので、何万通も無数にスパムを送ると赤字になるということにご注意下さい。

終わりに

以上です。

GAEからのメール送信は非常に簡単ではありますが、私としては「課金」がネックだと思います。

メールなんて前時代的なツールは使うな、というのが先進的なんじゃないでしょうか。

要件にも依りますが、どうしてもメールを大量送信しなければならないという都合がある場合、私だったらメール送信サーバだけは別に用意しますね。

メールの文面や宛先情報はGAE上に保存しておいて、メール送信サーバで常駐するメール送信バッチがGAEにアクセスする。
そしてデータだけ取得し、メール送信サーバにてメールを送信する。

こういう手順なら課金上限には悩まされずに済みますよね?

このように、場合によってはGAEの強い部分だけを活用し、弱い部分は潔く別に用意するという柔軟な戦術もGAEには必要なのです。