へなちょこSEの考察

0x1E歳のへなちょこSEが、日々思うことを考察します。自社内、金融系を経て現在法人系PKG開発に従事。

iBatisで同じSQLを流用する際の問題

iBatisが変な動きをした。※正確には、TERASOLUNA
一つのリクエストの中で、同様のSQLを二回発行する必要があったので、二度使った。

SelectDAO seDao1 = new SelectDAO();
seDAO1.setXxxCd("aaa");

SelectResult [] result = query.executeForObjectArray("select1",seDAO1,SelectResult.class);

SelectDAO seDao2 = new SelectDAO();
seDAO2.setXxxCd("aaa");

SelectResult [] result2 = query.executeForObjectArray("select1",seDAO2,.class);


一回目は数件取得され、二回目は通常は一件取得されるようになっている。
一回目の動作は正しいのだけど、二回目がどうしても取得件数が多い。
中身をよく見てみたら、どうも一回目の時の取得結果が残ってしまっているらしい。
二回目で取得した件数が一回目の件数を下回っていると、後ろのほうが上書かれずに残る?


ちょっと想定外の動きすぎて困った。
とりあえず、一回目と二回目では微妙にSQLは異なるので、別のSQLとすることで問題は解消。
でも、なんか釈然としない。

どこまで教えるか、いつまで教えるか

今年2年目になる後輩がいます。
自分が育成担当なのでいろいろ教えながら働いているのですが、さていつまでどこまで教え続ければいいかなと悩んでいます。

ある程度年次が経っている後輩なり同輩に教えるなら、「ここはこうでこれこれこういう理由でああなってるからよろしく」とかポイントを押さえて一通り教えます。
自分が躓いたポイントとかはなるべく予め教えてあげて、同じことで悩まないように。

ただ、いつも先人がいる仕事をやれるわけではありません。
むしろ、誰もやったことのない仕事をやることがSEの仕事の醍醐味であり真骨頂だと思っているので、初めてやることを一人でやり抜くことも重要な能力です。
そのためには、誰にも教えてもらわずに悩む力、悩んで悩み抜いて自分なりの答えを見つけ出す力が必要だと思います。

でも、それって新人とか2年目くらいだとまだまだ力不足な子も多い。
そうすると、悩ませることも育成の一環と思ったりもするのですが、さてそれをいつまで続けるか。
悩ませるにしても悩ませすぎて禿げられても困るのでどこまでは教えるのか。
この辺の塩梅が難しいです。

自分は割りと悩むの好きなので、この辺が苦手な人の気持ちが分からない。
けど、分からないからって教えられないわけにもいかないので悩みます。

というところで、育成って育成担当の育成にも繋がるのだなぁということを感じている今日この頃。

MS Project と Redmineの連携

MS Project と Redmine を連携させてみた

はじめに


プロジェクトの管理をしなければならなくなった。
これまでは一開発者だったんだけど、プロジェクトの同時進行が増えてきたために、ついにそのお役が回ってきてしまった感じ。
まぁいい機会なので頑張ってみようと思う。


で、Redmineは高機能だけど、プロジェクト管理には痒いところに手が届かない感がある。
プラグインもいろいろあるけど、なかなかうまく動いてくれなかったり、自動計算とかはあんまりやってくれないし。
ということで、MS Projectと連携させてみることにした。

前提


MS ProjectでWBSを起こし、タスクとリソースを管理する。
Redmineは作業の状況を入力してもらうだけで、開始日・終了日などは変更させない。

方法


まずMS ProjectでWBSを作った。
バージョンを工程とし、詳細設計、製造/単体試験に分けて、さらに機能毎などタスクに落としこむ。
一通りタスクが出来上がったらExcelに貼っつけてRedmineにインポートする。
CSVとかでやってもいいけど、今回はこの便利ツールを使った。


Redmineチケット★一括★の詳細情報 : Vector ソフトを探す!


で、登録されたチケットのIDをMS Project側にも書いておく。
(そういう意味でも上記ツールが楽)


