Skip navigation

Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!

   ここはとあるソフトハウスの総務部総務課。みなさん、花粉症に苦しんでるらしく、室内でもマスクをしていますが、そんな中でも平気そうな人たちが2人いました。
   

びぎな
「前回抜け落ちてたのって何なの?」

   

まにあ
「前々回、処理の流れのとこで操作の順番考えたやろ? でも、前回の個々の処理ではそれについては全然触れてへんね。処理に入れるのはどっちかというと詳細設計レベルやと思うけど、その操作の順番に付いてきちんと設計しておくのも大事な仕事や」

   

びぎな
「でも、それは前々回の図で……」

   

まにあ
「あれは、こういう流れを想定してるという理想の形や。実際にユーザーがどう操作しようとするかはわからへんから、あらゆる状況を想定してこの流れに持っていくようにしやなあかん」

   

びぎな
「よくわからない……」

   

まにあ
「こういう、ソフトの状態に応じて動作を制限するために、普通は状態遷移というものを考えるんや」

   

びぎな
状態遷移?」

   

まにあ
「こういう状態の時にこういう操作されたらどうなるかっていうのを明示的にまとめておくねん。ま、最初ソフトが立ち上がった時を初期状態としよか。そこからどうなるかを考えていくで。まず、初期状態での各操作を考えてみい」

   

びぎな
「背景画像のボタンを押されたら、背景画像選択済みになるの」

   

まにあ
「そんな感じでいこか」

   

びぎな
「キャラクター画像のボタンを押したら、キャラクター画像選択済みになって、背景色のボタンの場合は何もできないの。合成ボタンを押しても何もできないの。保存ボタンも同じ……」

   

まにあ
「じゃ、次は背景画像選択済み状態や」

   

びぎな
「背景画像ボタンを押されたら、そのままかな。キャラクター画像のボタンを押されたら、両画像選択済みの状態。背景色の選択ボタンの場合は何もできないの。合成ボタンと保存ボタンも同じ……」

   

まにあ
「次はキャラクター画像選択済み状態や」

   

びぎな
「背景ボタンを押されたら、両画像選択済みの状態。キャラクター画像のボタンの場合はそのままで、背景色のボタンの時は、キャラクター画像と背景色選択済み。合成ボタンと保存ボタンは何もできないの」

   

まにあ
「背景ボタンはキャンセルされることもあるけど、その場合はそのままやな」

   

びぎな
キャラクター画像と背景色選択済みで背景画像のボタンが押された時は、両画像と背景色選択済み。キャラクター画像のボタンが押された時はキャラクター画像選択済みに戻って……」

   

まにあ
「待ちや。そこ、背景色選択済みやなくなるんか?」

   

びぎな
「キャラクター画像が変わるから、背景色も……」

   

まにあ
「ほな、最初に白が背景のキャラクター画像で白を選択した後で、次に同じように白が背景色のキャラクター画像を読み込み直したら、背景色は同じ白でも選択し直さなあかんのんか?」

   

びぎな
「面倒なの……」

   

まにあ
「背景色の選択は確かにキャラクター画像を読み込んだ後やないとあかんけど、背景色を選択するしないはユーザーの判断しだいでええんとちゃうの? たとえば1回も選択されへんでもデフォルトの背景色で処理するとか……」

   

びぎな
「そうするの」

   

まにあ
「ほな、背景色選択済みとかいう状態は無しやな。背景色を選択できる状態は限られてるけど、背景色を選択しても状態はそのままということや」

   

びぎな
「続けるの。両画像選択済み状態で背景画像のボタンが押された時はそのまま。キャラクター画像のボタンが押された時もそのまま。背景色のボタンが押された時もそのまま。合成ボタンを押された時は合成済み状態になるの。保存ボタンの時は何もしないの」

   

まにあ
「ほな、次」

   

びぎな
合成済み状態で背景画像のボタンが押された時は、両画像選択済みの状態に戻るの。キャラクター画像のボタンが押された時も、両画像選択済みの状態に戻るの。背景色のボタンが押された時も両画像選択済みの状態に戻るの。合成ボタンが押された時はそのまま。保存ボタンが押された時は……あれ?」

   

まにあ
「どないしたんや?」

   

びぎな
「保存ボタンで初期状態に戻ったら、最初から全部やり直しになるの。保存し直したりするには合成済みの状態のままの方が良いの」

   

まにあ
初期状態というのはあくまでソフトを立ち上げた時の状態やから、一連の処理が終わったからって最初の状態に戻る必要はあらへん。必要なのは、自然で使いやすい状態の遷移をすることや」

   

びぎな
「保存ボタンが押された時はそのままにするの」

   

まにあ
「これで一通りの操作についての状態遷移が決まったやろ。これを元にソフトの状態を制御するように作っていくんや。ほな、また今日のとこを表にまとめておきや」

   

びぎな
「……」

   
 
   
 

(つづく)

   ここはとあるソフトハウスの総務部総務課。昼下がり、暖房のきいたオフィスでびぎなちゃんがコクリコクリと居眠りしてると、いきなり脳天に衝撃が走りました。
   

まにあ
「なに、勤務中に寝てんねん!」

   

びぎな
「目をつぶって考え事をしてただけなの……」

   

まにあ
「ほな、何か素晴らしいことでも考え付いたんか?」

   

びぎな
「達人になる方法考えてたら、答えを考え付く前にまにあちゃんに邪魔されたの……」

   

まにあ
「そんなん考える必要あらへん! 達人になるには実践の積み重ねがすべてや。びぎなちゃんのダイエット脳味噌で考えても楽できる方法なんか出てくるかいっ!」

   
   再びびぎなちゃんの脳天に衝撃が走りました。まにあちゃんの手にはコピーの裏紙を折り重ねて作ったハリセンが握られています。
   

びぎな
「痛いよぉ……」

   

まにあ
「今回は概要設計の続きや。前回は大まかな処理操作の流れを考えたから、それらの個々の処理の中身を考えていこか。Windowsのアプリの基準はイベントドリブンや。ユーザーが何か操作を行ったら、それに対応してソフトが処理を行っていくという形やな。マルチタスクの仕組みはこのイベントドリブンの他にもあるけど、何かわかるか?」

   

