ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

エンジニア相談所(java、web)コミュの初心者相談用

  • mixiチェック
  • このエントリーをはてなブックマークに追加
初心者相談用トピックです。

気軽に書いて下さい。

コメント(96)

> 花姉さん

Struts という事は、web アプリの開発の勉強をされている感じなんですね。
ちょっと桃さんのステージと違うので、一緒に勉強というわけにはいかない感じだと思いますが、わからない事などご相談頂ければと思います。

Struts は日本の java 業界では最も良く使われている web アプリケーション開発の技術なので、勉強しておいて損はないと思いますよ電球

53 でも書きましたが、この業界はポテンシャルを評価する傾向にあるので、37歳という年齢は確かに厳しい目で見られるかもしれませんね。
収入を気にしないという条件が付けられるのであれば、雇用の幅が広がる可能性があるかもしれませんが、プログラマの場合、募集年齢の制限を35くらいまでに設定している会社も多い気がしますので、転職コンサルタントの方に一度ご相談されて、市場のニーズを見られるといいと思います。
利用するのは無料ですし、別に利用したからと言って、断るのも簡単です。
もしまだ利用されていらっしゃらないのであれば、一度行ってみる事をお勧めします。

その上で必要なスキルや条件に関して、身につけるのが可能かどうか、アドバイスする事はできると思いますわーい(嬉しい顔)
ひろさん、ありがとうございます。
メール返信しておきましたほっとした顔
>ひろさん

こんばんは。
りすっこといいますが、
私にもぜひプログラミングを教えていただきたいです。

少し勉強してたことはあるのですが
ちょっと挫折しかかけてあせあせ(飛び散る汗)また1から出直したいと思ってます。

よろしくお願いします。グッド(上向き矢印)
> りすっこさん

じゃあ一緒に頑張りましょうかわーい(嬉しい顔)
直メッセでも構いませんし、りすっこさんの現在のスキルなど教えて下さいね電球
java から PostgreSQL にアクセスしたいわけではなく、eclipse にDBアクセスツールを入れたいという意味なのでしょうか。

普段は直で psql でアクセスする人間なので、あまり詳しくはないですが、google で、「eclipse plugin postgresql」で検索すれば、色々出てきます電球
色々あるので一度ご覧になって下さいグッド(上向き矢印)

サイトを見てもわからない、もしくは使いたいプラグインが具体的にあれば、おっしゃって下さいわーい(嬉しい顔)
DBのデータ操作ができるプラグインは色々あるようですが、テーブル作成などはモデリングからの生成っぽいので、ちょっと高度かもしれません。
テーブル作成などは、PostgreSQLの付属ツールでGUIベースで作れますので、そちらで作業して、データ操作のみを eclipse で扱うようにした方が、簡単かもしれませんねわーい(嬉しい顔)
> 花姉さん

オブジェクト指向に傾倒した設計法を勧めている学校なのですね。
UML をそこまで鮮やかに使いこなしている現場はあまりないのですけどね。

順番としては、

1、ユースケースの作成(図、記述)、概念モデル図(クラス図)の作成
2、ロバストネス分析図(クラス図、コラボレーション図かシーケンス図)の作成

という流れになります。

このサイトで、すごく分かりやすく例を交えて説明がされています。

http://www.ogis-ri.co.jp/otc/hiroba/technical/RobustnessAnalysis/index.html

一般的なソフトウェア設計の流れを下記に示します。

1、要求分析
お客様にヒアリングを行い、どんな事を実現したいのかヒアリングを決定し、予算、期日、実現性などから、スコープ(実現範囲)を決定し、要件定義としてまとめる作業。
2、基本設計(外部設計)
お客様側から見た、システムの仕様を決定する工程。
システムのできる事を全て決定し、お客様に確認する。
そのため実現方式やDB設計がここで見えていなければならない。
3、詳細設計(内部設計)
基本設計で決めた事を適用するアーキテクチャ(プログラミング言語など)に沿って、どう作るか設計する工程です。
4、開発
プログラミングを行います。

以降はテスト行程です。
テスト行程は複雑であるため、ちょっと長くなりそうなので、省略します。

ウォーターフォールという代表的な開発モデルでは、上の作業が全て済んでから、下の作業へとすすめていきますが、他の開発モデルでは、範囲を分割して、繰り返し行う開発モデルもあります。

では話を戻しますが、ユースケースの作成(図、記述)、概念モデル図(クラス図)の作成は、上述の要件定義という作業で作成します。
ロバストネス分析図の作成は、基本設計の作業に当たります。

つまりどんなものを作りたいのかというのを記述、整理したものがユースケース図(記述)であり、その中で出てきた重要な概念(エンティティ)の関係を整理した図が概念モデル図になります。
ではそれをシステムとして具体化するための分析がロバストネス分析になるわけです。

システムを実際に作る場合は、MVC パターン(本家パターンと近代パターンを分けるために、MVC2 パターンとかも言ったりします)で開発します。
ビュー(画面)とコントローラー(入力、処理、出力の呼び出し処理)、モデル(処理)に分けた方が色々便利(理由は長くなるので、要望があれば別途で。)なため、処理を分けて考えるんです。

ロバストネス分析の場合、BCE モデルを採用しているので、バウンダリ(画面)、コントロール(MVC のコントローラーとモデルの処理の部分)、エンティティ(データモデル)に分けて考えますが、分割部分が違うだけで基本は一緒です。

どの画面はどんな処理を経て、どんなデータを扱って、どんな画面を結果として表示するのかというような事を図(コラボレーション図やシーケンス図)にして整理しましょう。
そうやって整理する中で、色んな役割のオブジェクトが出てくるので関連をクラス図でもう一度整理しましょう。

というものです。

そしてそこで出てきたクラスを花姉さんの場合、Struts を使ったアーキテクチャに当てはめるのだろうから、バウンダリを jsp、コントロールの一部を Action クラスとして抽出し、処理部分を処理クラスとして抽出します。
処理クラスでは、Entity を DB アクセスクラスで永続化(insert、update)したり、検索したり(select)します。
ロバストネス分析図によるバウンダリとコントロールの関連から、struts-config.xml の内容も決定できるでしょう。

とまあこんな感じで進めます。
ちょっと初心者用の内容からは高度になってくるので、もっと質問がある場合は、別のトピックを立ててしまって下さい電球
> 花姉さん

質問に対する回答として、もう一度まとめておくと、

1.ユースケース図、ユースケース記述の作成
どんなシステムを作るのか分析するために作成。

2.ロバストネス分析図の作成
1をインプットとして、ユースケースを洗練しながら、実際に作りこむ時に、画面や Struts の Action、Actionから呼び出す処理クラスの抽出、呼び出す順番を整理するための作業。
(本当はそんな単純では無いんですが、演習としては、こう理解した方がわかりやすいと思います。)

3.エンティティの抽出
DB設計のために、データの関連を整理する作業と言えますが、それをユースケース図やロバストネス分析の過程で行いましょうという事。
この作業だけはどの現場でも、この先ずっと役に立つので、マスターしておきましょう。
慣れないと結構難しいですが、保存しそうなデータをエンティティとして切り出して、それぞれ切り出したエンティティの多重度(1対1か、1対多かなど)、関わり方、役割を明らかにする作業です。
エンティティの内部項目の整理なんかは、簡単にできますので、関連の定義が一番難しいかもですね。
これが完成すれば、それをDBのテーブルにして、DB設計完了!という感じです。

4.シーケンス図の作成
紹介したサイトではコラボレーション図を使っていますね。
要するに処理の流れを分かりやすく図にしましょうという事です。

5.クラス図の作成
出てきたクラス同士の関連があやふやだと、どのクラスがどんな役割を示すのかわかりにくいので、シーケンス図(コラボレーション図)の捕捉として、相関関係を示すために作成します。

という感じですね。
> セロトニン さん

すいません。質問に気づきませんでした。
mixi はメール飛んだりさせられないから、時々見に来た時じゃないと気づけないので。

知識の問題ですが、これは調べにくい情報かもしれませんね。
フィールド(メンバ変数、クラス変数)と言われるものは、java の言語仕様として、明示的な初期化が行われない場合、null で暗黙的に(つまり勝手に)初期化されます。
それに対してローカル変数は明示的に初期化しないと、暗黙的に初期化してはくれません。
更にまた言語仕様の問題なのですが、if や while、for 文の中で初期化しても、ループ条件に入るかどうかわからないので、外で明示的に宣言する必要があります。
今回のコードは、

> for(int i =0; i<3; i++){

となっているので、明示的にループに入るってわかるだろうと思ったのでしょうが、ではこんなコードならどうでしょう。

for (int i = 0; i < Config.getLimit(); i++) {

Config.getLimit(); の実行結果が無いと、判断付かないですよね。
Config.getLimit() が、外部ファイルの値を返すメソッドなら、もういよいよコンパイラには結果がわかりません。
初期化されるかもしれないし、されないかもしれない。

つまり何が言いたいかというと、分岐条件を持ったブロック内での宣言は、分岐条件部分の記述次第で判別不能となるので、コンパイラは確実なルールで判別したいので、分岐ロジック内は無視しようという仕様になっているわけです。

整理すると、

1、フィールドだろうが、ローカル変数だろうが、コンパイラは for 文の中の変数初期化は、フィールドやローカル変数が初期化されているかの判別にはそもそも使っていない。
2、1を前提として、フィールドは明示的に初期化されていなくても、勝手に初期化してくれるので、コンパイルエラーが発生しない。
3、1を前提として、ローカル変数は初期化されていないので、コンパイルエラーが発生する。

という事になります。
試しにフィールドを宣言し、main メソッドの最初で、出力してみて下さい。
オブジェクト型の場合、null で暗黙的に初期化されている事がわかります。

個人的には変数宣言をすると同時に、初期化がお勧めです。
こんにちわ。
早速質問に来ましたー。

えっと、いまswingでスタンドアローンのアプリケーション作ってます。
出来ればこのアプリが二重起動しないようにしたいのですが
何らか方法はありますか?
ググってみたところlinuxではJavaアプリケーションからそういった
管理&制御ができるようですが、windowsでは「これ!」というものが
見つからなくて困ってます。
今のところdosでタスクリストを取得できたらと漠然と考えているのですが、
コードがわかりません。作ったアプリを起動してタスクマネージャを
見てもJavaVMしかいないみたいだし・・・。

そもそも、これって可能なのでしょうか?
> 花姉さん

これって業務アプリケーションですか?

私自身はやった事はないですが、色々やり方はあると思います。
一長一短ありますが、ファイルで判別するのが一番簡単だと思います。

起動時にロック用ファイルを作成し、終了時に削除する。
起動時にロック用ファイルがあれば、重複起動エラーとすれば、2重起動を防げます。
問題点は、無理矢理起動できてしまう事は可能な点と、異常終了した場合、ロックファイルを手動で削除する必要があります。

花姉さんの状況として、下記のどちらですか?

1、間違って2重起動してしまうと困るアプリなので、2重起動を避けたい。
2、セキュリティ的な意味合いで、2重起動を防ぐ必要がある。

1であれば、紹介した方法で問題無いと思いますし、2であれば他の方法を検討する必要があるかもしれません。
回答ありがとうございます-。

おおー、それは名案ですー。
それなら何とか私でも実現できそうです。

いちおう業務アプリになるのかな?
デモ用としてどこかに見せにいくものらしいです。
たまたま社内に残ってる人間でjavaの読み書きができる人がいなかったので
作成を言いつけられました。

2重起動しちゃだめってのはたぶん見た目的な問題だけだと思いますよ。
なにぶんデモ用なので。
なので、この方法で十分だと思います。

ありがとうございましたー
実現できました。
この方法で十分だったようです。

しかし、また別の問題が・・・
今度は別のアプリケーションなのですが、
とあるパブリックの動的なサイトにアクセスし、
返ってきたHTMLをデータベースに蓄積していくというものを
作っているのですが、作り始めた当初と年度替りでサイト自体が
変わってしまって困ってます。

作り始めたときはアクセスするURLに送信情報が丸見えで
プログラム上からそのURLをパターンにそって作って送信するだけで
レスポンスのHTMLを得られたのですが、
現在はPOSTで送信されているようで、URL上には何の情報もありません。
なおかつセッションも使っているようで今までの方法ではだめになって
しまいました。(アクセスするアドレスが.doに変わっていたのでおそらく
Strutsで作成されたものになったのかと。前のアドレスは.asp)

本来サイトのボタンを押されることでPOSTで送信されるはずの
情報を擬似的に作成・送信し、レスポンスのHTMLを得ることは
できるのでしょうか?

それと、これって法的には大丈夫なことですか?

> 花姉さん

クローラーを作っているんですかね。
いいんじゃないでしょうか、実現は可能ですし、取得したデータをどう使うかで法的に OK か、そうでないかが変わってきますが。

web サイトにアクセスしているのであれば、その post で送信している、webページのソースを開いて、何のパラメーターを送る必要があるのか確認し、プログラムから post 送信する際に、付与してやればいいですし、セッションを保持する必要があるのであれば、レスポンスヘッダーからクッキー情報のセッションIDを取りだし、次にリクエストする際に付与してやれば問題ありません。

java でやっているなら、jakarta の commons の HttpClient とか使うと便利ですよ電球

ただ連続的にサイトを巡回するのであれば、レスポンス結果の html 内に設定された hidden パラメーターを抜き取って、次回のリクエストのパラメーターに含めてやる作業が必要になる可能性があるので、ちょっと難易度は高いと思いますけど。

何かのプロジェクトなんですか?
回答ありがとうございます。

クローラーって言うんだー。
初めて知りました。wiki見ちゃいましたよ。
wikiの解説には当てはまりそうだったからそうなのかな。

使用用途が法的に問題なければこういうこともOKなんですね。
よかったー。なんらか引っかかるんじゃないかとどきどきしてました。
ふむふむ、レスポンスヘッダーからセッションID取り出してつければ
いいんですか。やっぱりhttpレベルの話になっちゃうんですねー。
なんだか難しそう。。

何かのプロジェクト・・・・なのかな?
たぶん私に話が来るくらいだから、またデモくらいのものだと思いますけど。
なんせしがない事務員ですからww

今回のはなんだかちょっと私には難しそうで、
まだ具体的なコードとかはまったくわかんないですけど
とりあえずちょっと自分で調べてみますー。
いい勉強の機会をもらったと思ってがんばってみます。
またわかんない時点でお力を借りに来ますね。

ありがとうございましたー。
報告ですー。
クローラー作成ですが、お話自体がなくなりました。ザンネンバッド(下向き矢印)
意図的に隠してあるものを無理やりこじ開けて回覧するような
ことはしちゃだめです!ということで今回のお仕事は終了しました。

やっぱり会社としてこういうことはまずいんですか?
別に問題無いと思いますよ。
そのサイトは、インターネットに公開されているサイトなんですよね?

ブラウザでアクセスするのか、プログラムでアクセスするかの違いなんで。
要は取得したデータをどう扱うかですわーい(嬉しい顔)

収集する事自体は、ブラウザでアクセスして、人間が目で見て、写したり、印刷したり、コピー&ペーストするのと、同じ事なんで、それが嫌ならインターネットには公開しないですからね。

でも公開しているからと言って、著作権が無いわけではないので、勝手に自分たちのコンテンツとして転載するような事はしてはいけないという話です。
コーポレートサイトの求人ページのように、むしろ転載して欲しいようなものもあるため、一概には言えないですけどね。

収集した情報をどう利用しようとしていたかですねー。

>収集した情報をどう利用しようとしていたかですねー。

集めたデータを組みなおしてグラフにしてパブリックに
公開するようなシステム作ってました。
数値自体はサイトから抜き取った数値そのままですが、
見た目はかなり変わります。

なんかひろさんの説明読んでる限り大丈夫そうな気がしますが・・・。
なるほど。
まあグレーな範囲ですね。

公開データの内容がわからないため、何とも言及しにくいですが、集計して見せる分にはアリだとは思います。
データ内容からして、駄目だと考えるかは、ケースバイケースですね。

ただデータ元を一つのサイトに限定するつもりなのであれば、定期的に収集に行くものと思われるので、下手をするとアクセス制限されるリスクも考えた方が良いでしょうね。
回答ありがとうございます。

今回はお話が消えてしまいましたが、次にチャンスがいただけたら
アクセス先の承認をとることを提案してみます。
まあ、運よく次のチャンスがいただけたらですが(^^;)

どうもありがとうございましたー。
おひさしぶりです、また質問に来ました。

えっと、最近あまりに仕事が暇なので、
暇な時間にフレームワークでも勉強しようと思ったのですが、
ググってみたらいろいろ出てきて、いったいどれをやったらよいのやら
ということで悩んでいます。
以前職業訓練校でStrutsとspringは少々かじったので、
今回は別のフレームワークをと思っているのですが・・・。

条件としては、
・初心者向けの学習資料が手に入れやすい
・Eclipse3.5、Tomcat6に対応している
・小規模でも開発効率が悪くない
・これから先需要が伸びる可能性が高い

これらに当てはまるものがあればいいなと思っています。
何かいいものはありませんか?
spring を使ったのであれば、seasar2 などを使って勉強するのはいかがでしょうか。
ただ個人的には、struts + spring を深堀して勉強する方がためになると思います。
一つのフレームワークの中身を正しく理解し、使いこなせれば、おのずと他のフレームワークも使いこなせます。

一から web プロジェクトを作成して、struts や spring を導入して開発が行えるか、おさらいして、ファイルアップロードやファイルダウンロードとか、ちょっと複雑目な機能にチャレンジしたり、開発効率を上げるためには、どう作るべきか考えてみるのもいいと思います。

色んなフレームワークを表面だけ触るより、勉強になると思いますよわーい(嬉しい顔)
ご回答ありがとうございます。

seaser2はとても気になっています。
この間書籍を探しにヨドバシに行ってきました。
ただ、よく下調べをせずに行ったものですから、どの本を選択すれば
いいのかわからず結局帰ってきてしまいましたがorz

struts+springは一応おさらいしてみたのですが、
一人で何か作りたいと思うとどーにも効率悪くて。
それに、これから先は設定ファイルなどが少ない
ほかのフレームワークに取って代わられるのでは?
と思いまして。

実際どうなのでしょうか?
この先もstrutsは主流でいられるのでしょうか?
日本での開発環境は、単に生産性だけでは選択されない事が多いです。
もちろん爆発的に生産性が高いものは、前に出てくると思いますが。

例えば生産性が高くっても、みんなが使えなければ教育コストがかかるので、結果生産性が悪くなると判断されたりします。

struts が何だかんだと廃れない理由に、java のwebシステム開発経験者で struts を使った事が無い人がほとんどいないので、導入リスクがかなり低いため、とりあえず struts という選択をされる事が多いです。
例えば struts2 は struts と名前は似てますが、アーキテクチャは全然違ったりする(むしろ合体させた webwork2 が主体なので)んですが、名前に struts と付いているため、導入しやすいという事があったり。

例えば、struts は入力チェックとして、commons-validator と組み合わせて使われますが、入力チェックの種類が脆弱なので、日付チェックなどは、自作の拡張が必要だったりします。
こういう部分を自分で作れるようになったり、struts や spring により深い理解を示し、使いづらい部分を拡張するとかにチャレンジする事で、一歩上に進めると思っています。

seasar2 は日本初のフレームワークという事で、日本語の文献が多いですし、そういう意味では日本で凄く愛されています。
コミュニティが活発で、サブプロジェクトがたくさん立ちあがっているのもいいですね。

struts + spring + hibernate の組み合わせとSAStruts + seasar2 + s2dao の組み合わせの両方を勉強しておけば、かなりの範囲をカバーできていると思うので、幅を広げたいというのであれば、SAStruts + seasar2 + s2dao(もしくはs2jdbcなど)を勉強してみてはと思います。

設定ファイルをあまり書かない、ruby on rails で提唱された Convention over Configuration の考え方は、seasar2 だけでなく、spring も 2.5系から積極的に取り入れられているので、そこに関しては差が無い気がします。
世の中のプロジェクトの多くでは、spring を使う場合、古いやり方で使う方が多いので、そういう認識は世間で薄いように感じますが。

seasar2 の特徴としては、ホットデプロイですね。
いわゆる再起動しなくても、修正したソースコードの内容がサーバーモジュールに反映されるので、ソースを保存して、再配備、そして再起動という手間が省け、php や ruby のようにさくさく書けるわけです。

seasar2 のこの機構を生かすために、seasar2 で struts を使う時、SAStruts(Super Agile Struts)を使います。
まあとは言え、色々成約はあるんですけど。

ただ、もし質を上げたいという事であれば、個人的にはデザインパターンの勉強をおすすめしています。
アーキテクチャ設計に対して理解が深まり、フレームワークがどのようにして実現されているのか理解できるようになるので。


詳しい説明ありがとうございます。

ひろさんの説明からしばらくはstrutsの流れは変わらないという印象を
受けました。なのでstruts+sprint+hibernateをもう少し復習してみます。
その後seaser2も学習してみしようかと。
最近seaserの出来る人をという客先の要求もよく耳に入りますし、
やっておいて損はなさそうなので。
ま、とはいえ私はしがない事務員なんですけどねorz

またわからないことがあったら質問に来ます。
> 花姉さん

努力したものは残ります。
チャンスが来るといいですねわーい(嬉しい顔)

一から自分で環境を作って、開発できるようになれば、かなり優秀だと思いますよわーい(嬉しい顔)
単に研修の時と同じ様にという形でなく、それぞれの設定の意味を理解し、自分なりに改善してみると地力が付きますよ電球

ログインすると、残り70件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

エンジニア相談所(java、web) 更新情報

エンジニア相談所(java、web)のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング