再開宣言

ちっとばかし、更新が途絶えていましたが、ブログの更新を再開します。

再開するにあたって、方針を変更(ま、個人的な宣言みたいなもので)。

■出し惜しみしない

いろいろ、まとめた後にブログに書こうと思っていたのですが、結構手間がかかります。
インターネットに流れる以上(信用の問題もあるしね)、「正確性」も重要なのですが、そこそこ「速報性」も重要ですよね。自分のモチベーションにも関わるので、以前のブログで書いていた「お裾分け、だだもれ状態に、移行しようかと考えています。

このブログは、正式なものになる(予定)ですよね、速々報みたいなのは、

システム開発の見積もりブログ

などで、「ちょっと無責任っぽく」書いていきます。交渉テクニックも含めて、ぽちぽちと。あと、アメブロのみなさんのぺたをぽちぽち押しています(笑)。

 

■お仕事に繋げる

ここ、名前がでていませんが、もうちっとお仕事に繋がるようなスタイルにしようと思います。先週になりますが、先日、WEB系技術電脳日記のコニカさんの話を聞き、やっぱり、ホームページから問い合わせができないのは、もったいないかなぁ、と思うようになりました。つーか、ちゃんと露出しようよ>自分。

そんな訳で、専門の.NETプログラミングもそうなんですが、長年やってきた(そして、お仕事にもする)システム開発の勘所も含めて、お問い合わせができる状態を作ります。

方針的には、システム開発株式会社さんにならって、

  • 予算、規模見積もりは無料。
  • 相場の金額は、ホームページに提示。

そして、自分の特技を活かして

  • システム設計、概要設計ぐらいを、がっと無料でやって、1時間ほど対面でプレゼンテーション
  • 開発規模によっては、知り合いの会社を紹介。
  • WEBデザインなんかも、知り合いのデザイナさんを紹介。
  • 小さいもの(Excel VBAとか、.NETでのWindowsアプリとか)ぐらいであれば、手元で。
  • 開発会社のプログラミングや開発プロセスの教育もやるよ(サポートとかも)

なんてのを考えています。

建築や自動車、不動産の場合は、必ず

「ご予算はいくらですか?」

と聞かれますよね。そいういう感じでIT会社をやっていきたいです。

あと、技術系の本もぼちぼちと、続けていきます(出版社的にw)

■WEBサイトの更新

という訳で、トップページ

http://moonmile.net/

が、あまりにいい加減(苦笑)なので、なんとかしましょう>自分。

# トップページがあまりにも、なので名刺のほうは、ブログのURLになっていたりします(苦笑)

TODOとしては、

  • トップページを、「見て安心」できるぐらいにする。
    → 営業的にSEO的に、ともあるけど、それはまた後で。
    → WEBデザインは、内容を考えたら専門の方に頼むかな(やっぱり餅屋や餅屋)
  • WEBから問い合わせをできるようにする。
    → メールでも敷居が高いし、無料ならばテンプレートを使って、さっと送れるほうがいいよね。
    → 電話を載せるかどうかは、要考察(仕事にするならば、仕事用の電話番号ぐらいあるべきか)
  • 要件定義、システム設計、概要設計のサンプルを載せる。
    → がっ、と書いて、どしどし載せる。
    → ここで、出し惜しみをしない(ことにする!)
    → ここが、私のお仕事の中心になるところがだからね!
  • あとは、仕事のスタイルや、仕事の流れをぽちぽちと図に書く。
    → いわゆる、保険の契約の流れとか、自動車を購入するときの流れとか、そんな感じ。
    → 最近では、小さめのIT会社は、だいたい載せている。
    → お客から見れば、先行き、どんなことをやるのか、が見えたほうが「安心」。

■お仕事のお相手

最近は、執筆が長々と続いて出版社の方とお話することが多いのです。まぁ、それはそれでいいのですが、微妙なんですよね、金額が…(と言っていいものやら…)。当然、執筆は「広告」と「開発者の底上げ」を目指して頑張るわけですが、一応、IT会社の顧客対象としては、

  • 地元(東京都板橋区)の中小企業を優先(数名の工場経営者さんとか)。
  • 都内の中小企業/工場さん。

な感じを考えています。

官庁か民間かは問わずに。地方の場合は、プレゼンが難しくなるので、要検討かな。パワーポイントでやりとりができれば、それも含めたいんだけど、まずは、ページを改修してからですね。

 

