特別寄稿
脱JDKのススメ
Java IDEとの上手な付き合い方
米持幸寿
2001/2/27
|
皆さんはJavaでプログラムの開発をするとき、どのようなツールをお使いだろうか。私はIDE(Integrated Development
Environment:統合開発環境)である IBM
VisualAge for Java V3.5を使っている。IDEにはたくさんの種類があり、使い慣れたツールを使うのが一番なので、ここでは、一概にどれが良いという議論をするつもりはない。
テキストエディタ+JDKのみでプログラミングをする人も大勢いるだろう。私も部分的にはそうであるが、そのとき「自分がIDE病」にかかっていることに気が付くことがある。その体験をご紹介し、IDEとの上手な付き合い方を考えてみよう。
■プログラマーに求められる資質
皆さんは「プログラマーに求められる資質」というものを考えたことがあるだろうか。プログラマーと一言でいっても、役割によって求められるものは違う。例えば、
1.実際にコードを記述する人(プログラマー)- 文法をよく知っている
- APIのパラメータをスラスラいえる
- APIドキュメントの見方を知っている
- コーディング・テクニックを知っている
- キーパンチが速い(これは特に重要?)
- プログラミング手順を知っている
- ライブラリをよく知っている
- 実行環境の特性に精通している
- 多くのテクノロジに精通している
- 多くのプラットフォームに精通している
- たくさんの経験(特に失敗と解決経験)を持っている
IDEやJDKを実際に使うプログラマーは1のような実際のプログラミングを行うプログラマーだ。文法に精通しており、バグの少ない、最適なコードを記述し、一刻も早くコンパイル・エラーをなくすのが生活の最大の目標になっているような人もいるはずだ。
プログラマーが「文法をよく知っている」のは必須の項目だろう。文法が分からなければプログラムは書けない。APIのパラメータは常に利用するものであれば自然に覚えるし、知らなくてもドキュメントの探し方を知っていればなんとかなる。コーディング・テクニックは「こういうコードより、こういうコードの方が、オーバーヘッドが少ない」といったノウハウだ。そして、頭の中に描いたコードを一気にコンピュータにダウンロードするには、高速なキーパンチ能力と、鳴った電話を無視する集中力が必要になる(これはちょっと蛇足?)。
コーディングの価値は次のような要素で測ることができるとしよう。
1.正確さ
まず、正しいロジックが書けることは重要である。
2.効率
早くプログラミングが終わる。要素として「コーディングの速さ」「コンパイル・エラーの取り除きの速さ」「コーディング初期のエラーを取り除く速さ」がある。
3.パフォーマンス
少ないリソースでよりたくさんの仕事をこなせるプログラムをコーディングできることは重要である。
4.ルールへの準拠
プロジェクトでプログラミングをする場合などは、コメントの書き方やインデントのやり方、ソースコード管理などにルールがあることが多い。それらを守りながらプログラミングをすることが求められる。
5.修正作成能力
多くの場合、プログラミングの後にテストがあり、そのときに発覚した問題は最終的にプログラマーがプログラム・モジュールを修正することになる。このとき「どこをどう修正すればよいか」、原因を追究し、対策を作るのは大変な作業であるが、これができるプログラマーが求められている。
■プログラマーを補う−IDE
これらを補ってくれるのが統合開発環境、すなわち「IDE(Integrated Development Environment)」である。
各社のIDE製品はそれぞれが特徴を持っており、エディタのキーアサインやメニュー構成などもまったくといってよいほど違う。しかし、一般的には次のような機能を持っている。
- 言語対応エディタ
Javaのキーワード、リテラル、コメントなどを色分けして表示する。
- 統合コンパイラとソースコード管理
いちいちコマンドで行わなくてもよいような構築機能。
- デバッガ
多くの製品がデバッガと連動したエディタ、実行追跡機能などを搭載している。
また、製品によっては、次のような機能を提供しているものもある。
- コード生成ツール
一部の製品では、ホスト連携、EJB、アプレットなどのプログラムで「こういうコードを書くときにはこれだけのコードが必要」という部分を自動生成してくれるような機能を提供しているものもある。
- コードアシスト機能
「pr」と入力して特殊キーを使うと、prから始まるフィールドやメソッド一覧を表示し、選択すると入力が完了し、必要なメソッド引数の一覧が表示される。
- オートコレクト機能
セミコロンやimport文の入れ忘れなどは単純なミスだが、やりがちなものである。これを自動修正する機能。
- サーバ用デバッガ
IDEのデバッガ上でアプリケーションサーバを稼働させ、サーバアプリケーションのデバッグを援助する。
- バージョニング
ソースコードにバージョンを付け、バージョン管理を行う。
- インクリメンタル・コンパイラ
コンパイルという手順は基本的に存在しない。コード保存と同時に瞬時にコンパイルが行われる。
挙げていくときりがないのでこれくらいで終わりにするが、とにかくプログラマーが作業中に「手間」と感じるようなものをできる限り統合した環境で行えるようにしているのである。
■IDEの功罪
筆者は幾つかのプロジェクトで「IBM VisualAge for Java」を使ってきた。アットマーク・アイティに載せたサンプルコートも、ほとんど VisualAge for Java で作ったものだ。そのためか、私はJavaの文法に自信がない。「Javaフォーラムにコラム記事を書いている人間が何をいっているか」と怒られそうだが、実際そうなのである。
VisualAge for JavaのIDE |
VisualAge for Javaのエディタは非常に賢い。色分けして表示されるのは当たり前だが、インデントを自動修正する機能はコードの整理やネストの検査に有効だ。Shift + Blankキーによりコードアシストが起動するのでAPIを細かく覚えている必要はないし、APIドキュメントを引く手間も省ける。エディタからフォーカスが外れる度にインクリメンタル・コンパイラ機能によってコンパイルが行われ、コンパイル・エラーが表示される。そこで簡単なエラーはオートコレクトによって自動修正も可能であるし、そのまま保存すれば「すべての問題」のウィンドウに一覧表示されるので、未解決のエラーを探すのも簡単である。
コンパイル・エラーの表示とオートコレクト機能 |
このようなIDEを長く使っていると、プログラマーに要求されるような資質が一部損なわれているような感覚に襲われることがある。例えば、import文を忘れる、なんてのはけっこうあることであろうが、こういう間違いは極力最初から減らそうとか、セミコロンを入れ忘れないようにしようとか、APIの名前やパラメータの並び順はきちんと覚えようとか、そういう努力をしなくなる。これは私個人が堕落しただけかもしれないが、IDEを使う限りはそれでも大丈夫なのである。そのとき、JDKに戻ると、API-DOCを読むのがなんとおっくうなことか!
また、私自身には体験がないが、べつのことで困っているエンジニアも見たことがある。例えば、あるIDEになれ親しんだプログラマーが別のプロジェクトでJDKベースのプログラミングや別のIDEでのプログラミングをしなければならなくなったときに、手順を覚えなおす必要が出てしまう、ということである。
■IDEとうまく付き合おう
IDEは非常に重要である。テキストエディタで作るときより、はるかに多くのコードを品質良く作れると筆者は確信している。デバッグの効率もJDKとは比べものにならない。それは筆者の品質は下げてしまった(!?)かもしれないが、結果は良い方向へ向かっている。IDEはJavaにとって必須のツールであり、だれが使っても必ず良い結果を出してくれるはずである。特に、Javaを覚えたてのベテラン・プログラマーを補完し、能力を最大限に発揮させる点においては、すばらしいツールである。私+Javaの高い能力+JDKは、現在の私+VisualAgeを上まわることはできないだろう。
では、どう付き合ったらいいだろうか。筆者の体験から、注意事項を幾つか挙げてみた。
1.JDKベースのプログラミングは「必須科目」と知るべし
これは、どんな「IDE使い」でも必ず身に付けておくべき基礎だと認識しよう。楽器を演奏するミュージシャンでいえば、スケール練習(ドレミファソラシドを繰り返す)と同じようなものと考えればよい。スポーツ選手のロード・ワークみたいなものだ。たまにはテキストエディタで〜.javaを作ってjavacでコンパイル、というのをやった方が健康に良い。クラスパスやJVMの動作などを認識するうえでも役に立つ。
2.必要なJavaDocのリンクは整理しておこう
すべてのJavaのAPIはJavaDocで提供されていると思って間違いない。JavaDocはどんなJavaプログラマーでも必ず読む必要がある。IDEのヘルプ機能が豊富だったとしても、JavaDocのリンクはブラウザのブックマークなどできちんと整理しておき、いつでも呼び出せるようにしておこう。
3.操作の本質を忘れないこと
幾つかのIDEは、ソースやjarファイルの操作をIDEが行ってくれる。メニュー機能やダイアログ・ウィザードによってそれらが自動的に行われる。これらの機能は、内部的には「何を生成しているのか、何をやっているのか」を認識しながら使うようにしよう。できれば手動でもそれと同じことができるように訓練しておいた方がいいだろう。そうすれば、問題が発生したときも、どこを確認すればよいかおのずと見えてくるはずだ。また、別のIDEに移行するのも楽になる。
JDK派の皆さん、これを機会にあなたのプログラミング能力をブーストするJava-IDEを研究してみてはいかがだろうか。
筆者プロフィール |
米持幸寿 1987年、日本アイ・ビー・エム入社。 IBMメインフレームOSであるVSE、およびVM関連ソフトウェアプロダクト の保守、 システム無人化ソフトウェア開発を手がける。現在はJava、XML、EJBに関わるプロモーション活動を行っている。 [筆者執筆記事一覧] ・JavaとXMLはなぜ仲良し? ・Java Servlet徹底解説(JSPとの連携) ・Java Servlet徹底解説(EJBとの連携) |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|