びぎな
「ワークシェアリング……」

   

まにあ
「アホ、誰が不況時の雇用対策の話せぇってゆーた! マルチタスクのもう一つの仕組みはタイムシェアリングや。イベントドリブンはイベントがあった時だけそのタスクの処理をして、何もないアイドル状態の時に他のタスクの処理が動く仕組みで、タイムシェアリングはOSが時間毎に処理を行うタスクを強制的に切り替える仕組みや。Windowsにもタイムシェアリングの仕組みはあるけど、アプリの構造がイベントドリブンなのは昔の名残やな」

   

まにあ
「Windowsアプリの構造がイベントドリブンということは、ユーザーの操作それぞれに対して個々に処理していく必要があるのね」

   

まにあ
「そうゆーことや。せやから、前回はユーザーの操作手順の視点から考えたわけやけど、その操作それぞれについてソフト側の処理を考えるんや。最初は何やった?」

   

びぎな
「背景画像の読み込み……」

   

まにあ
「これ、ソフト側の処理はどうすればええかわかるか?」

   

びぎな
「ボタンが押されたら、ファイル選択のダイアログを開いて背景画像を読み込むの」

   

まにあ
「それは機能説明の段階や。もっと具体的に何をするかが明確やあらへんと設計にならへんで」

   

びぎな
「そんなこと言われたって……」

   

まにあ
「ほな、視点を変えてみよか。画面設計のところにファイル名の表示欄とか画像の表示領域があるけど、これらの表示はいつやるんや?」

   

びぎな
「画像ファイルを読み込んだ時……」

   

まにあ
「ユーザー視点で見ればそうやけど、画像ファイルを読み込んだだけで勝手に表示とかはしてくれへんで。ソフトがちゃんと表示の処理を行わなあかんのや。ついでに、ファイルダイアログを開いたからって、それだけでは画像ファイルは読み込まれへん。これはあくまでファイル名を選ぶだけやからな」

   

びぎな
「じゃあ、ファイルダイアログを開いて画像ファイルの名前をもらうの。そのファイル名で画像ファイルを読み込んで、それからファイル名を表示して、背景画像を表示するの」

   

まにあ
「ファイルダイアログでユーザーにキャンセルされたらどうするんや?」

   

びぎな
「……」

   

まにあ
「そういう場合は何もせずにスルーでええやろ」

   

びぎな
「次はキャラクター画像の読み込みね。これも同じようにボタンを押されたらファイルダイアログを開いて画像ファイルの名前をもらうの。そのファイル名で画像ファイルを読み込んで、それからファイル名を表示して、キャラクター画像を表示するの」

   

まにあ
「ま、そんなところやろ」

   

びぎな
「次は背景色の選択。ボタンが押されたら……あ、あれ? どうやったらいいかわからないよぉ……」

   

まにあ
「ま、一番難しいところやな。前回の処理手順には入ってないけど、ここでワンアクション手順が必要や。マウスでクリックしたところの色を選ぶわけやから、マウスクリックでワンアクションやな。最初のボタンではその準備の処理をするんや」

   

びぎな
「準備?」

   

まにあ
「マウスがクリックされたらいつでも背景色を選択するいうわけやあらへんやろ。ボタンを押してからに限られるようにするんや。ま、細かい処理内容は後でええやろけど、背景色の選択中は他の処理は無効にしといた方がええやろ」

   

びぎな
「ボタンを押されたら、背景色の選択の準備をして他の処理は無効にするの。それから、キャラクター画像の上でマウスクリックされたらその座標の色を背景画像にして、その色を表示するの」

   

まにあ
「マウスクリックしたくなくなったらどうするんや? ま、背景色の選択ぐらい何度でもやり直しできるから、とにかくどんな色でもクリックして終わらせるって手もあるけど、あんましユーザーに優しいとは言えへんな」

   

びぎな
「さぁ……」

   

まにあ
「ボタンをトグルにして、選択中に押した場合は中断するとか、左クリックは選択やけど右クリックは中断やとか、やり方はいろいろあるけど……」

   

びぎな
「ボタンをトグルにするの」

   

まにあ
「せやったら、その時の状態に応じてボタンの表示も変えやなあかんで」

   

びぎな
「背景色の選択中は『中断』にして、選択や中断で終わった時に元に戻すの」

   

まにあ
「最初に無効にした他の処理を元に戻すのも忘れたらあかんで。ほな、次に行こか」

   

びぎな
「次は画像の合成処理。ボタンが押されたら、背景画像とキャラクター画像を合成して、その結果を表示するの」

   

まにあ
「ここがこのソフトの肝やからコーディングの分量が一番多いとこやろうけど、処理概要としてはそんなとこやろ」

   

びぎな
「最後は合成結果の保存。ボタンが押されたらファイルダイアログを開いてファイル名をもらって、合成した画像データをファイルに保存するの」

   

まにあ
「で、クローズボタンを押してアプリを終わる時は?」

   

びぎな
「終わる時?」

   

まにあ
「アプリによっては設定データを変更したとか、編集したデータが保存されずに残ってるとかいう時にはそれなりの終了処理が必要や。自動的にデータを保存するとか、このまま終了していいか確認するダイアログを出すとか。ま、このソフト程度やったら合成結果を保存しないまま終わってしまってもそんなに痛手やあらへんやろうから、何もせずに終わるのもアリやけど」

   

びぎな
「じゃ、そのまま終わるの」

   

まにあ
「ほな、次回は今回抜け落ちてたところを詰めていくから、びぎなちゃんは今回のところをフローチャートにまとめときや」

   

びぎな
「もう定時なのに……」

   
   
   
 
   
 
   
 
   
 

(つづく)

   ここはとあるソフトハウスの総務部総務課。連休の合間ということもあってか、いつもより人の影がまばらです。日頃は忙しそうな課長も株価でも気になるのか、暇そうに経済新聞を広げています。
   

びぎな
「びぎなもお休みにしたかったよぉ」

   

まにあ
「何ゆーてんねん! こういう日やこそ余計な雑用に邪魔されやんと勉強が捗るゆーもんやで!」

   

