新ブログの更新状況

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Xcodeの拡張子

iPhoneのアプリ開発に向けて、Xcodeを勉強中です。

Xcodeで新規プロジェクトを作成すると、最初に出てくるのが、このウインドウです。 私がまともに使えるプログラム言語は、REALbasicとHu-BASICだけで、あとはCとJavaを少しかじったくらいです。 かつて、何度かXcode/Objective-Cに挑戦したことがあったんですが、ただ一人異国の地に放り出されたような心細さに耐えきれずに、ずっと挫折したままでした。 でも、今はiPhoneのおかげで、Xcode / Objective-C関連の日本語資料がずいぶん増えています。 今なら、きっと壁を乗り越えられるはず!

中身が空っぽのプロジェクトではありますが、すでにたくさんのファイルが入っています。 そして、馴染みのない拡張子に戸惑います。 まずは、この拡張子の意味を調べて、戸惑いを克服しましょう。

拡張子 意味
.framework フレームワーク
.plist プロパティリスト
.pch プリコンパイルヘッダ
.h ヘッダファイル
.m 実装ファイル
.xib インターフェイス

フレームワークは、良く使われる機能をひとまとめにしたものです。 プロパティリストは、設定を記録しておくためのものです。 プリコンパイルヘッダは、あらかじめコンパイルされているヘッダだそうです。 ヘッダファイルは、実装ファイルの先頭でインクルードするためのファイルです。 実装ファイルは、ソースコードの本体ですね。 Cだと ".c" 、C++だと ".cpp" 、Javaだと ".java" ですが、Objective-Cだと ".m" になるんですね。 インターフェイスは、開くとInterface Builderが起動します。 "Xcode Interface Builder" の略みたいですが、nib "NeXT Interface Builder" と呼ばれることもあります。

拡張子の意味がわかっただけで、最初に感じた「ダメだこりゃ」という絶望感が消えて、「何とかなりそうかも?」と希望が見えてきました。 他にも、わからないことは山のようにあるんですが、この調子で一歩ずつ進んでいきますね。 すでに、多くの人達がiPhoneアプリを開発しているわけですから、私にだってできるはず!

というわけで、引き続き頑張ります!

スポンサーサイト

2010年 ソフト開発計画

今年のソフト開発計画を立ててみました。

時期 PhotoMaster 3 ??? HomeRecipe
Q1
1~3月
β版公開
正式版公開
コンセプト定義
イメージ構築
コンセプト再定義
イメージ再構築
Q2
4~6月
Version 3.1公開 仕様策定
コーディング
仕様策定
コーディング
Q3
7~9月
Version 3.2公開 正式版公開 α版公開
Q4
10~12月
Version 3.3公開 第二弾制作? β版公開
正式版公開

これまでも、何度も計画を立てたことがありますが、計画通りに進んだことがありませんでした。 自分の実行力のなさに失望するあまり、具体的な計画を立てないようにしてみたり。 かといって、全くの無計画だと、ダラダラと先に伸ばしてしまうので、やっぱり、それなりに計画は必要です。 う~ん、困ったなぁ。 そこで、これまでの反省から、以下の点に気をつけながら、計画を立ててみました。

・計画に余裕を持たせる
3ヶ月単位で、無理せず大まかな計画を立てる。
・作業を分散させる
時期ごとに優先順位をつけ、同時進行で作業する。
・新しいことに挑戦する
単調な繰り返し作業にならないように、楽しみを作る。

これまで、計画を立てる時は、ついつい1週間や1ヶ月単位で、ぎゅうぎゅうに予定を詰め込んでしまってたんですよね。 つまり、自分に実行力がないわけじゃなくて、計画に無理があったというわけですね。 自分の実行力に合わせた計画を立てることって、結構重要な気がします。 1年の1/2の半年だと長過ぎるし、1/3の4ヶ月でもちょっと長いかな?というわけで、1/4の3ヶ月に決定。 いわゆる四半期ですね。 特にそれを意識したわけではありませんが、世の中うまくできてるなぁ、と思いましたよ。

