« 2013年8月 | トップページ | 2013年10月 »

2013年9月

2013/09/21

ITアーキテクトに必要な考え方

日経Systems2013年9月号に、「ITアーキテクトの留意点」という記事があり、参考になったのでメモ書き。

日経BP書店|雑誌バックナンバー - 日経SYSTEMS2013年9月号

【1】V字形開発におけるITアーキテクトの6つのポイントが示されている。

(1)変更容易性の優先度を高くする

新規開発では、作るのに精一杯で、変更容易性まで手がまわらないのが普通だろう。
本番リリース後、障害を収束させて安定稼働させていくと、変更容易性が機能改善の柔軟性や顧客の要望を素早く実現させることに直結する。

しかし、稼働後のシステム修正は、付け焼刃的なパッチ修正が多いのが現実。
なぜなら、システムを保守するメンバーは次々に入れ替わるため、新規開発で作ったアーキテクチャは崩れてしまいがちだから。
すると、どんどん品質が劣化するし、顧客の要望を実現しようにも、改善パッチの工数がどんどん膨れ上がってしまう。
保守コストの増大は、顧客のビジネスの機会損失に直結する。

だから、アーキテクトはシステムの変更容易性を考慮したアーキテクチャ設計が必要になってくる。
ここで、システムの変更容易性は、保守性という品質特性に相当する。
つまり、アーキテクチャ設計に保守性も含める必要がある、と筆者は述べている。

僕が思うには、この発想は、おそらくソフトウェアプロダクトライン開発における共通基盤とアプリケーション基盤の区別につながっていくのだろう、と考えている。

(2)解決領域より問題領域を優先する

アーキテクチャによる解決を目指す場合、対症療法よりも根本原因の解決につながるようにすべき。
性能が悪くなる現象に対して、付け焼刃的な解決策を取るのではなく、本来はこのような解決を目指すべきだ、という方向がある、と筆者は述べている。

だが、実際の現場では、コストや納期の関係で難しいのが実情。
僕が思うに、コストや納期とアーキテクチャのトレードオフという問題があるがゆえに、根本的な解決は難しいと考えている。

(3)データベースはPushモデルよりもPullモデルにする

よくある例は、日々の業務の履歴を蓄積したトランザクションテーブルから、夜間バッチ処理で集計した結果をサマリー用テーブルへデータを作り、翌日に参照できるようにする設計が多い。
この設計にする理由は、集計結果を表示するテーブルと日々の履歴を更新するテーブルを分けることによって、性能悪化を防ぐこと。
バッチ処理だけでなく、DBの複製(レプリケーション)も同じ発想。

しかし、バッチ処理もレプリケーションもデータをPushしているのであり、本来の理想は一つのデータを加工して参照するPullモデルであるべき、と筆者は述べている。
データの整合性の観点からも、一つのDBで参照も更新もする方が、データの矛盾は起きにくい。

僕が思うに、「One Fact, One Place」というDBの設計思想から言えば、Pullモデルが本来のあるべき姿なのだろうが、実際の現場ではその発想には限界があると考えている。
やはり、リアルタイムの集計処理ではなく、日次バッチ処理で集計結果を残す場合も必要だったり、性能要件を考えると、参照系DBと更新系DBに分ける設計方法を取るのが自然だ。

(4)複雑さを生む要因を認識する

複雑さを解消するために、普通はシステムを何らかの観点で分割していく。
参照系と更新系、可用性や拡張性などの観点がある。
それによって、システムのSLAを保証したり、性能要件を実現したりする。

しかし、システムを分割するアーキテクチャは良いのだが、やり過ぎると、システムの運用が大変になってくる。
その理由は、分割したシステムの間で、データの整合性を保証する仕組みが別途必要になるからだ。
それが、システム間連携、いわゆる外部接続の機能に相当する。
外部接続は業務システムでかなり神経を使う部分だ。
だから、システム間連携をできるだけ避けて、高度な品質要求を現実的なコストで実現する方法を考えよう、と筆者は述べている。

僕が思うに、確かにそうだけれども、業務システムでは、システム間連携の機能があるかないかで、そのシステムの寿命に大きく関わると考えている。
REATやSOAPのようなリアル連携の仕組みがあれば、必要な情報をすぐに取得でき、その結果を別システムに取り込むこともできる。
あるいは、バッチ処理を使って、必要なデータをまとまって取得することで、大量データを処理することもできる。

ERPの落とし穴part3~外部システム連携がプロジェクトのボトルネック: プログラマの思索

そのような仕組みがあれば、アーキテクチャは古いけれど安定稼働しているシステムをそのまま残して、システム間連携で必要なデータを必要なタイミングで取得する方法で、安く逃げることもできる。
つまりラッピングという外部接続の技術を採用することもできるわけだ。

(5)アプリケーション資産を蓄積する

ここでの資産とは、再利用可能な資産を意味する。
筆者は、アプリケーションとインフラの分離、パッケージ製品を使った再利用、移植性の担保という観点を述べている。
例えば、クラウドによって、システムとインフラを分離でき、システムの可搬性(移植性)がやりやすくなってきた事情もある。

クラウドのもう一つの本質~ソフトウェアの可搬性を確保する: プログラマの思索

この辺りの考え方は、ソフトウェアプロダクトラインにおけるコア資産という再利用資産の形成、とか、品質特性における移植性の確保につながっていくのだろう。

アジャイル開発が重視する品質特性~保守性と移植性: プログラマの思索

しかし、ソフトウェアの再利用は、理想論が多すぎる。
何らかのブレークスルーが必要だろうと思う。

ソフトウェア再利用の概念: プログラマの思索

ソフトウェア部品化の幻想: プログラマの思索

(6)技術の枝葉よりも技術の根を理解する

技術の進化が激しいIT業界では、知っている量よりも学力を持続する方が重要と筆者は述べている。
つまり、特定の製品やサービスの知識に依存せず、移り変わる技術の本質を見抜く方が重要と述べている。

