削除された内容 追加された内容
何を以て特殊と言っているのか
編集の要約なし
(同じ利用者による、間の2版が非表示)
136行目:
 
=== その他 ===
Javaは「[[例外処理]]」の言語仕様を備えており、[[プログラム (コンピュータ)|プログラム]]実行中に生じた異常(例外)の扱いを、比較的安全な方法で行い、プログラムを読みやすく記述できる。
 
Javaでは、C/C++のような、整数と[[ポインタ (プログラミング)|ポインタ]]の相互変換、配列の要素へのポインタによるアクセス、ポインタ演算といった機能は、基本機能としては提供されていない。ただし、オブジェクトへの参照は内部的にはアドレスである。
562行目:
 
== Javaプラットフォーム ==
{{Main|Java platform}}Javaプラットフォーム(''Java Platform'')は、'''Java実行環境'''(JRE)と'''Java開発キット'''(JDK)と'''拡張テクノロジ'''の総合である。拡張テクノロジとは様々なIT分野においてJavaを基盤に開発された技術群である。Javaプラットフォームは対象環境に従い合わせて、JREおよびJDKの構成内容と、追加される拡張テクノロジの組み合わせを変えたエディションに編集されて提供公開されている。これらの各技術要素またはその総称をJavaテクノロジと呼ぶ。Javaテクノロジは公式ベンダーだけでなくサードパーティ側からも提供されており、スマホ、パソコン、サーバーマシン、エンベデッドシステム、マイクロコントローラ、スマートカードなどのあらゆる環境に対応したJavaプラットフォームが存在している。各技術の品質を評価して認証するJavaテクノロジの標準化は、公式ベンダーである[[オラクル (企業)|オラクル社]]([[サン・マイクロシステムズ|サン社]])を始めとする各企業各団体が参画する[[Java Community Process|Javaコミュニティプロセス]](JCP)が管理している。Javaテクノロジの中核となるJREとJDKはオープンソース化されている為、各企業及び各任意団体が営利または非営利で膨大な数のソフトウェアと関連技術を公開し、巨大なITエコシステムを構築している。
 
=== エディション(版) ===
591行目:
# データコレクションライブラリ - 配列の操作と順序収納、索引収納、連想収納などのデータ集合。
# 数学ライブラリ - 各種計算。
# 国際化地域化ライブラリ - 暦、日付、時間、通貨、文字コードなどの各国基準概念を扱う。
# ネットワークライブラリ - ソケットを置いてリモートポートを開きストリーム入出力を扱う。
# GUIライブラリ - ウィンドウとスイッチとイメージを表示し、ユーザーからの操作を認識する。
# Javaアプレットライブラリ - アプレット生成用。
# Javaビーンズライブラリ - Java版ソフトウェアコンポーネント作成用。
# データベース接続ライブラリ - SQLを扱う。
# リモートメソッドライブラリ - 外部マシン上にあるプロセス・メソッドを呼び出す。
# セキュリティライブラリ - 様々な通信セキュリティプロトコルを扱う。
# バッファストリームライブラリ - 連続バイトデータを扱う。
#データベース接続リフレクションライブラリ - SQLクラス定義扱う動的に操作する
# リフレクションライブラリ - クラス定義を動的に操作する。
 