私は、一度これと決めたら、そればっかりに集中してしまう性格です。 これまでは、その性格に合わせて、一度にひとつの仕事だけに集中してきました。 でも、このやり方だと、瞬発力はあるんですが、持続力がないんですよね。 いつも、途中で息切れしてきて、最後は、すっかり集中力が切れてしまっていました。 そこで、気分転換を兼ねて、優先順位を高(赤:6割)中(黄:3割)低(青:1割)に設定して、作業を同時進行させることにしました。

たとえ作業が計画通りに進んだとしても、ただ機械的に作業をこなすだけでは、気分が滅入ってしまいます。 どのソフトに対しても、革新の気持ちはありますが、現実の作業というのは、地味な作業の繰り返しです。 どこかに、夢を見続けられる、わくわくできる部分が欲しいんですよね。 そこで、年に一度、新しいソフトの開発を行うようにしました。 こうして、しっかりした計画を立てたいと思ったのも、実はこの新作を何としても実現させたいという気持ちが強かったからだったりします。 その相乗効果で、他のソフトの開発にも拍車がかかれば、一石二鳥ですね。

というわけで、今年は計画に合わせて頑張るぞ!

プロジェクトのフォルダ分け

PhotoMaster 3のプロジェクトを、大幅に整理しました。

これまで、タスク別にフォルダ分けしていたんですが、それをタイプ別に変えてみたんです。 たとえば、写真の一覧を表示するクラスは、「PhotoList」フォルダを作って、その中に、関連クラスを全部放り込んでいました。 これだと、PhotoList関連のクラスをひとまとめにできるので便利なんですが、ついついクラスごとの役割が曖昧になりがちでした。 開発初期の段階では、データと処理のクラスを明確に分離させるつもりだったのに、いつの間にか、データクラスにどんどん処理が増えてしまいました。

そこで、データ専用の「DataClass」フォルダ、タスク専用の「TaskClass」フォルダ、というように、クラスの役割ごとにフォルダ分けするようにしました。 一応、それなりにクラスを振り分けることができましたが、データクラスの中には、まだまだタスククラスに委譲できるような処理がたくさん残っています。 同様に、ウインドウやコントロールにも、共通クラスに移譲できる部分があるのが、はっきりわかるようになりました。

最終的には、タスク別にフォルダ分けした後に、さらにそれぞれタイプ別にフォルダ分けをするようにすれば、再利用しやすい形に落ち着くかと思います。 ただ、そうすると、階層が深くなってしまって見通しが悪くなるので、これは、ある程度リファクタリングが進んでからにすることにします。 まだまだ未熟だなぁと痛感しますが、PhotoMaster 2の頃と比べると、本当に進化したなぁ、とつくづく思います。

ここでひとまず、体勢を立て直してみますね。

本分を知る

別に、写真を撮るからって、写真家にならなきゃならないわけじゃないんですよね。

どういうわけか、芸術というものには、ゴチャゴチャといろんなコンプレックスがついて回ります。 アーティストというと、どこか憧れの匂いがするし、写真家という響きには、何とも魅力的な余韻があります。 でも、図書館の写真集を観ていると、やっぱり自分は写真家になることを望んではいないんだな、ということが、良くわかりました。 先日の神戸でも、それは感じていたんですが、それがより一層、はっきりとしてきました。

もちろん、写真を撮ることは大好きだし、これからも撮り続けるつもりです。 でも、私が写真に望んでいるのは、自分に正直な写真をとりたい、ということだけ。 もし、私の写真を観てくれた人が、何かを感じてくれたら嬉しいけど、そのために写真を撮ろうという気には、なれそうもない。 それよりも、写真を撮ることの魅力を知ってもらい、より多くの人達に、自分自身の写真を楽しんでもらった方が、ずっとずっと嬉しいんですよね。