そうそう、既存システムの再見積もり、をやろうと思います。

  • 昔構築(って言ったって10年前とか)したシステムを最新に直したいとか
  • WEBサイトを運営してもらっているけど、なんか高い感じがするとか

最近だと、CMSを使うと自分たちで更新ができたり、PHPでさくっとできちゃう個人事業主の方とかがいらっしゃるので、ランニングコストの見直しができますよね。生命保険の見直しは、ちょっとアレなんですが、ITシステムの見直しはランニングコストを割り出して、投資効果率を割り出して、広告/宣伝費をどれくらい使えるのか、を経営的に考え直してみましょう、ってやつです。

幸いにして、決算書作成や財務会計、簿記、社会保険なんかの手続きをひと通り経験したので、経営的な視点でIT開発を眺められるようになりました。なので、今度は、

  • お客の視点から、お金の視点でIT開発を見直す

というのを考えていきます。単なる費用削減じゃなくて、費用対効果も含めてです。

カテゴリー: 仕事 | 2件のコメント

WPFでコントロールをドラッグ(1)

Thumbコントロールでドラッグ
http://www.moonmile.net/blog/archives/698

で、スクロールバーで使われる Thumb コントロールを使ってドラッグを試してみましたが、このままでは単純な四角(決められたスタイル)しかドラッグできません。
Thum コントロールを少し工夫して、色々な形のコントロールも移動ができるようにする、ことは可能だとは思うのですが、いささか面倒です。つーか、もともとやりたいことは、普通のコントロールのドラッグ、あとはコントロールを配置してマウスで移動、なんてのを想定しているので、Thumb コントロールでは都合が悪いのです。コードの見通は悪くないんだけどね、XAMLが奇妙な感じになりそう。

そんな訳で、普通のコントロール(Ellipseコントロール)を移動させてみます。

■Window1.xaml

<Window x:Class=&quot;SampleDrag.Window1&quot;
    xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
    xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
    Title=&quot;Window1&quot; Height=&quot;300&quot; Width=&quot;400&quot;>
    <Canvas Name=&quot;board&quot;>
        <TextBlock Canvas.Left=&quot;0&quot; Canvas.Top=&quot;0&quot; Height=&quot;21&quot; Name=&quot;textPos&quot; Width=&quot;119&quot; Text=&quot;x:0 y:0&quot; />
        <Ellipse Name=&quot;mark0&quot; Canvas.Left=&quot;28&quot; Canvas.Top=&quot;43&quot;
                 Height=&quot;30&quot; Stroke=&quot;Black&quot; Width=&quot;30&quot; Fill=&quot;Pink&quot;
                 MouseLeftButtonDown=&quot;mark0_MouseLeftButtonDown&quot;
                 MouseLeftButtonUp=&quot;mark0_MouseLeftButtonUp&quot;
                 MouseMove=&quot;mark0_MouseMove&quot;
                 />
    </Canvas>
</Window>

■Windows1.xaml.cs

/// <summary>
/// Window1.xaml の相互作用ロジック
/// </summary>
public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
    }

    private void printPos( UIElement el)
    {
        int x = (int)Canvas.GetLeft( el );
        int y = (int)Canvas.GetTop( el );
        textPos.Text = string.Format(&quot;x:{0} y:{1}&quot;, x, y);
    }

    private bool _isDrag = false;
    private Point _dragOffset;

    /// <summary>
    /// ドラッグ開始
    /// </summary>
    /// <param name=&quot;sender&quot;></param>
    /// <param name=&quot;e&quot;></param>
    private void mark0_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        UIElement el = sender as UIElement;
        if (el != null)
        {
            _isDrag = true;
            _dragOffset = e.GetPosition(el);
            el.CaptureMouse();
        }
    }

    /// <summary>
    /// ドラッグ終了
    /// </summary>
    /// <param name=&quot;sender&quot;></param>
    /// <param name=&quot;e&quot;></param>
    private void mark0_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        if (_isDrag == true)
        {
            UIElement el = sender as UIElement;
            el.ReleaseMouseCapture();
            _isDrag = false;
        }
    }

    /// <summary>
    /// ドラック中
    /// </summary>
    /// <param name=&quot;sender&quot;></param>
    /// <param name=&quot;e&quot;></param>
    private void mark0_MouseMove(object sender, MouseEventArgs e)
    {
        if (_isDrag == true)
        {
            Point pt = Mouse.GetPosition(board);
            UIElement el = sender as UIElement;
            Canvas.SetLeft(el, pt.X - _dragOffset.X);
            Canvas.SetTop(el, pt.Y - _dragOffset.Y);
            printPos(el);
        }
    }
}

