q.hatena.ne.jp/1297007982 の続きです。


様々な、お手厳しい、しかし極めて有益な意見を多数頂戴いたしました。
皆様、有難う存じます。

しかし、やはり既製CMSの改造では無理のように思われます。

・はてな的なポイントシステム、特定認証局、お仕事斡旋、ナレッジベースなどを
統一したシステムで運用したい
・システムに対する低水準の理解を要する

などの理由です。

「車輪の再発明」の愚を犯すだろう、とのご意見も頂戴しましたが、
私個人の性質として、
「帰納よりも、演繹的な学習・実践から得るもののほうが、結局遥かに大」
というものがあり、

これもあって、やはり一から作りたいと思います。
HTML、サーバサイドJava、PHP、MySQLなどで。
力が及ばない領域は、厳格なI/O仕様の元、外注しようと思います。

そこで、皆様に引き続き質問です。

・Javaのフレームワークは何がよいでしょう? 特にHTMLのインターフェイス関係が充実しているものがよいです。
・それでもやはり既製のものから入っていった方がよいだろうなど、
その他ご意見を頂戴できるとすれば、ご自由な形式・テーマで、是非ご忌憚なきご意見を下さいませ。

よろしくお願い申し上げます。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/02/17 04:15:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kent0608 No.5

回答回数220ベストアンサー獲得回数23

ポイント100pt

前回の質問でコメントした者です。メッセージありがとうございました。わざわざポイントも添付していただいたようで恐縮です。

さて、前回のコメントにもあるように、スタートアップの資金不足の問題を解決するためのプラットフォームとしてGoogle App Engine / Java とそのWebアプリケーションフレームワーク、Slim3を推薦しましたが、MySQLのようなRDBMSにはないデメリット(及びメリット)がGoogle App EngineのDatastoreにはありますので、その点を抑える必要があります。

(参考記事)

http://www.atmarkit.co.jp/fjava/rensai4/bigtable01/01.html

特に複雑な検索や集計処理が苦手です。(そのトレードオフとして高いスケーラビリティを持っています)

開発するアプリケーションの要件によっては適さないことがありますので、その場合は

他の回答者様もご指摘のStruts(またはそれをベースにしたSAStruts)とMySQLのようなRDBMS(及びS2JDBC等のO/Rマッパー)を使われるほうが良いと思います。

※素のStrutsは生産性が低いので、個人的にはStrutsの問題点を改良したSAStrusを推します。

とはいえ、事業として成功するためには増減するトラフィックを柔軟に処理できる仕組みづくりが必要不可欠です。

この点において、GAE/Jは低い追加コストでスケールするシステムとなっているため、対応が非常に楽です。

(また前回のコメントにある通り、インフラに対する初期投資が0円であることも魅力です)

開発で苦労するか、運用で苦労するか、その選択が大事ですよね。

ちなみに広く一般に普及しているWebサービスは、開発よりも運用で苦労しています。(そして多額の人的、物的投資をしています)

利用範囲が決まりきっている、イントラ向け受託開発であればSAStruts&S2JDBC(またはStrutsとその派生)

不特定多数のユーザが利用する、オープンなWebアプリケーション開発であればGAE/J(Slim3)が良いですね。

(Slim3参考)

http://sites.google.com/site/slim3documentja/

(Datastoreの理解に)

http://www.amazon.co.jp/dp/4798026999/

id:Web-Production

うーん、GAEは、スケールに関する心配をしなくてよい(小から大へ、なめらかに移行する)という点と、「あの天下のGoogleが、利用者を困らせるようなことをするはずがない」という憶測(笑)が、非常に大きな魅力ですね。

複雑な検索などは、「途中のデータ」を作ることで対処できるような気がするのですが…

2011/02/14 17:40:56

その他の回答4件)

id:asuka645 No.1

回答回数856ベストアンサー獲得回数97

ポイント25pt

Strutsを使うのが王道でしょう。

id:Web-Production

そうですか。有名ですものね。ありがとうございます。

2011/02/13 02:49:03
id:taroe No.2

回答回数1099ベストアンサー獲得回数132

ポイント25pt

http://codezine.jp/article/detail/4750