私は、PhotoMasterという写真管理ソフトを作っていますが、その根底にあるのが、この考え方です。 キーボード練習ソフトのiKeyboardも、習得の困難なブラインドタッチを習得してもらうことで、より多くの人達に、パソコンという便利な道具を活用してもらいたい、という想いから、作られたものです。 私の場合、写真家になるには、理性や自己抑制力が強過ぎるので、あまり向いてはいないでしょう。 でも、自分が必要だと感じるソフトを考え出し、作り上げることは、とても魅力的だし、とても興奮します。

本当は、他にも作りたいソフトがいっぱいあるのに、技術力が伴わないせいで、なかなか実現しないのは、何とももどかしいところです。 でも、その夢はまだ見失っていないし、まだまだ夢が膨らんでいきそうです。 このところ、ちょっと本末転倒的なところがありましたが、やっと自分の本分に立ち返ることができたように思います。 まだまだ、まだまだ未熟な私ですが、いつまでも未熟だと言ってばかりいないで、自信を持って、胸を張ってソフト作家だと言えるように、頑張っていきますね。

人生、これからが本番。いつだって、これから、ですよね。

REALbasic 2009 Release 2

REALbasic 2009 Release 2が公開されました。

せっかくですので、新たに追加された18の新機能を訳してみました。

18の新機能

  1. エンドユーザーがListBoxのコラムヘッダをクリックした時に、コラムをソートするかどうかをコントロールできるようになった。詳しくはListBoxのHeaderTypeを参照。
  2. ブレイクポイントが、コンテキストメニューで切り替えられるようになった。これは、USキーボード以外でよりやりやすくするようにするためです。
  3. クラスにイベントが提供されている場合、クラス間でコピー&ペーストができるようになった。
  4. ListBoxクラスに、Column TagのようなRowTagプロパティを追加した。
  5. Windows Vista用の256x256 32bitアイコンがサポートした。
  6. 初期設定ダイアログに、REALbasicのアップデートを確認する「今すぐ確認する」ボタンを追加した。
  7. NotePlayerコントロールが、再びビルトインコントロールのリストに入れられた。
  8. 新しいクラスを編集する時に、イベントハンドラを自動的に見えるようにした。
  9. 「例外発生時に中断」用のBreakOnExceptions Pragmaを用意した。
  10. ListBoxの個々のセルにヘルプタグをつけられるようになった。詳しくはListBoxのCellHelpTagを参照。
  11. MySQL Enterprise Serverが公式にサポートされた。
  12. IDE ScriptのQuitIDEコマンドで、REALbasic IDEを終了させることができる。
  13. EncryptItemとDecryptItemコマンドによって、IDE Scriptからプロジェクトアイテムの暗号化と解読ができるようになった。暗号化や解読するアイテムを選ぶためには、SelectItemコマンドを使う。これは、IDE Scriptを使用して作られる総当たり攻撃を破る保安措置である。
  14. 初期設定ダイアログを通して、プロジェクトを保存する時の標準の形式を指定できるようになった。
  15. アプリケーションが、スコットランドゲール語にローカライズできるようになった。エンヤもこれで幸せだね。
  16. MsgBoxが、自動的にローカライズされたネイティブOSのメッセージボックスを使うようになった。
  17. Dateクラスに、1行に1つのコードだけで特定の日付でオブジェクトを作るためのコンストラクタを用意した。
  18. COMをサポートするアプリケーションやシステムライブラリの制御が強化された。

個人的には、1, 5, 8, 10, 17が嬉しいところですね。 全体的には小粒の新機能といったところですが、こうして少しずつでも定期的に新バージョンが公開されるというのは、とても安心感があります。 REALbasicは、手軽にマルチプラットフォームのアプリーケション開発ができる貴重な開発環境ですので、これからも頑張ってもらわないといけませんね。

今後は、Mac OS XのCocoaが徐々にサポートされていくそうなので、とても楽しみですね。

ExtendsとAssigns