ざっと説明すると、

1.移動したい XAML のコントロールに3つのイベントを付けます。

 MouseLeftButtonDown="mark0_MouseLeftButtonDown"
 MouseLeftButtonUp="mark0_MouseLeftButtonUp"
 MouseMove="mark0_MouseMove"

マウスの左ボタンを押した時と離した時、そして移動しているときです。

このそれぞれのイベントに、ドラッグの処理を入れていきます。

private void mark0_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    UIElement el = sender as UIElement;
    if (el != null)
    {
        _isDrag = true;
        _dragOffset = e.GetPosition(el);
        el.CaptureMouse();
    }
}

左ボタンを押した時にドラッグを開始させます。
このとき、ドラッグ中のフラグ(_isDrag)を設定することと、マウスの相対位置(ドラッグするコントロールの左上からの相対位置)を e.GetPosition で取得して _dragOffset に保存しておきます。
これらはドラッグ中の時の、コントロールの移動に使います。

el.CaptureMouse() は、マウスコントロールをキャプチャするためのメソッドです。これがないと、マウスを素早く動かしたときに追随できません。

private void mark0_MouseMove(object sender, MouseEventArgs e)
{
    if (_isDrag == true)
    {
        Point pt = Mouse.GetPosition(board);
        UIElement el = sender as UIElement;
        Canvas.SetLeft(el, pt.X - _dragOffset.X);
        Canvas.SetTop(el, pt.Y - _dragOffset.Y);
        printPos(el);
    }
}

マウスを動かしているときのイベントでは、ドラック中かどうかを調べます。これは、コントロール上でマウスを動かしたときでも、このイベントが発生するためです。

移動するコントロールの位置は、Mouse.GetPosition でボタンの位置を取得して、先ほど保存しておいた _dragOffset だけシフトさせます。board は、ドラッグするコントロールが乗っている canvas コントロールの名前です。

canvas に対する位置の設定は、Canvas.SetLeft と Canvas.SetTop を使います。
このあたり、本来は拡大率を計算する必要があるのですが、通常ドラッグは等倍で行われるので、簡単のためそのまま計算します。

private void mark0_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    if (_isDrag == true)
    {
        UIElement el = sender as UIElement;
        el.ReleaseMouseCapture();
        _isDrag = false;
    }
}

そして、マウスを離したときは、ドラッグ中のフラグ _isDrag を false にして、マウスのキャプチャを ReleaseMouseCapture メソッドで解放します。

これを実行すると

<001>
20100325_01

から

<002>
20100325_02

のようにマウスでドラッグできます。

Silverlight版は
http://moonmile.net/sl/SampleDrag/ 
で実行できます。
さて、コントロールを移動することができました。
しかし、このままでは xaml にいちいちイベントを追加しないと駄目ですよね。複数のコントロールを動かしたい場合は、大変なことになりそうだし、新しいコントロールを動的に追加したときなんか、どうやるんだろう? ってこといなりそうですね。

というわけで、今回はイベントを xaml にイベントを直に書きましたが、次回はこれを動的に追加できるようにします。

カテゴリー: 開発 | 4件のコメント

IIS7.0 基本のき(補講7)

補講の7回目(最終回)です。
今回は、ちょっと…いえ、かなり便利な URL書き換え(url rewrite)の機能です。

URL書き換えというのは、CGIでよくある。

http://localhost/sample/page.aspx?year=2010&month=03&day=04

みたいな URL を

http://localhost/sample/2010/03/04

のようなアドレスでもアクセスできるようにするモジュールです。

# 実は、新しい ASP.NET ではこの機能も含まれているのですが、SE としては
# IIS で対応したほうがいいのかな、と。

Microsoft URL Rewrite Module 1.1 for IIS 7 (x86)
http://www.microsoft.com/downloads/details.aspx?familyid=DBA94A96-E513-4F87-9082-8CB04B743793&displaylang=ja
Microsoft URL Rewrite Module 1.1 for IIS 7 (x64)
http://www.microsoft.com/downloads/details.aspx?familyid=D05111C1-B4F7-45F3-8F60-A8F2B9D49ED1&displaylang=ja

