選定 OS 言語
自作システムをつくるためにまとめました。たぶん、他の人が読んでも何も面白くないと思います。
超ざっくり要件
- 1テーブルあたりのレコード数は高々2,000程度
- テーブルの継承が必要(無くてもできるけど、変更時に無いと相当辛い)
- 継承したテーブルに対してグループごとに頻繁なカラムの変更あり
- グラフ描画あり
OS
Linuxを採用する事にした。正直、判断がつかなくて、どちらでもいいとも思うだけど。
C# にするか?(C#を落とした経緯)
理由① 必要な性能
また、将来的にも、たとえどんなに当たったとしても、Windowsネイティブで作ることは無いだろうという判断ができたため。
大型プロジェクトは仕様策定の段階で、WebアプリにするかWindowsネイティブアプリにするか選択が難しいです。そこでWPF/XAMLを使えば、最小のコストで両方のアプリを製造できます。
C# は、どのようなケースで使われますか? 1) Windowsの開発 2) … - 人力検索はてな
理由② アップデートの手間
Windows ネイティブで作ると、クライアントサイドのアップデートの際のコストがかかるから。アップーデートの都度、アナウンスというのは致命的。バグを発見した際の改修にも時間がかかる。
理由③ お金の問題。
ホスティングの選択肢が少ないのと自前の場合のWindows Serverのライセンス料の問題で。
C# は、どのようなケースで使われますか? 1) Windowsの開発 2) … - 人力検索はてな
C# を抜きにしての話
クライアント側、サーバ側、どちらと連携させるという意味で、WindowsかLinuxかを選択することにした。自分がいま、やろうとしていることは、クライアントWindowsーサーバLinuxで使ってる環境にウェブツールとして提供する物を考えている。
当初は、クライアントと優先させると言う意味で、C# Windows が望ましいかと思ったが、冷静に考えてみたら背後で動いているLinuxサーバと連携することのほうが大口には重要になってくるので、こちらを重視して、Linuxを採用する事にした。
それに万が一、ローカル、つまりユーザのサーバにいれるというようなバージョンを作る時には、明らかにこちらのほうが重宝するから。
言語(サーバサイド)
Java を採用した。
表. 比較
項目 | Python(Django) | Java(Spring) |
---|---|---|
モデル継承 | ○ | × |
実行速度 | × | ○ |
テスト | × | ○ |
リファクタリング | × | ○ |
安全性 | × | ○ |
比較項目1. モデル継承
Spring にモデルの継承機能がぱっと見当たらないが、PostgreSQLに継承機能があるので、それで代替することにした。レコード数は、高々3,000程度なので、MySQLのようなチューニングも必要ないと考えたため、これで問題ないと判断した。
Spring のモデルの継承機能らしいものは見つけている。
java - Spring MVC 3.0 Model Attribute Inheritance - Stack Overflow
比較項目2. 実行速度
静的言語のほうが、いっぱんに四則演算は早い。
Python は、四則演算の処理が重いらしい。Pythonを採用するとしたら、数値計算は Cython を採用して不利を補う方法がある様子。それでも、2言語で構築というのは避けたいところ。
http://maplesystems.co.jp/blog/all/programming/2015/
miscellaneous
Spring が比較対象に上がった経緯
Grails は、「規約で生産性向上」うはーっこれやって思ったんだけど、Groovy って、これまた別言語になりそうなので、既存のツール類が使えなさそうなので、却下。
Click は、若干ドキュメントの不足感がいなめず、却下。
Slim3(GAE) も考えたけど、というか Slim3 が Eminem の Slim Shady みたいな語感で良さげだったけど、何をするのか、詳細にはっきりしていないので、制限がつきものの PaaS は、どうしても却下せざるを得ず。
そして残ったのが Spring といったところかなぁ。おいおい、Spring を調べてみますかぁ...。
はてなで聞いたところ、その判断で、ほぼほぼ間違いない様子なので、採用決定。このひとからもらった別の質問に対する回答の質も高かったので、やってはいけないと思うんだけど「この人が言ってるから信じます」か。
Djangoに似ているものをと言われたら、Spring MVCが当たると思います。Springは老舗のフレームワークですが、後にMVCがきちんと分離し、それぞれ継承できるようになりました。
http://q.hatena.ne.jp/1404194028
言語(クライアントサイド)JavaScript
サーバ側でやらせるか、クライアント側で処理を行わせるか、悩みどころだ。コピペされへんように注意しておかないと。
配布テンプレートの無断改変やクレジット消去・盗用を防ぐ方法|AmebloEnjoyMethod
これも面白かった、なるほど、表示を工夫したところね。
ねこの足跡 Revenge: JavaScriptの著作権侵害で弁護士さんに相談した時のはなし