PhotoMaster 3のリファクタリング中に気づいたことを、いくつか書いておきますね。

Extends

PhotoMaster 3では、写真はPhotoクラスによって扱われます。 Photoクラスには、写真ファイルのFolderItemと、読み込まれたExifデータが格納されています。 実際のExifデータの操作は、専用のモジュールで行うようにして、Photoクラスの肥大化を避けています。 でも、いちいちPhotoクラスを引数として渡すのは、オブジェクト指向らしくなくて、どうもしっくりきません。

PhotoModule As Module
PhotoModule.Orientation( p As Photo ) As Integer
---
Dim p As New Photo
Dim o As Integer = Orientation( p )

これは、写真の向きを得るためのメソッドなんですが、できれば " o = p.Orientation " と記述したいところです。 でも、Photoクラスに直接メソッドを追加するのは嫌だし、Photoクラスのサブクラスにメソッドを追加するのも、中途半端な気がします。 やっぱり、モジュールに処理を委譲するのが、一番理に適っているようです。 そんな時は、Extendsを使うことで、問題を解決することができます。

PhotoModule As Module
PhotoModule.Orientation( Extends p As Photo ) As Integer
---
Dim p As New Photo
Dim o As Integer = p.Orientation

こうして、モジュールの引数の前に " Extends " をつけるだけで、そのクラスにメソッドを追加できます。 これなら、元のPhotoクラスはシンプルなままだし、機能別に複数のモジュールを用意することで、全体の構造もわかりやすくなります。 また、モジュールを再利用したり、入れ替えたりするのも簡単に行えます。 これは、利用しない手はありませんね。

Assigns

クラスのプロパティは、基本的に全てプライベートなものです。 外部からプロパティを操作したい時は、Getter/Setterメソッドを用意して行うのが、オブジェクト指向の基本です。 でも、" value = class.getValue " はともかく " class.SetValue( value ) " とするのは、ちょっと違和感があります。 やっぱり、" class.value = value " という形で記述したいものです。

REALbasicでは、計算型プロパティを使うことによって、この問題を解決することができます。 しかし、計算型プロパティでは、Getter/Setterがワンセットになっていて、どちらか一方だけの利用はできません。 また、サブクラスでオーバーライドすることもできないので、結局は自前のGetter/Setterメソッドを作ることになります。

Value As Integer
---
Value( Assigns v As Integer )
Value() As Integer

でも、Assignsを使うことで、" class.value = value " という形で記述できるようになります。 プロパティの名前とメソッドの名前は同じでも構いませんが、引数の名前まで一緒にしてしまうと、無限ループに陥ってしまうので注意が必要です。 クラス内で、" value = newValue " とすると、プロパティに直接代入されますが、" Me.Value = newValue " とすることで、Setterメソッドの方を呼び出すことができます。

Assignsによって、そのメソッドがプロパティに代入するものであることを、明示的に記述することができます。 REALbasicでは常に名前でソートされるので、プロパティと同一の名前のメソッドにすることで、常に並んで表示されるという利点もあります。 ちょっとした記述の問題ではありますが、機能が増えれば増えるほど、こうしたちょっとした手間が大きく響いてきます。

以上、参考になれば幸いです。

イメージの重要性

今度のPhotoMaster 3は、これまでとは違った開発の仕方をしています。

これまでは、旧バージョンの問題点を洗い出して、新機能のアイデアを絞り出して、実際にプログラミングを行いながら、細かい仕様を煮詰めていました。 確かに、そのソフトを熟成させるという観点からは、理にかなった方法です。 でも、この開発過程には、新しい発想が入り込む余地はありません。 PhotoMaster 3の開発は、今年6月に始まったものの、7月に入ってから一旦中断し、10月に再開しています。 開発が中断している間に、その作りかけのプログラムを見て驚きました。 新しい要素がまるでないじゃないか!