こちらを読んで、選定してみてください。

)やはり既製CMSの改造では無理のように思われます

まあ、規制のCMSの改造でサービスを提供している大きいところなんてないですからね。

id:Web-Production

>規制〔ママ〕のCMSの改造でサービスを提供している大きいところなんてないですからね

やはりそうですか。

比較サイト、ありがとうございます。

2011/02/13 02:50:22
id:Mook No.3

回答回数1314ベストアンサー獲得回数393

ポイント100pt

先の質問では無責任なコメントで失礼しましたが、丁寧な対応有難うございました。


ご本人がやると決めている以上、汎用システムを使用する・しないの議論を蒸し返しても

しょうがないと思いますので、今回は CMS を実装する前提でのコメントです。


私自身が実装したのは、PHPだけで実装した小規模なものを除けば、フレームワークを使用

したのは TOMCAT + Struts + PostgreSQL だけです。

(開発環境は Eclipse + Subversion を選定しました)

選定したのも、もう6年も前の話なので現在ではだいぶ状況も変わっていると思います。

ですから、現時点で何がよいかという点からは回答できませんが、何を使用するにしても、

ネットの情報だけでなく何か一つきちんとした技術参考書を用意されるのがよいと思います。


私自身のときは下記を参考資料として使用しました。PHPの習得の時もこのシリーズを使用

しましたが、システムを作りながら覚えるという向きには良いかと思います。

StrutsによるWebアプリケーションスーパーサンプル

同様の組み合わせで検索してみると、下記のようなものもありました。

Javaによる自作CMS ~Tomcat+Struts+MySQLで作るWebアプリケーション~


フレームワークの比較論としてブログに下記のようなものもありましたので、参考にされては

どうかと思います。

http://d.hatena.ne.jp/t1000leaf/20101125/1290612768

http://d.hatena.ne.jp/szk-takanori/20100518/p1

http://d.hatena.ne.jp/t_yano/20081118/1227008018

(こうしてみると、はてなのダイアリなかなか充実してるなw)



私自身の経験でいけば方針が決まった後、実際の開発・評価環境を構築するまでがいちばん試行

錯誤した部分です。

ユーザ認証をして最初の画面が出るまでといった簡単なものでもよいので、とにかく MVC

(あるいは採用されたフレームワークの構成機能)を使用した実装してみることです。

そこまでできて、ようやく最低限の開発プロセスが構築できたといえるでしょう。


蛇足ですが、開発言語が Java とはいえ、WEBアプリケーションであるなら HTML、JavaScript、

SQL、CSS、HTTP(S) 等の知識も重要になりますので、考慮されてはと思います。

既存の CMS を使うメリットは、このあたりの知識が十分でなくともシステムを構築できる点にも

あります。

id:Web-Production

>先の質問では無責任な

いえいえ、たとえ、なにげない一言であっても、Mook 様のような有能なかたが発したものであれば、それは非常に価値があるものです。

6 年前までの話ではあるけれども、小規模なら PHP、大規模なら Tomcat + Struts + PostgreSQL (開発環境は Eclipse + Subversion)とのこと。参考になります。

実は、Java + Strat にするか、Google App Engine + Java + Slim3 にするか、迷っているところです。とりあえず、Slim3 に関する書籍は注文してみましたが、Struts に関する本も買ってみます。ご提示の書籍がオススメなのですね?

HTML、CSS に対してはパーフェクトな理解を持っているといえるのでは、と自認いたしておりますが、JavaScript は作ったことがありませんし、SQL も知らず、HTTP(S) に関しては、これは低水準の理解が必要になるかと思いますので、先行きを考えてかなり自身のないところです。が、やるしかありませんね。ありがとう存じます。

2011/02/13 03:01:30
id:hanako393 No.4

回答回数1142ベストアンサー獲得回数87

ポイント50pt

Seasar 2 徹底入門 SAStruts/S2JDBC 対応
竹添 直樹
4798121509

近頃はこの組み合わせも多いですね。

StrutsによるWebアプリケーションスーパーサンプル 第3版
高安 厚思 西川 麗
4797359021

strus2を使うのが実績もあるしかなりかたいと思います。

strus2を選んだ場合は、DB層のフレームワークを別途選定したほうがよいと思います。

id:Web-Production

うーん。ありがとうございます。"DB層のフレームワーク" というものがあるのですね。ありがとうございます。

2011/02/13 04:55:04
id:kent0608 No.5

回答回数220ベストアンサー獲得回数23ここでベストアンサー

ポイント100pt

前回の質問でコメントした者です。メッセージありがとうございました。わざわざポイントも添付していただいたようで恐縮です。

さて、前回のコメントにもあるように、スタートアップの資金不足の問題を解決するためのプラットフォームとしてGoogle App Engine / Java とそのWebアプリケーションフレームワーク、Slim3を推薦しましたが、MySQLのようなRDBMSにはないデメリット(及びメリット)がGoogle App EngineのDatastoreにはありますので、その点を抑える必要があります。

(参考記事)

http://www.atmarkit.co.jp/fjava/rensai4/bigtable01/01.html

特に複雑な検索や集計処理が苦手です。(そのトレードオフとして高いスケーラビリティを持っています)

開発するアプリケーションの要件によっては適さないことがありますので、その場合は

他の回答者様もご指摘のStruts(またはそれをベースにしたSAStruts)とMySQLのようなRDBMS(及びS2JDBC等のO/Rマッパー)を使われるほうが良いと思います。

※素のStrutsは生産性が低いので、個人的にはStrutsの問題点を改良したSAStrusを推します。

とはいえ、事業として成功するためには増減するトラフィックを柔軟に処理できる仕組みづくりが必要不可欠です。

この点において、GAE/Jは低い追加コストでスケールするシステムとなっているため、対応が非常に楽です。

(また前回のコメントにある通り、インフラに対する初期投資が0円であることも魅力です)

開発で苦労するか、運用で苦労するか、その選択が大事ですよね。

ちなみに広く一般に普及しているWebサービスは、開発よりも運用で苦労しています。(そして多額の人的、物的投資をしています)

利用範囲が決まりきっている、イントラ向け受託開発であればSAStruts&S2JDBC(またはStrutsとその派生)

不特定多数のユーザが利用する、オープンなWebアプリケーション開発であればGAE/J(Slim3)が良いですね。

(Slim3参考)

http://sites.google.com/site/slim3documentja/

(Datastoreの理解に)

http://www.amazon.co.jp/dp/4798026999/

id:Web-Production

うーん、GAEは、スケールに関する心配をしなくてよい(小から大へ、なめらかに移行する)という点と、「あの天下のGoogleが、利用者を困らせるようなことをするはずがない」という憶測(笑)が、非常に大きな魅力ですね。

複雑な検索などは、「途中のデータ」を作ることで対処できるような気がするのですが…