僕が思うに、最近のIT技術者は、技術の変化が激しいためにその流れに追いつくだけで精一杯なのが実情と考える。
だから、C++やJavaからRubyやPython、クラウド、モバイルのようにどんどん技術を追いかける方に注力せざるを得ず、上流工程に当たる業務知識の取得まで手が回らない場合が多いように思う。
Cobolで腕を鳴らしていたとしても、Javaで一流であったとしても、iPhoneやAndroidの開発では、また一から勉強し直さなくてはならない状況は多いのだ。

アジャイル開発は常識だ: プログラマの思索

だから、サービスや製品のように、ある程度のベストプラクティスが機能として詰まった形で世の中に普及する方が現実的なのだろうと思う。
その方が習得するコストが減るからだ。

【2】読んでみて参考になるけれども、アーキテクチャ設計の作業にもっとアジャイル開発のアイデアを注入できないか、という問題意識を持っている。
実際の現場では、顧客と要件定義しながら、開発チームではインフラを構築したり、フレームワークを検証するなどの並行開発をしている時が多い。

そうでなければ、外部設計が完了後に、すぐに開発に取り掛かれないからだ。
綺麗なV字形開発では、タスクの実施が遅すぎる。
デスマーチプロジェクトでは、インフラ構築やフレームワーク検証といったアーキテクチャ構築・検証作業が不十分のまま、開発に突入して、結合テスト工程で火を噴くパターンが非常に多い。

裏プロセスは並行プロセス: プログラマの思索

つまり、WF型開発であっても、成功プロジェクトの現場では、無意識のうちに並行開発という形で、アジャイル開発のアイデアを相当な部分で実施している場合が多い。
アーキテクチャの構築・検証作業をプロトタイピングという名前で、アジャイル開発に近いことを行なっているのだ。
この辺りのやり方を形式知ないし経験知としてまとめられないか、と思っている。

| | コメント (0)

2013/09/17

Redmineのメール送受信設定をSMTPs、POP3sに対応する方法

メールサーバーがSMTPs、POP3sになった場合、Redmineの設定方法をカスタマイズする必要がある。
設定方法をメモ書き。

【元ネタ】
メールの送受信を暗号化するPOP3s/IMAP4s/SMTPs(over SSL)とは - @IT

メール通知のためのconfiguration.ymlの設定 — Redmine.JP

【1】チケット更新の通知設定

下記のように、GMailへ通知する場合、SMTPsに対応するような設定を使う。
但し、Redmineの設定箇所をカスタマイズする必要がある。

Redmine(2.0.3)の通知メールをGmail経由で送ろうとしてハマった | Azrael

production:
   email_delivery:
     delivery_method: :smtp
     smtp_settings:
       #tls: true       # ここのtlsの行は削除する
       enable_starttls_auto: true
       address: "smtp.gmail.com"
       port: 587
       domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
       authentication: :login   # plain → loginへ変更
       user_name: "hogehoge@gmail.com"
       password: "passwordpassword"

「authentication: :login」にするのがコツ。

【2】メールによるチケット自動登録

GMailからチケット自動登録するには、imapで登録できるが、「port=993 ssl=1」を追加する必要がある。

チケット駆動家族 -Redmineでサクサクお気楽生活- ♪ - redmineにgmailのアカウントでメールでチケット登録できるようにしてみた

メールでRedmineのチケットに登録する | システム運用日記

rake -f /var/alminium/Rakefile redmine:email:receive_imap \\
RAILS_ENV="production" \\
host=imap.gmail.com port=993 ssl=1 \\
username=example@gmail.com password=p@ssw0rd \\
project=support tracker=inquiry \\
unknown_user=accept no_permission_check=1

しかし、POP3sのプロトコルでチケット自動登録する場合、sslオプションがrakeコマンドにない。
そのため、下記を参考にして、Redmineにパッチを当てる必要がある。

POP3S, issue creation by email - Redmine

ChiliProject - リビジョン 21685caf - ChiliProject

commit 21685caf5f34c943c78824639b9be667e86a6801
Author: Eric Davis 
Date:   Mon Dec 26 12:45:30 2011 -0800

[#791] Add support for pop3s (SSL) to redmine:email:receive_pop3

diff --git a/lib/tasks/email.rake b/lib/tasks/email.rake
index 134814d..1316e13 100644
--- a/lib/tasks/email.rake
+++ b/lib/tasks/email.rake
@@ -140,6 +140,7 @@ Available POP3 options:
username=USERNAME POP3 account
password=PASSWORD POP3 password
apop=1 use APOP authentication (default: false)
+ ssl=SSL Use SSL? (default: false)
delete_unprocessed=1 delete messages that could not be processed
successfully from the server (default
behaviour is to leave them on the server)
@@ -151,6 +152,7 @@ END_DESC
pop_options = {:host => ENV['host'],
:port => ENV['port'],
:apop => ENV['apop'],
+ :ssl => ENV['ssl'],
:username => ENV['username'],
:password => ENV['password'],
:delete_unprocessed => ENV['delete_unprocessed']}



commit 21685caf5f34c943c78824639b9be667e86a6801
Author: Eric Davis
Date: Mon Dec 26 12:45:30 2011 -0800

[#791] Add support for pop3s (SSL) to redmine:email:receive_pop3

diff --git a/lib/redmine/pop3.rb b/lib/redmine/pop3.rb
index ade84f5..4314823 100644
--- a/lib/redmine/pop3.rb
+++ b/lib/redmine/pop3.rb
@@ -18,8 +18,20 @@ module Redmine
module POP3
class << self
def check(pop_options={}, options={})
+ if pop_options[:ssl]
+ ssl = true
+ if pop_options[:ssl] == 'force'
+ Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE)
+ else
+ Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_PEER)
+ end
+ else
+ ssl = false
+ end
+
host = pop_options[:host] || '127.0.0.1'
- port = pop_options[:port] || '110'
+ port = pop_options[:port]
+ port ||= ssl ? '995' : '110'
apop = (pop_options[:apop].to_s == '1')
delete_unprocessed = (pop_options[:delete_unprocessed].to_s == '1')

