2009年9月26日土曜日

教訓 ライブラリ・ソース管理

仕事をしていて感じたこと、トラブルプロジェクトでの経験を生かして、
ここに教訓を書いておく。

ライブラリ・ソース管理
大規模開発において、必ずトラブルが発生するライブラリ・ソース管理。
開発するに当たって相当の工数を取られてしまうのが現状だと思われる。
管理を簡素化するためにいくつか覚書。
(1)ディレクトリ構造を同一にする
開発を行うメンバーは、開発に関する全てのディレクトリ構造を同一にする。

(2)ソース管理はバージョン管理ソフトを使用する
ソース管理は、フォルダを分けて「old」「new」などやるのは時間と手間の無駄。
バージョン管理ソフトを導入する。
VSS(Visual Source Safe)やCVS、SVN(Subversion)など。
CVSとSVNはフリーなので、導入が楽かもしれない。

VSSはファイルベースの管理ソフトなので、サーバが不要。ネットワークフォルダとクライアントソフトがあればOK。
SVNはサーバソフトとクライアントソフトが必要で、通常SVNといわれているのはサーバソフトのこと。SVNクライアントでは、TortoiseSVN(トータスSVN)がWindowsシェル統合で使いやすい。

(3)プロジェクトファイルを共有する
EclipseやVisualStudioなど、統合開発環境(IDE)のプロジェクトは必ず共有し、全メンバーで同一のものを使用する。
IDEのプロジェクトファイルには、様々な設定(例えばjavaの開発ならクラスパスや参照ライブラリの設定)が入っているため、各メンバーでバラバラの設定を持ってしまうと、ソースを新しくすると動かなくなる、などの事態が発生する。当然プロジェクトファイルもバージョン管理する。

(4)ビルド・メイク環境を一つにする
プログラムのビルド・メイクは、必ず一つの環境とし、バージョン情報を付加する。

教訓 外国人SE

仕事をしていて感じたこと、トラブルプロジェクトでの経験を生かして、
ここに教訓を書いておく。

外国人SE
原価低減のため、外国人SEを投入することが多い。
まぁ結局高くつくことが多いわけだが、それは指示を与える日本人の問題。
外国人SEの方が技術レベルが高いことが多く、
使いようによってはうまくいくはず。(うまくいったのを見たことないが)

(1)資料を作らせるときは、枠を予め決めておく
外国人SEに資料を作らせる際、「こうこうこういう資料を作れ」という指示はNG。
こちらでほしい資料を作ってくれることなど絶対にない。(日本人でも無理だと思う)
そのため、例えばエクセルの一覧を作らせる場合は、予め枠、つまりカラム名を全て書き、
「そのカラムには何を書くのか」という説明をつけて渡す。
そして、「このエクセルの空白を埋めろ」という指示を出す。

また、文章での資料などがほしい場合、章立てを予め作っておく。
そして、あるならサンプルを渡す。サンプルがなければ、「この章にはこういうことを書く」という説明をつける。

(2)日本語での会話は信じない
日本に仕事をしている外国人SEの中には、流暢に日本語を話せる人もいる。
しかし、その人は日本人ではない。
日本の文化として、「阿吽の呼吸」や「暗黙の了解」などがあるが、
その人には通用しない。
外国人SEに限ったことではないが、こちらには当然のことが、外国人には当然でないことがほとんどである。
もしコミュニケーションをとるなら、メモやメールなど、文章・図にまとめさせるほうが良い。
会話よりまだましだ。

(3)慣習を教え込む
外国人SEの中には日本のシステム開発での慣習を理解している人もいる。
例えば、本番サーバに気軽にアクセスしないことや、勝手にテストモジュールを入れ替えたりしない、など。
だが、外国人SEの下にいる(まさに母国語しか話せない人たち)プログラマは守ってくれない。
やってしまう人がいる場合、すぐさま注意し、やってはいけないことを理解させる。