これをインストールすると、IISマネージャにアイコンが現れます。

<019>
20100303_019

アイコンをクリックすると設定されたルールが出ます。

<020>
20100303_020

ここでは何も設定していないので、何もありません。

さて、ここでIIS独自のルールを設定する訳ですが、便利な機能があります。
apache の mod_rewrite と互換を持たせるために、.htaccess ファイルをインポートできます。
このため、既存の PHP の OSS の設定がそのまま使えます。便利ですねぇ。

~~

という訳で、「IIS 7 の基本のき」の補講はおしまい。
長い、っーか、.NETラボよりも長く見えるのは、まぁ、気のせいということで(苦笑)

カテゴリー: 設計 | IIS7.0 基本のき(補講7) はコメントを受け付けていません

Thumbコントロールでドラッグ

WPFやSilverlightの表示は、XAMLで作成されているので、うまくやれば Windows アプリケーションの図形移動よりも楽に移動ができる…ハズです。

Windows コントロールの場合は、ボタンなどのような標準コントロールの場合はドラッグ&ドロップのイベントが用意されているのですが、四角や文字などを移動しようと思うと途端に難しくなります。
# マウスイベントを拾って移動すればいいだけなのですが、まあ、
# 面倒と言えば面倒。図形のサイズを変えようとすると、ひと苦労だし。

WPFやSilverlightのビューは、XAMLで書かれているので、ここの値を直接書き変えてやれば、移動や回転などができます。ボタン以外も、矩形や円なども同様に移動などができるわけです。

で、実際にやってみたのですが、結果を言えば、やっぱり「ひと苦労」ですね。
矩形のハンドル(四隅にある四角)を使って大きさなどを変えようと思うと、ハンドル自身のマウスダウンイベントや、移動のイベントなどを拾う必要があります。
さて、具体的な例は、もう少しソースを整理してから紹介することにして。

実は WPF と Silverlight には、あらかじめドラッグできるコントロールが用意されています。これが、「Thumbコントロール」なのです。リストボックスなどのスクロールバーに使われています。

Thumb クラス
http://msdn.microsoft.com/ja-jp/library/system.windows.controls.primitives.thumb.aspx
で、結論を先に言うと、これを使って汎用的なドラッグできるコントロールができるかというと、「できません!」。あくまで、スクロールバーなどに使うコントロールで、一般的な形になっていません。なので、色やら枠線やらが固定になっています。

ま、ひとつ、参考までにソースを晒しておきます。

■WPFの場合

<001>
20100310_001

<Window x:Class=&quot;SampleThumb.Window1&quot;
    xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
    xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
    Title=&quot;Window1&quot; Height=&quot;300&quot; Width=&quot;400&quot;>
    <Canvas>
        <TextBlock Canvas.Left=&quot;0&quot; Canvas.Top=&quot;0&quot; Height=&quot;22&quot; Name=&quot;textPos&quot; Width=&quot;75&quot; Text=&quot;x:0 y:0&quot; />
        <Rectangle Canvas.Left=&quot;46&quot; Canvas.Top=&quot;48&quot; Height=&quot;70&quot; Name=&quot;rectangle1&quot; Stroke=&quot;Black&quot; Width=&quot;109&quot; Fill=&quot;pink&quot;/>
        <Thumb Canvas.Left=&quot;141&quot; Canvas.Top=&quot;103&quot; Height=&quot;30&quot; Name=&quot;mark&quot;  Width=&quot;30&quot; Background=&quot;LightBlue&quot;
               DragCompleted=&quot;mark_DragCompleted&quot;
               DragStarted=&quot;mark_DragStarted&quot;
               DragDelta=&quot;mark_DragDelta&quot;
               />
    </Canvas>
</Window>

 

namespace SampleThumb
{
    /// <summary>
    /// Window1.xaml の相互作用ロジック
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void printPos( UIElement el)
        {
            int x = (int)Canvas.GetLeft( el );
            int y = (int)Canvas.GetTop( el );
            textPos.Text = string.Format(&quot;x:{0} y:{1}&quot;, x, y);
        }

