Skip navigation

Monthly Archives: 1月 2010

 

 ここはとあるソフトハウスの総務部総務課。びぎなちゃんはプログラミング言語のテキストを開きながら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人で有明をめざそか」
   

びぎな
「ありあけ?」

   
 

(つづく)

 ここは、とあるソフトハウスの総務部。ソフトハウスといっても、プログラミングのことなど知らない人たちの溜まり場です。
 
【能成美技奈】(のうなしびぎな)
大卒で入ってきた総務部の新人さん。不況下で就職活動は全滅状態だったけど、えらい人のコネで入社できとの噂。ソフトハウスに入ったら勤務時間中にゲームやり放題だと思ってたらしい。
 
【小卓野麻丹亜】(おたくのまにあ)
総務部の先輩……と言っても、専門学校卒で入社したので、びぎなちゃんとは同い年。プログラマーとして入社したが、すぐに総務部の人員不足で転属になった。総務部で唯一プログラミングの出来る人。ときどき火の付いたプロジェクトの応援に引っ張られるらしい。
 
 この連載は、びぎなちゃんがまにあちゃんにソフト開発の仕方を教えてもらうお話です。