教訓 開発環境を整える

仕事をしていて感じたこと、トラブルプロジェクトでの経験を生かして、
ここに教訓を書いておく。

開発環境を整える
トラブルプロジェクトの場合は特にだが、急にメンバーを増員することが多い。
急に人が増えたところで、開発環境についての資料がないと、無駄に終わることが多い。それだけならまだしも、開発当初からのメンバーが質問攻めに合うこと必至。
そんなときのために、環境資料を必ず先にまとめておく。
(1)テスト機の情報を一覧にまとめる。
論理サーバ名、ホスト名、IPアドレス、リモート接続プロトコル、OSログインユーザ、パスワード、注意点など。
(2)各テスト機の起動・停止など、システム操作の手順を処理フローと一覧にまとめる。
例)




(3)作成したアプリケーションが出力するログのパスを一覧にする。

(4)アプリケーションのテストにログインが必要な場合、ユーザ一覧を作成する。
その際、そのユーザを誰が(どのチームが)使用するかを明確にする。

2009年6月10日水曜日

Windowsで"tail"コマンド

たまーにwindowsでUNIXのtailコマンドができたらいいなと思う。
スクリプトで作ってみた。
まだまだ検討の余地がありそうだけど、第一版をUP。



//tail for windows.
//please select "Cscript" engine.
//Created by sashimi.

var looptime;
var path;


if(WScript.Arguments.length==0
|| WScript.FullName.substr
(WScript.FullName.length-11).toUpperCase()=="WSCRIPT.EXE"){
WScript.Echo("Usage:cscript tail.js ");
WScript.Quit(1);
}

path=WScript.Arguments(0);
//WScript.echo(path);

var fso=WScript.CreateObject("Scripting.FileSystemObject");

if(!fso.fileExists(path)){
fso=null;
WScript.Quit(1);
}

var ts=fso.OpenTextFile(path,1,false);
var size=fso.GetFile(path).Size;

//WScript.Echo(size);
ts.Skip(size);
try{
while(true){
WScript.Sleep(1000);
if(!ts.AtEndOfStream){
WScript.Echo(ts.ReadLine());
}
}
}catch(e){
}finally{
ts=null;
fso=null;
}

2009年6月5日金曜日

EXCELでタグ付き正規表現

サクラエディタでタグ付き正規表現ができないみたい。
秀丸ならできるのにな。
探してみたらEXCELでできるみたいなので、拝借。



' 正規表現による置換
Function RegReplace(ByRef strSource As String, _
          ByRef strPattern, _
          ByRef strReplacement As String) As String


  '動作環境: IE5.0以上がインストールされていること
  '参照設定: Microosft VBScript Regular Expressions x.x

  Dim REG As REGEXP
  Set REG = New REGEXP
  With REG
    .Pattern = strPattern
    .IgnoreCase = False
    .Global = True
    RegReplace = .Replace(strSource, strReplacement)
  End With
  Set REG = Nothing

End Function


秀丸使えないときはこれを使うしかない。


訂正。サクラエディタでも使えるみたいです。

2009年5月22日金曜日

EXCELワークブックの目次を作る

仕事してるとEXCELのシートが大量に作られてるドキュメントをよく見る。
シートを移動するのがめんどくさいので、目次を作るマクロを作ってみた。

'ハイパーリンク表紙作成------------------------------------------
Sub CreateCoverPage()
'例外処理
On Error GoTo Exception
'Define
Dim objApp As Application
Dim objWB As Workbook
Dim objWS As Worksheet
Dim sCnt As Integer 'シート数
Dim sHyper() As String 'シート名ハイパーリンク文字列配列
Dim I As Integer 'ループ用
Dim rVis As range '非表示確認用
'Instance
Set objApp = Application
'表示の変更
objApp.DisplayAlerts = False
objApp.ScreenUpdating = False
objApp.Cursor = xlWait
'ファイルオープン
Set objWB = ActiveWorkbook
'シート数ゲット
sCnt = objWB.Sheets.Count
'配列にハイパーリンクアドレスを作成
ReDim sHyper(sCnt - 1)
For I = 0 To sCnt - 1
sHyper(I) = objWB.Sheets(I + 1).name
Next
'表紙シート作成
Set objWS = objWB.Sheets.Add(Before:=objWB.Sheets(1))