        /// <summary>
        /// ドラッグ開始
        /// </summary>
        /// <param name=&quot;sender&quot;></param>
        /// <param name=&quot;e&quot;></param>
        private void mark_DragStarted(object sender,
            System.Windows.Controls.Primitives.DragStartedEventArgs e)
        {
            mark.Background = Brushes.Pink;
            Debug.Print(&quot;start&quot;);
        }
        /// <summary>
        /// ドラッグ終了
        /// </summary>
        /// <param name=&quot;sender&quot;></param>
        /// <param name=&quot;e&quot;></param>
        private void mark_DragCompleted(object sender,
            System.Windows.Controls.Primitives.DragCompletedEventArgs e)
        {
            mark.Background = Brushes.LightBlue;
            Debug.Print(&quot;end&quot;);
        }

        /// <summary>
        /// ドラッグ中
        /// </summary>
        /// <param name=&quot;sender&quot;></param>
        /// <param name=&quot;e&quot;></param>
        private void mark_DragDelta(object sender,
            System.Windows.Controls.Primitives.DragDeltaEventArgs e)
        {
            printPos(mark);
            Canvas.SetLeft(mark, Canvas.GetLeft(mark) + e.HorizontalChange);
            Canvas.SetTop(mark, Canvas.GetTop(mark) + e.VerticalChange);
        }
    }
}

肝は、Thumb コントロールの3つのイベントです。

・DragStartedイベント
・DragCompletedイベント
・DragDeltaイベント

ドラッグ中は、DragDeltaイベント内で、mark(移動するThumbコントロール)の位置を変更します。位置は、canvas を使って簡便に、SetLeft、SetTop メソッドを使っています。

■Silverlightの場合

まったく同じものが Silverlight でも動作します。

<002>
20100310_002

<UserControl x:Class=&quot;SampleThumbSilverlight.MainPage&quot;
    xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
    xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
    xmlns:d=&quot;<a href=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;>http://schemas.microsoft.com/expression/blend/2008</a>&quot; xmlns:mc=&quot;<a href=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;>http://schemas.openxmlformats.org/markup-compatibility/2006</a>&quot;
    mc:Ignorable=&quot;d&quot; d:DesignWidth=&quot;400&quot; d:DesignHeight=&quot;300&quot;>
    <Canvas x:Name=&quot;LayoutRoot&quot;>
        <TextBlock Canvas.Left=&quot;0&quot; Canvas.Top=&quot;0&quot; Height=&quot;22&quot; Name=&quot;textPos&quot; Width=&quot;75&quot; Text=&quot;x:0 y:0&quot; />
        <Rectangle Canvas.Left=&quot;46&quot; Canvas.Top=&quot;48&quot; Height=&quot;70&quot; Name=&quot;rectangle1&quot; Stroke=&quot;Black&quot; Width=&quot;109&quot; Fill=&quot;pink&quot;/>
        <Thumb Canvas.Left=&quot;141&quot; Canvas.Top=&quot;103&quot; Height=&quot;30&quot; Name=&quot;mark&quot;  Width=&quot;30&quot; Background=&quot;LightBlue&quot;
               DragCompleted=&quot;mark_DragCompleted&quot;
               DragStarted=&quot;mark_DragStarted&quot;
               DragDelta=&quot;mark_DragDelta&quot;
               />
    </Canvas>
</UserControl>

 

namespace SampleThumbSilverlight
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void printPos(UIElement el)
        {
            int x = (int)Canvas.GetLeft(el);
            int y = (int)Canvas.GetTop(el);
            textPos.Text = string.Format(&quot;x:{0} y:{1}&quot;, x, y);
        }

        /// <summary>
        /// ドラッグ開始
        /// </summary>
        /// <param name=&quot;sender&quot;></param>
        /// <param name=&quot;e&quot;></param>
        private void mark_DragStarted(object sender,
            System.Windows.Controls.Primitives.DragStartedEventArgs e)
        {
            mark.Background = new SolidColorBrush(Colors.Orange);
        }
        /// <summary>
        /// ドラッグ終了
        /// </summary>
        /// <param name=&quot;sender&quot;></param>
        /// <param name=&quot;e&quot;></param>
        private void mark_DragCompleted(object sender,
            System.Windows.Controls.Primitives.DragCompletedEventArgs e)
        {
            mark.Background = new SolidColorBrush(Colors.Purple);
        }

        /// <summary>
        /// ドラッグ中
        /// </summary>
        /// <param name=&quot;sender&quot;></param>
        /// <param name=&quot;e&quot;></param>
        private void mark_DragDelta(object sender,
            System.Windows.Controls.Primitives.DragDeltaEventArgs e)
        {
            printPos(mark);
            Canvas.SetLeft(mark, Canvas.GetLeft(mark) + e.HorizontalChange);
            Canvas.SetTop(mark, Canvas.GetTop(mark) + e.VerticalChange);
        }
    }
}

