本ページはプロモーションが含まれています

Java入門

JavaのAPIとは? 基本と使い方入門

トム

・都内自社開発IT企業勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

Javaプログラミングの学習を始めると、必ず「API」という言葉に出会います。私自身、Javaを学び始めたころ、「APIってライブラリと何が違うの?」と混乱した経験があります。しかし、多くの実務プロジェクトに関わる中で、APIこそがJava開発の「共通言語」であり、開発効率を飛躍的に高めるカギだと気づきました。

この記事は、過去の私のように「JavaのAPIについて知りたい」「JavaAPIって結局なに?」「どうやって使えばいいの?」と疑問を持つ初学者の方に向けて書いています。

この記事を読み終えるころには、APIの基本的な意味がわかり、公式ドキュメントを参照しながら自分でAPIを使えるようになります。開発効率が格段に上がる第一歩を、一緒に踏み出しましょう。

JavaのAPIとは?基本をわかりやすく解説

APIは、Javaでプログラミングをするうえで欠かせない「道具」です。まずはその基本的な概念から見ていきましょう。

APIの意味とJavaでの役割

APIは「Application Programming Interface(アプリケーション・プログラミング・インターフェース)」の略です。日本語に直訳すると「プログラム同士をつなぐ接点(インターフェース)」となります。

少しわかりにくいかもしれません。APIを「レストランのメニュー」と例えてみましょう。

あなたが客(開発者)で、厨房(Javaの機能)に料理(処理)を注文したいとします。あなたは厨房に直接入って「この肉をこう切って、この火加減で焼いて」とは指示しません。代わりに「メニュー(API)」を見て、「ハンバーグ(メソッド)をください」と注文します。

すると、厨房では決められた手順(プログラム)でハンバーグが作られ、あなたのもとに提供(戻り値)されます。

JavaにおけるAPIとは、まさにこの「メニュー」のようなものです。Javaが標準で用意している便利な機能(日付の計算、ファイルの読み書き、ネットワーク通信など)を、開発者が簡単な「注文(呼び出し)」で使えるように定めた「機能の呼び出し方」のルール集です。

ライブラリとの違い

APIと非常によく似た言葉に「ライブラリ」があります。この2つは密接に関連していますが、意味は異なります。

  • ライブラリ :便利な機能やプログラムコードを、再利用しやすいように「まとめたもの」。機能の「部品セット」そのものです。
  • API :そのライブラリを使うための「呼び出し方」や「使い方」を定めた規約。ライブラリの「説明書」や「窓口」にあたります。

先ほどの例えで言えば、厨房にある食材や調理器具、そして料理人の集団が「ライブラリ」です。そして、あなたが注文するために使う「メニュー」が「API」です。

私たちはライブラリという「実体」を使うために、APIという「使い方」を経由してアクセスします。Java開発では、この2つを厳密に区別せず、「便利な機能群」という意味で「標準API」や「標準ライブラリ」と呼ぶことも多いです。

なぜAPIを理解することが重要なのか

APIの理解がJava学習者にとって非常に重要な理由は、開発効率が劇的に向上するからです。

もしAPIが存在しなければ、日付の計算やインターネット通信といった複雑な処理を、すべて自分でゼロから開発しなくてはなりません。これは膨大な時間と労力がかかります。

しかし、Javaには優秀な開発者たちが作った、信頼性の高いAPIが最初から用意されています。

  • 「今日から3日後の日付を知りたい」
  • 「この文字列から "abc" だけ取り出したい」
  • 「Webサイトの情報を取得したい」

これらすべて、APIを1行か数行呼び出すだけで実現できます。すでに存在する便利な機能を「車輪の再発明」することなく、自分の作りたいアプリケーションの核心部分に集中できます。

APIを使いこなすことは、Javaという言語の膨大な資産(機能)を使いこなすことと同義なのです。

Javaの代表的なAPIを紹介

Javaには、JDK (Java Development Kit) をインストールするだけで使える「標準API」が数多く存在します。ここでは、開発で必ずと言っていいほど使う、代表的なAPIを4つの分野に分けて紹介します。