一応、技術的な挑戦はそれなりにあったんですが、メジャーバージョンアップのワクワク感が、どうも足りないんですよね。 写真管理ソフトとしての基本を徹底的に練り直す、という決意表明はあったものの、要するに魅力的なイメージが湧かなかっただけなんじゃないのかなぁ。 これは、PhotoMasterがPhotoMasterという枠組みの中で、身動きが取れずに凝り固まっていたことの表れですね。 もっと、新しい血が欲しい!

そこで目をつけた生け贄が、iPhotoだったというわけです。 iPhotoは、Macに標準搭載されるデジカメ写真管理ソフトなので、iPhotoを超えることができなければ、PhotoMasterを使ってもらうことはできないでしょう。 iPhotoの機能をコピーするんじゃなくて、その肉を喰らい、血を飲み干し、消化してエネルギーに替えることで、新しいPhotoMasterの活力源にしようというわけです。 そして、この方法は、今のところ非常にうまくいっています。

これまで、問題を認識していながらも、その解決策がなかなか思い浮かばなくて、とりあえず現状維持で作業を進めていくうちに、結局は根本的な解決ができないままに終わってしまう、ということが良くありました。 そこには、少しでも早く、何か形のあるものを手にしないと、不安で落ち着かないという、開発者としての焦りがありました。 でも、iPhotoという具体的な対象が現れたおかげで、気持ちをiPhotoに向かせることができるので、安心して新しいPhotoMasterのアイデアを煮詰めていくことができているわけです。

魅力的な、具体的なイメージさえあれば、実際のプログラミング作業なんて、大した手間ではありません。 PhotoMaster 1がそうだったように、技術的に未熟だったとしても、そこに吸引力の強いイメージさえあれば、勢いでなんとかなるものです。 その強力なイメージを手にするためには、再び基本に立ち返る必要があって、それを手助けしてくれたのがiPhotoだったというわけですね。 これまでずっと白紙のままだったメモ用紙が、どんどん新しいアイデアで埋まっていきます。 これは、完成がとても楽しみです。

より魅力的なイメージを目指して、頑張っていきますね!

能力成熟度モデルに想う

デザインパターンの勉強をしていたら、能力成熟度モデルというのが出てきました。

これは、アメリカのソフトウェア工学研究所が、組織におけるソフトウェア開発プロセスの成熟度を定義したものです。 読んでみると、試行錯誤、暗中模索しながら、少しずつ確かなものを手にしていき、それを育てていく様子が見えるようで、とても面白かったです。 これは、ソフト開発に限らず、その他の仕事や趣味にまで、あらゆることに当てはまるんじゃないかと思います。

Software Engineering Institute ( SEI )
能力成熟度モデル( CMM : Capability Maturity Model )
「デザインパターンと契約」( ISBN : 9784894715387 ) より引用
レベル説明
1. Initial その場限りのソフトウェアプロセスと特徴付けられる。無秩序とさえ表現できることも多い。プロセスはほとんど定義されず、成功は個人の努力にかかっている。
2. Repeatable コスト・スケジュール・機能性を把握するために、基本的なプロジェクト管理プロセスが確立される。同様のアプリケーション開発プロジェクトでの以前の成功を繰り返すために、必要なプロセスの統制が行われる。
3. Defined 管理作業と開発作業の両方に対するソフトウェアプロセスが、文書化され、標準化され、その組織の標準ソフトウェアプロセスに統合される。全てのプロジェクトは、ソフトウェアの開発およびメンテナンスのために、組織の標準ソフトウェアプロセス(変更が加えられ、承認されたもの)を使用する。
4. Managed ソフトウェアプロセスおよびプロダクト品質についての詳細な基準がまとめられる。ソフトウェアプロセスとプロダクトの両方が数量的に理解され、管理される。
5. Optimized プロセスから、および革新的な概念と技術を試験的に導入した結果からの数量的なフィードバックによって、プロセスの継続的な改善が可能になる。

