2016年11月20日日曜日

Google App Engine/Go(Go apps on App Engine) でWEBアプリを作るために

  • 2015年にGoがサポートされ、最近東京リージョンが発表されるなどGAEの取り巻く環境は、改善されてきています。また、AWS Lambdaのような、Paas的なサービスがリリースされPaas的なサービスが増えてきています。
  • Paasの古参GAE/GO でWebアプリを作るための情報収集をしました。

概要

まずは公式から

公式GAEのサービス概要

Google App Engine は拡張可能なウェブ アプリケーションとモバイル バックエンドを作成するためのプラットフォームです。App Engine には、NoSQL データストアや Memcache、ほとんどのアプリケーションで使用されているユーザー承認 API など、さまざまな API と組み込みサービスが用意されています。

App Engine は、受信したトラフィック量に応じて自動的にアプリケーションを拡張するので、未使用のリソースに対して費用が発生することはありません。 コードをアップロードするだけで、Google がアプリの可用性を管理します。サーバーのプロビジョニングやメンテナンスを行う必要はありません。

まとめると↓

コンセプトと機能

  • スケーラビリティとアベイラビリティ
  • Web/MobileアプリプラットフォームのPAAS
  • (Webアプリのスタックで)Httpサーバレイヤー以下を提供
  • 加えて、認証など通常アプリサーバレイヤーで実現する機能も提供

ざっくりとしたイメージだと、Javaでいうサーブレットレベルのところまで独自開発したPAAS。特定の用途に特化したため、DBやキャッシュ、ロードバランシングなども全て独自のものを作ってある。また、一般的なレイヤーにとらわれず、認証など必要なものは入れた感じです。

コストが下がる要素

  • インフラの物理的なコスト
  • インフラ構築・運用コスト
  • インフラ設計コスト(※GAEの構成を理解して適切な設定をする必要はあるが、従来に比べれば低い)

コストが上がる要素

  • GAEの構成を理解する必要がある
    • HTTPサーバの特性、負荷分散のしくみなど
    • HTTPSやドメイン関連で実現できないことがある
  • GAEの各サービスを理解する必要がある
    • NoSQL(Datastore), Memcacheなど
  • GAEの開発手法を理解する必要がある
    • 開発環境、テストフレームなど
  • (上記特性を生かした)GAE向けの設計にする必要がある
  • 情報が古い場合がある。最新の情報は1次情報を確認する

情報源

GAEの書籍は他にもいくつか出ているので、1冊手元にあるといいと思います。

また、ネット記事は2013年くらいまでのが多いですが、大体出てくるので、個別のトピックに関しては、都度検索する方が良さそうです。

Sample

実際に

GAEは特定用途に特化したGoogleらしいサービスです。確かにゲームなど想定するアクセス数のレンジがかなり広い場合は有効だと思います。

GAEの紹介ケースで、メディアなど突発的ににアクセスが増えた場合に自動でスケールするというのがあります。GAEが出た当初はそうかもしれませんが、現在は状況によりけりかと思います。上記の本にもありますが、GAEはサーバ1台でまかなえなくなったときに真価を発揮するですが、Iaasのバランシングの制御も今はかなり楽に柔軟にできるので。

実際に開発する場合は、GAEの設計モデルとDatastore(GAE向けに開発されたKVS)、各種API群をよく理解して使いこなすのが肝です。

AWSのLambdaでもそうですが、Paasでは設計モデルと各種サービスとの連携の理解が不可欠です。従来のWEBフレームワークを使うのと同様に、しっかりと習熟するレベルになっておけば、モデル自体はシンプルなので開発効率が高まります。

単純にWebアプリを作るだけならば、得意なWAF+Iaasで作った方が簡単です。 また、PaasだとOSSではないため、動作がわからないときは、ソースを見るのは通じないですね。

「得意なWebアプリ開発プラットフォームにGAEを加えよう」という考え方で取り組む方が、しっくりきそうです。

ではよきGAEライフを!

2016年11月16日水曜日

要約サービスflierを使ってみました

サービスの概要は、以下です。 公式サイト サービス紹介

「本の要約サイトflier フライヤー」は、多忙なビジネスパーソンが本の内容を効率的につかむことで、ビジネスに役立つ知識・教養を身に付け、スキルアップにつなげることができます。具体的には、新規事業のアイデア、営業訪問時のトークネタ、ビジネストレンドや業界情報の把握、リーダーシップ・コーチングなどです。

いくつか無料プランの本を読んでみました。

無料プランには、最近の本ばかりでなく、孫子や、利己的な遺伝子など古典的な作品もあって、読んだことのある本がどのレベルで要約されるのかがつかめます。

このチョイスはかなりいいと思います。