「port=995 ssl=force」を追加すると、POP3sでもメールによるチケット自動登録が可能になる。

rake -f redmine:email:receive_pop3 RAILS_ENV="production" \\
host=host_IP \\
port=995 ssl=force username=my_username password=my_password \\
project=support

【追記】
@pinzoloさんによれば、RedmineのVer2.6からPop3sに対応するらしい。
待ち遠しい。

Twitter / pinzolo: 2.5.2現在、Redmine の POP3 は SSL に対応していない。なので、Gmail を POP3 を利用して読み込んでチケット登録とかは出来ない。2.6.0 では SSL に対応するらしい。 #Redmine > http://www.redmine.org/issues/16707

Feature #16707: Integrate support of SSL for POP3 incoming emails - Redmine

| | コメント (0)

2013/09/15

PBLのためのScrumとチケット駆動開発を組み合わせた事例

大学の授業にある課題解決学習(PBL)にスクラムとチケット駆動開発を適用した事例がSlideshareに公開されていたのでメモ。

【元ネタ】

Twitter / sakaba37: クラウド基礎のPBL(課題解決型学習)にスクラムとチケット駆動開発を組み合わせたお話 / PBLのためのScrumとチケット駆動開発の融合 ~Scrum+PBL+TiDD~ http://www.slideshare.net/hirocell/ses2013-ws2 …

Scrm+PBLの良い点は、タイムボックス形式の開発ゆえに授業の形式とマッチしやすいこと。
また、スプリント終了時にデモが前提のため、評価できるタイミングと場をセットすることで、最後に何もできなかったということがない。
また、スクラムが支援するメンバーの自己組織化もメリットの一つ。

逆に弱点は、タイムボックス形式なので残業でカバーできない。
また、スプリントデモが実行できる品質まで到達しない場合も考えられる。

それら弱点は、運用ルールでカバーできる点もあるが、現状の進捗管理に弱点もあるので、その部分にチケット駆動開発を適用したらしい。
チケット駆動開発を導入した利点は、以下の通り。

・スプリントバックログをチケット化することで、作業ボリュームを管理しやすい
・実績を記録することで、バーンダウンチャートの生成や残タスクの管理がしやすい
・スプリント終了時に、ふりかえりのための判断基準の多くをチケットから取得できる
・No Ticket, No Commitの運用によって、成果物とチケットを連動させることで、開発のリズムが出る

大学の授業らしく、人別の見積の誤差、人別の生産性、人別の担当チケット遵守状況などのメトリクスを採取しているのが面白い。
見積りは、スプリントを経るごとに誤差は小さくなっている。
生産性も、スプリントを経るごとに少しずつ上昇している。

チケット駆動開発の事例を他にも集めてみる。

| | コメント (0)

iDempiereの資料

オープンソースERP iDempiere(またはADempiere)の資料を集めてみたのでメモ。

【元ネタ】
iDempiere

次世代のオープンソースERPの大本命!! iDempiere(アイデンピエレ)のご紹介 | CLOSE UP コラム | OSSNEWS - オープンソース総合情報サイト

次世代のオープンソースERPの大本命!! iDempiere(アイデンピエレ)のご紹介 | CLOSE UP コラム | OSSNEWS - オープンソース総合情報サイト

標準業務機能 - iDempiere(アイデンピエレ) Lab - Compiere Distribution Lab

カテゴリ: 勉強会資料 [2] - ADempiere ERP+CRM - SourceForge.JP


Twitter / OSS_News: [お知らせ]iDempiere 1.0cのDBスキーマ情報をWeb上で公開 : http://www.ossnews.jp/oss_info/idempiere/topic-detail/20130908-19.html …: 2013年09月08日更新

Index of /idempiere/1.0c/schemaspy

Twitter / zenzengood: iDempiereの分析1 オープンソースのERP 歴史があるだけにボリュームがすごい!1000近いテーブル、4000を越えるソースファイル 業務用のmodelパッケージに1900ものJavaソースファイルがある。... http://fb.me/HV8CRd8Q

iDempiereの分析1

iDempiereはオープンソースなのに、テーブル数は1千余り、ソース数も膨大で、標準機能として販売管理、在庫管理、購買管理、会計管理(財務会計/管理会計)、生産管理、顧客管理まで揃えている。
スクラッチで受託開発する業務システムの開発規模、網羅する機能として、ほぼ同じぐらいだ。

実際に環境構築してみたものの、マニュアルが少ないので、使いこなすまでもっと研究が必要な感触。
中小企業の基幹系業務システムとして使えないか、試してみたい。

【追記】
他のBlog記事も見つけたのでリンクしておく。

オープンソースのERP、ADempiereの勉強会に行ってきた - ウィリアムのいたずらの開発日記

ビッグデータのERPデモをしないNRIは、ミクは流行り伊達杏子はイマイチな理由を知っているか? - ウィリアムのいたずらの開発日記

IDempiereの枠組み - iDempiere ja

| | コメント (0)

2013/09/12

【公開】講演資料「Redmineの運用パターン集~私に聞くな、チケットシステムに聞け」 #tidd

本日の講演資料「Redmineの運用パターン集~私に聞くな、チケットシステムに聞け」をCC Attributionライセンスで公開します。

本講演の目的は、高機能なチケット管理システムであるRedmineを社内業務に適用した場合、どんな問題に対して有効なのか、そして、Redmineを導入しても解決できない課題は何か、という観点で話しました。
チケット駆動開発をソフトウェア開発のタスク管理ではなく、運用保守・ヘルプデスク管理・HW資産管理・工数管理に適用した運用事例をパターン化してみました。

運用事例をまとめながら感じたことは、Redmineはオープンソースなのにとても優れた業務システムだなあ、という点です。
チケットの背後にあるトレーサビリティやワークフロー管理のような機能だけでなく、REST APIやメールによるチケット自動登録のように外部接続できる機能がある点が非常に興味深いです。

