投稿日時:

「ドキュメントを整備しましょう。」システム開発をしている現場であれば、当然、聞いたことがあるお話だと思います。また、システム開発の現場にいる人は、多かれ少なかれ、ドキュメントの重要性は感じているのではないでしょうか。
中には全くドキュメントは必要ないと言われる方もいるかもしれませんが、そのような方であっても、メールやソースコードのコメントなど、何らかの方法でドキュメントを残している事と思います。

ドキュメント整備の重要性は、既に皆さんが実感しているかもしれませんが、改めて「システム開発時」と「システム運用時」の2つの視点からドキュメント整備の重要性を考えてみたいと思います。

◆システム開発

・品質向上

ユーザー部門などのシステム利用者との認識合わせ、設計者・開発者・テスト実施者など、異なる役割のメンバー間での認識合わせのツールとすることで、誤認識の排除に繋がります。

・手戻りの削減

早い段階で先を見通したドキュメントを整備しておくことで、開発前のシミュレーションとなり、要件・設計漏れの防止に繋がります。

・仕様変更対応

仕様変更やスケジュール遅延などにより、急激な要員追加が発生しても、あらかじめドキュメントが整備されていれば、早い実務参加が期待できます。

◆システム運用

・安定的な要員の確保

システム運用チームへの新規参画者がシステムを理解するための足掛かりになります。

・コスト削減

システム改修などのメンテナンス実施の際に、短期間で影響分析やテストケースを洗い出すための重要な資料となります。

・品質向上

システム改修などのメンテナンス実施の際に、影響分析漏れやテストケース作成漏れを防ぐための重要な資料となります。

システム開発をしている立場と、システム運用をしている立場とでは、ドキュメントに対するとらえ方が大きく異なるのが見えてくると思います。システム開発をしている時は、システムが動くまでを考えれば良いのですが、システム運用の立場から見ると、初めて触れるシステムであったり、見たことがないモジュールを想像しながら運用しなければなりません。その為、ドキュメントがとても重要な位置づけとなります。

このように、ドキュメント整備の重要性はいろいろと挙げられますが、実際にドキュメントを作成するとなると、いろいろな難問が待ち構えています。

・何のドキュメントを作れば良いのかわからない。
・せっかくドキュメントを書いても、読んでもらえるのか、意味があるのか疑問。
・そもそも、ドキュメントを作っている時間が無い。

そこで、次回以降のコラムでは、ドキュメントを整備する際のポイントについてお話ししていきたいと思います。
本コラムが、読者の皆さんの日々の業務に役立てば幸いです。