たとえば、私が初めて自分のカメラを手にした時、撮ること自体が楽しくて、身の回りにあるものを手当り次第に撮ったものです。 そのうち、良く撮れた写真と同じような写真を繰り返し撮るようになり、次第に興味の方向性が見えてきます。 すると、自分の興味に興味を抱くようになり、その興味について積極的に語るようになります。 その興味の形がはっきりしてくると、今度は、その興味をどう活かすかについて考えるようになります。 ただ、この頃にはマンネリ化に危機感を持つようになり、積極的に新しい分野を開拓して、その成果を取り込もうとします。

私のソフト開発の段階は、残念ながらまだレベル1で、そろそろレベル2にステップアップしたいなぁ、と思っているところです。 実際には、これらのレベルは、ウォーターフォールモデルのように、レベル1からレベル5へと段階的に進化していくだけじゃなくて、スパイラルモデルのように、レベル1からレベル5の間を何度も繰り返しながら、より高次元の世界へと進化していくのでしょう。 私の場合は、もっとたくさんのソフトを開発することで、より多くの経験を得ることが必要だと考えています。

お互い、より高いレベルを目指して頑張りましょう!

REALbasic 2008 Release 2

REALbasic 2008 Release 2が公開されたので、早速試してみました。

とりあえず、Mac版では、既存のプロジェクトを問題なくオープン&ビルドできました。 相変わらず日本語化はされていませんが、以前紹介した方法で日本語化できました。 Windows版は、REALbasic 2008 Release 1で英語表記に逆戻りしてしまっていたのが、再び日本語表記になっていました。 ただ、喜びもつかの間、プロジェクトはオープンできるのに、なぜかビルドしたアプリケーションが起動できません。 う~ん、これは困った!

調べてみると、今回のリリースから、win32のビルド方法が変更になったようです。 これまでは、「My Application.exe」という単一ファイルだけがビルドされ、アプリケーションを起動する度に、各種DLLファイルが裏で展開されていました。 それが、アプリケーションと同一のディレクトリに「My Application Libs」というフォルダが作られ、必要なDLLファイルが、ビルド時にその中に格納されるようになったんです。

この変更自体は、別に悪いことじゃないんですが、問題はビルドしても「My Application Libs」フォルダ内が空っぽなことです。 必要なDLLファイルが見つからないので、アプリケーションを起動しても、ランタイムエラーが続出してしまいます。 REALbasic本体のDLLファイルをコピーしてみても、やっぱり駄目です。 せっかく12ヶ月のライセンスを購入したのに、そりゃあないよ~。

もしやと思って、ネットワーク上にあるプロジェクトファイルを、ローカルのデスクトップにコピーしてみたんですが、これも駄目。 まさか、ファイルのパスに日本語が含まれてると駄目とかじゃないだろうな、ということでルートディレクトリに移動させてみると、あっさりとビルドできました。 幸い、一度ビルドしてしまえば、日本語を含むパスに移動しても、ちゃんと起動してくれました。

REALbasic 2008 Release 2でビルドしたアプリケーションの動作環境は、Mac OS X 10.2以降(PowerPC, Intel)、Windows 2000以降となります。 Mac OS 9やWindows 98はサポート外となってしまいましたが、まあ仕方ありませんね。 ただ、iKeyboardで重宝してたSpriteSurfaceやNotePlayerなどの機能が、将来のリリースで使えなくなってしまうのは残念です。

拡張された部分も多いので、この機会に、REALbasicの全機能を復習してみるのも良さそうですね。

知識の功罪

iKeyboard 3の開発ですが、いきなり躓いています。

昨年末に学んだオブジェクト指向プログラミングやデザインパターンのおかげで、これまで苦労していた部分が簡潔にできそうな予感はあったんです。 実際、ここはVisitorパターンが使えそうだな、これならStateパターンが良さそうだ、などなど、早速勉強の成果が現れてはいるんですが、そこから先になかなか進まないんですよね。 理屈ではわかっていても、実際にそれを実装する方法がわからずに、手をこまねいてしまっているんですよ。