普通の業務システムでは、仕入先から納品情報や請求情報を外部接続で取り込んだり、業務システムから会計システムへ売上や買掛金の情報を外部接続で渡すなど、他のサブシステムとやり取りする外部接続のアーキテクチャが重要です。
Webシステムでも、例えばカード決済機能はクレジットカード会社へ入力情報を渡して、オーソリ認証や与信機能を実行してもらう例があります。
そのような外部接続のアーキテクチャがあれば、別のシステムから欲しい情報を受信したり、別のシステムで処理を依頼するような作業ができます。
業務システムが全ての業務を実現する必要はなく、他システムと連携すれば良いのです。

講演資料で述べているように、運用保守・ヘルプデスク管理・HW資産管理・工数管理をRedmineで運用すると、チケット管理で上手くはまる業務があるものの、Redmineのデフォルト機能だけでは不足する要件や業務はあります。
でも、そのような不足した機能は、RedmineのREST APIやメールによるチケット自動登録機能のように、他システムに情報を渡して処理してもらえば良いのです。

つまり、サービス指向アーキテクチャ(SOA)の発想で解決できるだろうと僕は思っています。
例えば、HW資産管理や工数管理で会計システムと連動する処理が必要な場合は、REST APIによるリアルタイム連携またはバッチ処理による一括集計処理で実装すればいいだろうと思います。

そんなことを考えると、Redmineで社内業務をIT化して業務改善していく手法は可能性があると確信しています。
今後も色々考えてみたいと思います。

| | コメント (0)

2013/09/08

チケットは京大式カード~1チケット1コンテンツ

RedmineのようなITSのチケットについて考えたことをラフなメモ書き。
以下はアイデアを殴り書き。
あとでまとめ直す。

【元ネタ】
メインページ - PoIC

時代に逆行するカードによる情報整理が熱い : ミームの死骸を越えてゆけ

【1】チケット駆動開発における「チケット」とは一体何だろう?
本来は、BTSの障害管理票。
ITSにおいては、Issueつまり課題票に相当する。

そして、Tracでは「チケット」と呼ばれている。
Tracのチケットの種類には、障害や課題だけでなくタスクも初期登録されていた。
@machuさんは、Tracのチケット管理をソフトウェア開発のタスク管理に適用するアイデアをチケット駆動開発と呼ばれた。
そこから、チケットはタスクを意味する時が多くなった。

チケット駆動開発の強みは、トレーサビリティとワークフロー管理だ。
チケットとソース管理のリビジョンが相互リンクされることで、成果物から仕様の追跡が可能になる。
また、チケットのステータス管理の背後にあるワークフロー管理から、チケットの申請・承認を運用フローに合わせてカスタマイズできる。

最近は、チケット管理をヘルプデスク管理・PC資産管理・工数管理などにも適用する事例がある。
つまり、本来のチケット駆動開発を他業務へ拡張したやり方がいくつかあるのではないか?
例えば、チケットは障害、課題、タスクだけでなく、問合せや資産、工数記録などにも使える。

そもそもチケットとは何だろうか?

【2】下記の記事を読んで、チケットは京大式カードではないかと気づいた。

メインページ - PoIC

京大式カードは、「知的生産の技術」で提唱されたアイデアカード。
野外で動物や現象を観測する学者が、屋外でも手軽に記録できるような5*6インチのカード。

上記の記事にあるPoIC (Pile of Index Cards:情報カードの積み重ね)とは、京大式カードを発展させたアイデアのようだ。

(引用開始)
PoIC のエッセンスは極めてシンプルに表現することができます。
・頭の中のアイディア・身の回りの情報を、カードを使って収集する
・それを箱の中にすべて時系列で保存していく
・それをあとで利用し、新しい知恵・知識・成果の再生産を行う
PoIC の目的は、この3行を成し遂げるためのものにほかなりません。
(引用終了)

京大式カードで重要な原則はいくつかある。
一つは、1カード1ファクトの原則。
つまり、1カードには1個の事実やアイデアを書く。
カードは惜しみなく使って、どんどん記録する。

もう一つは、収集したカードを並べて、カード間の関連から未知の法則を再発見すること。
KJ法もその一環だろう。

京大式カードで記録した事実から、新たな法則を再発見し、そこから普遍的な理論を編み出していくやり方。
京大のサル学や文化人類学は、こういう技術を用いて研究されていたわけだ。

【3】チケットが京大式カードではないかという発想は、@sakaba37さんが「チケットは備忘録」と言われていることとほぼ同等だ。

チケットは、ソフトウェア開発に必要な情報をとにかく記録していく。
チケットに残れば、チケット集計のビューによって、ガントチャート、バグ収束曲線、タスクボード、バーンダウンチャート、EVMなどのように色んな観点でメトリクスを集計できる。
そして、チケットを関連付けたり、親子チケットにすることで、チケットの情報を参照しやすくできる。
最終的には、チケットから得られたノウハウは集約して、ナレッジとして資産化する。

そのナレッジは、パターン形式で書くことができるだろう。
どんな状況でどんな問題に対して、どんな手法が効果的で解決できたのか。

チケットを単に記録して収集するだけでは意味が無い。
定期的に棚卸しして、チケットを最新化したり、チケットから得られたノウハウをチームで共有する。
そのやり方は、まさにチケットを収納したボックスから、チケット間の関係を見出し、一つのパターンにまとめて、チームで流通できるようにすること。

それらの原則をまとめると、チケットでも下記にまとめられるのではないか。
一つは、1チケット1コンテンツ。
つまり、チケット1枚には、1個の情報を記録する。
惜しみなくチケットに記録していく。

もう一つは、チケット間の関連から新たなパターンを再発見し、実践知として抽出する。
それらパターンは相互に関連し合い、パターン言語をなす。
SECIモデルと関連付けることもできるだろう。

| | コメント (0)

2013/09/04