びぎな
「まにあちゃんは有給使い切ってるから休めないだけなの……」

   

まにあ
「うちは有給は計画的に消化するタイプやからなぁ。期間内に有給使い切るんも社会人としては大事なスキルやで。それに、びぎなちゃんかって新人の1年目やったらそんなに有給あらへんやろ」

   

びぎな
「まにあちゃんみたいに使い込んでないから、まだ全部残ってるよ」

   

まにあ
「そら勤勉やな。でも、うちの会社、有給が余ったからって買い取ってくれへんから期限切れ前に使い切るようにしといた方がええで」

   

びぎな
「そんなことより、今日は何するの?」

   

まにあ
「今日はソフトの動作や処理内容を決める概要設計や……と言いたいところやけど、前回の画面設計に漏れがあったわ」

   

びぎな
「漏れ?」

   

まにあ
「びぎなちゃん、合成する時に抜き取る背景色はどうやって決めるんや?」

   

びぎな
「キャラクター画像の背景のところをマウスでクリックして、そこの色を……」

   

まにあ
「せやったら、その操作のことを考えやなあかんのや。これから背景色を選択開始するゆーボタンと、今はどんな色が背景色に選ばれてるのかという表示枠を入れとかなあかんかった。合成や保存のボタンは背景画像の下に置いたから、こっちはキャラクター画像の下に置いといたらええやろ」

   

びぎな
「せっかく清書したのに……」

   
 
   

まにあ
「ほな、先に進もか。前回はソフトの外見の設計やったけど、今回は中身の設計や。ソフト全体でやりたいことがあっても一発で何もかもやれるわけやあらへん。順番に手続きを踏んで段階的に処理を行う必要があるけど、その大雑把な形を作り上げていくんや」

   

びぎな
「手続き? 段階?」

   

まにあ
「画像を合成するゆーても、先に合成の元になる画像があらへんと合成出来へんやろ? 同じように元の画像を読み込むにも色々と先立つものが必要やから、それを明確に洗い出して、コーディング段階での漏れや手間を省くわけや」

   

びぎな
「これも達人には必要ないの?」

   

まにあ
「せやけど、びぎなちゃんには必要やで。まず、操作の順番から考えよか。ソフトが立ち上がったら最初にすることは何や?」

   

びぎな
「背景画像とキャラクター画像を読み込むの」

   

まにあ
「そら、いっぺんには無理や。一度に操作できるのはどっちかやけど、どうやねん?」

   

びぎな
「じゃ、背景画像が先」

   

まにあ
「何で背景画像が先か、理由でもあるんか?」

   

びぎな
「背景の方が左側にあるから、操作の流れとしては背景が先の方が自然かなぁ……と思ったんだけど」

   

まにあ
「アホ、そないないいかげんな理由で後先を決めたらあかん。左側からの方が自然かどうかは使う人によって違うやろ。ま、初心者向けのウィザード形式のソフトとかやったら、ユーザーの困惑を避けるためにソフト側で万事きっちり操作の順番を決めることはあるけど、そんなんはプロ用の実用ツールでは不便なだけや。そうでなければならない理由が無いんやったら、どっちが先でもOKというのが使い勝手の良いソフトや」

   

びぎな
「じゃ、背景画像とキャラクター画像はどっちが先でもいい……」

   

まにあ
「その次は何や?」

   

びぎな
「背景色を選ぶの」

   

まにあ
「それは順番に何か理由があるんか?」

   

びぎな
「キャラクター画像が無いと背景色が選べないの」

   

まにあ
「せやな。でも、背景画像は関係あらへんな。必要なんはキャラクター画像を読み込んだ後やないとあかんということだけや。覚えときや」

   

びぎな
「わかったの」

   

まにあ
「で、その次は?」

   

びぎな
「合成の実行なの。背景画像とキャラクター画像と背景色が決まってないと合成処理は出来ないの」

   

まにあ
「それから?」

   

びぎな
「最後は保存処理。これは合成画像が出来てないと保存するものが無いから……」

   

まにあ
「ほな、ソフトの終了はいつするねん?」

   

びぎな
「保存処理の後……」

   

まにあ
「アホ、それは理想的な使い方した場合だけや。何らかの原因で途中でやめたい時とか、Windowsが終了するから終われと言ってくる時とかいろいろあるやろ。そんな時、最後までちゃんと処理しないと終われへんとか言うんか? いつでもきちんと終了できるようにするのがソフト開発の基本やで」

   

びぎな
「覚えておきます」

   

まにあ
「じゃ、次回はこの順番に従って処理の中身を考えて見よか」

   
 
   
 

(つづく)

 

 ここはとあるソフトハウスの総務部総務課。いつものように、びぎなちゃんは『Visual C# Express Edition』の統合開発環境を立ち上げて張り切っています。

   

びぎな
「ソフトで作ることは決めたし、いよいよ実際の作成ね」

   

まにあ
「アホ。まだ最低限のことまとめただけやろ。びぎなちゃんはあれで具体的なコーディングがイメージ出来たんか? ま、達人レベルやったらこれくらい、目をつぶっててもコーディング出来るやろうけど」

   

びぎな

「そんなの、まだわからないよ」

   

まにあ

「せやったら、実際のソフトの形をもっと具体化していかなあかん。ま、具体化するのは機能をどうやって実現するか、そのためにはどんなユーザーインタフェースや処理が必要かというとこやな。ま、GUIのソフトやったら最初に画面設計から始めるのがわかりやすくてええやろ」

   

びぎな

「仮面設定?」

   

まにあ

「せやせや。目のあたりはこれでええけど、もうちょっと隠れるところがないと仮面の意味が……って、アホ、誰が仮面の設定作れってゆうた! 画面設計や、画面設計。ソフトを立ち上げたらどんな画面が現れるんかってとこをデザインするんや」

   

びぎな

「デザインっていっても、びぎな、デザイン学校なんか行ってないし……」

   

まにあ

「誰も芸術的センスにあふれた装飾デザインせえとかゆうてへんわ。実用的な機能を実現するのにボタンとか画像表示とかどういう風に配置したらええか考えるだけやから、別に美術的なデザイン知識なんか要らへん」

   