MS Project側はマクロを設定し、REST API経由でチケットの情報を取得してくるように設定。
取得した情報は適宜MS Project側に貼り付けていく。
自分が取得しているのはとりあえず作業時間とトラッカーとステータスくらい。
まだ他にも必要になるかも。

運用


運用イメージはこんな感じ。


  1. MS Project側の情報をマクロで更新。
  2. 必要に応じてリソースの再割当てや開始日の調整を実施。
  3. Excelに貼り付けてツールで更新を反映。


こうすると、作業管理はRedmineでやりつつプロジェクトの状況を可視化したいときはMS Projectから素敵レポートを出力することができる。
とはいえ、MS Projectの使い方自体を勉強中なのでこれでうまくいくのかは未知数。


情報取込のマクロはこんな感じ。
拾い物を切り貼りしたやっつけです

Const API = "http://server/redmine/"
Const Key = "key=aaaaabbbbbccccc1234567890123457890"


' ###################################################################
' #
' # Redmineから情報を取得する。
' #
' # チケット番号が入力されたタスクを、Redmineの情報で更新する
' # チケット番号が入力されていないタスクは無視される
' #
' ###################################################################
Sub ImportRedmineData()

    Dim prj As Project
    Set prj = ThisProject
    Dim tsk As Task
    Dim ticket As Object
    
    ' すべてのタスクを対象に動かす
    For Each tsk In prj.Tasks
    
    ' チケット番号が入力されている場合
    If tsk.Text1 <> "" Then
    
        Set ticket = GetXmlData(API + "issues/" + tsk.Text1 + ".xml?" + Key)
        
        '説明
        tsk.Text6 = ticket.getElementsByTagName("description").Item(0).text
        
        'トラッカー
        tsk.Text2 = ticket.getElementsByTagName("tracker").Item(0).getAttribute("name")
        
        'ステータス
        tsk.Text4 = ticket.getElementsByTagName("status").Item(0).getAttribute("name")
        
        'トラッカー
        tsk.ActualWork = ticket.getElementsByTagName("spent_hours").Item(0).text
        
        If ticket.getElementsByTagName("parent").Length > 0 Then
        
            tsk.Text5 = ticket.getElementsByTagName("parent").Item(0).getAttribute("id")
        
        End If
        
    End If

    Next

End Sub

平和国家を名乗るとして

平和国家を名乗るとして、隣人が暴力を受けているときに、それを傍観、あるいは静止の言葉だけを投げかけるのは平和的だろうか。
そうとも言えるだろうし、そうでないとも言えるだろう。

隣家が暴漢に襲われていた時、隣人が赤の他人なら、警察は呼べども助けはしないだろう。
でもそれが親類や恋人なら、助けに行くのは普通だろう。

密接な関係にある国とは、そんな親類や恋人に該当するような国だろうか。
そこの意識が違うから、余計に意見が別れるのかな。

ただ、他の国から見た時に、「君の国が襲われても助けないけど、僕が襲われてたら助けてよ」なんて言われて助けてくれるだろうか。
戦争を避けたい気持ちと、仕掛けられたら守らなきゃいけないというところの、バランスが難しい。
攻める権利だけは持たない、というところが落ち着きどころのような気はするのだけど。

努力は必ず報われる、のか?

努力は必ず報われる、と言うことには、賛否両論が聞かれます。
ですがそもそもこの「報われる」の意味が曖昧です。
「求めた結果が得られる」わけではなく、「報いを得られる」わけです。


例えば野球なら、先発ピッチャーになりたいと思って努力してて、「先発は無理だけど頑張ってるし中継ぎなら」って起用してもらえた時、これは報われてはいます。
でも、本人が求めた結果ではない。
「夢が叶った」わけではない。


「努力すれば夢は叶う」には賛同しかねます。
でも、「努力は必ず報われる」は賛同します。
どういった形かは分かりませんが、やったことは無駄にはなりません。