ERPはなぜ難しいのか?~オープンソースERPで業務改革を試したい

SIの受託案件の殆どは、基幹系業務システムの開発・保守だと思う。
業務システムは、Webサービスのような華やかなシステム開発ではない。
それら業務システムは、最終的にはERPを目指しているが、ERPはとにかく難しい。
考えたことをメモ書き。

【元ネタ】
ERPシステム(1)日本式経営との適合性 | 香港★起業★日記

ERPシステム導入が難しい理由(1)縦割り組織の弊害【修正版】 | 香港★起業★日記

ERPシステム導入が難しい理由(2)ガバナンスの問題 | 香港★起業★日記

ERPシステムの導入が難しい理由(3)カスタマイズ依存の問題 | 香港★起業★日記

ERPシステムの導入が難しい理由(4)スイッチングコストの問題 | 香港★起業★日記

【0】ERPは、会社の基本業務をシステム化したもの。
普通は、「購買管理」、「在庫管理」、「販売管理」、「会計管理(財務会計/管理会計)」、「顧客管理」などの機能を含む。
最近は、ビッグデータ活用として、経営分析に使われるBIや、顧客の購買履歴に着目して分析するCRMなどの機能も含まれるだろう。
つまり、ERPを業務の面からもシステムの面からもマスターすると、幅広い業界の商い習慣やITにも詳しくなる利点はある。

しかし、ERPはマスターするのが本当に難しい。
今までの経験から、その理由を考えてみた。

【1】ソフトウェア以外の業務知識、会計知識が必須

ERPは会社の業務をIT化するために、まず業務の内容を知っているのが前提。
コンビニでバイトした経験があるなら分かるだろうが、商品の発注から仕入れ、入出庫、販売、売掛金回収など業務は幅広い。
そして、ERPは最終的には、損益計算書や貸借対照表、キャッシュフロー計算書などの財務諸表を月次で出力するのが基本だ。

そういう業務の経験がないと、どんな仕様で画面や帳票を作ったら、ユーザの役に立つのか、という発想が出てこない。
業務システムでは、毎日、大量のデータを入力しなければならない。
受注や発注の入力画面では、タブキーを使って、キーボードだけでたくさんの種類のデータを大量に入力する。
仕入れ伝票、売上伝票、出張旅費や経費の精算など、お金に関わる業務は、会計監査や内部統制の観点でも、その入力データの完全性や一貫性が求められる。

業務を知らないプログラマが実装すると、ユーザがどんな状況でどのように使うのか、という場面を想像できないから、使いにくい画面UIになってしまったり、会計帳票や出荷指示書では必須の項目が漏れていたり途切れたりして出力される場合がある。
プログラミングだけできる人は、業務システム開発ではあまり役立たないのだ。

だから、販売管理や在庫管理、会計などの知識は自主的に勉強する必要がある。
お勧めは日商簿記の3級、2級だろう。
商業簿記や工業簿記を一通り勉強すると、個人商店や株式会社の経理の仕組みが分かるので、少なくともお金の流れを理解できるようになる。

でも、業務システム開発を自主勉強しようにも、ERPはそう簡単に作ることはできないから勉強しづらい。
現場でどう使うのか、システムはどのような操作が望ましいのか、色々試してみたいのに、机上の勉強しかできないのだ。

業務システム開発がどうしても、プログラミングよりも設計書中心の開発になってしまう理由は、そういう面もあるからだろう。

【2】アーキテクチャが複雑

業務システムは、Webサービスに比べるとアーキテクチャが複雑なのが普通。
複雑なアーキテクチャになってしまう理由はいくつかあると思う。

一つは、業務システムは今もクライアント・サーバー方式が主流だから。
つまり、Webシステムのように、クライアントはブラウザだけという仕組みは採用しにくい。
理由は、発注伝票や受注データのような大量データの入力は、ステートレスな方式設計では使いづらいから。
だから、クライアントアプリを各端末にインストールして、入力UIをかなりカスタマイズするのが普通。

しかし、クライアント・サーバー方式は、Webシステムが主流となった現代のシステムアーキテクチャと相性が良くない。
ビジネスロジックがクライアントにも分散されているので、保守しにくい。
また、クライアントのアプリを一斉にVerUpするための配布方法も一苦労だ。
Webシステムなら、サーバーにデプロイするだけでいいのに、各クライアントに逐一ダウンロードしなくてはならない。
クライアント端末の電源が落ちていたら配布できないし、OSや.NETのバージョンが微妙に違うと正常動作しない危険もある。

2つ目は、ERPと他システムとの外部接続という特有のアーキテクチャが必要なこと。
例えば、EコマースやらCRMやらBIやら、たくさんのWebシステムが乱立してしまったために、ERPとデータをやり取りする仕組みを別途作らないといけない。

外部接続のアーキテクチャとしては、SOAPやRESTのようなHTTP経由のリアル連携もあるし、メッセージキューイングもあるし、FTPやHULFTのようなバッチ連携など種類がたくさんある。
それぞれのアーキテクチャの癖については、下記に書いた。

ERPの落とし穴part3~外部システム連携がプロジェクトのボトルネック: プログラマの思索

外部接続のアーキテクチャでは、耐障害性や性能などの非機能要件がボトルネックになりやすい。
だから、アーキテクチャの検証に十分に労力をかける必要がある。

3つ目は、データ移行やシステム移行のような移行作業が別途必要なこと。
ERPを作ったからといっても、マスタデータがなければ、ただの箱に過ぎない。
必要なデータを、過去のレガシーシステムから持ってきて、ERPと言う箱に入れなければならない。
システムを完全にリプレースする案件ほど、DBのレイアウトそのものが当然違うので、データ移行がとても大変になる。
その時の注意事項も下記に書いた。

ERPの落とし穴part5~コード設計の難しさ: プログラマの思索