;Javaアプリケーションの形態
608行目:
:スマホ、モバイルPC、パソコンのローカル環境で実行されるJavaプログラム。「[[Java Web Start]]」は任意のjnlpファイル(''java network launching protocol'')をダウンロードして実行できるJavaアプリの配布システムである。この類似技術としてマイクロソフトのノータッチデプロイメント、ClickOnceがある。
;[[Javaアプレット]](applet)
:サーバーからダウンロードされてウェブブラウザ上で実行されるJavaプログラム。[[サンドボックス (セキュリティ)|サンドボックス]]機能下で厳しい動作制約が加えられている。公開当初はJavaの汎用仕様上の制限方針によりWEBブラウザ環境に特化出来なった事が裏目に出て起動や動作の軽快さに難があり、見られた。その改善機会も某社との企業戦略上の確執から失われてしまいWEB他のブラウザ向けに特化していた他メディアに押されてさほど普及しなかった。
;[[Java Servlet|Javaサーブレット]](servlet)
:サーバーマシンで実行されるJavaプログラム。その名の通り手軽にサーバープログラムを実装出来るが、大規模サーバーの構築にも適している。サーブレットはクライアントからのリクエストを逐次トランザクションして順次レスポンスする。WEBクライアントにはHTMLなどのプロトコルページ及び各種メディアをレスポンスしてWEBブラウザ上で表示させる。[[Perl]]などによる[[Common Gateway Interface|CGI]]に比べ、サーバ側の負荷が低いなどのメリットがある。
631行目:
# java.util - 配列の操作と順序収納、索引収納、連想収納などのデータ集合。
# java.math - 各種計算。
#java.text - 暦、日付、時間、通貨、文字コードなどの各国基準概念を扱う。
# java.net - ソケットを置いてリモートポートを開きストリーム入出力を扱う。
# java.awt - ウィンドウとスイッチとイメージを表示し、ユーザーからの操作を認識する。
# java.applet - アプレット生成用。
# java.beans - Java版ソフトウェアコンポーネント作成用。
# java.sql - SQLを扱う。
#java.rmi - 外部マシン上にあるプロセス・メソッドを呼び出す。
# java.security - 様々な通信セキュリティプロトコルを扱う。
# java.nio - 連続バイトデータを扱う。
#java.sql - SQLを扱う。
#java.lang.reflect - クラス定義を動的に操作する。
 