Siverlight の動作はこちらで確認できます。

http://www.moonmile.net/sl/SampleThumb/

 

という訳で、Thumbコントロールは汎用的ではないので「使えない」。
仕方がないので、MouseLeftButtonDown イベントなどを地道に取得することになります。

~~ 2010/04/01 追記 ~~

「使えない」と思っていたのですが、Template 化して使うことができました。
となると、自前でドラッグフラグを作らなくていいから、Thumb コントロールは使えるのでは?

カテゴリー: 開発 | 2件のコメント

IIS7.0 基本のき(補講6)

補講の6回目です。

2年程前から、PHP on IIS というプロジェクトが走っています。
IIS上(Windows上)で、PHPを動かす、かつ、他の PHP アプリをインストールして動かす、というプロジェクトです。

いわゆる、LAMP環境(linux, apache, mysql, php)を、

windows + iis + mysql + php

で動かそうという試みです。試みとはいえ、結構実用段階で、mysql と php が同時に入ってくれるのが便利なところです。

# php + sql server という組み合わせでもありなのですが、PHP で作成された OSS の
# ほとんどが、mysql を使うので、mysql + php が主な組みわせになります。

さて、Windows ではあっても、PHP + MySQL を入れようとすると、結構手間がかかります。さらに、OSS を入れようとすると、かなり手間がかかります。

そこを自動で行ってしまうのが、Web Platform Installer というものです。
例えば、WordPress というブログをデータベース作成まで含めて、自動で行います。

<017>
20100303_017

http://www.microsoft.com/web/downloads/platform.aspx

一度インストールすると、IISマネージャにアイコンが表れます。

<016>
20100303_016

起動すると、こんな風に様々なOSSがインストールできます。

<018>
20100303_018

PHPのものだけでなく、BlogEngine.NET のような ASP.NET で作られた OSS もあるので、試しに入れてみるのもいいでしょう。

カテゴリー: 設計 | IIS7.0 基本のき(補講6) はコメントを受け付けていません

IIS7.0 基本のき(補講5)

補講の5回目です。

さて、今回は Appcmd.exe というツールの話をしましょう。
実は、Windows Server 2008 R2 から PowerShell を使うように推奨されているのですが、コマンドラインで IIS を制御するには、appcmd.exe のほうが楽だったりします。

<015>
20100303_015

通常のコマンドプロンプトではパスが通っていないので、

c:\windows\system32\inetsrv

に移動してから使ってください。

ヘルプを見ると、以下のものが使えます。

サポートされているオブジェクトの種類:

  SITE      仮想サイトの管理
  APP       アプリケーションの管理
  VDIR      仮想ディレクトリの管理
  APPPOOL   アプリケーション プールの管理
  CONFIG    全般構成セクションの管理
  WP        ワーカー プロセスの管理
  REQUEST   HTTP 要求の管理
  MODULE    サーバー モジュールの管理
  BACKUP    サーバー構成バックアップの管理
  TRACE     失敗した要求トレース ログの処理

それぞれの使い方は、appcmd site /? な形で見てください。
そうそう、全てのIISマネージャの全ての機能を使えるわけではないので、注意が必要ですが、バッチファイルを作って手順よくサーバーを増設する場合に使えます。

カテゴリー: 設計 | IIS7.0 基本のき(補講5) はコメントを受け付けていません

IIS7.0 基本のき(補講4)

補講の4回目です。今回は「アプリケーションプール」について解説します。

ASP.NET アプリケーションは、PerlなどのCGIと違って、一度コンパイルされて動いています。前回、解説したように一時的にコンパイルされたDLLを呼び出しているわけです。

このDLLは単体で動くわけではなくて、w3wp.exe という「ワーカープロセス」から呼び出しています。この実行ファイルを制御しているのが「アプリケーションプール」というものです。
通常は、「ワーカープロセス」=「アプリケーションプール」と覚えていて構いません。

