はてなキーワード: Seasar2とは
あの発表の場にいたわけだけど、感想はよくわからないポエムな理由だ、でした。
今日の彼のSeasar2打ち切り宣言ブログ記事も読んだがやっぱりポエムだった。
あの発想は正直私にはよくわからないです。飽きたなら飽きたと言えばいいのに。
つうか、開発を打ち切ったあの時に言えばよかったんじゃないですかね。
かっこいいのかもしれませんが半分言い訳が入っているようにも思えます。
あのフレームワークには大変お世話になっているので、
とりあえずは本当にありがとうございます。
ま、でもすぐは消えないでしょ。この国ガラパゴスだし。
そもそも日本はまだStruts1.2.9ガチで新規開発に使ってるSIerがいたりするくらいだし。
来年で打ち切られたとして、確かに今後新規開発に使う人はほぼいなくなるだろうけど、
それでも5年いや10年以上既存アプリのメンテとかで普通に使ってるでしょ。どうせ。
フレームワークのフの字もない時代に作られたサーブレットだけで書かれた昔のゴミアプリを書き換えたいと
5年以上主張してても顧客から改修費用もらえない(後そこにリソース取れない)
という理由で書き換えられない人も世の中にはいるわけですよ(私だけど)。
もちろん最終的にはSeasarが緩やかに消えていくのは確かだろうけど皆さんが思ってるほど早くはないんじゃないですかね。
で、とりあえず今うちの会社は現在(かなり)Seasarの資産を使って作ったアプリが稼働中なので
いきなり移行する気もないわけです(つかそんなリソースない)
そもそも確かにメーリングリスト見て参考にしたところは多少あるけど、
サポート打ち切られたからってああそうですかでしかないとも言う。
どうせ何かあったら最初からこっちでメンテするしかないんですよ。
ぶっちゃけ今もそうですし結局当面はなんも変わらないわけです。
(あ、でもメーリングリストのバックアップは消えないうちに全部取っておこうかな)
フリーの環境を使わせていただくというのは究極的にはそういうことなんだと思っています。
それは多分Springに移行してもそう変わらない(最新の機能は随時提供されるだろうけど)
とは言え、新規に今後Seasar2を使うのがためらわれる状態なのは確かなので、
今後の新規開発案件では多分Springに移行することになるでしょう。
当日SpringBootのセッションも聞いたので日曜さらっと動かしてみてます。(ほんとにさらっとですが)
ひと月も触ってみればある程度Seasar2と変わらない程度で代替としては使えそうだとは感じてます。
バージョン2.4くらいの時に少しSpring触っていまいちとっつけずに捨てていたけど、
当時から見て大分とっつきやすくなってるんだなとは思いましたね。
(未だにSeasar使ってる化石人間の私としては今のSpringならPlayよりとっつきやすそう。JavaEEは論外)
でも正直あれがSeasar2より優れているのかと言うとぶっちゃけよくわからないけれども。
せめてDB周りがS2JDBCくらい使いやすければなー。来週HibernateやDBFluteの連携を試しますかね。
せっかく(外的要因とはいえ)変えるのだからよりやりやすい方法を探したいですね。
ま、もう少し研究して1か月くらいしたら新規案件はこっちでやるめどがつくかもですね。
(既存を移行するかはわからない(受託開発は移行を提案しても金がもらえないと…))
とりあえず、
1、5~10年計画で徐々にSeasar2フェードアウトするとは思うけど、完全卒業は多分しない(苦笑)
2、とりあえず、新規の開発はSpringで今後やるけど既存のアプリをどうするかは目途つけてない。変更のないアプリとかそのままずっと動き続ける可能性大(大苦笑)
こういう、一見正反対の記事が同時期に出てくるのはやはり面白い。
前者は、オープンイノベーションにより年々進化が加速するソフトウェアの世界で、停滞を選んだ技術に何が起こるかを象徴していて非常に興味深い。
Seasar2が冒険しないことによって、適切な大きさの問題は生まれなくなり、開発者が離れ、Seasar関連プロダクトが生まれなくなり、Seasarユーザも離れていく。使われないSeasarからさらに開発者が離れていく。
なぜ人はオープンソースプロジェクトに集まるか。そこに解決すべき課題があるからだろう。解決すべき課題が無ければ、人はプロジェクトから離れていく。
では、やはりカネでプロジェクトの求心力を維持できるプロプライエタリこそ一番信頼できる、無責任なオープンソースに依存するべきではないということになるだろうか? しかし、ここ十年のソフトウェア技術の進化の大半が、プロプライエタリではなくオープンソースプロジェクトの成果であることを考えれば、もはやそのような選択肢はないだろう。
そして、単に人が居なくなるだけなら良いが、問題は、人が居なくなり進化が止まった技術は陳腐化して価値を失うことだ。
よく、「流行の技術が出てくるたびに次々と乗り換えるのは軽薄だ。枯れた技術こそ最後に生き残る」みたいなことを言いたがる人がいる。けど、一見、次々に現れるバズワードで似たようなバカ騒ぎを繰り返しているように見えても、なんだかんだで、一周した時点で世の中は前に進んでいるし、そのサイクルは年を追うごとに短くなっている。
で、それを象徴しているのが後者の記事だと思う。つまり、「枯れた技術は堅実」とか言って余裕ぶっていると、XaaSによって仕事そのものが消滅するケースが増えている。あるいは、そう簡単に自動化できない仕事を請けるにせよ、要求される技術水準は確実に上がってしまっている。
でだ…これらの台頭もあって、いわゆるインフラを全部外部まかせにすることになったとする。その場合、Webサービスの運用であったり足回りの整備であったりツール開発であったりを担当しているおれの主業務はほとんど奪われることになる。
昔から「技術者たるもの勉強し続けなければならない」みたいなことは言われていたが、今や、その言葉が意味するシビアさは格段に上がっている。泳ぎ続けなければ自身の生命を保てないマグロのように、先端技術へのキャッチアップを続けられない者は、速やかに技術者生命を失うことになるだろう。
我々の業界は、すでにオープンイノベーションを核とする過酷なエコシステムに組み込まれてしまっている。もはや、逃れることはできない。
[参考文献]
S2 は、.dicon ファイルで定義をだいぶ簡略化できる。パフォーマンスはどうなんだろう。誰かテストしてくれいw
app.dicon
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd">
<components namespace="client">
<include path="hello.dicon" />
<component class="org.seasar.guice.Client" />
</components>
hello.dicon
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components initializeOnCreate="false">
<component class="org.seasar.guice.HelloServiceImpl" />
</components>
HelloService.java、HelloServiceImpl.java は、上記 ITPro と内容が同じなので省略。
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.SingletonS2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;
import com.google.inject.AbstractModule;
import com.google.inject.name.Names;
public class Module extends AbstractModule {
S2Container container = null;
public Module(S2Container container){
this.container = container;
}
@Override
protected void configure() {
bind(S2ContainerFactory.class).annotatedWith(Names.named(container.getPath()));
bind(Client.class).toInstance(SingletonS2Container.getComponent(Client.class));
}
}
private HelloService helloService = null;
public void setHelloService(HelloService helloService) {
this.helloService = helloService;
}
public void execute() {
helloService.sayHello();
}
}
Main.java
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
import com.google.inject.Guice;
import com.google.inject.Injector;
public class Main {
private static final String PATH = ".\\app.dicon";
public static void main(String[] args) {
SingletonS2ContainerFactory.setConfigPath(PATH);
SingletonS2ContainerFactory.init();
S2Container container = SingletonS2ContainerFactory.getContainer();
Module module = new Module(container);
Injector injector = Guice.createInjector(module);
Client client = injector.getInstance(Client.class);
client.execute();
}
}
実行結果
java -cp ?? org.seasar.guice.Main
2008/05/13 21:19:22 org.seasar.framework.log.Logger info
情報: Running on [ENV]product, [DEPLOY MODE]Normal Mode
Hello, world!