AWSというアマゾンのクラウドサービスがすごい

今日は、アマゾンのクラウドのコンピューターのインフラであるAWSを色々と触りそれなりに収穫もあり勉強になりました。
AWSには数多くの様々なサービスがあるのですが、今回触ったのは画像などのファイルを保存できるファイルサーバのようなS3というものです。

今日はiPhoneから、領収書や請求書などの画像をアップしたりダウンロードできたりするアプリのプログラミンをしていたのですが、反応がすごく速いので、色々なウェブサイトで反応が遅いのは通信の問題ではなくて、サーバーの反応速度の問題ということがよく実感できました。

またファイルの耐久性がイレブン・ナインというそうで99.9999999%なんだそうです。最初は何のことか?と思ったのですが、ファイルが複数の場所にあるサーバーにバックアップされていたり、冗長化されているのでまずファイルが失われることは無さそうです。もちろん中小企業の実際に買えるサーバーと比べても信頼性が段違いです。

それから、もう一つ。去年2016年の11月に新しくできたサービスなのですが、アマゾンLightsail。こちらは月5USDと定額でAWSが使えます。データベースもつけるようなので是非そのうち試してみたいと思います。

クラウドの世界も進歩しています。AWSはこの他にも色々な種類のサービスのがあります。私の事務所のコンセプトの一つが「きれいな帳簿でお客様の商売を元気にする」ですから、これらの新しいサービスを取り入れて何か新しいサービスを提供できないかなと今日は色々考えていました。

PythonとJavaとリーン・スタートアップ

プログラミング言語としてはPythonとJavaではJavaの方が、作ったサービスは圧倒的に安定しています。実行する前にコードから実行ファイルをコンパイルするので、文法や型のチェックも行われバグも出にくいです。またPythonは実行時にファイルを読み込んで解析するのに対して、Javaは実行する前にコードをコンパイルして中間ファイルを作るので、スピードも速いらしいです。Pythonをやっていて速度で問題を感じたことはありませんが、事前の文法チェックが無いので、実行して初めて引数が足りてなかったなどの文法に誤りがあったことがわかることがあります。

文法チェックができるかどうかは、結局バグの多さに影響するので、コードの品質は最初からPythonやRubyなどの動的型付け言語に比べてJavaの方が圧倒的に上にナルト思います。ですので、Javaで既にWebサービスをサクサク作れるスキルのある方は、あえてPythonなんかを始めてみる必要など無いように思います。

こう考えるとPythonに比べるとJavaの方が品質的には圧倒的に上に見えるのですが、世の中ではPythonやRubyが人気です。なんとなくJavaやRubyが新しくて、Javaが古くてダサいもののようにも感じられます。世の中の多くのIT関連のスタートアップはPythonやRubyを使っています。言語のランキングでもPythonは着実に順位をあげています。

求人情報やIT関係の雑誌なんかを読むと部外者でもわかるのですが、有名どころのスタートアップのfreeeやCookpad、snapmartなどもサーバー側はRubyで開発しているようです。

そういう多くのスタートアップで、何故そうなのを考えてみたのですが、多分最近よく言われるリーンスタートアップと関係があるのかなと思いました。VCなどから出資を受けているところは、VCから開発言語についてもなんらかの助言を受けるのでは無いかと思います。そういうところがRubyなんかを使っているのは理由があると思うのです。

考えてみたのですが、一番大きな理由はきっとITサービスやアプリは、出してみない「当たる」かどうかわからないからでは無いかと思いました。よくある話は、一生懸命作ってみたけど、そんなサービスは誰も必要としてなかったとか、既にそんなサービスあったとかいう話です。つまり最初から当たることの方が珍しいので、いくつも素早く作ってマーケットでどんどん試せるスピード感のある言語の方がいいということです。

結局、自社でのITサービスの開発は何が難しいかというと、多大なコストをかけて投資をしても、誰にも必要とされず投資が無駄になってしまいガチだということです。私も、税理士・会計士という立場で開発に大金をつぎ込んで経営が苦しくなってしまう会社を沢山みてきました。

これはあくまで私の想像なのですが、Javaなんぞで作ると一つのアプリを作るのに時間がかかりすぎるので、世の中のニーズが無いとわかった時には傷が大きくなりすぎてしまっていると、世の中のITサービス企業を経営するような人達は考えているということなのかも知れません。

最近、今更なのですがJavaのJSFを触ってみています。Javaでもそんなにコーディングに時間がかかるようには感じません。以前はデータベースとクラスインスタンスの相互の変換やhtmlとして表示する部分の実装が大変だったのかも知れませんが、今のJPAやJSFは十分に簡単なように感じました。

コードは一度書かれると何年も使われるものです。使われるコードでしたら5年どころか10年くらいもざらに使われます。ですので、言語選択の際にメンテナンスのしやすさや機能の追加しやすは実はとても重要なファクターです。コードは機能が追加されていくごとにだんだん複雑になっていきます。型チェックが厳密にされる静的型付け言語の方がコードの規模が大きくなっていくにつれてどんどん有利になっていきます。IDEなんか使っても、静的型付け言語のIDEはEclipseでもNetBeanでもインスタンス名の後にドットを打つと、ちゃんと入力候補が出てきます。PythonのPycharmではそこまでよくできていません。動的型付け言語なので原理的にも無理なのかも知れません。

PythonやRuby、PHPなどの一瞬手軽にできるように見える軽量言語よりも、最近のJavaは、静的型付け言語のメリットがあるので、長い目ではもちろん有利で、短期的にもそれほどデメリットが無いのでは無いかと感じているところです。結構大手がRubyを使っていますが、コードが複雑化していくと、機能の拡張やメンテがこれからどんどん大変になって、開発効率が急激に落ちていくかも知れません。そこはテストなどのノウハウを使って上手にできているのかも知れません。

