なんてこった! Herokuのfree dynoが一つしか使えなくなっちまうなんて!
という記事が。
これから Heroku でいっぱいアプリを運用するぞーと思っていた矢先の出来事だ。
「嬢助」はHerokuで運用している。free dyno は一つしか使えなくなるので、これ以上Herokuで運用するアプリを増やすには、1つあたり毎月7ドルかかる。
Heroku のアカウントをたくさん作ればいいのかもしれないが、そういうインチキくさいことをやろうとは思わない。
いいもーん。Azureにするもーん。 Azureならアプリは10個までタダだもーん。 「オナ禁レコーダー」は Azure で運用しているので、とくに不自由なく使えることもわかっている。
つーわけで、Herokuさんには頑張ってほしいものです。ま、MSには勝てないかもね…。
オナ禁レコーダーの開発雑感
ASP.NET MVC5
オナ禁レコーダーはASP.NET MVC5で作った。 開発ツールはVisual Studio 2013で、Azureで公開という、MSに囲い込まれた世界だ。
MSベッタリに囲い込まれた世界って、なかなか快適だったりする。 Visual Studioでプロジェクトを作るととりあえず動く状態のWebサイトができる。 Visual StudioのIntelliSenseは優秀で、タイプ数を減らすことに貢献してくれる。 デプロイはGUIに従えば、なんとなくAzureで公開できてしまう。
プロジェクトを作るといきなりたくさんのファイルができてビビる。が、だいたいお約束で作られているファイルらしく、ほとんど触る必要がない(とはいえ、なんだか知らないファイルがたくさんあるのは気持ちわるいものではある)。
作業を始めるのは、このなんだか知らないファイルがたくさん作られた状態から。 ここから、コントローラーやら何やらを作っていけばいい。
プログラムの流れはシンプルだ。フレームワークがURLに対応したコントローラーのアクションメソッドを呼び出してくれる。その中で、DBやフォームからデータをかき集め、テンプレートに投げてHTMLを作ればいい。
DB周り
ASP.NET MVCはDB周りもなかなか良く出来ている。 Entity Frameworkのマイグレーションという機能を使うと、 DBのテーブルは自分で作ったC#のクラスから自動的に作られる。 C#のクラスを更新したら、コマンドによってそれをDBに反映させることができる。 インデックスを張りたいときは、対象とするクラスメンバにC#の属性をつければいい。 複数メンバに対するインデックスも普通に扱える。
DBを意識せずに全自動でいい感じにやってくれるわけではないが、手順さえ覚えてしまえば開発の手間はずいぶん削減できる。 DBからのデータを格納するクラスは必ず自作することになるので、これを作るだけでテーブルを作ってくれるのはかなりありがたい。
C#のLINQは、悪くはないのだけど、こういう構文糖はどうでもいいや。 SQLと同じように使えると期待していたが、全然違うのでちょっとガッカリだ。
テンプレートエンジン
Razorという、MSの新型を利用。テキストの中に目印をつけてプログラムを埋め込むという、よくあるタイプのテンプレート。良い点は、目印が「@」だけで済むので、見た目がスッキリすることくらいか。構文的には、生成するものがHTMLじゃなくても使えそうだ。
フォーム処理
オナ禁レコーダーにも、少ないながらフォームがある。
ASP.NET MVCの素晴らしい機能は、コントローラーの属性に指定できるValidateAntiForgeryTokenだ。いわゆる、CSRF対策が簡単にできる。 テンプレートでHtml.AntiForgeryToken()を使ってトークンを埋め込んでおくと、フレームワークがコントローラーのアクションメソッドを呼び出す前にリクエストの正当性を検証してくれる。
もちろん、アクションメソッドを呼び出す前に、フォーム用のクラスにフォームの入力値を入れておいてくれる。定形処理を自分で書かなくていいのは、やはりありがたい。
デザイン
Visual Studio 2013でASP.NET MVCプロジェクトを作ると、デザインは最初からBootstrap3でレスポンシブに対応している。
デザインの変更は、Jumbotronの背景に拾ってきた画像を設定するとか、色を変えるくらいしかしていないので、オナ禁レコーダーのデザインはいわゆるBootstrap臭がすると思う。
画像は、写真AC のものを使わせて頂いている。
参考にした本
はじめてASP.NET MVCを使うにあたり、参考書が必要だった。以下の本しか見ていないが、わかりやすくてよかった。
こうしてみると
初めて使うフレームワークなので、いろいろ苦労しながら作っている。次からは少しは楽できるに違いない。
とか言いつつ、次のWebサイト「嬢助」はPlayframeworkとかに手を出してしまった。気軽にいろんなものを使っていこう。
「嬢助」リリース
Herokuでなにか作ってみようと思った
Herokuは無料で始められる。もちろん、無料で使える範囲は小さい。
でも、動けばいいわけですよ。とりあえず作ってみたいだけなんだから。
何をつくろうか
実は、これがいちばん難しい。
作るのが難しすぎてはいけないのでね。
ごくシンプルな電卓的なものでもつくろうかとも思ったが、それより最近買った本を参考にクローラーを作ってみたかった。難しいのは作れないので、クロールした情報を単純に提供するようなものがいい。
いろいろ考えたが、お風呂屋さんのコンパニオンの出勤情報をまとめたサイトを作ることにした。
難しいのは作れないが、個人の嗜好に合わせてソートできるようにすれば、少しは人の役に立つかもしれない。また、適当な頻度で更新されるので、自動的にクロールする価値が出てくる。
先に公開したオナ禁レコーダーとの相性も悪くない。一緒に使ってもらえるかもしれない。
店の公式サイトにある画像は著作権を侵害することになるので使えない。見た目はさびしいサイトになるだろうが、気にしないことにする。とりあえず最初は、限られた店舗だけに対応しよう。
いずれ少しずつ対応店舗を増やしていく中で、クローラー作りのコツもつかめてくるだろう。
言語・フレームワーク
Scala + Playframework にする。理由は、流行ってそうなので。
開発環境
InteliJ IDEAにした。理由はなんとなく。使ったことないんだから、なんとなく選ぶしかないのだ。
できた。公開する。
http://jo-sche.herokuapp.com だ。
まだ(おそらく同系列の)5店しか対応していないが、とりあえず公開することを重視する。
Herokuで運用されているサイトの一つのサンプルとして、または入浴計画立案の一助として、使ってもらえたら嬉しい。
作ってみた感想は、あとで別記事に書く。
「オナ禁レコーダー」公開済み
ずいぶん前に公開したものだが、一応ここに記録する。
この手のサイトはいくつかあって、オナ禁レコーダーはその中でも
とくに何かがすぐれているというわけではない。
とりあえず公開することを優先したので、先達には及ばないところが多々ある。
Azureで運用しているので、AzureのSSLを利用できることが唯一の強みか。
むしろ、SSL以外では接続できないようにしてある。
サポート用フォームをJimdoを使って用意したけど、このブログのコメント欄で十分と思うので削除しようと思う。
何か言いたいことがある人は、このページにでもコメントしてください。
本当はサイトに簡単に組み込めるフォームサービスとかあるといいんだけど。