びぎな

「でも、画面のデザインってどうやって……」

   

まにあ

「ふだん使ってるソフトを参考にして考えたらええ。『VC#』やったらFormにコントロール貼り付けていく感じで画面を作っていくから、それに合わせた画面を考えることや。ま、この規模のソフトやったらいきなりFormにコントロール貼り付けて作っていくのもアリやけど、それにはコントロールとかの知識が必要やから、最初は紙に描くなりして大まかに具体的なイメージを作っていくことやな」

   

びぎな

「チラシの裏でもいいの?」

   

まにあ

「ま、別に納品物として提出するんやなかったらなんでもかまわへんけど、後で設計を見直したりするときにちゃんと見直せる形にしておいた方がええで。ま、この程度のソフトやったらFormデザイナ見ただけで用は足りるやろうけど……」

   

びぎな

「コピーの裏紙を調達してきました」

   

まにあ

「ほな、始めよか。まず、最初に大きな四角を描いとき。それがソフトのメインウインドウや。その中に必要な部品を付けくわえていくんや。画像合成ツール作るのにどんなものが必要か挙げていってみぃ」

   

びぎな

「背景の絵とキャラクターの絵を表示するところでしょ。あと、合成した後の絵も。それに、画像を読み込むボタンと、保存する時のボタン……あ、それから合成するボタンとか……」

   

まにあ

「最低限、それだけでも何とかなりそうやな。ま、不足してるところはおいおい追加していくとして……ここがここが一番大事なとこやけど、画像はメインウインドウ内で表示させるのか、別のウインドウを開いて表示させるのかというところや。メインウインドウの中やったら表示部分のサイズが限られるさかい、大きな画像は一部を表示するか縮小して表示するかしやなあかん。別ウインドウは比較的大きさは自由にできるけど、いろいろウインドウを開くのは初心者のユーザーにはわかりにくいやろ。画像は大雑把に把握できるぐらいでええんやったら、同じウインドウ内で横に並べて見比べられた方が便利かもしれへん」

   

びぎな

「じゃ、それで……」

   

まにあ

「これでええんか? こっちの方が難しいかもしらへんで」

   

びぎな

「そんなのわかんないよ……」

   

まにあ

「ま、複数ウインドウを制御するのは初心者には難しいかもしらへんから、メインウインドウ内で見比べる方向でいこ。背景画像とキャラクター画像はそれでええけど、合成した結果の画像はどないする? ま、これも横に並べるのもええやろうけど、どんどん画面が窮屈になるで」

   

びぎな

「画面が窮屈なのは、イヤ」

   
 

 びぎなちゃんの使っているオンボロPCのディスプレイは最大に広げてもXGAでしか表示できません。

   

まにあ

「ま、昔はVGAで使えないようなソフトは作るなとか言われてたけど、さすがにいまだにVGAのPC使ってる人はおらんと思うけど、ま、ネットブックで使えないようなソフトを作ってもあれやから、SVGAの範囲で収まるぐらいがええやろ。合成結果だけ別ウインドウって手もあるけど、びぎなちゃんには厳しいやろ。ここは背景画像を描き変えるって手でいこか?」

   

びぎな

「異議ありません」

   

まにあ

「ほな、画面のレイアウトを決めていくで。左右に背景画像とキャラクター画像の表示領域を並べる。これがウインドウの中心やから出来る限り大きくな。で、右と左、どっちがどっちや?」

   

びぎな

「左が背景で、右がキャラクターかな」

   

まにあ

「せやったら、どっちがどっちかユーザーがわかるようにラベル付けとかなあかんで。画像の読み込みボタンはどこや?」

   

びぎな

「画像の上かな」

   

まにあ

「じゃあ、背景画像とキャラクター画像のそれぞれの上に付けてと……次は?」

   

びぎな

「合成ボタンと保存ボタン。これは画像の下の方かな」

   

まにあ

「下はええけど、下も広いで」

   

びぎな

「真中ぐらいがいいかな?」

   

まにあ

「結果の画像を別ウインドウで開くとかやったらそれでええやろうけど、背景画像のところを描き変えるんやったら背景画像の下にあった方が操作が分かりやすいで。背景画像とキャラクター画像がどっちかというのと同じやけど、びぎなちゃんは自分が作ってるからわかることでも、ユーザーはわからへんから、ちゃんとわかりやすく画面を作るのが大事や」

   

びぎな

「これでいい?」

   

まにあ

「画像のファイル名もわかるようにしといた方がええかな。それから、ウインドウのタイトルバーも考えや。バーに表示されるアプリの名前とか、最大化や最小化を使えるのかどうなのか……」

   

びぎな

「アプリの名前は……画像合成ツールだから『合成ちゃん』」

   

まにあ

「却下や! ググったらすでに使われとる名前や。ま、自分が使うだけやったら名前なんてどうでもええけど、他人に使われること考えたら、他のソフトとのバッティングは極力避けることが大事や」

   

びぎな

「じゃあ、『合成くん』」

   

まにあ

「安直やな。今度はググっても同種のソフトらしいものは引っ掛からんかったから、まぁええやろ」

   

びぎな

「次の最大化、最小化って?」

   

まにあ

「どんなウインドウズソフトでもウインドウの右上にボタンが3つ並んでるやろ? 一番右がクローズボタンで、ウインドウを閉じたりアプリを終了する時に使うボタンで、真ん中が最大化ボタン、左端が最小化ボタンや。最小化ボタンはふつうアイコン化するためのボタンで、最大化ボタンはウインドウを画面いっぱいに広げるボタンや。アイコン化はアイドル状態で動かすような処理が無い限りは特に何も考えんでデフォルトのままでええやろうけど、ウインドウを最大化したらそれに合わせた表示処理とか必要やから、使うか使わないかはきちんと決めやなあかん」

   

びぎな

「別に画面いっぱいにする必要は無いと思うけど……」

   

まにあ

「せやったら、最大化ボタンは無効化するように書いとき」

   

びぎな

「こんなのでいいの?」

   

まにあ