IISマネージャでみると、これですね。

<012>
20100303_0121

また、ASP.NETアプリケーションが動くときに、このワーカープロセスが1つずつ起動されているわけではありません。複数のASP.NETは、ひとつのワーカープロセスに相乗りしています。

中身を見たいアプリケーションプールを選択して、右側の【アプリケーションの表示】を選択すると、アプリケーションプールを共有している ASP.NET アプリが見れます。

<013>
20100303_0131
さて、ちょっと考えると分かりますが、複数のASP.NETアプリが相乗りしているということは、このワーカープロセスが落ちるようなことがあると、全てのASP.NETに影響がでてしまいます。
つまり、他のASP.NETアプリで不都合があったり、非常に重たかったりすると、他のASP.NETアプリに影響がでるわけです。

これを防ぐために、デフォルトのアプリケーションプール以外にも、新しいアプリケーションプールを作成できます。
アプリケーションプールを選択した後に、右上にある【アプリケーションプールの追加】を選択します。

<014>
20100303_0141

こうすることで、重たいASP.NETアプリを別のアプリケーションプールに移して、軽いASP.NETアプリはひとつのアプリケーションプールに置く、という配置が可能です。

カテゴリー: 設計 | IIS7.0 基本のき(補講4) はコメントを受け付けていません

IIS7.0 基本のき(補講3)

補講の3回目です。

IISマネージャで、仮想ディレクトリを追加する方法ですが、まずは「仮想ディレクトリ」とは何かを説明しましょう。

通常、IISのルートディレクトリは、c:\inetpub\wwwroot ディレクトリになっています。このフォルダに、c:\inetpub\wwwroot\moonmile のようなフォルダを作って、

http://localhost/moonmile/

のようにアクセスできるようにします。

ただし、このドライブはCドライブにあるので、常に Windows のシステムフォルダと同じになります(変更は可能ですが…)。なので、アプリケーションのフォルダを別のドライブにリンクさせることで HDD の容量を分散させたり、HDD アクセスを軽減させたりできます。

例えば、

d:\moonmile というフォルダを http://localhost/moonmile/ に割り当てようとすれば、

フォルダを右クリックして「仮想ディレクトリの追加」を選択します。

<008>
20100303_008

ダイアログで、パスと、物理フォルダを設定します。

<009>
20100303_009

これで、http://localhost/moonmile/ にアクセスすると d:\moonmile が使われる訳です。

同様に、Webアプリケーションの場合も、「アプリケーションの追加」を選足して、フォルダを変えることができます。

<010>
20100303_010

ただし、ASP.NETを使うWebアプリケーションの場合、HDD アクセスに関しては注意点があります。

ASP.NETのソースコードは、そのまま実行されるわけではなくて、一時的コンパイルされて実行されます。このコンパイルされた実行ファイルは、

ASP.NET Web サイトのプリコンパイルの概要
http://msdn.microsoft.com/ja-jp/library/399f057w(VS.80).aspx

にあるように、「%SystemRoot%\Microsoft.NET\Framework\version\Temporary ASP.NET Files」のようなフォルダに置かれます。ASP.NET 2.0 の場合は、

C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files

のフォルダになります。
# vista の場合は、このフォルダに一時的なコンパイルファイルを確認できるのですが、
# Windows Server 2008 では DOS プロンプトでは確認できません。

このように、ASP.NET の場合はプリコンパイルされたファイルが一時的に保存されるので(aspxファイルを編集すると、更に新しいファイルが作成されます)、このままでは Cドライブに負担を掛けます。
最悪の場合、Cドライブの容量が足りないために、システムがダウンします。

これを防ぐために、一時フォルダを変更することが可能です。

ASP.NETカテゴリの【.NETコンパイル】のアイコンをクリックすると、

<011>
20100303_011

この一時ディレクトリを変更できます。

カテゴリー: 設計 | IIS7.0 基本のき(補講3) はコメントを受け付けていません

IIS7.0 基本のき(補講2)

補講の2回目です。

実は、IISを最初にインストールした状態では、ASP.NETは使えません。他にも色々な機能が制限されています。