On Error Resume Next 'シート名が重複しても処理を続ける
objWS.name = "目次"
On Error GoTo Exception
'既存シートのシート名をハイパーリンクとして表紙に記述
For I = 1 To sCnt
objWS.Cells(I + 3, 2).Select 'シート名記述はB4から下へ
objWS.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
"'" & sHyper(I - 1) & "'!A1", TextToDisplay:=sHyper(I - 1)
Next

With objWS 'シートタブの色
.Tab.ColorIndex = 50
'結合
.range("B1:C1").Merge
.range("D1:G1").Merge
'補足表示
.range("B1").Value = "ブック名 : [" & objWB.name & "]"
.range("D1").Value = "目次作成日:" & CStr(Now)
.range("B3").Value = "シート名"
.range("C3").Value = "説明"
.range("D3").Value = "作成日"
.range("E3").Value = "作成者"
'太字・アライン
.range("B1:D1").Font.Bold = True
.range("B3:E3").Font.Bold = True
.range("B3:E3").HorizontalAlignment = xlCenter
'表示形式
.Columns("D:D").NumberFormatLocal = "yyyy/m/d"
'色をつける
.range("B1").Characters(Start:=7).Font.ColorIndex = 53
.range("B3:E3").Interior.ColorIndex = 40
.range(.Cells(4, 2), .Cells(3 + sCnt, 5)).Interior.ColorIndex = 35
'カラムサイズを設定する
.Columns("A:A").ColumnWidth = 2
.Columns("B:B").EntireColumn.AutoFit
.Columns("C:C").ColumnWidth = 58.13
.Columns("D:D").ColumnWidth = 11.5
'罫線
With .range("B3:E3").Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With .range("B3:E3").Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With .range("B3:E3").Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With .range("B3:E3").Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With .range("B3:E3").Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With .range(.Cells(4, 2), .Cells(3 + sCnt, 5)).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With .range(.Cells(4, 2), .Cells(3 + sCnt, 5)).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With .range(.Cells(4, 2), .Cells(3 + sCnt, 5)).Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With .range(.Cells(4, 2), .Cells(3 + sCnt, 5)).Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With .range(.Cells(4, 2), .Cells(3 + sCnt, 5)).Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
If sCnt <> 1 Then
With .range(.Cells(4, 2), .Cells(3 + sCnt, 5)).Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End If
End With
Exit Sub

Exception: 'Dispose
Set objApp = Nothing
Set objWB = Nothing
Set objWS = Nothing
'削除確認ダイアログを出す
Application.DisplayAlerts = True
Application.Visible = True
Application.Cursor = xlDefault

MsgBox "エラーが発生しました" & vbCrLf & _
"エラー番号:" & Err.Number & " エラー詳細:" & Err.Description _
, vbExclamation, "システム"
End Sub
こんな感じのができます。

そして目次にジャンプするマクロ(これがないとあんまり意味ない)
また次回。

2009年5月18日月曜日

セルをコンボボックスにする

EXCELの入力規則でコンボボックス(リストが表示される&入力も可能)を使う場合
こんなの↓


[入力規則]で通常のリストを設定し、[エラーメッセージ]タブの
[無効なデータが入力されたらエラーメッセージを表示する]のチェックをオフにする。


ちなみに、参照するリストを別シートに記載したい場合は、
名前つきセル参照を使う。


別シートで名前つきセル範囲を設定してから、入力規則ダイアログで"=セル名称"と設定する。