更に、システムやそのハードウェアをVerUpするだけでも、その作業はかなり気を使う。
業務システムは停止してはいけないから、普通は、パイロット方式で特定の部門に先行導入したり、旧システムと新システムを並行運用したりする。
この辺りも記事に書いた。

ERPの落とし穴part4~システム移行という名のデスマーチ: プログラマの思索

レガシーマイグレーションという名のシステム移行はデスマーチになりやすい: プログラマの思索

移行作業は、リリース後の運用を保証するためにとても重要な作業である。
普通は、事前に入念な計画作りをするのが普通なので、どうしてもWF型開発になりやすくアジャイルにやりにくい。

【3】開発手法はWF型開発が主流

現代のソフトウェア開発は、アジャイル開発の方が最先端で、次々に新しい発想や技術が生まれている。
アジャイル開発は、技術者として勉強して追いかけるのはとても楽しい。

でも、僕の短い経験では、Webサービスや新製品開発にはアジャイル開発はとてもフィットするが、業務システム開発はアジャイル開発に向きにくいように思う。
その理由はいくつかある。

一つは、上記に書いたように、アーキテクチャが複雑なので、どうしても事前に入念な計画作りに力を入れざるを得ず、純粋なアジャイル開発がやりにくい。
外部接続やデータ移行、システム移行などのアーキテクチャ検証プロセスを並行開発するやり方もあるが、アジャイル開発で一番基本的な手法である小規模リリースを実現しにくい。
複雑なアーキテクチャが安定しなければ、そもそも小規模リリースしても品質が安定しないのだ。

もう一つは、設計重視のモデル駆動開発になりがちなこと。
業務システムを机上の設計で、現状の業務とあるべき姿の業務のギャップを見出し、ToBeの業務プロセスをモデル化していく。
そのモデルに従って、プログラミングしていく発想なので、設計書重視の開発スタイルになりやすい。
プログラミングできるよりも、業務を知っていて、その業務をいかにモデル化できるかという能力の方が評価されやすいのだ。

また、業務モデルは会社や業界が違うと、モデルも変わってくるので、DBや設定ファイルなどで動的にパラメータを変えれるようなアーキテクチャにして、できるだけ幅広い業務をカバーできるように設計するのが普通だ。
その理由は、ノンプログラミングでカスタマイズできるようにしたいから。

普通は、ERPをそのまま導入したらおしまいというわけではない。
必ず、機能のカスタマイズは発生する。
ユーザ企業特有の業務は必ずあり、運用で逃げれない業務は必ずある。
そんな業務をIT化するために、ERPのカスタマイズが必要になる。
しかし、ERPのカスタマイズは曲者だ。
馬鹿でかい費用が意外にかかるし、せっかく品質が安定しているソースに手を加えるのだから、機能のインターフェイスやデータに不整合が発生したり、他機能のデグレードが発生したりする危険がある。

だから、モデル駆動で設計すると、どうしてもパラメータが多くなったり、カスタマイズすることで煩雑になりやすく、プログラミングよりもテストする方が工数がかかるようになりがち。

更に、発注者であるユーザ企業は、自力で業務システムを開発する力がないのがほとんどなので、大手SIに受託開発を依頼する場合が多い。
したがって、アジャイル開発が理想とする顧客も巻き込んだ開発スタイルは、たくさんの利害関係者に分散された構造の中では実現しづらいのだ。

スクラムの新しさ: プログラマの思索

【4】「業務知識が必要」「アーキテクチャが複雑」「WF型開発が主流」という悪条件の業務システム開発を何とか改善できないものか?

最近考えているのは、オープンソースのERPを導入することでそれらの問題を別の問題にすり替えて解決できないか、と思っている。
「業務知識が必要」「アーキテクチャが複雑」という問題は、技術者自身のスキルアップで解決できる。
その環境の一つとして、オープンソースのERPを自発的に使って、色々試してみるという手法があると思う。
オープンソースのERPは、受託開発の業務システムよりもシンプルかもしれないが、ERPのエッセンスを勉強することはできるし、よりよいアーキテクチャを実験する環境を提供してくれる。

また、「WF型開発が主流」という問題は、昨今の技術革新によって大幅に緩和されてきつつあると思う。
アジャイルに開発したいのに、今もなおWF型開発にしがみつかないといけない原因は、事前のアーキテクチャ検証や利害関係者との調整に手間がかかっているからだ。

今はサーバー環境というインフラ構築すらアジャイルに開発できるし、外部接続やデータクレンジングなどのデータ移行も、オープンソースのツールやプロトコルをうまく使えば、以前よりも楽に実施できる。

また、ユーザ企業やSIも含めた複雑な体制は、信頼にもとづいた体制づくりでカバーできるだろうと思っている。

【5】今注目しているオープンソースERPは、iDempiere、SugarCRM、OpenERP。

iDempiere(アイデンピエレ) Lab - Topページ - Compiere Distribution Lab

SugarCRM Cloud Hosting, Installers and Virtual Machines.

OpenERP Cloud Hosting, Installers and Virtual Machines.

SugarCRMは以前から、CRMとして着目している。
iDempiereはかなり高機能なERPなので、試してみたいと思っている。

色々考えてみる。

| | コメント (0)

2013/09/01

ERPの落とし穴part6~業務とERPの間の微妙な関係

ERP導入のポイントについて優れた記事を見つけたのでメモ。

【元ネタ】
第1回 ERPの概要と導入のポイント | Think IT

第2回 アンバランスな業務とERPの関係 | Think IT

第3回 海外進出する日本のパッケージベンダ | Think IT

第4回 「SOX法」に踊らされないために知っておくべき内部統制とERPの関係 | Think IT

第5回 ユーザができるリストを用いた自社の内部統制のチェック | Think IT

【1】ERPの本質は2つ。
一つはマスタ管理の一元化。
例えば、発注管理で使われる仕入マスタと経費精算や請求管理で使われる仕入マスタが一元化されていなければ、どこにどれだけの経費や売上を請求すべきか、分からない。
日本の会社は普通、月末に売掛金や買掛金を締めて一括請求・一括支払いするので、金額を正しく計算できなくなる。
つまり、仕入マスタというデータに整合性が取れていないわけだ。