これは「まずは最低限の状態でインストールする」というセキュリティの方針から、こうなっています。一見不便なような気がしますが、必要なときに必要なだけの設定ができる(よくわからない設定がされていない)状態であるので、「安心感」があると云えます。

余談ですが、GUI部分すら取り除いた、Core モードというのが、Windows Server 2008 にはあります。起動すると、馴染みのない(私にはなじみ深いのだが)、DOS プロンプトが立ち上がります。

さて、ASP.NETを導入するためには、サーバーマネージャの「役割」を使います。

<004>
20100303_004

右にある「役割サービスの追加」をクリックすると、ダイアログが出ます。

<005>
20100303_005

ここで【アプリケーション開発】→【ASP.NET】にチェックを入れて【インストール】ボタンを押すと、ASP.NETが使えるようになります。

vista の場合は、ちょっとややこしくて、

【コントロールパネル】を開いて、【プログラム】を選択した後に、【Windowsの機能の有効化または無効化】を選択します。

<006>
20100303_006

【Windowsの機能】のダイアログで【ASP.NET】を選択します。

<007>
20100303_007

ちなみに認証関係(基本認証やWindows認証など)も初期状態では入っていないので、ここでインストールします。

カテゴリー: 設計 | IIS7.0 基本のき(補講2) はコメントを受け付けていません

IIS7.0 基本のき(補講1)

先週の土曜日、.NETラボ http://dotnetlab.net/ で勉強会をしたのですが、資料が間に合わなくて、プレゼンテーションは最初の1頁しか作れませんでした(笑…っている場合ではないけど)。

それで、.NETラボの勉強会では「毒舌モード」でお話しましたが、ここでは「スマイル営業モード」で語らせて頂きます。別途「毒舌モード」や、懇親会でお話した不思議なブログの話は、またの機会にでも。怪しいブログのほうは、別の機会にちょろっとリンクしておきます。あ、.NETラボのブログのリンクから辿っても ok です。

そんな訳で、資料をラボのほうにアップできないので、ブログで補講をします。
内容は、ラボの勉強会でお話した内容ですね。語り口が違うだけです。多分。

数回にわたって書いていく予定なので、先に目次だけ。

1.IISマネージャの起動
2.IISの機能を追加する
3.仮想ディレクトリを追加する
4.アプリケーションプールとは
5.Appcmd.exeとは
6.Web Platform Installerとは
7.URL書き換え(URL rewrite)とは

という内容です。

.NETラボの勉強会ではノートブックを使ったので vista 環境での説明でしたが、ここでは Windows Server 2008 の説明をします。

ネタ元としては、「ひと目でわかる IIS 7.0」なので、
http://www.amazon.co.jp/dp/4891006129

立ち読みするなり、買うなりして貰うということで。

~~

さて、補講1ですが、IISを導入した後に、最初に何をするかと言えば「IISマネージャ」ってのを立ち上げます。IIS 6 の頃から使っているとそのインターフェースの違いに驚きを感じますが、まぁ、そのあたりは「慣れ」ということでしょう。

IIS 6 の頃は、ASP.NETが後から入ってきたので、IIS(.ASP管理を含む)の管理と、ASP.NETで作成したWebアプリケーションの管理が分離されてしまって、ちょっとややこしい感じになっていました。

IIS 7 の場合は、IIS自身の機能とASP.NETの機能が統合されているので、IISマネージャでは、次のように同じ画面で扱えます。

<001>
20100303_001

グループ化がされていて、「ASP.NET」と「IIS」に分かれています。
ASP.NETグループのほうは、.NETユーザーを始めとして、ASP.NET で扱う情報を、
IISグループでは、従来通り IIS で管理するツールが含まれます。SE の方は、主に IIS グループのほうを扱うことになりますね。

さて、IISマネージャを起動する場合、Windows Server 2008 の場合は

【すべてのプログラム】→【管理ツール】→【インターネットインフォーメーションサービス】

で起動します。

<002>
20100303_002

Vista の場合は、ちょっと厄介で「管理ツール」が表示されていません。

【コントロールパネル】を開いた後に、【クラシックモード】にして「管理ツール」のアイコンをクリックするか、

<003>
20100303_003

スタートメニューの「検索」で「iis」と入力すると「IISマネージャ」が検索されるので、これを使います(私は専ら、これですね)。

カテゴリー: 設計 | IIS7.0 基本のき(補講1) はコメントを受け付けていません