【最終回】こんにちは。アルバイトのイシイです。女子大生のプログラミング格闘記、第六話です。前話で開発がスタートし、社内のデータ管理をするプログラムの一部をつくり始めました。始めて早々にとてもややこしい障害にぶち当たったので、今回はそのややこしい話をします。私が今回作るのは、マスタデータを管理するページです。社員名簿を管理するページを作るのですが(社員の名前が一覧でき、また新たに入社した社員の名前を追加したり、名前を書き換えたりできるようにします)、ゲーム風にすると、登場キャラクターとその役職を一覧できるようにして、キャラクターの情報を書き換えたり、新しくキャラクターを作れるようにするページですね。変更できる情報はキャラクターの名前と役職です。このページはCharacterクラスとJobクラスで作っていきます。役職(Jobインスタンス)はJobクラスで定義されており、勇者(id=1)、魔法使い(id=2)、僧侶(id=3)があります。Characterクラスにて名前(nameフィールド)と役職(Jobフィールド)が定義されています。勇者をやっていても転職したくなる時ってありますよね。その時に魔法使いや僧侶に変えられるようにします。名前が「ショウタ」、役職が「勇者」であるキャラクターを例にしていきますね。キャラクターの名前を「ショウタ」から「リョウ」に改名したいときには、プログラムはXHTMLからMBeanが「リョウ」の名前を受け取って保存すれば完了です。このとき「リョウ」の名前はCharacterクラス型で受け取り、Characterクラス型で保存します。これで「名前:ショウタ、役職:勇者」だったキャラクターは「名前:リョウ、役職:勇者」になりました。勇者から魔法使いに変える、つまり「名前:リョウ、役職:魔法使い」に変えるとします。このときも同様にXTMLからMBeanが「魔法使い」の情報を受け取って保存すれば完了なのですが、役職を変える場合、データの「型」がややこしかったんです。大前提として保存はすべてCharacterクラス型でなければいけません。改名する場合はCharacterクラス型で情報の受け渡しができたのでそのまま保存できました。役職はJobクラスで定義された「勇者」「魔法使い」「僧侶」の3つから選ぶようになっており、情報の受け渡しはそれぞれに割り振られたidで行います。Integer型で受け渡しが行われます。そのInteger型で受け取った情報を保存するときはCharacterクラス型で保存しなければいけない...。最初は安直に「Integer型からクラス型にキャストすればいいじゃーん!」と思ったのですが、そういうわけにもいかないんですね。この時私はInteger型からいきなりCharacter型にすることを考えていたので上手くいかなかったのです。頭の中がこんがらがっていた私は、ひとまず手順を整理していくことにしました。やりたいことは役職を「勇者」から「魔法使い」に変えることです。スタートは「Integer型でJobのidを受け取る」こと、ゴールは「JobをCharacter型で保存する」ことです。ゴールには「Character型のJob」の情報が必要になります。ここで一つ気が付きました。このセッターであるsetJobを使えば勇者が魔法使いに変更される上、JobフィールドはCharacterクラス型で定義されているためCharacter型のデータになります。setJobの引数はJob型です。Job型のJobデータをもってこればsetJobを使うことができ、Character型のデータにすることができるということになります。はい、ここで一度手順を整理します。1魔法使いのid(Integer型)を受け取る(この時点ではまだデータは「勇者」のまま)2Job型の「魔法使い」データを取得する3CharacterクラスのsetJobメソッドで「魔法使い」(Jobクラス型)をセットする4セットしたJobフィールドの「魔法使い」(Characterクラス型)を保存する手順を整理してみると気付きました。私は1の時点でなんとなくJobの情報を受け取った気でいたのですが、受け取った情報はInteger型です。言うなればただの数字です。「勇者」や「魔法使い」ではなく、ただの「1」や「2」といった数字なのです。これ単体ではただの数字でしかありません。この「2」という数字は「魔法使い」のidです。このidを使って「魔法使い」の情報(Job型)をもってくればいいのです。そのことに気づいた私はようやく見つけました。idを使って魔法使いのデータを持ってくることができるメソッドがServiceクラスにあったんです。このメソッドを使えば、Integer型のidを使ってJob型のJobデータを持ってこれます。関門であった手順の2を突破したらあとは3、4と続きようやく「名前:リョウ、役職:魔法使い」にすることができました...!!今思えば、とてもシンプルで簡単なことだったのですが、当時の私にはとてもややこしい障害でした。それを乗り越え、達成感でいっぱいです。経験値を大量にゲットし、プログラマー(仮)レベルはLv.7に上がりました。最後にこのややこしい障害を乗り越えた後も何度もややこしい障害を乗り越え、無事に私が担当した部分のプログラムは完成しました。プログラミングのプの字も知らなかったイシイでしたが、いつの間にか、少しプログラミングできるまでに成長していました。プログラマー(仮)レベルはまだまだLv.7であり、(仮)がとれるのはもっともっと先です。そのレベルの上限はおそらくないのでしょう。この全六話を読んで、私のようにプログラミングの世界を全く知らない方が少しでもプログラミングに興味を持ってくれたら嬉しいです。