そもそも、「夢が叶わないなら努力する意味はない」と言うのが違うのかなぁと思います。
サッカー選手になれなくても、自分の気持ちに整理がつけられるのであれば、コーチやサポートスタッフだって良い。
それは夢を諦めたわけですが、新しい夢を手に入れたとも言えます。
結局重要なのは、夢が叶うことではなくて、夢が叶うことで得られる自分の幸せなんじゃないかなぁと。
夢が叶わなかったからってダメな人生じゃないし。


ただ、そうは言っても一つだけ言えること。
「努力しないと夢は叶わない」
もっとも、本人がそれを努力と思うかは別ですけど。

実践することの大切さ

システムエンジニアをやっていると、1日中パソコンと向かい合って、誰ともまともな会話をせずに終える、なんてこともままあります。
場合によっては1日中パソコンと会話してる(ぶつくさ独り言を言いながら仕事してる)なんてことも。
はたから見ると、なかなかに危ない人です。


SEにもいろんな立場や職種があるので一括にはできませんが、そうやって仕事してるので喋るのが苦手という人や、苦手になっていく人もいると思います。
それでいいや、と思っている人もいるでしょう。
自分は技術で食っていくから喋りのテクニックなんていらない、とか。


まーそうは言っても、当たり前ですが喋れるに越したことはないわけです。
自分も出来れば喋れるSEになりたい。
とはいえ、なかなか一朝一夕に身につけられるものでもない。


そんな中で、最近はお客さんのところに行く機会を多く与えてもらってます。
「習うより慣れろ」とは良く言いますが、頭で理解するより、実践してみることで身体に染みつく、というのは間違いないなと思います。


プログラミングも、本を読んで勉強するより、実際に書いてみた方が分かるようになる。
なんだ、それと同じじゃないかと。


ま、言うは易し、行うは難しで、なかなか上達していかないのですが。
継続は力、という言葉を信じるしかないですね。

分からない人に分かるように教える

同じチームに後輩がいて、去年入ってきたばかりの子なのでトレーナーとしていろいろ教えています。
社会人のマナーから資料の作り方、当然SEなのでプログラミングとか技術系のことも。
その中でもやはり技術系のことを教えるのが難しいですね。


昔からある程度プログラミングに触れてきた子なら、下地があるので楽なのですが、まぁそんな子はなかなかいません。
全く知らないところからスタートすると、いわゆる「何が分からないのかが分からない」という状況になります。


さてそういうときにどう教えるかですが、僕はなるべく放置します。
「何が分からないのかが分からない」というのは、意外と何年経っても出くわす状況で、それを自力で越えられるかどうかが重要だったりします。
周りに頼れる人がいない時に、何もできなくなってしまっては意味がないわけです。


そうすると、「何が分からないのかが分からない」をまずは脱却しなければならない。
そのためには、「分かっていないことと分かっていることを整理する」ことが必要になります。
それらを並べた上で、どこから調べるか当たりをつけていく。
この時の当たりをつける箇所の探し方は、経験が物を言うのでアドバイスも可。
でも、今の状況を整理するのは、基本的な能力なので、体に染み込ませなきゃいけません。


なので、基本的には放置します。
放置して、悩ませて、分かってない状況で聞きに来たら「『何が分からないのかが分からない』じゃ分からない」と追い返します。
隣で見てて「あーここで悩んでるな、あれをこーすりゃいいのに」と思っても言わない。
スパルタです。笑


一通り整理がついたら(多少まだ雑なところがあっても)、そこから教えます。
自分の頭で悩まないと、仕事は身に付きません。
とはいえ悩ませてばかりでも仕事が進まないので、ヤバそうなときは手を貸します。
その辺のバランスが、まだまだ探り探りです。


自分の下についたからには、今後イチサラリーマンとして恥ずかしくないレベルの仕事ができるようになって欲しい。
その時ついでに、「あいつにいろいろ教わったのか、なるほどね」と周りの人に納得させられる自分でありたい(さらについでに人事評価も上がってほしい笑)。


何より彼が成長すれば自分も成長できるので、そのためにも頑張りたいですね。