「ま、最初はこれくらいシンプルでええやろ。せやけど、びぎなちゃん、絵下手やな。それやったら後から見直そうと思ったって何が何かわからんようになるで。次回までにきれいに清書して来ぃや」

   

びぎな

「えー!?」

   
 

(つづく)

   
 
 

 ここはとあるソフトハウスの総務部総務課。びぎなちゃんはプログラミング言語のテキストを開きながらPCの画面とにらみっこしています。

   

まにあ
「さっそくコーディングか……まるで達人レベルの開発スタイルやな」

   

びぎな
「びぎなって、そんなに凄いの?」

   

まにあ
「いきなりコーディングできるってことは、頭の中ではソフトが完全に具体化されて仕上がってるってことや。『Hello, World!』ならともかく、初心者が普通にソフト作るのには絶対に向かんと思うけど、びぎなちゃんは出来るんか?」

   

びぎな
「ソフトって、絵を合成するだけのプログラムでしょ。それぐらい、びぎなにもわかってるよ」

   

まにあ
「ほな、ソフトの外見はどんな形してて、ユーザーはどうやって操作して、プログラムはそれをどうやって実現するのか、もう何も考える必要あらへんねやろな」

   

びぎな
「細かいとこは作りながら考えていったら何とかなるよ」

   

まにあ
「アホ。最初にきちんとした完成形のイメージがあらへんで、ソフトが作れるか!」

   

びぎな
「そんなの言ったって、そんな具体的なこと、作ってみないとわからないよ」

   

まにあ
「だからな、そんなのすぐに頭の中に浮かぶんは達人レベルにならんと無理やて言ってるんや。普通の人間は実際にコーディングに入る前にその辺のことをじっくりと考えてから作るんや。びぎなちゃんも頭の中でわからへんとかいっとらんと、順番を踏んで作業として考えていったらそれなりに形になるはずや」

   

びぎな
「順番って?」

   

まにあ
「せやな、最初は要件定義からや。課長はデジカメの背景とイメージキャラの絵を合成したいとか言ってたけど、それやったら漠然としすぎやな。実際にそれをソフトとして使うことになったら、どんな操作性でどんな機能が必要なのか洗い出してみるんや」

   

びぎな
「操作性とか機能とか言われても……」

   

まにあ
「びぎなちゃんもOfficeとかペイントとか使ってるやろ。そういう普段使ってるソフトを参考にしながら、どういう使い方やったら使いやすいとか慣れてるとか、あるいはここはこうならへんと不便やとかいうのあるやろ。そういうのをまとめてソフトに必要な要素というものを考えていくんや」

   

びぎな
「最初に絵を2枚読み込んで、それを1枚に合成してから保存すれば良いのはわかるけど……」

   

まにあ
「じゃ、まずその2枚の絵はユーザーとしてはどうやって読み込ませるんや?」

   

びぎな
「それはソフトが自動的に……」

   

まにあ
「アホ。そりゃ今回一回きり使うだけでええんやったら、ソフトの中にファイル名決め打ちして勝手に読み込むってのもアリやけど、この先、違う絵を使って何度も使いたいとか思った時に、その都度プログラムを書き直すんか?」

   

びぎな
「そんなの面倒くさいよ」

   

まにあ
「せや。ユーザーにとっても使うたびに修正が必要なソフトなんか面倒で使いたくあらへんやろ。こういうのは絵はユーザーが自由に選んで読み込ませられる汎用性が必要なんや」

   

びぎな
「じゃ、ファイルメニューの『開く』を使って……」

   

まにあ
「そりゃ読み込むのが1枚だけやったらそれもええやろうけど、今回作るのは背景の絵とキャラの絵を別々に読み込まなあかんねんで。ま、一番楽に作るんやったらコンソールアプリにしてコマンドラインパラメータでファイル名を指定するというのもあるやろうけど……」

   

びぎな
「楽に作れるんならそれで!」

   

まにあ
「アホ。ユーザーにファイル名手打ちせいっていうんか。それにコンソールアプリなんかで作ったら処理終わるまで何もチェックできへんで。プログラマーは楽かも知れへんけど、ユーザーにとっては不便で仕方があらへん。却下や」

   

びぎな
「じゃ、どうすれば……」

   

まにあ
「別のとこから考えよか。最初に2枚の絵を読み込んだら、それをどうするんや?」

   

びぎな
「合成して……」

   

まにあ
「それは最終段階や。読み込んでいきなり合成してええのか、よう考えや」

   

びぎな
「合成しないの?」

   

まにあ
「ええか? ユーザーも神様やないねやから読み込ませる絵を間違う場合もあるやろし、違う絵に変えたいと思う場合もあるやろ? そういうチェックはせんでええのか?」

   

びぎな
「出来た方がいいと思う」

   

まにあ
「じゃ、どうやってチェックするんや? 絵が正しいかどうかはソフトで勝手に判断できへんで」

   

びぎな
「それはユーザーが見てみないと……」

   

まにあ
「せやったら、読み込んだ絵を画面上に表示できるようにしとく必要があるわな。その都度、表示用のウインドウを開いて確認するって手もあるけど、どうせなら読み込みと同時に表示して、2つ並べて見比べられた方が便利やろ。じゃ、ソフトの画面にはあらかじめ表示用の枠を2つ用意しておいて、絵の読み込みはそれぞれの枠の脇にボタンを付けておいた方が分かりやすいやろ。ま、絵の枠に直接ドラッグ&ドロップするって方法も無いわけでもないけど、それは気が向いたらの追加機能でええわ」

   

びぎな
「ふむふむ」

   

まにあ
「ふむふむやあらへん。自分で考えやな意味あらへんで。他にも絶対に必要な機能があるやろ」

   

びぎな
「合成……」

   

まにあ
「その合成はどうやってするんや?」

   

びぎな
「さあ?」

   

まにあ
「ま、詳しい処理内容は後で詰めるからここで考える必要はあらへんけど、合成の基本は上書きする絵の背景色を抜くことや。その背景色はどうやったらわかる?」

   

びぎな
「ソフトで調べたら……」

   

