DB設計

DB設計はシステム開発プロジェクトでは最重要でありながら、おざなりな扱いを受け、

数多のプロジェクトの失敗の要因となっていると考えられる。

ではそもそもDB設計とは何かということを最もメジャーなRDBで考えてみたい。

DB設計には概念設計、論理設計、物理設計とあるが、エンタープライズアプリで

特に重要な概念設計と論理設計に話を絞る。

 

概念設計は業務要件に存在するエンティティタイプとエンティティタイプ間の

リレーションシップを特定する作業である。

純化して言うと、登場人物とその関係性を大まかに表現する作業になる。

 

論理設計は業務要件(ビジネスルール)の基底に存在する業務固有の関数従属性を

特定し、業務データの持たせ方を関数従属性のネットワークとして表現する作業になる。

 

DB設計とは業務要件から導き出されるものであり、非正規化などの対応はあるものの、原則アプリケーションの構造に依存すべきではない。

プロジェクトマネージャの役割

IPAのプロジェクトマネージャ試験の要綱が改定された。

対象者像の改訂前後の変更点を比較してみると以下のようになる。

■改訂前
高度IT人材として確立した専門分野をもち,システム開発プロジェクトの目標の達成に向けて、責任をもって、プロジェクト全体計画(プロジェクト計画及びプロジェクトマネジメント計画)を作成し,必要となる要員や資源を確保し,予算,スケジュール,品質などの計画に基づいてプロジェクトを実行・管理する者
■改訂後
高度IT人材として確立した専門分野をもち,組織の戦略の実現に寄与することを目的とするシステム開発プロジェクトにおいて,プロジェクトの目的の実現に向けて責任をもってプロジェクトマネジメント業務を単独で又はチームの一員として担う者
差異と目立つのは、改訂前はプロジェクトの目標の達成がミッションとなっていたのが、
改定後はプロジェクトの目的の実現に変わっている点である。
プロジェクトマネージャ試験の受験経験があれば、この差異はピンとくるが、
受験経験がないと理解しづらいかもしれない。
両者の差異は、
  • プロジェクトの目標

IPA風にはITストラテジストなどによって設定された)プロジェクトマネージャに

課されている品質、コスト、納期(いわゆるQCD)の目標

このくらいの品質でいつまでにいくらで完成させるという目標である。
  • プロジェクトの目的

プロジェクトが実現・解決すべきビジネス上の目的、課題

リードタイム短縮や自動化によるオペレーションコスト削減などといった目的である。

となる。

 

プロジェクトマネージャ試験が想定する対象者像の変更にまで波及してきていることを

考えると、プロジェクトマネージャに求められる役割はプロジェクトの目的の実現が

メインになってきており、従来型のQCD達成というのは役割の一部でしかなくなって

きているということだろう。

Redmine-Teams連携

RedmineとTeamsの連携を設定した時に意外に苦労したので備忘で記録。

連携方式は以下パターンが存在する。

  1. Atom(RSS)を利用した連携
  2. PowerAutomationを利用した連携
  3. Webhookを利用した連携

1.Atom(RSS)を利用した連携

これが一番単純な方法でTeams側の各チームのコネクタでRSSを選択し、

RSSフィードのアドレス」にRedmine画面のチケットタブの下部にある

他の形式にエクスポートAtomで取得したURLを設定する。

Teams(インターネット)→Redmineの通信になるため、

Redmineのサーバがインターネットからアクセス可能なことが必要。

Redmineのサーバが内部アドレスしか持っていない場合、この方法は使えない。

RSSの最低のインターバルは15分のため、リアル通知が必要な場合も

選択肢としづらい。

2.PowerAutomationを利用した連携

最近のマイクロソフト一押しのPowerAutomationを活用する方法で

Teamsの各チームでPowerAutomationを追加し、

Redmine-Teams通知用の以下テンプレートを利用する。

powerautomate.microsoft.com

テンプレートの設定画面でプロジェクトのルートURLとAPIキーを設定する。

こちらもTeams(インターネット)→Redmineの通信になるため、

Redmineのサーバがインターネットからアクセス可能なことが必要。

1同様にRedmineのサーバが内部アドレスしか持っていない場合、この方法は使えない。

 

実際に設定した時はRedmineグローバルIPを持たない内部LAN上のサーバだったため、

1,2を諦め、以下の方法を採用した。

3.Webhookを利用した連携

こちらは以下のプラグイン利用が前提になる。

github.com

【Teams側作業】

各チームのコネクタで「Incoming Webhook」を追加し、構成を選択。

Webhook名を入力し、表示されるWebhook URLをコピーする。

Redmine側作業】

上記プラグインをインストールし、Redmineを再起動する。

上記プラグインの設定手順に従って、Webhook URLを指定の場所に貼り付ける。

通知先はRedmine全体で共通にもプロジェクト単位でも設定可能。

ただ、プロジェクトより小さい単位では設定できないので、

通知先を分けたい場合はプロジェクトを分ける必要がある。

プロジェクト単位で設定する場合、カスタムフィールドの設定が必要。

チケット担当者へのメンションも可能になっている。

(自分にアサインした場合、メンションされないという何とも気の利いた仕様になっている)