Djangoでアプリを作りましたが、これを公開するのにローカルのマシンを使うか、クラウドを使うかで迷いました。 そこで、どちらが良いのかメリットとデメリットをそれぞれあげて、有利不利を検討してみようと思います。 まず、コスト ローカルでやる場合には、開発と同じ環境の方が楽です。私はmacのノートで開発しているので、Mac Miniサーバーを考えています。ツールを入れる手順などが、開発環境と全部一緒にできるので、かなり楽だと思うのです。値段も、一番安いもので5万円くらい、CPUがいいものでも7万円ちょっとです。他のことにも使えますから、それほど高い買い物とは言えないと思います。 次に、クラウドです。今回のアプリは領収書の画像を保存するのでデータの保存量がだんだん大きくなっていきます。一枚の領収書のデータサイズを1MBとして、1000枚で1Gです。1年に1,000枚として、お客様1件で1GBという計算になります。 簡単な計算ですが、100件のお客様に使用していただくとすると、100ギガですが、アマゾンのS3の料金表を見ると最初の 最初の50TBまでは、1GBあたり月$0.025ドルだそうです。つまり、1件につき月3円、100件で300円、年間でも3,600円です。べらぼうに安いですね。 ソフトウェアの設計の良さ 次にソフトウェア自体の作り方ですが、クラウドを使うことによる大きなメリットがあります。このメリットはある文章を読むまで私も意識していませんでした。 Herokuでサービスを公開する場合、色々面倒くさい設定が必要になります。例えば、まず本番環境に展開する場合には、Githubを通してpushする必要があります。また、依存関係のあるモジュールをあらかじめリストアップして置く必要があります。また、Hrokuでは画像ファイルを保存することができないので、AmazonのS3などの外部ストーレッジを利用する必要があります。 かなり面倒くさいのですが、Herokuで展開する過程で、Herokuの提唱するソフトウェアを効率的に開発するための12の提言に自動的に準拠することになります。この12提言は12factors.netとサイトで公開されています。この12提言がいいのです。 例えばですが、以下の通りです。 1.) セットアップ自動化のために 宣言的な フォーマットを使い、プロジェクトに新しく加わった開発者が要する時間とコストを最小化する。 2.) 下層のOSへの 依存関係を明確化し、実行環境間での 移植性を最大化する。 3.) モダンな クラウドプラットフォーム 上への デプロイ に適しており、サーバー管理やシステム管理を不要なものにする。 4.) 開発環境と本番環境の 差異を最小限 にし、アジリティを最大化する 継続的デプロイを可能にする。 5.) ツール、アーキテクチャ、開発プラクティスを大幅に変更することなく スケールアップできる。 この観点からはクラウドでやる方が圧倒的によさそうです。 簡単さ 短期的にはローカルの方が簡単かもしれません。ディレクトリ構造は自由に変更できるし、DBなどのインストールも自由です。開発と本番環境も、例えばサーバーでmac miniを使えば同じになります。使い慣れている環境の方が、学習コストも少ないのでツールなどは使いこなしやすいです。 上記の比較からは、クラウドの方がよほど有利に見えます。私は、新しいサービスは、とりあえずローカルではなく、クラウドで始めてみようと思いました。
Day: May 16, 2017
システム開発