まにあ
「そりゃ、絵によったら一番面積広いのが背景領域やとかいう場合もあるやろうし、画像の端っこは背景やという場合も多いやろうけど、そんなの保障されてへんで。キャラクターの顔がおもいっきし大きいとか、キャラクターの絵が画像の端っこで切れてる場合もあるやろ。背景色を固定で決めとくのもあるけど、違う色の絵が使えへんから意味あらへん」

   

びぎな
「やっぱり、人が教えてやらないといけないの?」

   

まにあ
「それが確実やな。せやから、ユーザーが背景色を指定する機能も必要や」

   

びぎな
「それから絵を合成して保存すればいいのね」

   

まにあ
「合成した結果は確認せんでええんか?」

   

びぎな
「じゃ、合成した絵を表示する枠もいるの?」

   

まにあ
「ま、合成結果は一発確認したら良いだけやから、別のウインドウをポップアップで出すって方法とか、最初の2枚のどちらかの枠に上書きするって方法もあるし、このへんは画面設計の問題やから後でじっくり考えたらええ。他には使える画像の形式とかサイズとかも必要やけど、.NET環境やったらBMPとかJPGとかの代表的な画像形式はデフォルトでサポートされてるから、その範囲で使えるぐらいでええやろ。画像のサイズも制限付けたら不自由なだけやし、2枚のサイズが違ったら背景の方のサイズに合わせて、キャラクターの絵はセンタリングして合成することにするか」

   

びぎな
「これでお終い?」

   

まにあ
「ま、大雑把に基本事項を挙げただけやけどな。業務で発注受けたソフトとかやったら、最初に発注元の要望をまとめてソフトに必要な事項を明確にしとかなあかんけど、自分で作るソフトも基本は同じや。最初にどんなソフトを作りたいのか明確化しておくために、必要な機能や特徴をまとめておくと、後で意味不明のソフトにしあがったりはせえへんようになるで。ま、達人レベルには不要やけどな」

   

びぎな
「びぎなも達人になりたい」

   

まにあ
「達人もこういう地道な作業の経験を数こなして、経験値を上げてスキルアップした結果なんや。びぎなちゃんも楽しようとは思わんと、今のところ、要件定義としてちゃんとまとめておきや。業務書類やあらへんから簡単なメモ書き程度でええけど」

   
 

(つづく)

   
 
 

 ここはとあるソフトハウスの総務部総務課。いつものようにびぎなちゃんはソフト開発のお勉強に張り切っています。

   

びぎな
「さあ、基礎は終わったから、いよいよ実際のソフト開発ね。どうやったらソフトが作れるのかな?」

   

まにあ
「待ちぃや! いきなりPCに向かって、いったい何のソフト作るつもりや?」

   

びぎな
「まにあちゃんが練習用の課題用意してくれてるのと違うの?」

   

まにあ
「あほ! そんな都合のいいわけあるか! それに、そんなプログラミングの教科書に載ってるような、『Hello, World!』表示したり、CPU相手にジャンケンするみたいな作ってみてアホらしいプログラムなんか作って嬉しいんか?」

   

びぎな
「どうせなら、ちゃんと作った後も役に立つソフトの方が良いけど……」

   

まにあ
「せやったら、最初に何を作るのかじっくり考えや」

   

まにあ
「ソフト開発で一番大事なのは、自分が何を作るのか目的意識をはっきりさせることや。どうでもいいような教科書の練習問題打ち込んでも、そんなの全然身に付かへんで。自分がこういうことをしたいからこういうソフトがほしいという切実な思いがソフトを作る上では一番大切なんや」

   

びぎな
「そんなこと言われても心の準備が……」

   
 

 びぎなちゃんが固まってると、そこに課長がやってきました。

   

課長
「びぎなくん、暇だったら絵の合成をしてくれないかね。求人広告に載せるうちの社のマスコットキャラの絵の背景にデジカメで撮った写真を使いたいのだが、あいにくとそっち方面のソフトは苦手でねぇ」

   

まにあ
「課長。画像の合成ぐらいWindowsのペイントでも出来ますわ。どれどれ……あ、これはあかんわ。キャラの背景が白やあらへんし、キャラ自身のあちこちに白をたくさん使っとる。ペイントは背景だけが白やったら合成してくれるけど、この絵やと無理やな」

   

課長
「やっぱりフォトなんとかという専用ソフトを使わないといけないのだろ」

   

まにや
「いや……そうや、ええこと思いついた! びぎなちゃん、作りたいソフト思い付かへんねやったら、その画像を合成するソフトでも作ってみたらどうや? 作ったソフトで課長の用事もできるし、これで一石二鳥やろ」

   

びぎな
「わたしにも作れるの?」

   

まにあ
「うちがフォローしたるさかい、大丈夫や。どんな処理を作ればええかくらい、もう頭の中に出来てるからな」

   

課長
「別に自作ソフトでも構わないが、それはいつくらいに出来るのかね?」

   

まにあ
「びぎなちゃん、初心者やからなぁ……2、3週間は掛るかも知らへんけど、気長に待ってぇや」

   

課長
「求人広告の原稿締め切りは今週中だよ。やっぱりフォトなんとかを使って……」

   

まにあ
「課長、何を言うてますの? うちの会社もソフトハウスやねから、そんなどこの馬の骨が作ったかわからんようなソフトに頼ったらあきまへんで。自作ソフトで勝負してこそ、優秀な人材も集まってくるというものや」

   

課長
「求人広告にソフトの名前なんか出ないのだがねぇ」

   
 

 課長は呆れたように立ち去って行き、他の社員に声を掛け始めました。

   

びぎな
「あの……絵の合成、すぐにやらなくていいのかな?」

   

まにあ
「かまへんかまへん。課長もびぎなちゃんに期待しとったやろ。うちらのやることは一刻も早く画像合成ソフトを開発して、課長に成果を見せることや!」

   

びぎな
「ところで、フォトなんとかって何ですか?」

   

まにあ
「さあ、うちもよー知らへんけど、きっとペイントの親戚みたいなものやろ」

   
 

 こうして画像合成ソフトの開発を始めることになったびぎなちゃんですが、果たして作り上げることが出来るのでしょうか?

   
 

