いまから始めるスキルチェンジ ギャップを乗り越えてJavaエンジニアになる!

後編 Javaにはマニュアルが存在しない?

テンアートニ 中越智哉 越川剛臣
2005/9/28

Javaへのスキルチェンジを目指すエンジニア。乗り越えなければならないギャップにはどのようなものがあるのか。Javaの環境に特有のものもあれば、オープンソースの文化に起因するものもあり、Java以外のエンジニアは戸惑うことも多いだろう。気を付けるべきポイントを紹介しよう。

 前編「Javaで必要なのは周辺環境の知識」では、Javaとほかの言語とのギャップのうち、コーディングや周辺環境などJava言語特有のものについてお話ししました。後編に当たる今回は、非標準の技術の扱いなど、オープンソースに起因するものをご紹介します。

  ポイント6 Javaにはオープンソースのライセンスの文化がある

 昨今、オープンソースのソフトウェアが注目されている1つの要因として「無償で入手でき、コストが低い」ことがあるのは、皆さんもご存じのことかと思います。というと「システム内でどのように使ってもかまわない」「ライセンスフィーが存在しない」と思われがちですが、そうとは限りません。

 例えばオープンソースでよく登場するGPL(General Public License)の場合、自分のソフトウェアにGPLのソフトウェアを組み込むと、自分のソフトウェア自体もフリーソフトにしなければならないという規定があります。GPLのソフトウェアを組み込んだソフトウェアを販売するようなケースでも、ユーザーからの要求に応じて、自社ソフトウェアのソースコードを公開する必要があります。そのため、自社ノウハウがソフトウェアコードに含まれているなら、GPLのソフトウェアを採用することには慎重でなければなりません。

 そのような利用方法に対して、別途有償のライセンス体系を用意しているオープンソースのソフトウェアもあります。営利企業が開発し、管理しているオープンソースのソフトウェアに多いパターンです。

 オープンソースのライセンス体系の中にも、ApacheライセンスやLGPL(Lesser General Public License)のように、自分のソフトウェアに組み込んでも自分のソフトウェア自体をフリーソフトにしなくてよいと規定しているものもあります。

 Java開発には実にさまざまなオープンソースのソフトウェアがかかわっていますので、オープンソースのライセンスについて勉強しておくこともとても有用です。

  ポイント7 Javaの世界には標準と非標準が混在している

 Visual Basic(VB)/COBOLエンジニアの方にはなかなかピンとこないかもしれませんが、Javaの世界には標準と非標準の規格が混在しています。VBの場合はマイクロソフトが、COBOLの場合は稼働プラットフォームのベンダが標準を定めていて、その枠の中だけでシステムが完結できることがほとんどだと思いますが、Javaの場合はそうではないことが多いのです。

 現在のJavaの標準仕様はJCP(Java Community Process)という組織が策定していますが、特定の組織に縛られないオープンソースのソフトウェアも深く入り込んでいるのが実際です。Javaの世界では標準仕様に含まれない部分はオープンソースのソフトウェアで補うという傾向が強く、非標準のソフトウェアでも確立した地位を持つものが多く存在しているのです。

 顕著な例として、ログ出力のAPIがあります。現在のJava標準仕様では、ログ出力のためのAPIが備わっていますが、このAPIができる以前から、オープンソースのログ出力フレームワークとして、Log4Jというプロダクトが存在していました。このプロダクトは非常に人気があり、いまだに標準仕様のログ出力APIよりも業界標準としての地位を保ち続けています。Javaの標準仕様にログ出力APIが含まれることを知らないエンジニアも多いかもしれません。

 非標準のソリューションを引っ張っているのはオープンソースのコミュニティやそこにコミットしているエバンジェリストで、彼らの動向が標準に影響を与えることもたびたびあります。Javaの標準仕様の1つであるEJBの次期バージョンには、オープンソースのソフトウェアの思想が色濃く影響しているといわれています。

 Javaの開発においては標準の技術だけでなく、非標準の技術に対するリサーチも欠かせないのです。

  ポイント8 Javaにはマニュアルが存在しない?

 Javaへのスキルチェンジ組のエンジニアを対象に研修をしていたときの話です。受講者の方から「分からないことを調べたいのですが、リファレンスはどこにありますか」と聞かれたことがありました。

 オープンソースの世界に慣れてしまった私は「はっ」とさせられたことを覚えています。確かにベンダ系の言語の多くでは、開発環境が有償ということもあって、充実したマニュアルやリファレンスのたぐいが1カ所にまとまって存在します。大体の問題はそのマニュアルを読めば解決することができます。

 しかし、Javaのようなオープンソースの世界では、製本されたマニュアルはあまりありません。あっても英語のものや簡素なものが多いです。情報はWeb上に点在しているのが実情です。

 そこで必要になるのが、問題に直面したときの解決手法です。どのようにして目的の情報を探し出すのか、自分なりの方法を身に付けるようにしてください。

 ほかの言語同様、Javaのエンジニアは世界中に数多く存在しています。情報は1カ所にまとまってはいませんが、よほどマニアックなことをしていない限り、自分が直面したのと同じ問題で悩んでいるエンジニアが必ずいると思ってください。ほとんどの場合、どこかのサイト(製品のサイトかもしれませんし、エンジニアのブログかもしれません)や書籍、雑誌などにヒントになる情報やサンプルコードが載っているものです。

 そういう情報の見つけ方は早めに確立することをお勧めします。例えば、スタックトレースに出力されるエラーメッセージをGoogleなどの検索エンジンのキーワードとして検索するだけで、多くの情報を得ることができます。有用な方法の1つとして多くのJavaエンジニアが実践しています。

 これからJavaを学ばれる皆さん、Javaの文法やオブジェクト指向といった言語仕様を習得することはもちろん重要ですが、自分なりの調べ方を身に付けることも大切であることを知っていただければと思います。

  ポイント9 Javaのバージョンアップは頻繁

 皆さんが日ごろお使いのプログラミング言語は、どれくらいの頻度でバージョンアップが行われていますか。ベンダ系の言語を使っている場合は、せいぜい数年に1度であって、頻繁なバージョンアップはあまりないのではないでしょうか。

 Javaをはじめとするオープンソースの世界では、バージョンアップが頻繁に行われています。

 例えばJava本体であるJ2SEは、昨年5.0というバージョンが発表されたばかりですが、すでにJava SE 6(コードネームはMustang)、Java SE 7(Dolphin)という次期バージョンについても仕様策定・開発が進んでいるそうです。

 アプリケーションの部品やフレームワークといった小さなソフトウェアでは、より頻繁にバージョンアップがなされます。1カ月単位で細かなマイナーバージョンアップが繰り返されることも珍しくありません。

 われわれはこの頻繁なバージョンアップにどのように対処すればよいでしょうか。常に最新のバージョンをウオッチし、バージョンアップがあったら即最新のものに交換して、最新の状態を保つことに努めればいいのでしょうか。

 確かに、自分が使用している製品をウオッチングしておくこと自体は大切です。しかし交換となると慎重に対処する必要があります。

 オープンソース製品の中には、バージョンアップにより、それまで存在していた機能(メソッド)がなくなったり、非推奨になったりすることがあります。有志によって開発されているため、時間やリソースの関係で十分なテストを経ていない製品も存在します。

 何も考えずに最新のバージョンに交換して、いざ動かしてみたら「動かない」「バグが出るようになった」などという話も少なからず耳にします。

 バージョンアップには、新たな機能が追加される、より便利になるといった面ももちろんありますが、危険もあるということを意識してください。

  ポイント10 Javaは組み合わせが必須

 例えばVBでボタンやテキストボックスを作ったり、グラフ機能を持たせたりする場合、皆さんはどのように作りますか。おそらくゼロから作ることはしないで、出来合いのコンポーネントを利用しますよね。

 Javaの世界もそれは同じですが、さらにそれが如実に表れます。ボタンやテキストボックスなどだけでなく、

  • Webアプリケーションを作るので、Servlet/JSPという機能を利用する
  • 分散環境に対応するアプリケーションを作りたいので、EJBという機能を利用する
  • データベースにアクセスしたいので、JDBCというAPIを利用する
  • 帳票機能を利用する