最近は、CRMを導入したい場合、POSレジで売上計上したデータに顧客情報が顧客マスタと連動する仕組みを作っていないと難しい。
トランザクションデータにある顧客情報が記録されていなかったり、登録されていてもデータの形式が揃っていないために、顧客情報を抽出するためのデータクレンジングが必要だったりするのだ。

もう一つは、データのターンアラウンド。
例えば、商談を受注したとしても、製品を出荷した時に売上計上と同時に売掛金が発生し、翌月末締めで売掛金を締め請求し、顧客が当座預金へ入金したら、売掛金と相殺しなければならない。
それら一連の処理では、受注データが売上、請求、入金の各プロセスでデータが流れると同時に、ステータスも次々に更新されていく。
だから、一つのデータのライフサイクルをシステムで一元管理できるようにするのはとても重要。

【2】ERPの歴史をたどると、「マスタの一元化」をめぐる問題をずっと引きずっているのが分かる。
下記の記事が分かりやすい。

第3回 海外進出する日本のパッケージベンダ | Think IT

業務がシステム化された頃、企業内の経費管理・販売管理・発注管理などはバラバラに作られていた。
しかし、業務システムが対応する範囲が広くなるに連れて、統合業務システムの必要性が言われ始めた。
これがERPの起源。

普通のERPは、クライアント・サーバーという2階層の設計思想が普通。
クライアントでは企業内の担当者が入力運用するので、それほど人数はいないし、サーバーでデータを一括管理すればいい。

しかし、Webシステムがどんどん普及して広がったことで、ERPのC/SシステムとフロントのWebシステムの違いが浮き彫りになった。
例えば、Eコマース、CRM・BIなどの情報系システムがWebシステムとしてERPの外側にあると、ERPとは、データ連携するために、SOAPなどのリアル連携、または、バッチ処理による非同期連携が必要になる。
つまり、性質の違う複数のシステムを接続するためのサービス指向アーキテクチャというSOAのような考え方が必要になってくる。
これが、いわゆる外部接続という方式であり、ERPでは開発のボトルネックになりがちな部分。
以前、下記の記事でまとめた。

ERPの落とし穴part3~外部システム連携がプロジェクトのボトルネック: プログラマの思索

また、EnterpriseArchitecture(EA)という考え方も、サイロのように各システムが乱立した状況を解決するために、全体最適の観点からメタ・システムを作ろうとする発想とも言える。
EAは一時期流行したけれど、今は下火になっているように見える。

Enterprise Architectureの悲劇: プログラマの思索

【3】ERP導入は以前から大変難しい案件だ。
なぜ難しいのか?
それは、ERPと現場の業務にズレがあるから。

それゆえに、ERPをそのまま導入しても、業務改善や業務の効率化につながるとは限らない。
そのあたりの事情は下記に書かれている。

第2回 アンバランスな業務とERPの関係 | Think IT

中小企業ならば、ERPがカバーしていない業務は運用で逃げることができる。
イレギュラーな業務、例えば、年1回の帳票作成や年1回の在庫棚卸しさぎょうなどは、手運用でカバーすることも可能。
しかし、大企業では、トランザクション量が多いために、運用で逃げることが現実上、不可能なケースが多い。
年1回のイレギュラーな業務をERPがカバーしていないと言っても、手作業の運用でカバーできないならば、機能追加して作る他無い。
だから、大企業では、ERPのカスタマイズは必要悪。
カスタマイズしなければ業務が滞るのだから、お金をかけてでも作るしか無い。

【4】既存のパッケージ製品を導入する場合、ポイントはいくつかある。
一つは、パッケージ製品から流用する機能とカスタマイズする機能を見極めるフィットギャップ分析をすること。
フィットギャップ分析することで、コストや納期の制約条件を考慮して、どの機能はERPを流用するのか、別の機能はERPにないのでカスタマイズしてでも新規に作るのか、という判断資料になる。

もう一つは、パイロット運用や並行運用しながら、導入を進めていくこと。
フィットギャップ分析に時間をかけすぎても、実際の現場で運用しなければ分からない時が多い。
ERPを導入してみたら、実はユーザインターフェイスが使いにくかったり、現場でよく使われる業務が機能として不足していたりする。
ERPを導入することで、逆に、現場の担当者が混乱したり、現場の作業量が増えて逆効果になったりする場合もある。

だから、普通は、特定の部門へ先行導入して、ERPと運用のミスマッチから上がる問題を抽出して、その対策を講じた後に、他部門へ順次展開するパイロット方式を選択する場合が多い。

あるいは、既存の業務システムと並行して、新規導入したERPも2重運用しながら、業務に支障が発生しないように運用する場合もある。
並行運用は、ERPへ一括・単純移行する場合に比べると、現場の業務がいきなり変わるわけではないので、業務が滞るリスクは小さい。
しかし、2つのシステムを運用するためにコストがかさむし、現場の担当者も2重入力する手間がかかる。

【5】業務とERPの関係は正直微妙だ。
業務をシステム化して、効率化するのが目的なのに、実際は、システム化するほど、証跡としての紙の帳票が増えて過ぎたり、カスタマイズしていない機能は手運用でカバーするために逆に作業量が増えたりする。
結局、ビジネスの現場でどのようにシステムは使われるべきなのか、という事実を開発者がもっと知らなくてはならないのだろう。

ERPを「受託案件の業務システム」に置き換えてみれば、自分たちが開発したシステムが本当に顧客の価値になっているのか、疑問に思える時があるのではないだろうか?

| | コメント (0)

SugarCRMのデモ動画の資料

SugarCRMのデモ動画が公開されていたのでメモ。

【元ネタ】
【IBM】日本語のデモ動画が公開されました! | SugarCRM - SugarCRMの日本語マニュアル公開@SugarUser.jp

SugarCRMの日本語マニュアル