(つづく)

   ここはとあるソフトハウスの総務部総務課。事務用のオンボロPCの上で起動した『Visual C# 2008 Express Edition』のスタートページを見ながら、びぎなちゃんは張り切っています。
   

びぎな
「これで開発環境は出来たから、早くプログラミングを始めましょ」

   

まにあ
「アホ。開発ツールをインストールしたくらいで素人がプログラミングできるわけあらへんやろ。プログラミングに入る前にソフト開発の基礎を身に付けやなあかんで!」

   

びぎな
「これは実践型の勉強だから、C#の言語仕様とかは作りながら覚えればいいって……」

   

まにあ
「プログラミング言語のことやあらへん。もっと基本のことや。これが身についてないといくらプログラミング言語をマスターしても何も作れへんことになるで。素人が独学でプログラミングを学んだつもりで一番引っ掛かるとこや」

   

びぎな
「どういうことなの?」

   

まにあ
「ソフトには2種類ある。わかるか?」

   

びぎな
「PC用ソフトとゲーム機用ソフト?」

   

まにあ
「アホ、誰がゲームソフトの種類言えって言った? 2種類ちゅーんは、使えるソフト使えへんソフトや。使えるソフトは最初から使うことを意識してきちんと計画的に作ったソフトで、使えへんソフトはそういうこと何も考えずに適当に作っただけのソフトや。プログラミング言語のことしか頭にない連中はこの使えへんソフトしか作れへんけど、そんなソフト作っても意味あらへんで!」

   

びぎな
「じゃあ、どうすれば使えるソフトを作れるの?」

   

まにあ
「それが今から勉強するんやけど、それより前にもっと基本的な知識も無いと全体的なイメージがしにくいやろ。ま、いまソフトに2種類あるとか言ったけど、別の視点からソフトを分類することもできるわな。じゃ、動作環境という点からみたらどんなソフトがあると思う?」

   

びぎな
「PCで動くソフトとゲーム機で動くソフト。それにケータイで動く……」

   

まにあ
「いいかげんゲームソフトから離れや。ま、PCで動くソフトというんは基本的には汎用的なOSの上で動くアプリケーションやな。PCのアプリにはコマンドシェルで動くコンソールアプリと、Windowsの多くのソフトみたいに専用画面をもったGUIアプリの2つがある。これはOSがWindowsでもLinuxでも同じようなものや。OSそのものもソフトやし、OSとアプリ、あるいはOSと外部機器の間で動くミドルウェアとかドライバとかいう種類のソフトもあるけど、一般のアプリプログラマが作るものやあらへん」

   

まにあ
「あとはネットワークサービスでサーバーアプリとかクライアントアプリとかあるけど、これも動作するマシンがサーバーかクライアントかということとデータのやり取りにネットのプロトコルを使うってこと以外は根本的にPCで動いてるアプリと変わらへんな」

   

びぎな
「じゃあ、ゲーム機やケータイは?」

   

まにあ
「ケータイもiPhoneとかAndroidとか汎用的なOSが搭載されて来てるから、これらの上にユーザーがインストールして使うようなアプリはPCのアプリと同じようなものや。違うのはケータイそのものの上では開発できへんからPC上の開発環境を使ったクロス開発が必要なことやな。こういう汎用的なOSを積んでへんケータイは機器それぞれに特化したOSとか、ハードを直接叩くような処理も必要になるから、家電とかのマイコン機器で動く組み込みソフトに近い形になってくる」

   

まにあ
「ゲーム機のソフトもアプリケーションとして取り換え可能な形で提供されてるけど、ハードに特化した開発という点では組み込みソフトに近いんやろうな。ごく基本的な機能のライブラリとかはメーカーから提供されてるんやろうけど、ゲーム機は機種ごとの技術変化が激しいから機種ごとに違うプログラミング技術が必要になるのは避けられへん。ま、異種固有の機能をバリバリ使うんやないとかいうんなら違うかもしれないけど」

   

びぎな
「つまり、OSが共通してたらどんな機械でも動くソフトと、その機械でしか動かないソフトがあるって話ね」

   

まにあ
「そこまで簡単にまとめられるものやあらへんけど、大雑把に言ったらそんなところや。そりゃPCでもハードに依存したアプリは作れるけど、特定の外部機器を扱ういうんやない限り、そんなん自己満足にしかならへん」

   

びぎな
「よくわからない」

   

まにあ
「ま、早い話、単純に同じ処理を一定回数繰り返してタイミングを計るようなソフトを作ったって、そんなのCPUの処理速度に依存するから、自分のPCと他人のPCやったらタイミングが違ってくるから同じようには使えへんとかいう話や」

   

びぎな
「じゃあ、タイミングを計ったりするのはOSの機能を使えってことね」

   

まにあ
「一般的なPCアプリではそういうことや。ほな、次からは使えるソフトの作り方の具体的なところに入っていくで」

   
 

(つづく)

   
  (本来ならここでコンソールアプリやらGUIアプリやら組み込みソフトについて詳細な解説が入るはずですが、そんなものやったってこの連載でコンソールアプリとか組み込みソフトを作る予定は無いから、こんな程度で割愛させていただきます)
   ここは、とあるソフトハウスの総務部総務課。びぎなちゃんの机の上のPCを、まにあちゃんが弄っています。経理や人事、勤務評定などの大事なサーバー上のデータが壊されたりしないかと、課長が心配そうに様子をうかがってます。
   

まにあ
「ソフトを作るには、開発環境が必要や」

   

びぎな
「こんなオンボロPCでも良いの?」

   
 

 びぎなちゃんの手元のあるPCは、総務部で使い古されたもう何世代も前のセレロンとかいうCPUが載ってる、かろうじてXPが動いてるような事務用PCです。

   

まにあ
「いきなりグラフィック使い倒すような大きなソフトを作るわけでもあらへんから、こんなんでもええやろ。メモリは1ギガ積んでるし、ハードディスクも100ギガぐらい空いてるみたいやからな」

   

びぎな
「じゃ、さっそく何か作りましょ……」

   