今は、基本となるキーボード関連のデータ変換部分を実装しようとしているんですが、これがまたややこしいんです。 要素としては、まず各キーに割り当てられたKeyCodeがあり、キー配列上の位置を表すKeyMapがあり、キー位置に対応した指使いのヒントとなるKeyHintがあり、キー配列に対応した文字配列となるKeyScriptがあります。 さらに、KeyMapにはJisとUsの2種類、KeyScriptにはQwertyとDvorakの2種類があり、おまけに直接入力とシフト入力、英字入力とかな入力の違いもあったりして、もう何をどうして良いやらわからなくなってしまいます。

これまでは、IfやSelectによる分岐を使って使い分けてきたわけですが、正しいオブジェクト指向プログラミングでは、クラスによって使い分けるらしいんですね。 とりあえず、それらしいクラスを作ってみたんですが、クラスの数が増えるばっかりで、それをどう扱って良いのかがさっぱりわからないんですよ。 どうやら、私の頭は非オブジェクト指向になっているようです。 でも、ちょっと待てよ。 今の自分は、オブジェクト指向やデザインパターンに振り回されてないか?

効率化を図るのが目的のはずなのに、効率化のために効率が落ちていたんじゃ話になりません。 確かに、オブジェクト指向プログラミングは非常に強力な手法ではありますが、何が何でもオブジェクト指向にしなければならないわけではありません。 XPプログラミングでも、まずは最短の解決策を見つけて、最適化は後からリファクタリングすることになってるじゃありませんか。 どうやら、気負い過ぎて頭が固くなっていたようです。

人の意見に耳を傾けるのは大切なことですが、人の意見を鵜呑みにして自分を犠牲にしてしまっては意味がありません。 まずは、自分にとっての理想をイメージした上で、それを現実にするための努力をするべきです。 人の意見というのは、その段階になって初めて役に立つんですよね。 イメージを膨らませるには、自分のやり方を貫くのが一番です。 そう思うと、肩の荷が下りて、ずいぶん気が楽になりました。

とにかく、手探りでもいいから前に進まないと。

Javaのソースはどんな味?

Javaには、無償の総合開発環境があるらしい。

というわけで調べてみると、NetBeansというのが見つかりました。 Javaのお膝元であるSunがオープンソースで開発しているので、安心して使えそうです。 最初から日本語に対応しているのも嬉しいですね。 というわけで、早速ダウンロードしてインストール。 WindowsでもMac OS Xでも同様に使えてしまうのは、Javaの面目躍如といった感じです。 画面表示も綺麗で、動作もキビキビとしています。

他にもないかと探してみると、IBMが開発したEclipseや、ORACLEが元々商用として開発したJDeveloperがありました。 中でも、Eclipseは最も歴史が古く、Java以外の言語にも対応していて、一番人気が高いようです。 JDeveloperも、商用だっただけあって完成度が高く、他のORACLE製品との連携も高いんだとか。 とりあえず、一通りダウンロードしてインストールしてみましたが、どうやら入門用にはNetBeansが良さそうです。

まだ右も左もわからない状態なので、とりあえずNetBeansのソースを開いてみます。 オープンソースのソフトは使ったことがありますが、オープンソースのソースを見るのは初めてです。 いきなりずらりと並ぶプロジェクトに、ぎっしりと詰め込まれたクラスの数々。 プロジェクト全体だと、果たしてクラスは何個になるんだろう? これはJavaだから?それともNetBeansが巨大なアプリケーションだから?

クラスの数はとりあえずおいといて、今一番興味があるのは、ひとつひとつのクラスの規模です。 メンバ変数の数は?メソッドの数は?getter/setterメソッドの占める割合は? どうやら、ほとんどのクラスは、メンバ変数、メソッド共に10個以内に収まっているようです。 ただ、一部のクラスは非常に規模が大きくなっていて、50近くのメンバ変数やメソッドがあるものもありました。

