はてなダイアリーからはてなブログに引っ越しました
特に理由はありません。なんとなくです。
Javaフレームワーク調査2015
僕は基本的にServlet API+JDBC直叩き派なので、フレームワークはあまり使ってこなかったんですが、ちょっと大きめ(って言っても大きめに見積もって30人月くらい)の業務アプリのプロジェクトやりそうなので、調査しました。自分用メモですが参考になれば。
Struts
1.x系しか使ってなくてさっさと見切りをつけたけど、その後日本では2系がそこそこ使われて現在も大きなプロジェクトでは使われているらしい。まあありえない。
Seasar
良い評判があったのでずっと使ってみたかったけど、使う機会がないままだった。2014年に開発者が転職してプロジェクトが停滞(終了?)している。メンテナンスされないのであれば今後のプロジェクトで選択するメリットはないか。
Play Framework
ちょこちょこ話題になるので気になっている。小さなプロジェクト向けかと思いきや案外大きめのものにも使えそう。なんだけどネット上の情報がScala版がメインで、Java版が今後どのようにサポートされるのかわからないので様子見。Scala使うのもありだけれどもこちらの場合Scalaそのものの将来性がどうなのかというのも未知数なのでいずれにしろ様子見。チュートリアルくらいはやってみるか。
Spring
Seasarが終了したとなると類似かつグローバルではよりメジャーなSpringがいい候補になると思う。んだけど、サブプロジェクトが多くて全体像がわけがわからないのでこれまで一切手を付けていない。昔はStruts+Springという組み合わせで使う話が多かったが、SpringプロジェクトもやはりStrutsに見切りをつけたようで、コントローラーにはSpring MVCというのが出来てる。最近はSpring Bootというサブセット(というかスターターキット?)があるらしく、これをベースにしていけばわかりやすいのか?今のところ第一候補。もっと調べてみる。
Java EE
以前ほどは酷くないと言われるEEだけど、やはりEEアプリケーションサーバを用意するあたりとか重厚感あるのでこのまま触らずに蓋を閉めよう。
その他
いろいろググったけど良さげなの見つからない感じ。
とりあえずPlay FrameworkとSpringを引き続き調査。
Electron 弄ってみた
Electron (Atom-Shell) を弄ってみた。
とりあえずHello World的なもの。
'use strict'; var app = require('app'); var BrowserWindow = require('browser-window'); var Menu = require('menu'); var dialog = require('dialog'); require('crash-reporter').start(); var mainWindow = null; app.on('window-all-closed', function() { if (process.platform != 'darwin') app.quit(); }); app.on('ready', function() { Menu.setApplicationMenu(menu); mainWindow = new BrowserWindow({width: 800, height: 600}); mainWindow.loadUrl('file://' + __dirname + '/index.html'); mainWindow.on('closed', function() { mainWindow = null; }); }); var template = [ { label: 'File', submenu: [ {label: 'Open', accelerator: 'Command+O', click: function() { openFile();}}, {label: 'Quit', accelerator: 'Command+Q', click: function () {app.quit();}} ] }, { label: 'Help', submenu: [ { label: 'Help', accelerator: 'Command+H', click: function() { showHelp(); } }, { label: 'About', accelerator: 'Alt+Command+A', click: function() { showAbout(); } } ] } ]; var menu = Menu.buildFromTemplate(template); function openFile(){ dialog.showOpenDialog( mainWindow, { properties: ['openFile'], filters: [{ name: 'Text', extensions: ['txt'] }] }, function (filenames){ if (filenames!==undefined){ alert("Open:"+filenames[0]); } } ); } function alert(message){ require('dialog').showMessageBox( mainWindow, { title: 'alert', type: 'info', buttons: ['OK'], detail: message }); } function showHelp(){ alert("Help"); } function showAbout(){ alert("About"); }
雑感としては、
- ブラウザベースのWebアプリの弱点であるファイルアクセスができる点は大きい。cordovaのデスクトップ版みたいな感じか。
- デスクトップアプリを作る上では工数は決して少なくない。VBやDelphiでのRAD開発ほどのイージーさはない。
- デバッグしづらい。
といったところです。開発が停滞しているaoisoをElectronで再開するのもありかなー。
以下、今後調べること
JavaでGUIアプリを書く夢
最近JavaFXが気になっています。
鳴り物入りでJavaが登場した頃「Javaを使えばどんなOSでも動くアプリが作れる!」と思っていました。しかし現実はそんなに甘くなかった。
最初に登場したAWTはGUIパーツがシンプルなものばかりで実用的なアプリを開発するには力不足であることに加え、OSごとのネイティブな見た目を再現するため、開発者が他のOSでどう見えるか予測しづらい、という問題がありました。
その次に登場したSwingは、AWTの拡張として実装されつつも、GUIパーツが豊富で、見た目もどのOSでも同じようにすることができ(ネイティブをシミュレートすることもできる)、一見AWTの問題点を一挙に解決したかに見えました。しかし、重い。ものすごく重い。
その次に登場したSWTは、AWTやSwingとは違う技術で、とても軽快でC++などのネイティブコンパイラで作ったアプリと遜色ない速度を実現しました。が、これはPure Javaじゃないという致命的な問題があり、バイナリそのものは「どんなOSでも動く」わけじゃないという中途半端な代物。Javaの利点を半分殺しているような仕様であるため、他言語でQtなどのクロスプラットフォームGUIツールキットを利用するのと比較してメリットがあるのかよくわからないことになってしまいました。
その後変化が訪れたのはAndroid。JavaVM上で動作するAndroid OSは当然JavaでGUIアプリを開発するのがデフォルトです。しかもかなりの数のアプリが作られ大成功を収めていると言ってもいいでしょう。しかし、これはあくまでJavaアプリではなくAndroidアプリ。「どんなOSでも動く」という夢を実現したものではありません。
そして現在、JavaでGUIアプリを作る場合の標準になっているのが、JavaFX。今度こそ、JavaでGUIアプリが大量生産される時代が来るのでしょうか!?
ブログエンジンの公開が近づく
久々の更新です。ブログエンジンはもうほぼ動く状態になっています。
作ってるブログエンジンのことを書くブログが別のブログエンジンなのもあれなので、作りながら動かしてるブログというのを用意してみました。
↓
以後この話題はこちらのブログに移動します。
ブログエンジンの進捗
で、テンプレートエンジン、ブログエンジン、サンプルブログの3レイヤーを同時進行で作っているわけですが、テンプレートエンジンはほぼもう現状でFixしてもよさそうな感じです。ブログエンジンはサンプルの表示とコメントの書きこみは出来ていて、記事の書き込みあたりをやっているところです。既存エントリーの編集はできるようになったので、新規追加をこれから作ります。
あと3日くらいで形になると思いますが、一時作業中断するので完成は再来週くらいかな。