まにあ
「待ちぃや! 開発ツールも無くてどないやってソフト作るっちゅーねん! そりゃ、コーディングだけやったらメモ帳あればできへんことはあらへんけど、コーディングだけできても動くものにはならへんで。それに、プログラミング入門とかの記事読んだらメモ帳でコーディングできるとか書いてあるけど、あないな使い勝手の最低なエディタ、「Hello, World!」書くだけでも骨が折れるわ。うちが記事書くんやったら、まともなエディタ使えって赤字で書くところやで」

   

びぎな
「じゃ、何が要るの?」

   

まにあ
「今はたいてい統合開発環境があるから、コーディングだけエディタでやったり、コマンドラインからいちいちコンパイラを動かしたりすることはあらへん。パッケージ一つインストールしたらしまいや。その代りインストールに死ぬほど時間が掛ったりするけどな。今回はネットでただで手に入る『Visual C# 2008 Express Edition』とかいうのを使ってみるで」

   

びぎな
「しぃ・しゃーぷ? VBとかC言語とは違うの?」

   

まにあ
「せや、目の付けどころが#やろ。ま、C言語やC++をより構造的、かつ安全的に進化させたような言語やな。ま、C言語やC++でもええけど、そっちは初心者用の入門書も多いやろうから、わざわざここでやる意味はあらへんやろ。それに、うちも新しい言語勉強したいからなぁ」

   

びぎな
「まにあちゃんも知らないの?」

   

まにあ
「基本はC言語やし、.NETのCLI環境はVC++で触れたことあるし、そんなに違わへんやろ。あくまで実践プログラミング教室やさかい、言語仕様の細かいことなんかより、ちゃんとソフトが組めたらええんや。ほな、さっそく『Visual C# 2008 Express Edition』をダウンロードしてインストールするんや。『MSDNライブラリ』も忘れたらあかんで」

   
 

 びぎなちゃんはまにあちゃんの指示通りにネットからソフトをダウンロードして、インストールを始めました。

   

びぎな
「ねぇ、『.NET Framework 3.5 SP1』とかいうののインストールに入ったまま動かなくなっちゃったよ。PCを再起動してやり直した方が良いの?」

   

まにあ
「それはあかん。動いてないように見えても、ちょっとずつインストールしてるんや。途中でやめたらファイルの整合性がとれなくなって、動作が不安定になるで」

   
 

 びぎなちゃんがインストール状況を眺めながら固まってるうちに、勤務時間が終了しました。

   

まにあ
「どや、終わったか?」

   

びぎな
「まだ『.NET Framework 3.5 SP1』のインストールやってるよ」

   

まにあ
「じゃ、うちは帰るから、びぎなちゃんはちゃんとインストールが終わるのを確認しといてや」

   

びぎな
「そんなぁ……」

   
 

 翌日、始業時間ぎりぎりにまにあちゃんが出勤してきました。

   

まにあ
「どや、ちゃんとインストール出来たか?」

   

びぎな
「どうにか閉門時間には間に合ったわ。でも、こんな暇な時に何を居残ってやってるのかって、部長ににらまれちゃったよぉ」

   

まにあ
「そりゃ、災難やったな。ま、無事にインストールが終わったんやったら、さっそく授業を始めよか」

   
 

(つづく)

   ここは、とあるソフトハウスの総務部総務課。月末月初の修羅場を越えて、少し暇な日々が続いています。
   
  まにあ
(暇だからって、寝てたら課長に怒られるし……仕事するふりして内職のプログラミングでもしとこかな。『ひ●らし』や『東●』みたいに同人ソフトで億万長者……なんて大掛かりなものはできへんけど、シェアウェアでも作って小遣い稼ぎを……)
   
   まにあちゃんがほくそ笑んでいると、そこに新人の後輩のびぎなちゃんがやってきました。
   
びぎな
「まにあちゃん、プログラム教えて」
   
まにあ
「いきなりどないしたん? 忙しくて猫の手も借りたいとかいうけど、本当に猫の手を借りていっても何の役にもたたへんことぐらい、うちの会社のどこの部署でもわかってると思うけど……」
   
びぎな
「びぎなは猫の手じゃないもん」
   
まにあ
「せやったら、なんでプログラムなんか必要あるんや?」
   
びぎな
「びぎなもソフトの会社に入ったんだから、コピー取りや表計算ばかりじゃなくて、『ド●クエ』とか『F●』とか作れるようになりたいの」
   
まにあ
(……いや、それ、あんたにはムリ)
   
びぎな
「で、第3事業部の人に教えてもらおうと思ったら、みんな眼が血走ってて、誰もびぎなの話を聞いてくれないの」
   
まにあ
「第3事業部ってゲーム開発やってるところやね。あそこは今、大作ソフトのマスターアップ締め切り間近やから。ま、どうせ、間に合わへんでリリース延期なんやろうけど。でも、あそこの連中に訊いたって、あんまりええことあらへんと思うで。あこで作ってるのはケータイ用のエロゲやからな」
   
びぎな
「で、次に第2事業部に行ったら、文系にはムリだから第1事業部に行けって言われたのよ」
   
まにあ
「第2事業部はメーカーの技術実験用ソフトとか、交通機器の制御ソフトの受託開発をやってるとこやからなぁ。学術論文にある数式を実装して計算させられるぐらいの理系の知識が必要やな。ま、素人にプログラムを教えるのに関係ないとは思うけど」
   
びぎな
「で、第1事業部に行ったら、忙しいから来るなって追い返されたの」
   
まにあ
「第1事業部は年中デスマーチのところやからな。うちも用事がなければ近付きたくないわ。でも、第1事業部の連中なんかに教わらなくて良かったで。あそこの連中はステップ数と人月単位でしか評価されない低能プログラマの巣窟やからな。プログラムの大半は仕様書の指示通りに代入を繰り返すだけの処理か、100年に1回ぐらいしか使われないようなエラー処理が大半やから、文系どころか小学生にでもできる仕事を量だけこなしてるとこや」
   
びぎな
「で、課長に相談したら、まにあちゃんが暇そうだから教えてもらえって……」
   
まにあ
「しゃあないな。ほんならうちが実践的なプログラミングを教えてやるから、2人で有明をめざそか」
   

びぎな
「ありあけ?」

   
 

(つづく)