小さなウェブサービスが動くようになるまでにやった事を書いてみました。

ウェブサービスを作って公開するところまでこぎつけました。一つのサービスをインターネットで公開できるところまで行くのには、結構な時間と努力がかかります。平日は出勤前の1日1-2時間、土日は合計で7時間くらいやるとして、1週間で15時間、1ヶ月で60時間、最初の頃はそのプログラミング言語の知識レベルもそれほどでもないので時間がかかります。私の場合は、サーバー側とスマートフォン側でそれぞれ3ヶ月はかかったので全部で6ヶ月はかかりました。このウェブサービスだけで合計で360時間はかかっています。それ以前の別の色々な技術の学習にも相当時間を使っていますが、ここにはカウントされていません。

使った言語は、サーバー側では流行りのライトウェイト言語であるPythonを使いました。フレームワークはPythonのでは一番(?)メジャーと思われるDjangoを使いました。Pythonは比較的習得しやすい言語で、モジュールも多く揃っています。最近流行りの人工知能に使う有名なモジュールがPythonで書かれていると言うこともあり、Pythonの本も多く出ています。Djangoはとてもよくできたフレームワークでとてもわかりやすいです。MVCがきちんと別れているので、将来の仕様変更があってもメンテはしやすいのではないかと思います。

プログラムを覚えてウェブサービスを公開するまでには、とても多くのマスターすべきことがあります。この他に、実際にウェブサービスをスマートフォンで使えるようにするには、サーバー側のプログラムを書くだけではなく、スマホ側のプログラミングも必要です。通常これはSwiftと言うiPhone専用の言語や、Androidという専用の言語を使います。私は今回はAndroidの方は諦めて、iPhone用の方だけ書いています。SwiftはDjangoなどのライトウェイト言語に比べて、変数には型指定をしなくてはいけないし文法が厳密です。最初は走らせる前からエラーが出まくるので大変なのですが、実際にコンパイルして動くようになった段階では正体不明のエラーがでる割合が減るので、トータルでは時間効率は良いように感じます。

その他に、サーバーを動かすのにはLinuxと言うOSを使うことが一般的です。私は最初はマシンが手元にある方がメンテナンスが簡単だと思ったので、事務所のMacMiniをサーバーに使う方針でした。でもHerokuとAWSというクラウドのサーバーを試して、その快適さと便利さにびっくりして、AWSを使うことにしました。サーバーも普通にハードを買ったら一つで10万円、2つ揃えたら20万円はかかりますが、AWSならLightsailと言うサービスが月500円から使えます。スピードも十分に速いのでとても快適です。MacMiniは買ってしまったのにほとんど使っていないので、勿体無かったなと思っていますが、事務所のファイルサーバーのバックアップか何かに使おうと思います。


(尾瀬 至仏山 後ろは福島県の飯豊山?)

よく、20時間使えば大抵のことは概略くらいはマスターできると言いますが、これはある程度は本当だと思います。20時間使えば、Pythonをインストールして簡単なプログラムが動くところまではできるようになると思います。そして、次に20時間を使えばDjangoのチュートリアルをやって、簡単なウェブサイトが動くようになるところまでは行けると思います。Swiftは20時間では本当に簡単なことしか出来ないともいますが、それでもplaygroundという簡易の実行環境で、雰囲気を掴めるとこくらいまでは行けると思います。

でも、ウェブサービスはこれらを全部使うので、それら全部に20時間が必要です。その他にもデータベースとかデザインとか、実は細かいそれらの技術の多くの技術が全部必要になるので、それらが組み合わされないと動くものにはなりません。それなりに数百時間は必要だと思います。

ただそれでも、技術はやっていれば誰でもそれなりにできるようになると思うのですが、一番難しいのは何を作るかですよ。誰かに使ってもらえなければ、結局何を作っても意味がないです。何を作るかは商品設計そのものなので、世の中で誰がどのようなことに困っていて、それを今の技術を使ってどう解決するかを見極めなければなりません。つい、自分のアイディアが良いと思って固執してしまいがちです。そこが難しいんですよね。そこが。

Node.jsを触ってみました。意外といける。

最近、Node.jsと言うものを触ってみました。まだ、触り始めたばかりではありますが、サーバー側もJavaScriptで動かすと言うのは面白いアイデアではあるなと思いました。

本は私の好きな「クジラ飛行机」さんの「いまどきのJSプログラマーのためのNode.jsとReactアプリケーション」を買いました。この方の本は、出てくるサンプルもきちんと動くし、面白いので、楽しめるし勉強になるのです。

Node.jsとReactをちょっとやってみようと思ったきっかけは、takuyaさんと言うエンジニアの方のブログで面白い記事を読んだからです。

「Markdownエディタを作って月15万円稼ぐまでにやったこと — Inkdrop
アイデア探しから最初の売り上げ、集客して成長させるまでの道のり」

この方は、ご自分でMarkdownエディタを作って売ってらっしゃるのですが、この方の採用している技術がReactです。そっか、Node.jsとかReactとかもう十分に実用の段階に入っているんですねー、なんて今更?気づいて、では触ってみようと思った次第です。