でも、これからのスタートアップはコードがどんどん複雑化していきそうならJavaなどの動的型付け言語を使う方が競争的にも有利に立てるかも知れないと思いました。

HerokuとAWS(Amazon Web Service)でサービスを組み合わせる。

Herokuを使ってサービスを作ると、どうしてもストーレッジの問題にぶつかります。Herokuはいいと思うのですが、ストーレッジがないのです。実は知られているようで、結構な数の人が知らなかった落とし穴でもあるようなのですが、Herokuでは画像が保存できません。OSとPythonやRubyなどの言語とデータベースは提供してくれるのですが、画像は保存できないのです。私はこれを知らなかったので、かなりびっくりしてしまいました。。

そこで仕方がなくAWSを始めることにしたのですが、このAWSのs3というサービスがかなり良いので、かえってよかったと思っているところです。

ご存知の方も多いと思いますが、HerokuはPaaSと呼ばれるWebサービスの一種で、ハードディスクのサーバーと、UbuntuなどのOS、それにデータベースやPythonなdの言語、各種のライブラリをまとめて提供してくれます。

私は開発環境がMacなので、自分のところのサーバーもMacでやれば、本番と開発環境が一緒なのでやりやすいのではないかと、色々迷っていました。パーミッションなどの扱いやすさは、手元で実際にいじれる実機のサーバーの方がわかりやすいですし、コストも実際にサーバー機を買ってしまってもそれほどのものではありません。ですが、Herokuなどのクラウドを使うと、12factor.netなどに書いてある設計上のデザインパターンに自動的に従うことになると言うのに惹かれてHerokuでやってみることにしました。やはりサービスが段々大きくなっていった時にメンテナンスが楽な方がいいですものね。それとやっぱり自己流でやるよりは、信頼性と実績の面からもで世の中で通用しているものでやってみる方が良いのかなと思いました。

s3の良いところは、まず、値段です。1GBあたりの料金は一月で約3円。データが100GBでも月300円です。私の事務所では領収書の画像データを仕訳データに翻訳して、画像と仕訳を一緒に整理して保存するサービスを提供しようと思っていますが、iPhoneで撮影した写真だとデータのサイズは約3MBです。ですので300枚保存してこれでやっと1GBで、これで、3円です。100GB使おうと思ったら、30,000枚の写真データを保存することが出来ますが、これで小さい会社なら20社分は行けるのではないでしょうか?

次に、信頼性。これは、Amazonの説明によると99.999999999%の信頼性があるのだそうです。 小数点以下に、9が9個つくので、データが消失する可能性は、1000万分の1と言うことでしょうか。自分のところでサーバーを持ってデータを保存するより、よほど高い信頼性です。使わない手はないですね。

その他、Pythonのboto3をはじめ、RubyやJava、.NETなどの他、おそらく、ほとんどの言語でファイルや閲覧権限等を簡単に操作できるモジュールが用意されています。プログラムの側から簡単にファイルをアップしたりダウンロードできたりするのです。ここだけ見ても、自分でファイルの保存や権限の設定をプログラム的に作るよりよほど簡単で確実です。ソフトウェアの世界に限りませんが、「巨人の肩に乗る」と言う言葉があります

こう言う新しいもの(全然新しくないけど)はお金を出してもどんどんやってみる方がいいですね。

PyCharmは買う価値があるか?それともAtomで十分か?

PyCharmは買う価値があるでしょうか。

使って1ヶ月くらいが経ちますが、私は買ってよかったです。多分、この1ヶ月でも十分に元は取れています。その前は、3−4ヶ月はAtomを使っていたのでよくわかります。やっぱり効率性が劇的に上昇しています。もう、PythonをやるのにAtomには戻れません。どうせプログラミングをするなら、良いツールを使うほうがいいです。効率性が素晴らしい。

Atomとは色々違うのですが、まず、デバッグが出来るようになるのが大きいです。Atomで作った場合は、Atomはエディタですから、直接実行することは出来ません。ターミナルから実行して、エラーが出たら、エラーのログをみて何が悪かったかを解析しなくてはいけません。

PyCharmならブレークポイントを設定できます。エラーが出る場所で、ブレークポイントで実行を停止して、各変数にどのような値が入っているかを確認できます。私が知っている範囲では、Atomのプラグインでは逆立ちしてもそんなことは出来ません。

PythonやRubyなどのスクリプト言語は静的型付け言語に比べて、文法チェックが事前にないところが弱点だと思っているのですが、PyCharmはインスタンスが割り当てられていない変数などに赤の波線を引いてくれます。これで実行する前にある程度のバグの元は潰してくれるんですね。

名前をまとめて変えてくれるリファクタリングの機能もあります。個人的に気に入っているのは、ある変数にマウスのポインタをあてると、同じスペルの変数が全部ハイライトされます。これが、コードの流れを追う時にとても楽になるので助かります。

この他にもテストなど、まだわかっていない機能が色々ある様です。

確かに、最初は有料のツールは躊躇すると思います。なので、最初の数ヶ月をAtomでやって、PythonやらDjangoなどのフレームワークをやっぱり自分ががちゃんと使うと言うことがわかってから買うのでも遅くはないと思います。それに、Atomなどのエディタで開発すると、その手作り感で、どの様に動くのかわかリます。それからPyCharmなどのIDEに移行するのでも遅くはないと思います。

ちなみに私は、もう、Atomに戻ることはなさそうです。