649行目:
*[[Eclipse (統合開発環境)|'''Eclipse SDK''']] - [[Eclipse財団]]。以前はIBMが管理していた。Web Sphere Studioのオープンソース版ともいえる。Win版、Linux版、Solaris版、MacOS版。[http://www.eclipse.org/ eclipse.org(英語)] [http://eclipsewiki.net/eclipse/ EclipseWiki(日本語)]。
*'''[[JBuilder]]''' - [[エンバカデロ・テクノロジーズ|エンバカデロ社]]。Win版、Linux版。Solaris版、MacOS版。[http://www.embarcadero.com/jp/products/jbuilder JBuilder]。
*[[JDeveloper|'''Oracle JDeveloper''']] - [[オラクル (企業)|オラクル]]。Oracle Application Serverと統合されている。Win版、Linux版。Solaris版。2005年6月28日に無料化した。[http://www.oracle.com/technetwork/jp/developer-tools/jdev/overview/ JDeveloper]。
*'''Oracle Workshop for WebLogic''' - [[オラクル (企業)|オラクル社]]([[BEAシステムズ|BEAシステムズ社]])。{{仮リンク|Oracle WebLogic Server|en|Oracle WebLogic Server|label=WebLogic}}と統合されている。[http://www.oracle.com/technetwork/jp/developer-tools/workshop/ Oracle Workshop for WebLogic]。
*'''[[BlueJ]]''' - Deakin University([[オーストラリア|豪]])とUniversity of Kent([[イングランド|英]])と[[サン・マイクロシステムズ|サン社]]が共同で開発した[[フリーソフトウェア]]、Javaの学習に適したインタラクティブな統合開発環境。[http://www.bluej.org/ BlueJ]。
*'''[[IntelliJ IDEA]]''' - JetBrains社が開発販売している商用の統合開発環境。[http://www.jetbrains.com/idea/ IntelliJ IDEA]。
*'''JCreator''' - Xinox Software社が開発販売している商用の統合開発環境。[http://www.jcreator.com/ JCreator]。
658行目:
開発サポートツールは、プロジェクト管理、自動ビルド、モニタリングを容易にする。下記の他にも多くの支援ツールが存在する。
 
*'''[[Apache Ant]]''' - Javaアプリケーションのビルドツール。[[Apacheソフトウェア財団]]のプロジェクトによって開発された。[[コンパイル]]、[[バージョン管理システム]]との連携、[[jar]][[javadoc]]生成、ファイルのコピー/移動/削除/変換などの一連の処理を自動化して効率的に実行する。[[make]] と同種のツールであり、[[Extensible Markup Language|XML]]ファイルにビルドの規則を記述する。Java 以外の言語によるアプリケーション開発や、アプリケーション開発以外の用途にも使うことができる。
*'''[[Apache Maven]]''' - Javaアプリケーションのプロジェクト管理ツール。Apacheソフトウェア財団のプロジェクトによって開発された。
*'''[[JUnit]]''' - Javaアプリケーションの単体テストフレームワーク。単体テストを自動化する。[[xUnit]]の一種である。[[テスト駆動開発]]を支援する。
 
=== Javaの拡張テクノロジ ===<!--
<!--================================================================================
ここには、Java Community Process のもとで開発された拡張機能と関連技術のみを記述します。
=================================================================================-->
691行目:
*Shared Data ToolkitSound-->
*[http://community.java.net/javadesktop/ JavaDesktop]
*[[FindBugs]] - javaソースコードからコーディングレベルのバグを発見する開発支援ツール。
*[[CheckStyle]]
 
=== Javaテクノロジの標準化 ===
{{Main|Java Community Process}}
 
[[Javaプラットフォーム]]を形成するJavaテクノロジの標準化は、[[Java Community Process|Javaコミュニティプロセス]] (Java Community Process, JCP) に管理されていた。標準化とはその技術の品質を評価してJavaテクノロジの一つとして認証する事である。JCPに参画する事でJavaテクノロジの標準化カンファレンスに関与できた。[[ボーランド|ボーランド社]]、[[富士通]]、[[Apacheソフトウェア財団]]、[[ヒューレット・パッカード|ヒューレット・パッカード社]]なども参加していた。JCPはJavaプラットフォームに追加される仕様や技術を、JSRs (''Java Specification Requests'') と呼ばれる文書で公開していた。Java言語仕様と標準APIに関連したJSRsを以下に列挙する。
 
*[http://www.jcp.org/en/jsr/detail?id=14 JSR 14] ''Add [[総称型|Generic Types]] To The Java Programming Language'' (J2SE 5.0)
727 ⟶ 729行目:
メジャーなオペレーティングシステム(OS)では、営利企業および任意団体による独自開発のJREとJDKが公開されている事が多い。
 
*[[Linux]] / [[IA-32]]プラットフォーム : [[オラクル (企業)|オラクル]]、Blackdown、[[IBM]]、Kaffe.org、GNUプロジェクトなどがJREやJDKを実装・提供している。
*[[Microsoft Windows|Windows]]/IA-32プラットフォーム : オラクル、IBMなどがJREやJDKを実装・提供している。
 
741 ⟶ 743行目:
 
JSmoothなどは、Java実行環境が無い時はそれも自動インストールする機能を備えている。また、純粋なJava実行環境では不可能だったタスクアイコンを表示させる機能も備えている。
<!-- ただし、これらのツールには最新の[[JDK]]でコンパイルされた[[jar]]ファイルには対応していないなどの欠点もある上、{{いつ範囲|date=2019年2月|近年}}の [[Microsoft Windows|Windows]] にはほとんどにJavaがインストールされているため、あまり普及していない。 -->== Javaへの批判 ==
 
== Javaへの批判 ==
<!-- ただし、これらのツールには最新の[[JDK]]でコンパイルされた[[jar]]ファイルには対応していないなどの欠点もある上、{{いつ範囲|date=2019年2月|近年}}の [[Microsoft Windows|Windows]] にはほとんどにJavaがインストールされているため、あまり普及していない。 -->== Javaへの批判 ==
{{main|Javaに対する批判}}
;'''言語設計'''
{{see also|C SharpとJavaの比較}}
 
'''動作性能'''
Javaに対しては、優れた技術だと評価する人々がいる一方で、批判も少なくない。Javaは、[[ソフトウェア]]に関する複雑さを管理する問題に対して、革新的な方法を提供するという目標の下で、開発された。多くの人々は、Java技術は、この期待に対して満足できる答えを提供したと評価している。しかしJavaにも欠点が無いわけではない。Javaは、どのようなプログラミング作法にも適応しているわけではない。また、どのような環境や要件にも普遍的に適応しているわけではない。
 
Javaに対する批判を大まかに記述する。
 
;実行性能
{{main|Javaの性能}}
公開初期のJava仮想マシンは動作速度の遅さと必要メモリリソースの大きさを指摘される機会が多かったが、[[ジャストインタイムコンパイラ|その場しのぎコンパイル(''just-in-time compilation'')]]技術の導入とその改善の積み重ねによって、ネイティブコード実行とさほど遜色の無い動作速度が得られるようになった。メモリ消費量にもそれなりの抑制が見られたが、こちらは仮想マシン機能の巧みな取捨選択で実現されているケースが多く、またある程度はハードウェア環境の進化にも依存していた。現在のJava仮想マシンは動作速度面で概ね好評を得ており、またメモリリソース面でもそれほど問題は指摘されていない。
Javaの初期のバージョンでは、[[C言語|C]]や[[C++]]などの[[ネイティブ]]に[[コンパイラ|コンパイル]]する言語と比べて、とても実行が遅く[[主記憶装置|メモリ]]の消費が激しいとして、批判されることが多かったが、{{いつ範囲|date=2017年10月|近年}}のバージョンでは改善されてきている。{{いつ範囲|date=2019年2月|近年}}の[[Java仮想マシン]]で採用している[[ジャストインタイムコンパイル方式|ジャストインタイムコンパイラ]]や動的再コンパイルの実行性能は、従来の言語のネイティブコンパイラとほぼ同じ水準の実行性能かそれ以上を達成することがある。これは頻繁にメモリアクセスを行う[[プログラム (コンピュータ)|プログラム]]においてJavaの[[ガベージコレクション]]の技術が、[[C言語|C]]の[[malloc]]や[[free]]よりも高い性能を発揮できることによる。こうした事情から、Javaの実行性能については、議論の対象となっている。
 
;'''ルックアンドフィール'''
[[Look and feel|ルックアンドフィール]]に関して、Javaの[[Swing]]の[[ウィジェット・ツールキット|ツールキット]]を使った[[グラフィカルユーザインタフェース]] (GUI) を備えたアプリケーションの既定のルックアンドフィールが、従来のネイティブなアプリケーションとは大きく異なるため、エンドユーザの人々にとってJavaのGUIアプリケーションはなじみにくいと批判されることがある。Javaではプラグイン可能なルックアンドフィールの機構を備えており、サンは [[Microsoft Windows|Windows]]、[[macOS]]および[[Motif (GUI)|Motif]]の各ルックアンドフィールのクローンを提供した。そのため、Swingの既定のルックアンドフィールではなく、プラットフォームネイティブと同様のルックアンドフィールでJavaのアプリケーションを動かすよう指定することができる。しかしエンドユーザにとってこの指定方法は簡単ではないと指摘されることがある。
 
[[Look and feel|ルックアンドフィール]]とは、アプリケーションにおけるインターフェース部分の見た目であり、クロスプラットフォーム指向で開発されたJavaは、特定のデザインに依存しない方針を貫いていた為、公開当初から比較的長い期間に渡ってGUI部分の欠点を指摘される事が多かった。サン社は、設計的には洗練されていたが見た目はまだ不十分であった汎用GUIライブラリである[[Swing]]を公開した後に、[[Microsoft Windows|Windows]]、[[macOS]]、[[Motif (GUI)|Motif]]といった各OSの見た目仕様をSwingの表示処理に適用出来るクラスライブラリ用の[[プラグイン|プラグイン(差し替えコード)]]を提供するようになった。しかし、これは同時にエンドユーザー側に一定のインストール手順を求める頻雑性の課題を残す事になった。
;言語設計
言語の設計(デザイン)に対する批判をいくつかの側面から述べる。
 
'''バージョン間の互換性'''
Javaの設計者は、他の[[プログラミング言語]]では備えているいくつかの機能をJavaから排除した。利便性より言語設計の簡潔さを優先した結果だが、こうした設計上の判断については賛否が分かれている。
*[[多重継承]]
*[[演算子]]の[[多重定義|オーバーロード]]
*[[プロパティ]]
*タプル (tuple)
 
またJavaではバージョン間の[[下位互換]]性・[[上位互換]]性の問題が議論の対象になっている。Javaではバージョン間の互換性をある程度の水準まで達成している。しかし、バージョンの異なる実行環境の取り扱いには課題が残っている。たとえば J2SE 1.4実行環境用に書かれたプログラムは、実行環境にJ2SE 1.3を想定すると明示的に指定してコンパイルしなければJ2SE 1.3実行環境では動かず、利用する[[ライブラリ]]がJ2SE 1.4以降から追加されたものである場合にはJ2SE 1.3実行環境での実行を諦めなければならない。J2SE 1.3からの上位互換性は、J2SE 5.0まで保証されている。J2SE 1.3以降のJavaプログラムでは下位互換性は保証されないが、Java実行環境 (JRE) の自動アップデート機能によって仮想マシンを最新バージョンにアップデートすれば解決できる。--><!--ただし1.1, 1.2時代のJavaプログラムの場合、下位互換性だけでなく、上位互換性問題に引っかかる可能性がある。--><!--JDK 1.1、J2SE 1.2時代のJavaプログラムは、現在となっては古いため、上位互換性問題に引っかかる可能性がある。
また、Javaは、[[Smalltalk]]のように「純粋な」[[オブジェクト指向プログラミング言語]]ではないとして、設計の一貫性のなさを批判されることがある。たとえばJavaには、プリミティブ型という、クラス型(参照型)ではないものがある。Javaの設計者は、実行性能上の理由から、意図的にプリミティブ型をJavaに導入した。例えば、<code>int</code>型などの組み込み型がプリミティブ型に相当する。<code>int</code>型の値はオブジェクトではなく、これをクラス型のオブジェクトとして扱うには、ラッパーである<code>Integer</code>クラス型への変換(ボクシング)が必要になる。J2SE 5.0以降では[[オートボクシング]]により、プリミティブ型と、それに対応するボックスクラス型の間のやりとり(変数への代入や値の参照など)は、コンパイラによって自動的に行われるようになり、[[ソースコード]]上の煩雑さは軽減されたが、本質的に同じものを指すはずのデータ型が複数存在するという矛盾や、組み込み配列型以外のコレクションにプリミティブ型を格納する際の空間的オーバーヘッドの問題を依然として抱えたままである。
 
一方で、C++のように名前空間レベルのメソッドやフィールド(クラスに属さないフリー関数や[[グローバル変数]])を定義できず、必ずクラス定義が必要であることから、クラスを定義する側も利用する側も記述量が肥大化しがちである。J2SE 5.0 では、メソッドとフィールドのstaticインポートを行えるようになり、クラス修飾なしでstaticメンバーを利用できるようになった。しかしstaticインポートを不用意に使うとソースコードを判読困難にする可能性がある。サン / JCPはstaticインポートを適切に使用するガイドラインを合わせて公開した<ref>[https://docs.oracle.com/javase/jp/1.5.0/guide/language/static-import.html static のインポート]</ref>。
 
なお、[[C Sharp|C#]]は[[Delphi]]の設計思想を取り入れた言語であり、登場当初からプロパティをサポートしている。演算子オーバーロードについても、C++より限定的ではあるがサポートされる。そのほか、Javaで問題視されていたプリミティブ型の扱いやジェネリクスなどに対して、C#は独自の解決策を提示している。
 
{{see also|C SharpとJavaの比較}}
 
;クラスパス
一般に、Javaプログラムを実行する際、-classpathオプションを使用するか、[[環境変数]]の[[クラスパス]] (CLASSPATH) を必要に応じて適切に設定する必要がある。クラスパスを指定すると、既定のカレントディレクトリという設定が上書きされる。したがって、クラスパスを変更するソフトをインストールするなど設定を変えられた場合は、Java実行環境は正しくJavaプログラムを実行することができなくなることがある。このため Javaを使い始めた人々は、クラスパスについて戸惑うことがある。サンは-classpathオプションを指定する方法を推奨していた。{{要出典|date=2018-08}}
 
;移植性・互換性
Javaは高い[[移植性]]と[[互換性]]を実現するべく開発されており、ある程度の水準まで達成しているが、課題が残っている。Javaのバージョン間の[[下位互換]]性・[[上位互換]]性が完全ではないことが問題として議論の対象になっている。Javaは高い移植性を保つため、一部のプラットフォームにしかない独自の機能はJavaからは使えない。[[Java Native Interface]] (JNI) を経由することで、C/C++言語などを利用して特定のプラットフォーム固有あるいはプロセッサ独自の機能にアクセスすることはできるが、その場合はJavaによる移植性や互換性の恩恵は得られなくなる。
<!--
 
=== 移植性・互換性に対する批判 ===
「[[Write once, run anywhere]]」(WORA、一度書けばどこでも動く)という言葉があるとおり、Javaの目標の一つに[[プラットフォーム (コンピューティング)|プラットフォーム]]非依存が挙げられる。[[Javaコンパイラ]]は[[Java仮想マシン]]用の中間言語([[バイトコード]])を生成する。[[コンパイル]]されたJavaのプログラムは、Java仮想マシンを実行環境として動作する。この仮想マシンがハードウェア間の差異を吸収することで、プラットフォーム非依存を実現している。ただし、現時点では一部に[[プラットフォーム (コンピューティング)|プラットフォーム]]依存の部分があり、完全な[[プラットフォーム (コンピューティング)|プラットフォーム]]非依存ではない。
 
また、マルチプラットフォームにするということは、一部のプラットフォームにしかない独自の機能はJavaから使えないことを意味する。たとえば [[Microsoft Windows|Windows]]用グラフィックス [[アプリケーションプログラミングインタフェース|API]]、[[Microsoft DirectX|DirectX]]はJavaから直接呼び出すことはできない。そのため、橋渡しをするための拡張[[アプリケーションプログラミングインタフェース|API]]が提供されている。
 
またJavaではバージョン間の[[下位互換]]性・[[上位互換]]性の問題が議論の対象になっている。Javaではバージョン間の互換性をある程度の水準まで達成している。しかし、バージョンの異なる実行環境の取り扱いには課題が残っている。たとえば J2SE 1.4実行環境用に書かれたプログラムは、実行環境にJ2SE 1.3を想定すると明示的に指定してコンパイルしなければJ2SE 1.3実行環境では動かず、利用する[[ライブラリ]]がJ2SE 1.4以降から追加されたものである場合にはJ2SE 1.3実行環境での実行を諦めなければならない。J2SE 1.3からの上位互換性は、J2SE 5.0まで保証されている。J2SE 1.3以降のJavaプログラムでは下位互換性は保証されないが、Java実行環境 (JRE) の自動アップデート機能によって仮想マシンを最新バージョンにアップデートすれば解決できる。--><!--ただし1.1, 1.2時代のJavaプログラムの場合、下位互換性だけでなく、上位互換性問題に引っかかる可能性がある。--><!--
JDK 1.1、J2SE 1.2時代のJavaプログラムは、現在となっては古いため、上位互換性問題に引っかかる可能性がある。
 
その場合は、そのJavaプログラムを作った者に最新版のJavaコンパイラでもコンパイルが通るように直してもらうしかない。この問題も、[[オラクル (企業)|]]のJavaコーディング規約をJava[[プログラマ]]が守っていればほぼ起きることがなく、Javaソースコード上のimport宣言や新しく加わった[[予約語 (Java)|Javaキーワード]] (enum や assert) と被るものが無ければほぼ心配することもなくなる。とくに、多くの場合において、これらの問題はコーディング規約だけでなく、[[統合開発環境|IDE]]や[[CheckStyle]]、[[FindBugs]]など各種ツールなどによって解決できるケースがある。Javaプログラマは、日頃から [[CheckStyle]] や [[FindBugs]] を使って[[プログラミング]]していれば、上位互換性にぶち当たる可能性は大幅に下がる。
 
===その他===
*'''2億9千万年問題''': 西暦[[2000年]]近辺で[[2000年問題]]が話題になった当時には「Javaには2000年問題は存在しない」と言われていたが、2億9千万年問題と言われるものが存在する。西暦[[292,471,208年]]には時刻が桁溢れを起こし西暦[[1970年]]に戻ってしまうという問題だが、遠い未来の話であるため、それほど批判の対象にまでは至っていない。仮に3億年後の未来を扱った計算を行う場合があったとして、別の対応策があるため気にするほどのことではない。
-->
 
== Java認定資格 ==
869 ⟶ 837行目:
 
== 外部リンク ==
=== '''オラクル・JCP関連 ==='''
 
*[https://java.com/ja/ Java.com] {{Ref-ja}} - Javaのユーザー向け公式サイト
*[https://home.java.net/ Java.net] {{Ref-en}} - Javaの技術者向け公式サイト
879 ⟶ 848行目:
**[http://docs.oracle.com/cd/E26537_01/tutorial/ Java チュートリアル]
 
=== '''技術情報 ==='''
 
*[http://www.atmarkit.co.jp/fjava/ @IT: Java Agile] {{Ref-ja}} - Java技術者のための情報提供/情報交換フォーラム
*[http://www.ibm.com/developerworks/jp/java/ IBM developerWorks Java technology] {{Ref-ja}} - IBM developerWorks の開発者向けの記事