(担当:小口 真己

投稿日時:

当校では、さまざまなプログラミング言語の講座を設けておりますが、教材を作るにあたり苦労しているのが「さまざまな名称」です。プログラミング言語には、同じ意味を表す物に異なる名称が付けられており、表記を統一する事に苦労しています。

これには、受講者の方も苦労されているご様子です。
書籍やWebサイトにより、名称が異なるので「コレとコレは違うんですか?」「同じものです」なんて質疑応答がやりとりされる事もしばしば見られます。

そこで、今回は特に異なる名称が多い「クラス関連の名称」についてご説明しましょう。

さまざまな機能を有し、道具として使われる「クラス」。
JavaScriptでは、正確にはクラスは無く、クラス的な物を「オブジェクト」と呼んでいます。

new演算子で作成される「インスタンス」。
VB等では「オブジェクト」と呼んでいます。JavaScriptの「オブジェクト」と混同しやすいのでご注意下さい。

クラスが保有している変数は「属性」「メンバ変数」「フィールド」、PHPでは「プロパティ」とも呼ばれています。
クラスが保有している機能は「操作」「メンバ関数」「メソッド」と、さまざまな名称が付いています。

カプセル化に基づき、private化したフィールドとやりとりするのにJavaでは「アクセッサメソッド(setter、getter)」を使用しますが、C#やVBでは「プロパティ」を使用します。C#やVBではフィールドとプロパティはまったくの別物となります。

各言語ごとに一般的な名称を以下の表にまとめました。

C++ Java C# VB PHP JavaScript UML
クラス クラス クラス クラス クラス オブジェクト クラス
インスタンス インスタンス インスタンス オブジェクト インスタンス インスタンス オブジェクト
メンバ変数 フィールド フィールド フィールド プロパティ フィールド 属性
メンバ関数 メソッド メソッド メソッド メソッド メソッド 操作
アクセッサ アクセッサ プロパティ プロパティ アクセッサ

「インスタンスとオブジェクトは同義語なのか否か?」ですが、これは明確な定義が無いため、諸説あります。
今回ご紹介した名称は、あくまでも一般的に使用される名称である事をご留意下さい。

(担当:奥田 英太郎

投稿日時:

今回はJavaの補講をお送りします。

まずは、C言語とJavaのコンパイルについて比較してみましょう。
C言語では複数のソースファイルをコンパイルしてひとつのバイナリコード(exeファイル)を作りますが、Javaでは複数のソースファイルをコンパイルすると、複数のバイトコード(classファイル)が作られます。
そのため、Javaではひとつのアプリケーションを構成するために複数のclassファイルが必要となり、ファイルの管理が煩雑になる場合があります。

そこで使用するのがJAR(Java Archive)です。
JARは複数のバイトコードをひとつにまとめて圧縮する技術になります。

コチラのソースファイルを使用して実演してみましょう。
サンプルの「Source.zip」ファイルには「Main.java」「ClassA.java」「ClassB.java」の3つのファイルが格納されています。

1、Main.javaのコンパイル

javac Main.java

最初に、このコマンドでMain.javaをコンパイルします。
3つのファイルがコンパイルされ、3つのバイトコードが作られます。

2、JARファイルの作成

jar -cf Sample.jar Main.class ClassA.class ClassB.class

次に、このコマンドで「Main.class」「ClassA.class」「ClassB.class」をひとつの「Sample.jar」にまとめて圧縮します。

3、実行確認
これで、圧縮されたSample.jarにてプログラムを実行できるようになりました。
試しにSample.jarだけ別のフォルダに移動して下記のコマンドで実行してみましょう。

java -classpath .;Sample.jar Main

プログラムは実行できたでしょうか?以下が表示できれば実行完了です。

ClassAのメソッド
ClassBのメソッド

このコマンドはプログラムを実行する時に同フォルダ内のクラスと、Sample.jarのクラスも含めるよう設定しています。
クラスパス(classpath)については、またの機会にお送りしましょう。

毎回コマンドで実行すると大変なので、バッチファイルを作成しましょう。
実際の現場では、このバッチファイルとJARファイルを組み合わせてJavaを使用している事が多くなります。

(担当:奥田 英太郎

投稿日時:

今回はベン図とSQLを応用して、下記の課題を解いてみましょう。
Accessを用いたサンプルはコチラをご参照ください。

【課題】
テーブル「TableA」のフィールド「Code」には「A,B,C,D,E,F」のデータがある。
テーブル「TableB」のフィールド「Code」には「A,B,C,H,I,J」のデータがある。
ベン図の考え方を用いてTableBのCodeをTableAのCodeと同じレコードにしなさい。

【回答例】
1.TableBにある「H,I,J」を削除します。
 TableAとTableBの論理積「A,B,C」は下記のSQLで取得できます。

(サンプルのクエリ1)

SELECT TableA.Code FROM TableA INNER JOIN TableB ON TableA.Code = TableB.Code;

 次に、「NOT IN」を使用し、TableBから「A,B,C」以外のレコード(「H,I,J」)を削除指定します。

(サンプルのクエリ2)

DELETE FROM TableB WHERE TableB.Code NOT IN (SELECT TableA.Code FROM TableA INNER JOIN TableB ON TableA.Code = TableB.Code);

2.TableAの「D,E,F」をTableBに追加します。
 先程の論理積「A,B,C」とNOT INを使用すれば、TableAから「A,B,C」以外のレコード(「D,E,F」)を指定できます。

(サンプルのクエリ3)

INSERT INTO TableB (Code) SELECT Code FROM TableA WHERE Code NOT IN (SELECT TableA.Code FROM TableA INNER JOIN TableB ON TableA.Code = TableB.Code);

ベン図の考え方を用いなければ、TableBの全レコードを削除してTableAの全レコードをコピーする容易な方法が取れるのですが、設計に依り容易な方法を使えない場合もありますし、クエリ2までを実施したいという要望が発生することもあります。
この様な時に、ベン図の考え方を取り入れたテクニックを応用してみてはいかがでしょうか。

(担当:奥田 英太郎

投稿日時:

不定期掲載「jQuery外部ライブラリ紹介」
今回は前回紹介したjQuery外部ライブラリ「Colorbox」の続きを紹介します。

前回のサンプルはコチラで、画像ファイルをポップアップ表示しましたが、今回はインライン機能を使用したポップアップ表示を見てみましょう。
サンプルはコチラです。実行結果とソースコードを確認してみましょう。

	<head>
		<meta charset='utf-8'/>
		<title>Colorboxのサンプル</title>
		
		<!-- 「colorbox.css」「jquery.js」「jquery.colorbox.js」を組み込む -->
		<link rel="stylesheet" href="./colorbox.css" />
		<script src="./jquery.js"></script>
		<script src="./jquery.colorbox-min.js"></script>
		
		<script>
			$(function(){
				
				/*
				id1にcolorboxを適用する。
				inline:trueでインライン機能をONにする。
				*/
				$("#id1").colorbox({inline:true, width:"50%"});
			});
		</script>
		
	</head>
	<body>
		<p>
			<a id="id1" href="#inline" title="インラインで表示">表示する</a>
		</p>
		<!-- 下記の要素をポップアップ表示する。最初は非表示にしておく。 -->
		<div style="display:none">
			<div id="inline">
				表示したいHTMLをこちらに記述してください。
			</div>
		</div>
	</body>

これも色々なサイトで使用されています。
colorboxメソッドのプロパティに「inline:true」を指定する事により、このような機能を簡単に実現できます。
このお手軽さがColorboxの特徴なので、ぜひ参考にしてみてください。

(担当:奥田 英太郎