サンプルじゃない本物のJavaのコードを見るのは初めてだったんですが、これはとても勉強になりそうです。 最近つくづく思うのは、多くのソースコードに触れる機会があれば、もっと上達が早かっただろうな、ということです。 REALbasicでは、付属のサンプルコード以外にソースを見ることはほとんどなかったので、成長する機会がずいぶん失われていたように思います。 その点、Javaはオープンソースが盛んなので、とても助かります。

文章も、定型的な例文をいくら覚えたところで、生きた文章を書くことはできません。 まず最初に伝えたいことがあって、それが自然と言葉を選んでいって、文章になっていきます。 最終的にできあがった文章だけを見ていては、決して良い文章は書けません。 プログラムも、説明のためのサンプルコードばかり見ていても、いざという時にはあまり役に立ちません。 生きたコードに直接触れて、初めてそのコードを活かせるんでしょうね。

これからは、Javaの香りも味わっていきたいと思います。

消化不良と一人旅

どうやら、一度に多くのことを学び過ぎたようです。

リファクタリングやデザインパターンについて一通り学び終えて、オブジェクト指向プログラミングの理解もずいぶん深まりました。 よし、これでプログラミングの技術力も上がったはずだ。 わくわくしながら、久々にHomeRecipeのプロジェクトファイルを開いてみると、そのコードの汚さに驚いてしまいました。 一年半前のiKeyboardならまだしも、ついこの間書いたばかりのHomeRecipeのコードまでもが、不吉なコードの臭いで充満していたのです。

ほとんど独学とはいえ、それなりに技術の蓄積もあったし、自分なりに満足していたつもりでした。 特にHomeRecipeは、紆余曲折はあったものの、これまでの集大成として自信を持っていただけに、かなりショックが大きかったです。 これまでずっと頼りにしてきたREALbasicも、Javaの言語仕様を知ることで、だんだん貧弱で頼りないものに思えてきました。 今までの自分は井の中の蛙で、ずっと無駄な努力をし続けてきただけなのか?

というわけで、すっかり自信をなくしてしまいました。 とりあえず、HomeRecipeの簡単なリファクタリングをしているところなんですが、新しくコードを書くのが怖いんですよ。 何かコードが思いついたとしても、もっと良いコードがあるんじゃないかと不安になって、先に進めないんです。 これまで学んできた「あれをするな」「こうすべきだ」「こうしなければならない」といった言葉が頭の中で渦巻いて、どんどん混乱していきます。

でも、これまでだって、曲がりなりにもソフト作りはできたわけだし、気に入ってシェアウェア登録してくれた人だってたくさんいます。 上を見たり人と比べるのも良い刺激にはなりますが、あまり気にし過ぎると、自分がどんどん駄目になってしまいます。 そう、遠くの景色を眺めたり、出会った人達との会話を楽しみながら、自分のペースで旅をしたほうがずっといい。 写真だって、自分の気に入ったものを撮るのが一番ですからね。

というわけで、マイペースで頑張ります!

プロフィール

K-Hyodo

K-Hyodo

本名:兵頭 薫
鹿児島の30代男性
ソフトウェア作家を目指す

コメント・拍手は大歓迎!

K-Hyodo's Soft

どのソフトも、
Mac & Windows 両対応!

iKeyboard 3

本気で覚えるための、
キーボード練習ソフト。

ベクターソフトレビュー


PhotoMaster 2

撮影を楽しむための、
デジカメ写真管理ソフト。

ベクターソフトレビュー

Vector Best Online Soft of 2004


iKeyboard 2

ブログを読み返すための、
バックアップ表示ソフト

窓の杜 今日のお気に入り


マルチプラットフォームの統合開発環境REALbasicで開発しています。

Twitter

 

カレンダー

08 | 2017/03 | 09
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

ブログ内検索

アクセスカウンター

読書メーター

K-Hyodoさんの読書メーター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。