選定 OS 言語

自作システムをつくるためにまとめました。たぶん、他の人が読んでも何も面白くないと思います。
 

超ざっくり要件

  1. 1テーブルあたりのレコード数は高々2,000程度
  2. テーブルの継承が必要(無くてもできるけど、変更時に無いと相当辛い)
  3. 継承したテーブルに対してグループごとに頻繁なカラムの変更あり
  4. グラフ描画あり

 

OS

Linuxを採用する事にした。正直、判断がつかなくて、どちらでもいいとも思うだけど。
 

C# にするか?(C#を落とした経緯)

理由① 必要な性能

また、将来的にも、たとえどんなに当たったとしても、Windowsネイティブで作ることは無いだろうという判断ができたため。

大型プロジェクトは仕様策定の段階で、WebアプリにするかWindowsネイティブアプリにするか選択が難しいです。そこでWPF/XAMLを使えば、最小のコストで両方のアプリを製造できます。

C# は、どのようなケースで使われますか? 1) Windowsの開発 2) … - 人力検索はてな

 

理由② アップデートの手間

Windows ネイティブで作ると、クライアントサイドのアップデートの際のコストがかかるから。アップーデートの都度、アナウンスというのは致命的。バグを発見した際の改修にも時間がかかる。
 

理由③ お金の問題。

ホスティングの選択肢が少ないのと自前の場合のWindows Serverのライセンス料の問題で。

C# は、どのようなケースで使われますか? 1) Windowsの開発 2) … - 人力検索はてな

 

C# を抜きにしての話

クライアント側、サーバ側、どちらと連携させるという意味で、WindowsLinuxかを選択することにした。自分がいま、やろうとしていることは、クライアントWindowsーサーバLinuxで使ってる環境にウェブツールとして提供する物を考えている。

当初は、クライアントと優先させると言う意味で、C# Windows が望ましいかと思ったが、冷静に考えてみたら背後で動いているLinuxサーバと連携することのほうが大口には重要になってくるので、こちらを重視して、Linuxを採用する事にした。

それに万が一、ローカル、つまりユーザのサーバにいれるというようなバージョンを作る時には、明らかにこちらのほうが重宝するから。

Linux(Unixも含めて)どれにするか。

CentOS にした。

  1. (Unix 系) Solaris
  2. (Unix 系) FreeBSD
  3. (Debian 系) Debian
  4. (Debian 系) Ubuntu
  5. (Red Hat 系) Red Hat Enterprise Linux
  6. (Red Hat 系) CentOS

 

言語(サーバサイド)

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/
 

比較項目3.テストのしやすさ, 4.リファクタリング, 5安全性

作り込みがはいると Python は、どうも分が悪い様子。10Kも、おそらく行かないとは思うんだけど、安全性というのは、やはり重視しておきたい内容なので。あぁ、またPythonで組めなかったなぁ。
 
 

miscellaneous

Spring が比較対象に上がった経緯

Grails は、「規約で生産性向上」うはーっこれやって思ったんだけど、Groovy って、これまた別言語になりそうなので、既存のツール類が使えなさそうなので、却下。

Click は、若干ドキュメントの不足感がいなめず、却下。

Slim3(GAE) も考えたけど、というか Slim3EminemSlim Shady みたいな語感で良さげだったけど、何をするのか、詳細にはっきりしていないので、制限がつきものの PaaS は、どうしても却下せざるを得ず。

そして残ったのが Spring といったところかなぁ。おいおい、Spring を調べてみますかぁ...。 
 
はてなで聞いたところ、その判断で、ほぼほぼ間違いない様子なので、採用決定。このひとからもらった別の質問に対する回答の質も高かったので、やってはいけないと思うんだけど「この人が言ってるから信じます」か。

Djangoに似ているものをと言われたら、Spring MVCが当たると思います。Springは老舗のフレームワークですが、後にMVCがきちんと分離し、それぞれ継承できるようになりました。

http://q.hatena.ne.jp/1404194028

 

数値計算

よく Python数値計算で使われるって聞いてたから、早いのかなと思ってけど。シンプルだから、科学計算に向くってのは、なるほど、そういうことね。わいのも数値計算が、はいってくるけど、だからと言って、Pure な Python を、いれるわけにはいかないんよなぁ、遅くなるから。
1.1. ツールやワークフローを使った科学技術計算 — Scipy lecture notes
 

それ以外の Django の利点

いずれも可読性に対して有効。

  1. グループをアプリケーション別にわけることができる。
  2. ユーザ、グループの機能をデフォルトでサポートしている。
  3. Django のコードのほうがぱっときれいだし、楽しそうなんだよなぁ...。

 

言語(クライアントサイド)JavaScript

サーバ側でやらせるか、クライアント側で処理を行わせるか、悩みどころだ。コピペされへんように注意しておかないと。
配布テンプレートの無断改変やクレジット消去・盗用を防ぐ方法|AmebloEnjoyMethod

これも面白かった、なるほど、表示を工夫したところね。
ねこの足跡 Revenge: JavaScriptの著作権侵害で弁護士さんに相談した時のはなし