Node.js/JavaScriptのいいところはフロントエンドでもJavaScriptを触るので、使う言語が同じになることで、これでフロントエンドも頑張ろうと言うハードルがかなり下がります。Paythonなどの別の言語でサーバー側を書いていると、ブラウザー側でJavaScriptを触るのに言語を思い出さなくてはいけないので、心理的なハードルが一段あるような気がするのですが、その億劫感が無くなります。

あと、これは私の感覚が古いのかもしれないのですが、Pythonでは変数に型指定をしないのでバグが混ざりそうで不安になります。JavaScriptではいちいち変数を宣言する必要があるので、それだけでも少し安心して懐かしい感じがしてしまいます。

人に使ってもらえるウェブサービスの作り方

人に使ってもらえるウェブサービスを作れるようになるまでは長い道のりです。作るのには技術を覚えたり、実際にコードを書いたりと、結構長い時間がかかります。以前に、簡単なことは20時間あれば出来るようになるというようなタイトルの本がありましたが、実際に動くサービスを作るには、プログラミングを覚えるところから始めるとしたら300時間くらい(一日3時間として100日)くらいは最低限必要と覚悟しておいた方がいいでしょう。多分、実際にはもっともっと必要で、実際にちゃんと動くサービスを世の中に公開してみようとしたら、ちょっとしたものでもきっと1000時間くらい(1日3時間で300日)はかかります。

しかし、それでもプログラミングは、身につけたらその時間を超えてあまりある価値があると思われます。1000時間くらい使ったとしても、元はきっととれてます。ソフトウェアは問題解決の魔法のツールです。どんな大量の計算も高速で、あっという間に、正確無比にやってのけます。近年、騒がれているFintechも、大きな視点でいうと効率化が可能な銀行など金融機関の業務を、安価で大量に正確に処理できるITの技術で置き換えようというものです。ソフトウェアが書けるということは、この魔法のような力を身につけることを意味するのです。

しかも世の中のITの技術の進歩はすごいものがありますから、上手くその技術に乗って使えればアイディア次第で十分に面白いものを作れると思います。ソフトウェアは問題解決のツールです。

今回は会計に関係するウェブサービスを一つ作って世の中に提供してみるまでの経過とポイントと思われるものを簡単にまとめて見ました。

技術を選ぶ・覚える

覚える技術もたくさんあります。沢山あるように見えますが、使っていれば自然に覚えます。とりあえず始めましょう。

とりあえず今の主流なやり方でウェブサービスを作ろうとすると、最低限、サーバー周りでLinux、データベースの使い方(MySQLかPostgreSQL)、サーバーサイドで使う言語(PHP、Ruby、Python、Javaのどれか一つ)、スマートフォンで使えるようにするなら、AndroidかSwift、ウェブ・ブラウザーならHTMLとJavaScript(またはjQuery)を覚える必要があります。

C#とWindows Serverという組み合わせも選択肢としてはありますが、Windows Serverでのサービスを不特定多数の世の中に提供するとライセンス料がかかります。以前デルの人にも手伝って調べてもらったことがあったのですが、どのライセンスが必要でいくらかかるのかわかりにくかった印象があります。しかも、最初は利益が出るかどうかわからないサービスを始めるのに最低でも何10万円ものサーバーライセンスを使うのは、ちょっと現実的ではない気がしました。

しかし、今はAWSでMS SQL ServerとWindows Serverの組み合わせがクラウドで使えます。何十万円というサーバーのハードウェア本体とライセンス料を一括で払う必要がないのでリスクは大分減りましたが、それでも他のLinux OSとデータベースの組み合わせに比べるとずいぶん高い感じがしました。これもそんなに少数派にならなくて良いので、素直にメジャーな流れに合わせておきましょう。

その他に、今はサーバーを自分で買わずにクラウドで使うのが主流です。私はHerokuとAWSを使ったことがありますが、AWSはとても使い勝手が良いように思います。サーバーではE2とストーレッジとなるs3があります。E2はWebサーバーとして使えますが、その他にデータベースをインストールすることもできますし、画像ファイルなどを保存するストーレッジとしても使えます。最近AWSはLightsailという軽量のサーバーを提供し始めました。5ドルで20ギガのSSDのサーバーを使えるのですが、ものすごく早いです。自分で数十万円のハードを買うよりSSDですのでよっぽどスピードが早いです。ですので、最初はLightsailで始めるのが良いと思います。

しかも、インスタンスを何個も立ち上げては消去できるので、インストールに失敗した場合にも、すぐにやり直すことができます。ウェブ・サービスを立ち上げる過程で、サーバーにプログラムを追加していくうちに、エラーを吐いてどうにもならなくなってしまうことがよくあります。新しいサービスを開発するときはどうしてもこのような過程はいくつも通らなくてはならないと思うのですが、サーバーをハードで買ってきてしまうと、一からインストールし直すことになってしまい、時間ばかりかかってしまい、とても大変になってしまいます。モジュールのインストールからやり直しなんてことを何度もやってしまうと、時間ばかりがかかってしまい、スピードが重要なスタートアップ時には自殺行為です。サービスが立ち上がることは、個人の力でもう不可能になってしまうと思います。