一通り使ってみた感想はこちらです。

  • 数行の要点 => 著者紹介 => 要約者レビュー => 要約 となっていて、最短3分もあれば概要がつかめる。
  • 出版社と連携。プロのライターの要約。質が高い。
  • 本をよく読む人なら割安と思います。

    ゴールドプラン(月額2,000円(税別))
    毎月20~30冊新たに追加される要約が読み放題。さらに、これまでに掲載した要約についても制限なく読んでいただくことができます。
    シルバープラン(月額500円(税別))
    これまでに掲載された要約のなかから、ひと月当たり5冊まで閲覧可能。閲覧した5冊については、翌月以降も何度でも読むことができます。
    (過去に閲覧した要約は、当月の閲覧数に含めません。ただし、ゴールドプランからシルバープランに変更した場合、ゴールドプランご契約時に閲覧した要約であっても、1冊お読みいただくたびに当月の閲覧可能数が1冊分減ります。)

専門書や技術書など、自分のホームグラウンドの本は、相応の時間をかけても読み込みますが、専門分野外の時事的な話や新刊は、流し読みで済ませてしまうことも多いと思います。

そういった流し読みの代わりに、要約で内容をつかむのは効率面では、かなりいいと思います。

気にいった本があれば、購入して読み込むことができます。

要約者レビューや、この本を読むべき理由など、購入したくなったときの最後の一押しをしてくれる紹介もしっかりあります。

技術者としてはSafari Onlineがほしい

オライリーを中心とした技術書が月額40ドル程度で、無制限に読めるSafari Online。英語版のみです。

技術者としては、書籍関連のサービスで、一番日本語化してほしいサービスですね。

あとは、論文形式で数10ページレベルの書籍を集めたサービスがあるとうれしいです。

flierの要約よりも一歩踏み込んだ内容で、30分程度で読めて、数百円程度で、水増しのエピソードなどがないエッセンスのような書籍を集めたサービスです。

kindleの低価格書籍はそうなってきてるような気がします。

時間は有限なので、効率的に情報収集したいですね。

よい読書ライフを!

2016年11月13日日曜日

Haskell MTL(モナドトランスフォーマーライブラリ)の資料のまとめ

MTLを使うための資料を整理しました。

集めた資料を見てみると、まずは、モナド、モナドトランスフォーマーをよく理解して、ライブラリの各モナドを一つ一つ使えるようにするという流れがよさそうです。

モナドトランスフォーマーの記事を探すと、モナド自体はわかっている前提の記事が多いので、モナドになれていない場合は、モナドからやった方がいいと思います。

モナドは、実装だけを考えると、単なる型クラスにすぎません。Haskellの実装上は、モナド則を満たしてなくても使用できます。

まずは、モナドクラスの仕様をみて、実際にいくつかサンプルを作ってみてから、モナド則をみるといいと思います。

ここでは、ネットの記事をまとめましたが、手元にある本のモナド・モナドトランスフォーマーの箇所をしっかり読み込んでわからないところは解説記事を参照する方が、よく理解できると思います。

  • プログラミングHaskellは、シンプルでモナドの解説がしっかりしていて、haskellの入門におすすめですが、モナドトランスフォーマーの説明がないのでそこは他の資料が必要です。
  • すごいHaskell楽しく学ぼうモナドの解説が懇切丁寧です。プログラミングHaskellは、Functor, Applicativeなどの説明はないですが、こちらはそれぞれの関係が詳しく載っています。ただ、モナドトランスフォーマーの説明はありません。
  • 関数プログラミング入門 ―Haskellで学ぶ原理と技法こちらは、モナドトランスフォーマーの説明があります。

ライブラリの紹介記事はMTLで検索してもなかなか出てこないので、Control.Monad.Stateなど具体的なモジュール名で検索する方がよさそうです。

今回は、State, Reader, Writerの紹介記事をまとめました。

MTL、モナドトランスフォーマー全般

Control.Monad.State

Control.Monad.Reader/Control.Monad.Writer

2016年11月12日土曜日

HaskellでmonadTのあとはMTL

金曜日、会社の同僚とその友人とご飯を食べてきました。 全員アプリエンジニアで、特に同僚の友人のエンジニアは、Haskellエンジニアでした。

Haskellはモナドトランスフォーマーをやったところで止まっていたのですが、その話をすると、アドバイスをしてくれました。

MTL をやれば、一通りのことはできるよ

MTLは、モナドとモナドトランスフォーマーでよく使う処理をまとめたライブラリです。

モナド系の標準ライブラリのデファクトとなっているそうで、本格的なHaskellプログラムを書くときはもちろん、最近のライブラリでよく使われているので、読むときも楽になるということでした。

なので、ここまで頑張ってマスターすれば、やりたいことは大体haskellで実装できるようになるよと言われました。

見てみるとControl.Monadにある各種モナドとモナドトランスフォーマーです。

確かにReader, Writer, Errorなど使いでがありそうなモナドがそろってます。

モナドトランスフォーマーを勉強すると、どこかで使ったことはあると思います。

Haskell熱が戻ってきました

他にもNIXOSの話や、GHCの言語拡張、さらには、Haskellなどのプロダクションとしては、少数派だが、強力な言語を導入するにはどうすればいいかという話題なども出て刺激的でした。

プロダクションレベルだと、GHCの拡張も厳選した20〜30個くらいを設定しているそうです。

ただ、このあたりの話はリファレンスくらいしかないらしく、Haskell力がはっきりとでてしまいますね。

最近は、Elixirばかりでしたが、次のステップが見えたので、Haskell熱が復帰してきました!

よきモナドライフを!