2011/02/14 17:40:56
  • id:Mook
    Struts の スーパーサンプル はもう第3版が出ていたのですね。
    私の時はまだ初版でしたw。

    PHP はフレームワークもありますが、小規模のものでしたので明確な MVC にせず、
    各画面構成と、データ管理クラスだけで実装したので、ちょっと趣旨とは異なります。

    Struts は普及しただけあって、いろいろなことができますが、JSP を使いこなせる
    ようになるまでと、バリデーションやリソース管理、ログ管理などを覚えるまでが
    一山かもしれません。
    その他のフレームワークは存じませんが、同様の機能はあると思います。

    SQL は最低限の操作(SELECT、INSERT、UPDATE、DELETE)は覚えないと、始まりません。
    ストアード・プロシージャまで利用できると、便利な局面も多いです。

    JavaScript も、XML や DOM の操作ができる程度の知識は習得された方がよいでしょう。
    サーバに問い合わせなくてもクライアント側での処理で片付くことは、JavaScript で
    済ませてしまった方がパフォーマンス的には快適なことが多いです。
  • id:Web-Production
    > Mook 様

    いろいろなご助言、ありがとう存じます。先行きのめあてができ、大変たすかります。

    Tomcat + Java + Struts と Google App Engine/J with Slim3 と、どちらがよいと思われますか? Slim3に関する書籍が来ましたので、呼んでみると、「これは App Engine の規制でできない」などの記述があり、少し不安です。

    とにかく、これまでのご助言だけでも、大変参考になりました。ありがとうございます。
  • id:Mook
    残念ながら GAE に関してはこれまでまったく知見がありませんので、比較ができませんが
    調べてみたら Google だけでなく Amazon や Yahoo など多くがこういったサービスを提供
    しているのですね。すっかり時代遅れになっています^^;;。

    kent0608 さんが書いていますが、一つの選択ポイントはやはり利用形態だと思います。
    でも最終的にはこれ以外にも開発・評価環境、コスト、パフォーマンス、保守性 などに
    対するメリット・デメリットを考え、Web-Production さんにとってのベストをご自身で
    判断するしかないと思います。

    既に候補が2つまでに絞れているなら、両方でやってみてはどうですか?
    実際に使ってみないと分からないことは多いですし、両方を使ってみることでそれぞれの
    利点・欠点 がより具体的に理解できると思います。

    ただ GAE で使用される GQL は JOIN をサポートしない SQL のサブセットのようなので、
    SQL に関しては別途きちんと習得されておいた方が良いとは思います。
  • id:Web-Production
    >Mook様

    >SQL に関しては……習得されておいた方が良い

    ありがとうございます。join がないとすれば、なにか他の同等のクエリーがあるのでしょうか。"GQL" ですね。ありがとうございます。

    Google のデータベースには、"Fusion Tables" と "Big Table(s?)" とがあるようで、関係が良くわかりません。その辺、自分でよく調べてみます。何か、Google は、「Fusion Tables はこれまでのデータベースの観念を覆すような画期的なもの」という旨のステートメントをしていますが、どう画期的なのかは、いろいろなページを見てもわかりません……。MS Access しか低水準で扱えない私には、わからないのでしょうか。
  • id:kent0608
    開発の現場ではGQLを直接使うことはあまりありませんよ
    Slim3であればSlim3 Datastoreを使ってDatastoreに対するクエリを組み立てます。
    http://sites.google.com/site/slim3documentja/documents/slim3-datastore
    複雑なクエリ(JOINを駆使しなければならないようなもの)を必要とする場合、
    そもそも設計がDatasotre向けでは無いことの証明ですので、JOINの代替案を探すのではなく
    設計段階からやり直します。(正規化しない等)
    それでも実現できないようなものであれば、素直にスケールしにくい代わりに柔軟性の高いRDBMSのシステムに移行するのが良いでしょう。ケースバイケースです。
  • id:Mook
    >なにか他の同等のクエリーがあるのでしょうか。
    この辺りはいろいろ情報を検索して身た方が良いかと思いますが、
    http://code.google.com/intl/ja/appengine/docs/python/datastore/gqlreference.html
    要は GQL は GAE でパフォーマンスを発揮できるよう、必要な機能に限定したサブセットだ
    というのが私の認識です。

    先のコメントは、実際の開発で使う使わないは別にしても、SQL を習得しておいた方が
    (少なくとも現時点での主流である)データベースを理解するのに有用であるという、
    見地からです。
    知っておいた方が良いのは SQL というよりは、データベースの正規化などのDB一般の概念
    といった方が良いでしょうか。

    ベタなテーブルですべての項目を管理するというのは、私の感覚からすれば気持ちが悪い
    設計です(時代遅れかもしれませんが)。

    まぁ、目的さえ達成できれば余計な知識は不要というのも一つの考え方かもしれません。
    私のコメントや回答は、エンジニアとしては幅広い知識を持っていたほうが良いのでは
    ないかという個人的な意見ですので、そのあたりはご自身のスタンスと照らし合わせて
    取捨選択の上、参考にしてください。
  • id:Web-Production
    >kent0608様

    ありがとうございます! よくわかりました。

    >Mook様

    >べたなテーブルで…気持ちが悪い

    私も少しそういう感覚がありますが、一方で、シンプル極まりないものでシステムを作るのも、信頼性が高く良いのではないかとも思います。

    いろいろ、ありがとうございます。
  • id:Web-Production
    >みなさま

    質問者でございます。

    http://q.hatena.ne.jp/1297883269 に新しい質問を書きましたので、
    もしよろしければ、ひきつづきご意見を頂戴できればと存じます。
    よろしくお願い申し上げます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません