- - PR -
報告:統合開発環境を使わないでASP.NET C#
投稿者 | 投稿内容 | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-19 16:05
どもです。がるです。
んっと。以前に http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=14814&forum=7&13 とか http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16797&forum=7&6 とかでお世話になりました。 で、まだかなり雑なのですが、とりあえずいくつか教えて いただいたり調べてみたりしたものの仮まとめを作成しました。 http://www.m-fr.net/etc/asp/ からご覧いただけます。 なにかの参考に…ならんかなぁ(苦笑 なにかコメントなどもらえるととてもうれしいです ^^ | ||||||||||||||||||||||||||||||||||||||||
|
投稿日時: 2005-07-19 21:33
ども、Jitta@ざっと見ただけ です。
書籍等が一番高い IDE を基本としている、はいいのですが、WebMatrixは? いや、「デザイナが好きなツールでデザインできる環境」がメインなら、一つの解ですが。 [ メッセージ編集済み 編集者: Jitta 編集日時 2005-07-19 21:35 ] > 無理やりWindowsアプリケーションのフレームワークに持ち込んでいる ぶわははは!ところで、Java の JSF って、どんな感じですかね?あれも、こういう感じだと思うのですが。 私も、Web アプリケーションなら、Web の作法をしておくべし、と思います。私のページのトップに書いてあるとおりですね。 ただ、マイクロソフトが目指す「簡単」が、どの方向なのかがよくわからないのですが、その「簡単」の一つとして、Windows アプリケーションと Web アプリケーションの、シームレスな開発環境というのがあると思うのです。 たとえば、ノータッチデプロイメントや、その発展(?)の ClickOnce ですね。 で、セキュリティについてはバンバン叩かれましたから、結構気をつけて設計してあると思います。たとえば、1.1 では、デフォルトでは CSS を引き起こしそうな入力を弾きます。“表示”には不完全ですが、HTMLEncode なども、その一つでしょう。 Java の Struts などでは、フレームワークの外にセキュリティなどの考え方があるように思います。対して、.NET Framework では、フレームワークの中にそれらを押し込んだ。がるさんの不満要因の一つ、“独自のものからはずれたことをしにくい”も解らないでもないですが、逆に、“初心者”からしてみれば、一つにまとまっている方が、取っつきやすかったです。 ← 一応、Struts もやったので。 [ メッセージ編集済み 編集者: Jitta 編集日時 2005-07-19 21:44 ] | ||||||||||||||||||||||||||||||||||||||||
|
投稿日時: 2005-07-20 01:30
こういう試みっておもしろいですよね。VSなしでASP.NETコードとか書いていると、何とはなく実体の全くない優越感みたいなものが味わえますよね(w
> サーバ Cassiniを使えばIISも不要ですね。 > 起動時のソースコンパイルが発生しない これはどうでしょう…dllにして抜き出しておいて事前コンパイルことで、体感できるほど違いがありますか? 僕の理解では、標準ではaspxページ[*1]は、いずれにしろページパーサによって解析されて、コード部分(runat=serverなscript要素の内容)は抜き出されてPageの派生クラスとして埋め込まれて、それ以外の部分については、PreRenderか何かのタイミングでResponse.Write()で出力するコードとして抜き出されて、その生成コードをcscを呼び出してコンパイルし、シャドウコピーを生成して、それをリフレクションを使って動的ロードする…というステップを経て処理されていると思うのです。つまり、一言で言えば、ソースコンパイルは発生していると思います。 もちろんコードの実体部分が無いのでその分は早いでしょうけど、遅いのはcscが内部でSystem.Web.dllなどをリフレクションでロードしている部分だと思うので、本格的なアプリケーションコードでも含まれていない限り、体感速度としてはあんまし変わらないんじゃないかなあ、と推測します。あくまで推測ですけど。 # もし速くなるとしたら、そのメカニズムが気になるなぁ もちろんその他のメリットについては同意です。 ちなみに非常に細かくて恐縮ですが、「servletのservice()と同じようなもの」はIHttpHandler.ProcessRequest()であって、Page.OnLoad()で呼ばれる奴ではありません。(そういう意味ではaspxよりashxの方がCGIに近いかも) 追記: ホントに推測です。実験は全くしていません。ごめんなさい。 [ メッセージ編集済み 編集者: Atsushi.Eno 編集日時 2005-07-20 01:32 ] | ||||||||||||||||||||||||||||||||||||||||
|
投稿日時: 2005-07-20 06:47
>統合開発環境(IDE)が高い
でもその事はMicrosoft自身も自覚していて、.NET 2005ではExpressエディションを追加しましたよね。これで大分安価に環境を整えることができるようになります。言語仕様をオープンにしたおかげで、SharpDevelopやMonoなどのオープンソース環境も提供されるようになりました。「Windowsのライセンスフィーなんて払えないよ」と言う、個人ユーザーにも利用可能な物になってます。 >無理やりWindowsアプリケーションのフレームワークに持ち込んでいる 無理やりフレームワークから外れて、ContentWriteでHTML出力しているコードに遭遇したことがあるので笑えないなぁ。 しかしグリッドレイアウトを素直に使うとIE以外でレイアウトが崩れたりするんですよねぇ。フローレイアウトにしてしまえば、殆ど問題ないわけですが。(^^; | ||||||||||||||||||||||||||||||||||||||||
|
投稿日時: 2005-07-20 10:56
どもでふ。がるです。
たくさんのレスポンス、どうもです ^^
ですねぇ。いあ、わりと早いタイミングでWebMatrixは見つけてはいたのですが。 純粋に「無料である」点にこだわると、じつはこっちのほうが(開発環境的に) ベターな解だったりしたのですが。 最終的に「やっぱりメンテナンスコスト(特にデザイナさん)を考えると」 っていう話で落ち着いたです。
ん〜。あれもなんか個人的には「よくわからない」物体なのですが(笑 JSPしかりPHPしかり、個人的には「HTMLとプログラムソースが渾然一体化して まったりとしたコクのある」モノになってるあたりが…苦手です(笑
ですねぇ。極めて同感です。
うい。「基礎を把握して」っていう前提はあるのですが。それを 満たされていると仮定した状態で、確かに「シームレスな開発」 ってのは、やはり効率Upなどで重要だと思うです。 なので、否定はぜんぜんしないですね。 # 試みとしては非常に面白いと思うです。
うん。これについてもうなずけるです。 後はまさに「Webの基礎を学ぶステップ」がちゃんとあればなぁって 思うのですが(笑
むぅそういえばそんなものも。 作業しているときは「IISはある」状態だったので、あんまり その辺はまじめに調べてなかったです(笑
んっと。「ない」です(笑 元がCプログラマなので、単純に「事前コンパイルしておきたい」っていう 衝動的感覚のほうが強いですね(笑 理論値的には「違いがあるはず」だとは思うのですが…多分大差ないと 思うです。昨今のハードウェア状況を考えると。 まぁ「ぎりぎりの」ラインでは有効なのかもしれませんが :-P
おっしゃるとおり、多分「対して違わない」だと思います。
ん〜。ただ正直なところ「最低限の開発環境は無料で手に入る」UNIX界の 住人なので、やっぱり抵抗があります(笑
うい。このあたりもちょいと気にならなくはないのですが。 ただ、やはり一番でかいのは「デザイナーさんとの連携」部分 ですねぇ。 デザイナーさんにVS.NETを見てもらったことがあるのですが、 まぁ予想通り「なんじゃこれ?」でしたから :-P 道具でこだわる気持ちはわからなくもないですし。 WindowsにもVIMを持ち込んでいる私としては :-P 以上、つらつらと雑感でした ^^ | ||||||||||||||||||||||||||||||||||||||||
|
投稿日時: 2005-07-20 11:39
・コンパイラについて。
コンパイラはSDKじゃなくて.NET Frameworkに含まれています。 なので、ドキュメントをWeb上で読むつもりならSDKも要りません。 このことは折に触れて宣伝し続けてるんだけどなぁ。。。(w ・aspxページのコンパイルに関して。 > 僕の理解では、標準ではaspxページ[*1]は、いずれにしろページパーサによって > 解析されて、コード部分(runat=serverなscript要素の内容)は抜き出されて > Pageの派生クラスとして埋め込まれて、それ以外の部分については、PreRenderか > 何かのタイミングでResponse.Write()で出力するコードとして抜き出されて、その > 生成コードをcscを呼び出してコンパイルし、シャドウコピーを生成して、それを > リフレクションを使って動的ロードする…というステップを経て処理されていると > 思うのです。つまり、一言で言えば、ソースコンパイルは発生していると思います。 aspxページがある限りソースコンパイルが発生しているのは間違いないですね。 で、ページパーサによって解析されて生成されるコードですけど、デバッグしている ときであれば、シャドーコピー先のフォルダの中にこのコードが保存されます。 それを見ると、どんなソースが生成されているのかわかります。 コード以外の部分はResponse.Writeになりますけど、それは別に抜き出されるわけ じゃなく、1つのソースコードの中に埋め込まれています。なので、書いた順番が けっこう大事だったり(w 元記事の流れだと、.NET Frameworkのクラスをほとんど使わずにHTMLを自分で生成する といった感じなので、この場合ほんとにコンパイルをさせない(aspxページを使わない)で 実行させることも可能ですよ。Web.Configに設定してやればいいんです。 http://dotnetfan.org/forums/9/ShowPost.aspx こいつの応用でいけるかと。 ASP.NETって非常に柔軟なフレームワークなんですよね。 自分で作り変えることができる部分がほんとに大きいので自分なりのフレームワークを 組んじゃうのも一興かと。 そっちに進むんだったら、IHttpHandlerとかIHttpModuleとかを調べだすと面白いですよ。 | ||||||||||||||||||||||||||||||||||||||||
|
投稿日時: 2005-07-20 13:25
あ、生成コードも保管されるんですか。僕はまあ仕事柄見るわけにもいかないのですが(w、asp.netの動作を知りたい人であれば、それを眺めてみるのも良いでしょうね。
ぉー、素晴らしい。実は最初がるさんの記事を見て、事前コンパイルに不満を言う人が少なくないのに、何で誰もそういうハックをやらないんだろう、とか考えていました。Microsoft.NETでは、この一時アセンブリをコピーする方法が妥当でしょうね。
HttpApplication辺りも含めて、動作を一通り押さえれば、自前でHTTPサーバも作れますね。地でやっているのを見ているので(w 冗談を言っているつもりではありません。 | ||||||||||||||||||||||||||||||||||||||||
|
投稿日時: 2005-07-20 14:21
最初にコードが保管されてるのを見つけたときにはびっくりしました(w そこに置かれてるものを見るぶんにはハッキングじゃないから見てもいいように思いますけど。。。 なお、Essential ASP.NET という書籍にはどんなコードが生成されるかきちんと解説されてます。 http://www.amazon.co.jp/exec/obidos/ASIN/0201760401/dotnetfan-22 #デバッグ時に見れる、とは書いてないですけどね。
この方法は別のこと調べてるときにふと思いついて、試してみたらうまくいった、というやつです。 デバッグ時とリリース時で生成されるコードが違う(すくなくともnamespaceが違う)ので、一時アセンブリを取り出すしかなさそうなんですよね。 元記事のようにWebコントロールを使わないようなときはこんなことする必要がなくて、IHttpHandlerを継承したクラスをコンパイルして、適当なファイル名と結びつけちゃえば動くはずですね。
Cassiniが簡易Webサーバになってます。 http://www.asp.net/Default.aspx?tabindex=6&tabid=41 確か全部で2千行もないコードなので、読んでみると面白いです。 商用で利用してもいいみたいですしね。 http://www.microsoft.com/japan/sharedsource/Licensing/asp.mspx |