社員ブログ
HOME  社員ブログ

アーカイブ

‘フレームワーク’ カテゴリ

そろそろ Groovy / Grails やってみようかな

2014年02月22日 23時10分45秒

こんにちは。プリーストです。

僕は数年前から、Groovy、Grailsいいなぁやりたいなぁと思いつつなかなか手が付けられなかったわけですが、そろそろやってみようかなと思い立ったのでその経緯を記事にしてみました。

とりあえず、まだ思い立っだだけです。あくまで(笑)

僕がGrailsを知ったのは数年前にその時に在職していた会社のITアーキテクト講座に参加したときに、その講師の方が日本のGrailsの第一人者の方で、講義でGrailsを用いてモデリングと実装の実習を行ってからです。

現在は、Ruby on Railsの方が普及しており活動も活発で日本語の情報も豊富ですが、企業システムの面倒な細かい仕様や高いパフォーマンスを要求された場合にコンパクトなWebアプリケーション向けのRailsでは対応できない可能性があります。

事実、Twitter社は当初Railsで実装されていましたが、過負荷に耐える為にJVMベースのScalaやJavaに移行しています。
Javaで作った方がつぶしは効きそうだけど、Railsの高い生産性は欲しい。
その現実解がGroovy言語とフレームワークGrailsなのではないかと思いました。

Grailsであれば、Javaコミュニティの豊富なライブラリやサードパーティ製のプロダクトを用いて細かい要求に応えることができ、事前にコンパイルすればJavaと同程度のパフォーマンスが期待できます。

GroovyはScalaと異なり、Javaに似た文法でJavaエンジニアが入りやすく、Scalaのように関数型言語の理解が不要で敷居が低く、Java技術者が多い企業システム開発ではエンジニアも確保し易いのではないでしょうか。

また、GrailsはSpring Frameworkをベースにしている為、Grailsを使えるようになれば企業システム開発でこれから更に普及していくであろうSpring Frameworkのノウハウもカバーでき、Webサービスを作ろうと思った時には、Webサービス開発のスピードにも対応できるのではないかと考えて、Grailsが今の僕の状況と目的に合っていると思いました。

ただ、GroovyもGrailsも日本語の書籍やWebの情報が少ないので開発時に問題に出くわした時のリスクはあるのかなと思っています。
去年頃からGrailsを企業システム開発に使おうという動きが出始めているので、普及する可能性はあると踏んで、僕もそろそろ腰を据えてやってみようかなと思ったわけです。

まぁ、実際には僕自身が今までやってきたMicrosoftの技術より、OSSに興味を持ち始めていてJavaやSpring Framework、Rails、フルスタックフレームワーク、CoC、Webアプリケーション開発といったOSSの要素技術が詰まっていて、面白そうっていうのが大きいですが(笑)


以上、これからGroovy / Grails勉強してみようかな宣言でした。きっと明日から本気出すはず。


開発プラットフォームを選択する際にはこんなのもあるそうです。見てみると面白いです。
TechEmpower Web Framework Performance Comparison

 

それではまた♪


Java, フレームワーク, 社員:プリースト , , , ,

現行システムの設計意図を復元できる??

2014年01月25日 10時40分38秒

こんにちは。プリーストです。

 

NTTデータ、現行ITシステムの設計図を自動復元する技術開発へ:日刊工業新聞

 

これができたらすごい。設計、アーキテクチャ、何より意図を可視化しようとしてる。ほとんど夢物語だけど、だからこそやる価値はあると思います。
でも、現時点では属人性を排除しようとする方向性には疑問があります。
それは今までずっと成功してないし、今までと同じようにソフトウェア開発を無理矢理誰でもできる仕事にして品質を下げる結果になるんじゃないかなと思います。

現在の一般的なソフトウェア開発技術で、最も抽象度が高くてもJava、C#、Ruby等の高級言語と各種フレームワークやライブラリの組み合わせまでです。
業務の機能要件、非機能要件、更にはビジネス要求まではまだまだギャップが大きくて、その間には膨大な人間の判断や選択、非論理的な都合が入り込みます。
僕は現時点のシステムから要件を復元出来るようになるより、フレームワークの高度化やDSLを用いた自動生成、設計情報を記述できる何らかの言語やBRMS(ビジネスルール管理システム)の発達で開発側の抽象度が上がる方が早い気がします。

開発技術が高度化するということは、今より更に選択肢が増え、人の手による、判断、選択が必要となるということだと思っています。
開発技術が高度化し抽象度が上がれば、COBOLやC言語等を用いた構造化手法からオブジェクト指向言語・フレームワークでの開発へと変化した時のように開発時の選択の幅が爆発的に増え、判断が難しくなります。
オブジェクト指向言語とフレームワークが登場した時に、人の手による判断と選択が必要という点を無視して、属人性を排除し、誰でもできる仕事という建前を崩さなかった結果が現在のSIが抱える問題と大量の変更できないソフトウェア資産に繋がってる気がします。

ソフトウェア開発を抽象化したり自動化するということは、それらの技術が何らかのルールやアルゴリズムを内包するということであり、そのルールや特性により必ず用途や適用範囲は狭くなります。
ソフトウェアの価値は様々な人達の様々で細かい要求に応えることができ後から変更できる点にあってなおかつ技術が高度化に伴って狭い範囲をカバーする技術が多数発生するのならば、今後も知識を持った人による判断、選択の場面は必要になってくると思います。
ソフトウェアは用途が限定されていて考慮すべき範囲や部品、オプションが決まっているテレビや自動車とは違うのですから。
自動化できる可能性があるとすればAIによる判断、選択ですが、AIが一体どこまでできるかというのは興味があります。
AIは近い将来ソフトウェア開発に限らず、あらゆる職種の人達の強力なライバルになると思いますので。

この記事の内容とは別に、ソフトウェアの設計情報、品質情報の可視化はどうやれるかということには興味があります。
現在はソフトウェアの中身が見えないから、一体どういう設計が品質や保守性、変更容易性を高めるのか、経営者や発注者等の技術に詳しくない人が直観的に判断することも彼らにアピールすることもとても難しいんだと思います。
経営者や発注者が直感的にソフトウェアの内部構造とその品質、効果が分かるようになれば、そこから組織としての品質や良い設計に対するモチベーションが生まれるんじゃないかなと思っています。

良いクルマは直感的に理解できても、良いソフトウェアは直感的に理解できないところに今の問題の根っこがある気がします。
技術屋さんなのに、目の前のコストと納期と分かり易い機能以外は直感的にしか理解しようとしない人達もいるのでそこは問題だとは思うんですけど、そうも言ってられないので有効な説明の方法を考えないといけないんだと思います。

経営者や発注者がソフトウェアの価値を直接判断できない状況が続くと、エンジニアの価格が下げどまって、保守コストと変更コスト、変更のスピードがビジネス追いつかなくなった時に、初めてさぁどーするとなってしまいます。
現行システムの保守・変更コスト、スピードがシステム刷新のコストを上回るのは割と近い気がするのでその時にどれだけ最適なソリューションを提示できるかが勝負なのかなとも思います。

今の労働集約的なやり方で作られた、膨大な広域変数とサブルーチンが絡み合い、変更の見積りをすることすら難しいアーキテクチャを、現存の技術者、業務、仕組みにマッチする形で新しく整理していくか。
難しいですね。。

なんとなく候補はあるので腰を据えて勉強してみようかなーと思っています。

 

 

それではまた♪


.NET, C, COBOL, Java, Rails, 社員:プリースト , , ,

Zend Frameworkを使ったMySQLでのトランザクションのかけかた

2011年04月14日 13時31分16秒

こんにちは、カズマです。

 

今回も備忘録を書いておこうと思います。

Zend Frameworkを使ったMySQLでのトランザクションのかけかた。

 

必須事項 : 該当テーブルのストレージエンジンは「innoDB」とすること

        ※MyISAMはトランザクションに対応していない

 

ストレージエンジンの変更SQL

ALTER TABLE テーブル名 TYPE = INNODB;

 

Zend FrameworkによるMySqlでのトランザクション サンプルソース

<?php
 require_once './zend/library/Zend/Db.php';

 $db_params = array ('host' => 'ホスト名',
   'username' => 'ユーザID',
   'password' => 'パスワード',
   'dbname'   => 'データベース名',
   'port' => 'ポート番号',
   'charset'  => '文字セット');

 // コネクション作成
 $db = Zend_Db::factory('PDO_MYSQL', $db_params); // コネクション作成

 $instSql = "insert into テーブル名 values(1,'テストさん')";

 // トランザクション開始
 $db->beginTransaction();

 try {

  $db->query($instSql);

  $db->commit(); // コミット

 } catch (Exception $e){
  $db->rollBack();
  echo $e->getMessage(); // エラー出力
 }
?>

MySQL, PHP, Zend Framework, 社員:カズマ ,