SugarCRMの資料: プログラマの思索

最近、CRMを色々調べてる。
SIも部課長クラスになると、受託案件の営業引き合いの仕事ばかりになる。
彼らは、受託案件のステータス「受注済み」「コンペを取って見積り中」「引き合い中」「見込み」「提案中」ごとに期間別に売上集計して、年間の売上を予測している。
このように、ステータスごとの売上集計と売上予測を表現した時系列の売上グラフは、パイプラインと呼ばれるらしい。

パイプライン Pipeline / マーケティング用語集 / マーケティングキャンパス

では、その業務はIT化されているのか、と言われると、彼らはExcelマクロを駆使して、毎日のように更新している。
お客さんには、「ITシステムでこれだけ解決できますよ!」とシステム提案してるのに、自社の顧客管理や会計管理はさほどIT化されてない。

そんな業務はSugarCRMのようなCRMツールで、顧客の重要度管理や案件管理ができないのか、といつも思っている。

SugarCRMでは、営業支援機能(SFA)が揃っている。
顧客を、アプローチしていない「ターゲットリスト」、アプローチして受注の見込みのある「リード」、既に受注済みの「取引担当者」のような重要度で管理できる。
また、顧客ごとに案件や商談を個別に管理できる。
そして、案件ごとステータスごとに売上集計できるパイプライン機能も持つ。

経営者にとってCRMのパイプライン機能はとても重要。
毎週毎月の経営会議では、案件のステータスや売上予測の話ばかり議論していることだろう。

04_ホーム -  SugarCRMの日本語マニュアル

SugarCRMについては色々調べてみる。

| | コメント (0)

日経Systems2013年9月号にRedmineの記事が掲載されました

日経Systems2013年9月号にRedmineの記事が掲載されました。

【元ネタ】
日経BP書店|雑誌バックナンバー - 日経SYSTEMS2013年9月号

日経SYSTEMS - 9月号の「検証」で、プロマネツールのRedmineの導入の勘所を書きました。一読いただければ分かるように、「いかにしてメンバーに使ってもらうか」が今回のメインテーマです。その意味では、10年近く前に別の雑誌で書いたグループウエア導入についての記事に共通点を感じました。システムの利用を促すには工夫が必要です。 (矢口)

Twitter / akipii: ツールを入れるとプロセスも組織も変わる。 RT @NikkeiSystems: 9月号の「検証」で、プロマネツールのRedmineの導入の勘所を書きました。その意味では、10年近く前に別の雑誌で書いたグループウエア... http://fb.me/2j53Jdiui

日経Systemsにredmineの記事を書きました: プログラマの思索

日経SYSTEMS 2012.10 - 情報技術建築家日記

記者の眼 - 「新3種の神器」で開発現場を改革しよう:ITpro

第5回品川Redmine勉強会の感想 #47redmine: プログラマの思索

日経Systemsは2011年7月号にもRedmineの記事を@sakaba37さんと執筆させて頂きました。
それから2012年、2013年と継続的にRedmineの記事を掲載されています。

品川Redmine勉強会で日経Systemsの記者の方が参加されていて、お話を伺った所、読者アンケートを取った結果では、Redmineの読者評価がいつも高いそうです。
第5回品川Redmine勉強会の感想 #47redmine: プログラマの思索にも書きましたが、おそらく日本のSIの現場でRedmineを使っている事例が多いのでしょう。

その理由を推測すると、いくつかあげられると思う。
ITSの高機能化やSVN・Gitなどの構成管理ツールの普及、そしてJenkinsのようなビルド管理ツールの普及という
ソフトウェア開発を支援する基盤が揃ってきたこと。
そして、ソフトウェア開発の案件の短納期・低コストへの流れ。
それらの問題に対して、ITSを使ったチケット駆動開発に興味を持ち、実際に現場に導入されているのだろう。

だが、ITSと言えば、Redmineだけでなく、Tracもあるし、有償ならばJiraやMSのTeamFoundationServer、IBMのRationalTeamConcertもある。
色んなツールの中でRedmineの普及が目立つ理由は、おそらく、日本のSIの開発現場では開発支援ツールそのものに投資する環境でないため、無償のツールの選択肢としてRedmineが選ばれているのではないか、と思う。

もし、お金に物を言わせる環境があれば、サポートもあり、テスト管理やメトリクス集計など豊富な機能を持つJiraやTFSがお勧めだろう。
コミュニティで聞くと、開発ツールに投資してくれる会社では、JiraやTFSなどを導入しているという話をよく聞く。

普通の開発現場では、新しいツールを導入するための投資費用を出してくれる所は少ない。
LAMPの経験があれば、インストール作業はそれほど難しくない。

そして、Redmineならば、ネット上にたくさんのノウハウが転がっている。
チケット駆動開発はTracから生まれたが、Redmineで育まれ、そして他のITSでも同様に運用できる手法。

チケット駆動開発の面白さは、アジャイル開発への適用が一番と思うが、それ以外にも、GitやJenkins、TestLinkなどの他ツールと連携して開発の効率化を試すこともできる。
他にも、ITSの豊富な機能を生かして運用保守・ヘルプデスク管理・資産管理・工数管理などの社内業務にも適用することが出来る部分だと思う。

チケット駆動開発のエッセンスは「チケットをXPのタスクカードのように扱う」という一点だけなのに、そこからたくさんの運用方法が生み出されている所が面白い。

特に、Redmineはオープンソースのプロジェクト管理ツールなのに、RESTやメールによるチケット自動登録などの機能もあるおかげで、いろんな運用の可能性を秘めている。
この辺りのノウハウも考えていきたい。

【追記】

9/12(木)午後に、@sakaba37さんとチケット駆動開発に関する講演を行います。
今日ものある方はぜひご参加下さい。

【告知】「Redmineの運用パターン集~私に聞くな、チケットシステムに聞け」を講演します: プログラマの思索

| | コメント (0)

« 2013年8月 | トップページ | 2013年10月 »