などなど、数え上げるとキリがありません。

 Javaの世界では、小さいものから大きいものまで、さまざまな部品がベンダ、サードパーティ、有志などによって提供されています。

 これらの部品が、1機能に対して常に1種類しかないのであれば問題はないのですが、やっかいなことに同種の機能を持つ異なる製品が複数存在することもあります。

 良さそうだと思って選んでみた製品が、次の年にはサポートが終わってしまった! とか開発が終わってしまった! ということもあるのです。

 もしそうなったら、自分自身でその製品をメンテナンスしていくか、別の製品に乗り換えるためにアプリケーションを改修するかしなければなりません。考えるだけで大変ですよね。

 組み合わせは、実行環境だけに関係する話ではありません。開発時にもさまざまな製品・ツールを組み合わせて、より効率よく開発ができるよう注意しなくてはいけません。

 現在、Javaエンジニアの多くは、IDEを使用して開発を行っています(もちろん従来のテキストエディタ派も、依然として数多く存在します)。Eclipseは最も人気のあるオープンソースのIDEであり、デファクトスタンダードともいえますが、この製品で便利に開発を行うためのさまざまな機能が、さまざまな団体からプラグインとして提供されています。どのようなプラグインがあるかを知っているかどうかで開発効率にも影響を与えます。

 ほかの製品を利用したり組み合わせたりすることによって、どれだけ効率化を図ることができるかも意識しておくとよいでしょう。