私が覚えた言語は、

VB.NET
C#
Python3
SWIFT
Java
JavaScript
HTML
SQL

OS周りの使い方も覚える必要があります。
Windows
IIS
Linux

ツール
Django
Git
Subversion

その他、きれいな読みやすいコード、メンテナンスのしやすいコードの書き方など。

よく、Rubyがいいか、PHPがいいかなんて論争をやっていますが、私は、RubyやPHP、Pythonであればどれでもいいと思います。RubyにはRubyOnRailsという素晴らしいフレームワークがあります。PHPにはCakePHP、PythonにもDjangoなど数多くの良いフレームワークがあります。どれを使ってもちゃんと動くものはできると思いますが、開発の際にはエラーにぶち当たり続けるので、文献が多いものがいいと思います。日本ではRubyな比較的メジャーですが、海外ではPythonやPHPの方が圧倒的にメジャーです。英語が読めるなら日本であまりメジャーでないけどPythonとDjangoの組み合わせが良いと思います。そのほかに、SQLAlchemyというとても使いやすいORマッピングのツールもDjangoと同時並行で利用できます。

そんなことよりは、Javaなどの静的型付け言語を使うのか、RubyやPythonなどの動的型付け言語を使うのかをよく検討した方がいいと思います。こっちの方がよっぽど後々のインパクトが大きいです。静的型付け言語はコンパイルの段階でエラーを検出してくれるので、バグが早期に発見しやすく、結果としてバグの少ないソフトウェアが作りやすいと思います。PHPやRubyなどのスクリプト言語は手軽に始められるので最初は早いのですが、ソフトウェアを書く時間の半分以上がバグをとる時間だとすると、バグを早期に発見してくれるJavaなどの静的型付け言語の方が結局は効率が良いということも言えるのではないかと思います。

開発の体制

一人よりも複数人がいいように思います。税理士業務をやっていても思うのですが、不在時の突発的な事項に対するバックアップ体制やチェックなど、二人以上の方がサービスに安定感があり、私の経験としては結果的により良いサービスが提供できているように感じます。ソフトウェアも同じだと思うので、何もかも一人でやろうとせずに上手く役割を分担させた方が、良いものがより早く提供できるのではないかと思います(想像です)。

システムは開発していると細かく手がかかります。一人でやっているとそういう細かいところが面倒くさくなってきてしまうので、そういう飽きを防止したり、お互いにサポートしあえるためにも一人アシスタント的な人に手伝ってもらうのが良いのではないかと思いました。

私の考えではアシスタントになっていただこうという人が、最初からそれほど詳しくなくても構わないと思っています。やっているうちに覚えてくるので、なんとかなります。それよりは、人件費が高いからとか、十分な知識のある人が採用できないからといって、ずっと一人でやっていってしまう方が問題だと思います。ずっと一人でやっていってしまうと、ローンチ出来たかも知れないサービスが結局、開発の途中で頓挫してしまい公開できずに終わってしまうという結末になりがちです。余計高くつく事になりかねません。

何を作るか

これが一番難しいです。そのうち、まとめて書きたいと思います。

アマゾンのLightsailというサービスがすごかった

Lightsailというアマゾンのクラウド・コンピューティングのサービスがすごいです。一ヶ月たった550円(5ドル)なのですが、作れるデータベースの数にも制限がなさそうだし、名前も自由につけられます。ですので、ハードを一台丸ごと自分で買うかレンタルするのと同じです。私は今まで予算をケチって事務所にサーバーを置いてきましたが、年に1回くらいビルメンテのための停電があったりして、その度に再起動をしてIPアドレスを割り振り直してなってやってめんどくさかったのですが、こんなこと全く意味がなくなってしまいました。

Lightsailを使えば、電源が落ちることはまずありません。データがなくなることもほとんどないでしょう。事務所なんかにコンピュータの実物を置いておくよりよっぽど安全です。

s3というデータを保存するサービスもすごいです。1Gあたり一月2円なので、100G使うようなデータ量でも月200円です。そのほかにGlacierというもっと安いサービスもあります。これはデータを取り出すのに3〜12時間かかりますが、料金自体はさらに安くて1Gあたり0.5円です。100ギガでも月50円。データの取り出しをするときにさらに若干料金がかかるようですが、10Gまでは無料枠が使えるようなので、通常の事務に使うようなデータの大きさでしたらほとんどお金はかかりません。無視できる範囲でしょう。

ウェブサーバーに限らず普段使うエクセルやワードなどのデータももう事務所に置いておく時代ではないのかもしれません。サーバーもデータがあって、外付けのHDDにバックアップをとってなんてやってても大きな地震や火事になってしまったら終わりです。

その他にクラウドでのデータの保存の仕方としては、githubやドロップボックスなど色々考えられます。githubでもドロップボックスでも両者でファイルの変更履歴が保存できます。

色々研究したいと思います。