標準ライブラリAPI(java.lang / java.util など)

Javaプログラミングの根幹をなす、最も基本的なAPI群です。

java.lang

java.lang パッケージは、Java言語の核となるクラスを含みます。このパッケージのAPIは重要であり、開発者が import 文を記述しなくても自動的に読み込まれます。

  • String(文字列):Javaで最もよく使われるクラスです。「"こんにちは"` のような文字列を扱います。
    • length(): 文字数を返します。
    • equals(Object obj): 2つの文字列が同じ内容か比較します。
    • substring(int beginIndex): 指定した位置から最後までの文字列を切り出します。
String greeting = "Hello, World!";
int len = greeting.length(); // 13 (文字数)
boolean isEqual = greeting.equals("Hello, Java!"); // false (内容は異なる)
String sub = greeting.substring(7); // "World!" (7文字目以降を切り出し)

System.out.println(sub);
  • Integer, Double(数値):int (整数) や double (小数) といった基本データ型を、オブジェクトとして扱うためのラッパークラスです。文字列を数値に変換する際などによく使います。
    • Integer.parseInt(String s): 文字列を整数 (int) に変換します。
  • System(システム):システムの標準入出力や、現在時刻の取得など、システム関連の機能を提供します。
    • System.out.println(String s): おなじみの、コンソールに文字列を出力するAPIです。
  • Math(数学):数学的な計算を行うための静的メソッドを提供します。
    • Math.random(): 0.0以上 1.0未満の乱数(ランダムな小数)を生成します。
    • Math.max(int a, int b): 2つの数値のうち大きい方を返します。

java.util

java.util パッケージは、開発を便利にするユーティリティ(道具)クラスが集まっています。特にデータの集まり(コレクション)を扱うAPIが重要です。

  • ArrayList(リスト):順序を保持するデータの集まり(リスト)を扱います。配列と似ていますが、要素の数を後から自由に追加したり削除したりできます。
    • add(E e): リストの末尾に要素を追加します。
    • get(int index): 指定した位置(インデックス)の要素を取得します。
    • size(): リストに含まれる要素の数を返します。
  • HashMap(マップ):「キー」と「値」のペアでデータを管理するマップ構造を扱います。辞書のように、キー(単語)を使って値(意味)を高速に引き出せます。
    • put(K key, V value): キーと値のペアをマップに追加します。
    • get(Object key): 指定したキーに対応する値を取得します。
// HashMap の例
import java.util.HashMap;

HashMap<String, Integer> prices = new HashMap<String, Integer>();
// キー(商品名)と値(価格)をペアで追加
prices.put("りんご", 150);
prices.put("みかん", 100);

// キーを使って値を取得
int priceOfApple = prices.get("りんご"); // 150 が返る
System.out.println("りんごの価格: " + priceOfApple);
  • Date, Calendar(日付) ※旧API日付や時刻を扱うAPIです。ただし、これらは設計が古く使いにくい面があり、Java8以降は java.time パッケージ(LocalDate, LocalDateTime など)の使用が推奨されます。

ネットワーク系API(java.net)

インターネット通信やネットワーク関連の処理を行うためのAPI群です。

  • java.net.URL: WebサイトのURLを扱うクラス。URL先の情報を開くことができます。
  • java.net.Socket: コンピュータ間で直接データを送受信する「ソケット通信」を行うためのAPI。チャットアプリケーションやオンラインゲームなどで使われます。

ファイル操作系API(java.io / java.nio)

コンピュータ上のファイルを読み込んだり、新しいファイルに書き出したりするためのAPIです。

  • java.io (I/O):伝統的なファイル入出力APIです。データを1バイトずつ、または1文字ずつ順番に読み書きする「ストリーム」という概念に基づいています。
    • File: ファイルやディレクトリそのものを表します。
    • FileInputStream: ファイルからデータを読み込むためのストリーム。
    • FileWriter: ファイルに文字を書き込むためのクラス。
  • java.nio (New I/O):java.io を改良し、より効率的にデータを扱えるようにした新しいAPIです (Java 1.4 で登場)。
    • Files: ファイルのコピー、移動、読み書きなどを簡単に行える、非常に便利なユーティリティクラス。
    • Paths: ファイルやディレクトリの「パス(場所)」を簡単に扱うためのクラス。
    • java.io よりも java.nioFiles クラスを使った方が、少ないコードで安全にファイル操作を行えることが多いです。
// java.nio を使った簡単なファイル読み込み (Java 7以降)
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;

try {
    // "test.txt" の内容をすべて読み込む
    byte[] allBytes = Files.readAllBytes(Paths.get("test.txt"));
    // バイト配列を文字列に変換して表示
    String content = new String(allBytes);
    System.out.println(content);
} catch (IOException e) {
    // ファイルが見つからないなどのエラー処理
    e.printStackTrace();
}

Web開発でよく使うAPI(Servlet / Springなど)

これらはJava SEのAPIではなく、主にWebアプリケーション開発 (Java EE や外部ライブラリ) で使われるAPIです。

  • Servlet API :JavaでWebサーバー上で動作するサーブレットを作るための標準的なAPIです。Webリクエストを受け取り、Webレスポンスを返す機能を提供します。
  • Spring Framework:現代のJava Web開発で最も広く使われている「フレームワーク」です。Servlet APIを直接使うよりも、はるかに簡単かつ高機能なWebアプリケーションを開発できるように設計された、巨大なAPI群です。

APIの使い方を実例で理解する

APIは使い方を知らなければ活用できません。ここでは、APIの使い方を学ぶための手順を解説します。

APIドキュメントの読み方

APIの使い方は、すべて「公式APIドキュメント(Javadoc)」に詳細に記載されています。これはJava開発者にとっての「公式な辞書」です。

OracleのWebサイトなどで公開されており、すべて英語ですが、読むべきポイントは決まっています。

  1. パッケージとクラスを探す:左上のペインで、使いたい機能が含まれるパッケージ(例: java.util)を選び、次に左下のペインでクラス(例: ArrayList)を選択します。
  2. クラスの概要を読む:クラスが何をするためのものか、概要説明を読みます。
  3. メソッド概要を見る:そのクラスが持つメソッドの一覧を確認します。ここで「add」「get」など、目的の操作を探します。
  4. メソッド詳細を見る:使いたいメソッド名をクリックし、詳細を確認します。
    • 何をするか: メソッドの詳しい説明。
    • 引数(Parameters): そのメソッドを呼び出す際に渡す必要がある情報。
    • 戻り値(Returns): そのメソッドが処理結果として返す値(ない場合は void)。
    • 例外(Throws): そのメソッドが引き起こす可能性のあるエラー(例外)。

最初は難しく感じますが、この「4つのポイント」を意識してドキュメントを読む訓練を積むことが、API習得の最短ルートです。

APIを呼び出す基本構文

APIを使うためのコードの書き方は、基本的に決まっています。

  1. import 文:java.lang 以外のAPIを使う場合は、コードの先頭で「このパッケージの、このクラスを使います」と宣言(import)します。import java.util.ArrayList;
  2. インスタンス化(実体化):クラス(設計図)から、実際に使える「モノ(インスタンス)」を作ります。ArrayList<String> list = new ArrayList<String>();
  3. メソッド呼び出し:インスタンス化した「モノ」の機能(メソッド)を、「ドット(.)」でつないで呼び出します。list.add("りんご");

サンプルコードで学ぶAPI活用

java.util.ArrayList を使って、リストにデータを追加し、その内容を順番に表示するサンプルコードを見てみましょう。

// 1. 使うAPIを import 文で宣言
import java.util.ArrayList;

public class ApiExample {
    public static void main(String[] args) {
        
        // 2. ArrayListクラスをインスタンス化
        // <String> は「文字列(String)専用のリスト」という意味
        ArrayList<String> fruits = new ArrayList<String>();

        // 3. API (addメソッド) を呼び出してデータを追加
        fruits.add("りんご");
        fruits.add("みかん");
        fruits.add("ばなな");

        // 4. API (sizeメソッド) で要素数を取得
        System.out.println("くだものの数: " + fruits.size() + "個"); 

        // 5. API (getメソッド) を使って、リストの中身を順番に表示
        // (for文を使った繰り返し処理)
        for (int i = 0; i < fruits.size(); i++) {
            // i番目の要素を取得
            String fruitName = fruits.get(i);
            System.out.println(i + "番目: " + fruitName);
        }

        // 拡張for文 (forEach) を使うともっと簡潔に書けます
        System.out.println("--- 拡張for文での表示 ---");
        for (String fruitName : fruits) {
            System.out.println(fruitName);
        }
    }
}

実行結果:

くだものの数: 3個
0番目: りんご
1番目: みかん
2番目: ばなな
--- 拡張for文での表示 ---
りんご
みかん
ばなな

このように、add()get(), size() といった「API」を呼び出すだけで、リスト構造のデータ管理が簡単に実現できます。

オリジナルAPI(自作クラス)を作る方法

APIは、Javaが提供するものを使うだけではありません。開発プロジェクトが大きくなると、チーム内で共通して使う「オリジナルAPI(自作の便利なクラス)」を作ることが一般的です。

APIを設計する考え方

良いAPIとは、「使う人が迷わず、安全に使える」ものです。設計する際は、使う人の視点に立つ必要があります。

  • 単一責任の原則:1つのクラス、1つのメソッドには、1つの役割だけを持たせます。ユーザー情報を扱うクラスに、商品計算のメソッドを入れるべきではありません。
  • わかりやすい命名:メソッド名や変数名は、その機能が一目でわかるように命名します(例: getUserName(), calculateTotalPrice())。
  • カプセル化(情報を隠す):クラスの内部だけで使う変数 (フィールド) は private にして隠します。外部からは決められたAPI(メソッド)経由でしかアクセスできないように制限します。
// カプセル化の例
public class User {
    // private にして外部から直接変更できないようにする
    private String name;
    private int age;

    // コンストラクタ (APIの一つ)
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 外部が名前を取得するためのAPI (ゲッター)
    public String getName() {
        return this.name;
    }

    // 外部が年齢を取得するためのAPI (ゲッター)
    public int getAge() {
        return this.age;
    }

    // 外部が年齢を変更するためのAPI (セッター)
    // ここで「年齢は0歳未満にはできない」というルールを強制できる
    public void setAge(int age) {
        if (age >= 0) {
            this.age = age;
        }
    }
}

getName()setAge(int age) が、この User クラスの「API」です。

再利用性を高めるポイント

自作APIを、他の場所でも使い回せるようにには、汎用性が重要です。

  • 特定の値に依存しない:if (userId == 100) のように、特定の数値をコードに直接書かないようにします。必要な値は、メソッドの「引数」として外部から渡してもらう設計にします。
  • 依存関係を疎にする:そのクラスが、他の特定のクラスがないと動かない、という状態(密結合)を避けます。できるだけ独立して機能するように設計します。

パッケージ化して他プロジェクトでも使う

作成した自作APIは、「パッケージ」としてまとめます。

package com.mycompany.util;のように、package 宣言をクラスファイルの先頭に書きます。

これらの .class ファイル群を JAR という形式のファイル(実体はZIPファイル)に圧縮・アーカイブします。

この JARファイル を、他のJavaプロジェクトの「ライブラリ」として追加すれば、どのプロジェクトからでも自作APIを import して呼び出せるようになります。

APIを活用するときの注意点

APIは非常に便利ですが、活用する際にはいくつか注意すべき点があります。これらを知らないと、思わぬ不具合やセキュリティ問題につながる危険があります。

バージョン差異による非推奨(Deprecated)問題

Javaは非常に歴史の長い言語であり、約半年に1回のペースでバージョンアップが続いています。その過程で、古いAPIは「非推奨(Deprecated)」となることがあります。

非推奨とは、「このAPIは設計が古いか問題があるため、将来のバージョンで削除されるかもしれません。代わりに新しいAPIを使ってください」という印です。

非推奨のAPIを使うと、EclipseやIntelliJ IDEAなどの開発ツール(IDE)で、メソッドに取り消し線が表示されたり、コンパイル時に警告が出たりします。

警告を無視して使い続けることもできますが、推奨されません。APIドキュメントで、代替となる新しいAPI(例えば Date に対する LocalDate)を調べ、そちらへ移行するようにしましょう。

例外処理のベストプラクティス

APIを呼び出すと、常に成功するとは限りません。

例えば、java.io APIでファイルを開こうとした際に、「指定されたファイルが存在しなかった」という予期せぬエラーが発生する可能性があります。

Javaでは、このようなエラーを「例外(Exception)」と呼びます。例外が発生する可能性があるAPIは、try-catch ブロックで囲み、エラーが発生した際の対処(例外処理)を記述することが文法的に強制されます(検査例外)。

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;

public class ExceptionExample {
    public void readFile(String fileName) {
        
        // FileReader や readLine は例外を発生させる可能性があるAPI
        try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
            
            String line = reader.readLine(); // 1行読むAPI
            System.out.println(line);

        } catch (FileNotFoundException e) {
            // ファイルが見つからなかった場合のAPIエラー処理
            System.err.println("エラー: " + fileName + " が見つかりません。");

        } catch (IOException e) {
            // その他の入出力エラー処理
            System.err.println("エラー: ファイルの読み込みに失敗しました。");
            e.printStackTrace(); // エラーの詳細ログを出力
        }
        // try-with-resources文 (Java 7以降) を使うと、
        // reader.close() という終了処理を自動で行ってくれます。
    }
}

APIドキュメントの「Throws」セクションには、そのAPIがどの例外を投げる可能性があるか記載されています。APIを使う際は、必ず例外処理もセットで考える必要があります。

外部API利用時のセキュリティとライセンス

Java標準API以外にも、世界中の開発者が作った便利な外部APIが数多く存在します (例: Apache Commons, Spring, Log4j)。

これらを利用する際は、2つの点に重大な注意が必要です。

ポイント

  1. セキュリティ:その外部APIに脆弱性が見つかることがあります。特に有名なライブラリ(例: Log4j)で脆弱性が見つかると、世界中のシステムが攻撃対象となる大きな事件に発展することがあります。利用するAPIは、常に最新の安定バージョンを使うように心がけ、脆弱性情報を定期的にチェックする習慣が重要です。
  2. ライセンス(利用許諾):外部APIは、作者によって「利用ルール」が定められています。
    • Apache License 2.0MIT License など: 比較的制約が緩く、商用利用でも使いやすいライセンス。
    • GPL (GNU General Public License) など: このライセンスのAPIを使って作ったプログラムは、ソースコードの公開を求められる(など、強い制約がかかる場合があります。

会社の製品開発などで外部APIを使う際は、そのライセンスが自社の利用目的に合っているか、法務部門などに確認することが不可欠です。

まとめ|JavaのAPIを理解すれば開発効率が上がる

APIは、Javaで効率的かつ高品質な開発を行うための「強力な武器」です。APIという「巨人の肩に乗る」ことで、複雑な処理を自分で実装する手間を省き、本当に作りたい機能の開発に集中できます。

APIを制する者がJava開発を制すると言っても過言ではありません。

APIを習得するための学習ステップ

  1. 基本APIを使い倒す:まずは java.lang.String と java.util.ArrayList, java.util.HashMap の使い方を徹底的にマスターしましょう。これらだけで出来ることが格段に増えます。
  2. APIドキュメントを読むことに慣れる:わからないAPIが出てきたら、すぐに検索エンジンに頼るのではなく、まず「公式APIドキュメント(Javadoc)」を開く癖をつけます。英語に抵抗があるかもしれませんが、読むべきポイントは決まっています。
  3. 分野別APIに進む:基本が固まったら、自分が作りたいもの(WebアプリならServletやSpring、ファイル操作なら java.nio)のAPI学習に進みます。
  • この記事を書いた人
  • 最新記事

トム

・都内自社開発IT企業勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

-Java入門