視野を広げ、Javaエンジニアを目指す

 2回にわたって、これからJavaエンジニアを目指す皆さんの参考になるようなトピックをご紹介しました。

 いろいろと難しいことを述べてしまいましたが、しょせんはJavaも以前から使われているプログラミング言語から派生したものの1つにすぎません。ほかの言語経験がある方なら、文法の面だけを取ってみれば、スムーズにJavaの世界に入っていくことができるのかもしれません。

 しかし、Java特有の留意すべき事項(オブジェクト指向の考え方やオープンソースの文化との付き合い方)があることも事実です。

 少し大げさにいうと、Javaエンジニアになることとは、目の前のソースのみならず、さまざまな分野へ視野を広げることなのかもしれません。

 1つのことを成し遂げるためには、並々ならぬ努力を必要としますよね。皆さんがいままでやってこられた言語の場合も、きっとそうであったと思います。ぜひ、それと同じ気持ちで、素晴らしいJavaエンジニアを目指してください。本稿が少しでも皆さんの参考になれば幸いです。

インデックス
 前編 Javaで必要なのは周辺環境の知識
 後編 Javaにはマニュアルが存在しない?

筆者プロフィール
テンアートニ
アプリケーションビジネスユニット
テクニカルソリューション トレーニンググループ コンサルタント

中越智哉●1974年北海道生まれ。1999年北海道大学大学院 電子情報工学専攻修士課程修了後、同年4月テンアートニ入社。開発案件・トレーニング講師を担当。2000年12月より、@IT Java Solutionフォーラムにて「Java Solution FAQ」を執筆(2001年11月、同連載をもとに書籍「Javaプログラミング FAQ」出版)。その後、基幹系業務システム開発SEなどを経て、現在は教育事業(コース開発および講師)・コンサルティングに従事。
テンアートニ
アプリケーションビジネスユニット
テクニカルソリューション トレーニンググループ コンサルタント

越川剛臣●1972年東京都生まれ。1996年青山学院大学 法学部卒業後、ソフトウェア会社勤務を経て、2003年5月テンアートニ入社。トレーニング講師・技術コンサルティング案件などを担当。現在は教育事業(コース開発および講師・教育コンサルティング業務)に従事。『DBマガジン』(翔泳社刊)、『日経ソフトウエア』(日経BP社刊)への記事寄稿がある。
自分戦略研究所、フォーラム化のお知らせ

@IT自分戦略研究所は2014年2月、@ITのフォーラムになりました。

現在ご覧いただいている記事は、既掲載記事をアーカイブ化したものです。新着記事は、 新しくなったトップページよりご覧ください。

これからも、@IT自分戦略研究所をよろしくお願いいたします。