クライアントの一言で、私のAPI観が変わった話
2019年の秋だった。私が受けてた案件のクライアントから、こんな相談が来た。
「うちのシステム、外部サービスと連携したいんだけど、APIってどう作ればいいの?RESTとかGraphQLとか、よく聞くんだけど違いがわからなくて」
正直、その時の私は「RESTで作っとけば大丈夫でしょ」くらいの認識だった。実際、それまで作ってきたAPIは全部REST。GraphQLは名前を聞いたことがある程度。
でも、この案件をきっかけに、RESTとGraphQLの両方を実装することになった。で、実際に使い分けてみて気づいた。「これ、全然違うじゃん」って。

それから5年。今では、案件の要件に応じてRESTとGraphQLを使い分けてる。副業でAPI開発の案件も何件も受けてきた。単価は高いし、需要も多い。正直、API設計ができると副業の選択肢がめちゃくちゃ広がる。
この記事では、「APIって何?」「RESTとGraphQLって何が違うの?」「どっちを使えばいいの?」って疑問を持ってる人に向けて、現場で使える知識を話していく。
プログラミング学習してる人、Web開発の副業で稼ぎたい人、フロントエンド・バックエンド問わず、API設計は絶対に押さえておくべきスキル。特に、副業案件では「API連携できます」って言えるだけで、単価が1.5倍になることもある。
実際、私がメンターしてる受講生の中にも、API開発を学んでから案件単価が10万円から15万円に上がった人がいる。それくらい、現場で求められてるスキルなんだよね。
そもそもAPIって何なのか?
APIの基本概念
API(Application Programming Interface)。直訳すると「アプリケーション・プログラミング・インターフェース」。でも、これだけじゃ全然わからないよね。
私が初心者に説明するときは、こう言ってる。
「APIは、レストランの注文システムみたいなもの」
レストランで料理を注文するとき、客は厨房に直接入らない。メニューを見て、ウェイターに注文する。ウェイターが厨房に伝えて、料理ができたら客に届ける。
この「ウェイター」がAPI。客(フロントエンド)と厨房(バックエンド)の間に立って、やり取りを仲介してくれる存在。
プログラミングの世界で言うと:
- 客:Webブラウザやスマホアプリ
- ウェイター:API
- 厨房:データベースやサーバー処理
APIがあることで、フロントエンドは複雑なサーバー処理を意識しなくていい。「このデータが欲しい」ってリクエストを送れば、APIが適切な形で返してくれる。
Web APIの仕組み
Web開発で使うAPIは、HTTP通信を使ってデータをやり取りする。
基本的な流れ:
- クライアント(ブラウザ)がサーバーにリクエストを送る
- サーバーが処理を実行
- サーバーがレスポンスを返す
- クライアントが受け取ったデータを表示
例えば、Twitterで「タイムラインを表示」ってボタンを押すと:
- ブラウザが「タイムライン取得」のAPIリクエストを送る
- Twitterサーバーがデータベースから投稿を取得
- JSON形式でデータを返す
- ブラウザが画面に表示
この一連の流れを、開発者は設計しないといけない。
APIのメリット
なぜAPIが必要なのか。直接データベースにアクセスすればいいんじゃないの?って思うかもしれない。
でも、APIには重要なメリットがある:
1. セキュリティ
データベースに直接アクセスさせると、全データが見られちゃう。APIを使えば、「このユーザーはこのデータだけアクセスOK」って制御できる。
2. 独立性
フロントエンドとバックエンドを分離できる。React、Vue、Angularなど、どんなフレームワークでも同じAPIを使える。
3. 再利用性
一度作ったAPIは、Web、iOS、Android、全部で使える。同じ処理を何度も書かなくていい。
4. メンテナンス性
バックエンドの処理を変えても、APIの仕様が同じなら、フロントエンドは変更不要。
私が最初にAPIの重要性を実感したのは、WordPressのREST APIを使ったとき。WordPressのデータを、Reactで作った別サイトで表示できた。この柔軟性に感動した。

なぜAPIスキルが副業で稼げるのか
API開発案件の需要が高い
Web開発案件の7割は、何らかの形でAPI連携が必要。
具体例:
- ECサイト:決済API連携
- 予約システム:カレンダーAPI連携
- SNS機能:認証API連携
- データ分析:外部データ取得API
クラウドワークスで「API開発」って検索すると、500件以上の案件が出てくる。しかも、単価が高い。
普通のWeb制作:10~30万円
API開発込み:20~50万円
差額の10~20万円は、API設計のスキル料。
実際、私が受けた案件で「既存サイトにAPI機能を追加」って依頼があった。作業時間20時間で報酬25万円。時給1万2500円。普通のコーディングより圧倒的に高単価。
フルスタックエンジニアへの近道
API設計ができると、フロントエンドもバックエンドも理解してることになる。つまり、フルスタックエンジニア。
フルスタックエンジニアの市場価値は高い。副業でも:
- フロントエンドのみ:時給2,000~3,000円
- バックエンドのみ:時給2,500~4,000円
- フルスタック:時給4,000~8,000円
API設計は、フロントとバックの橋渡し。両方の知識が必要だから、自然とフルスタックになれる。
私自身、もともとフロントエンド寄りだった。でもAPI設計を学んだことで、バックエンドの処理も理解できるようになった。結果、案件単価が1.5倍になった。
学習コストが比較的低い
API設計って、難しそうに聞こえる。でも実際は、基本を押さえれば初心者でも理解できる。
必要な前提知識:
- HTML/CSSの基礎
- JavaScriptの基礎
- HTTPリクエストの概念
- JSONデータ形式
これだけ。特別な数学もいらないし、難しいアルゴリズムもいらない。
私がメンターしてる受講生で、プログラミング学習3ヶ月目でAPIを使った簡単なアプリを作った人がいる。完全未経験から3ヶ月。十分可能。
学習期間の目安:
- API基礎理解:1週間
- REST API実装:2~3週間
- GraphQL基礎:1~2週間
- 実践プロジェクト:1ヶ月
合計2~3ヶ月で、副業で使えるレベルになる。
REST APIの基礎と実践
RESTとは何か
REST(Representational State Transfer)。2000年にRoy Fieldingが提唱したアーキテクチャスタイル。
専門用語抜きで説明すると、「URLとHTTPメソッドを使って、リソースを操作する方法」。
RESTの特徴:
- URLでリソースを表現
- HTTPメソッド(GET、POST、PUT、DELETE)で操作を表現
- ステートレス(状態を保持しない)
例えば、ブログシステムのAPI:
GET /api/posts # 記事一覧を取得
GET /api/posts/1 # ID=1の記事を取得
POST /api/posts # 新規記事を作成
PUT /api/posts/1 # ID=1の記事を更新
DELETE /api/posts/1 # ID=1の記事を削除
URLを見れば、何をするAPIかわかる。これがRESTの美しさ。
RESTの設計原則
RESTには、いくつかの設計原則がある。
1. リソース指向
APIはリソース(データ)を中心に設計する。動詞じゃなく、名詞で表現。
悪い例:
GET /api/getPosts
POST /api/createPost
良い例:
GET /api/posts
POST /api/posts
2. HTTPメソッドの適切な使用
- GET:データ取得(安全、冪等)
- POST:新規作成(非冪等)
- PUT:更新(冪等)
- DELETE:削除(冪等)
冪等(べきとう)ってのは、「何度実行しても結果が同じ」って意味。GETは何度実行してもデータは変わらない。POSTは実行するたびに新しいデータが作られる。
3. ステートレス
サーバーはクライアントの状態を保持しない。毎回のリクエストに必要な情報を全部含める。
例:認証トークンを毎回送る
fetch('/api/posts', {
headers: {
'Authorization': 'Bearer token123'
}
})
4. 階層構造
リソースの関係を階層で表現。
GET /api/users/1/posts # ユーザー1の投稿一覧
GET /api/posts/1/comments # 投稿1のコメント一覧
REST APIの実装例
実際にNode.jsとExpressでシンプルなREST APIを作ってみる。
const express = require('express');
const app = express();
// JSONパースミドルウェア
app.use(express.json());
// ダミーデータ
let posts = [
{ id: 1, title: '最初の投稿', content: 'こんにちは' },
{ id: 2, title: '2つ目の投稿', content: 'REST APIを学んでいます' }
];
// 記事一覧取得
app.get('/api/posts', (req, res) => {
res.json(posts);
});
// 特定の記事取得
app.get('/api/posts/:id', (req, res) => {
const post = posts.find(p => p.id === parseInt(req.params.id));
if (!post) {
return res.status(404).json({ error: '記事が見つかりません' });
}
res.json(post);
});
// 記事作成
app.post('/api/posts', (req, res) => {
const newPost = {
id: posts.length + 1,
title: req.body.title,
content: req.body.content
};
posts.push(newPost);
res.status(201).json(newPost);
});
// 記事更新
app.put('/api/posts/:id', (req, res) => {
const post = posts.find(p => p.id === parseInt(req.params.id));
if (!post) {
return res.status(404).json({ error: '記事が見つかりません' });
}
post.title = req.body.title || post.title;
post.content = req.body.content || post.content;
res.json(post);
});
// 記事削除
app.delete('/api/posts/:id', (req, res) => {
const index = posts.findIndex(p => p.id === parseInt(req.params.id));
if (index === -1) {
return res.status(404).json({ error: '記事が見つかりません' });
}
posts.splice(index, 1);
res.status(204).send();
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
このコード、100行以下だけど、基本的なCRUD操作(作成・取得・更新・削除)が全部できる。
フロントエンドからの呼び出し例:
// 記事一覧取得
const response = await fetch('/api/posts');
const posts = await response.json();
// 新規記事作成
await fetch('/api/posts', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: '新しい記事',
content: '内容です'
})
});
シンプルでわかりやすい。これがRESTの強み。

RESTのメリットとデメリット
メリット
- シンプルで理解しやすい
- HTTPの標準機能を使うだけ
- キャッシュが効きやすい
- ツールやライブラリが豊富
- 学習コストが低い
デメリット
- オーバーフェッチング(必要以上のデータが返ってくる)
- アンダーフェッチング(複数回リクエストが必要)
- エンドポイントが増えると管理が大変
- バージョン管理が必要
実際の案件で困ったのは、オーバーフェッチング。
例えば、ユーザー一覧を表示するとき、必要なのは「ID」「名前」「アイコン」だけ。でもREST APIは、ユーザーの全情報(メールアドレス、住所、電話番号…)を返してくる。
モバイルアプリだと、この無駄なデータ転送が問題になる。通信量が増えるし、表示が遅くなる。
この問題を解決するために登場したのが、GraphQL。
GraphQLの基礎と実践
GraphQLとは何か
GraphQL。2015年にFacebookが公開したクエリ言語。
RESTと何が違うの?一言で言うと、「クライアントが必要なデータを指定できる」。
RESTの場合:
- サーバーが「このエンドポイントはこのデータを返す」って決める
- クライアントは受け取るデータを選べない
GraphQLの場合:
- クライアントが「このデータが欲しい」って指定する
- サーバーは指定されたデータだけを返す
レストランの例で言うと:
- REST:セットメニュー(決まった料理が出てくる)
- GraphQL:アラカルト(好きな料理を選べる)
GraphQLの基本構文
GraphQLでは、クエリを使ってデータを要求する。
例:ユーザー情報を取得
query {
user(id: 1) {
name
email
}
}
レスポンス:
{
"data": {
"user": {
"name": "田中太郎",
"email": "tanaka@example.com"
}
}
}
必要なフィールドだけ指定できる。nameとemailだけ欲しければ、それだけが返ってくる。
複数のリソースを一度に取得することもできる:
query {
user(id: 1) {
name
posts {
title
comments {
content
}
}
}
}
これ、RESTだと3回リクエストが必要。GraphQLなら1回で済む。
GraphQLのスキーマ定義
GraphQLでは、スキーマを定義する。スキーマは、「どんなデータを取得できるか」の設計図。
type User {
id: ID!
name: String!
email: String!
posts: [Post!]!
}
type Post {
id: ID!
title: String!
content: String!
author: User!
comments: [Comment!]!
}
type Comment {
id: ID!
content: String!
author: User!
}
type Query {
user(id: ID!): User
post(id: ID!): Post
posts: [Post!]!
}
type Mutation {
createPost(title: String!, content: String!): Post!
updatePost(id: ID!, title: String, content: String): Post!
deletePost(id: ID!): Boolean!
}
!は必須フィールドの意味。[Post!]!は「Post型の配列で、nullは許可しない」。
このスキーマが、APIの仕様書になる。クライアント側の開発者は、このスキーマを見れば何ができるかわかる。
GraphQL APIの実装例
Node.jsとApollo Serverで実装してみる。
const { ApolloServer, gql } = require('apollo-server');
// スキーマ定義
const typeDefs = gql`
type Post {
id: ID!
title: String!
content: String!
}
type Query {
posts: [Post!]!
post(id: ID!): Post
}
type Mutation {
createPost(title: String!, content: String!): Post!
deletePost(id: ID!): Boolean!
}
`;
// ダミーデータ
let posts = [
{ id: '1', title: '最初の投稿', content: 'こんにちは' },
{ id: '2', title: '2つ目の投稿', content: 'GraphQLを学んでいます' }
];
// リゾルバ(実際の処理)
const resolvers = {
Query: {
posts: () => posts,
post: (_, { id }) => posts.find(p => p.id === id)
},
Mutation: {
createPost: (_, { title, content }) => {
const newPost = {
id: String(posts.length + 1),
title,
content
};
posts.push(newPost);
return newPost;
},
deletePost: (_, { id }) => {
const index = posts.findIndex(p => p.id === id);
if (index === -1) return false;
posts.splice(index, 1);
return true;
}
}
};
// サーバー起動
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
console.log(`Server ready at ${url}`);
});
フロントエンドからの呼び出し例:
// Apollo Clientを使用
import { gql, useQuery } from '@apollo/client';
const GET_POSTS = gql`
query GetPosts {
posts {
id
title
}
}
`;
function PostList() {
const { loading, error, data } = useQuery(GET_POSTS);
if (loading) return <p>読み込み中...</p>;
if (error) return <p>エラー: {error.message}</p>;
return (
<ul>
{data.posts.map(post => (
<li key={post.id}>{post.title}</li>
))}
</ul>
);
}
RESTより少しコードは複雑だけど、柔軟性が段違い。

GraphQLのメリットとデメリット
メリット
- オーバーフェッチング・アンダーフェッチングの解消
- 1回のリクエストで複数リソース取得可能
- 型システムで安全
- 自動ドキュメント生成
- バージョン管理不要
デメリット
- 学習コストが高い
- キャッシュが複雑
- セキュリティ対策が必要(複雑なクエリ攻撃)
- サーバー側の実装が複雑
私が最初にGraphQLを触ったとき、正直「面倒くさい」って思った。RESTに比べて、設定することが多い。スキーマ書いて、リゾルバ書いて…。
でも、大規模なプロジェクトで使ってみて考えが変わった。フロントエンドの開発速度が全然違う。必要なデータを自由に取得できるから、バックエンドに「このAPIも追加して」って依頼する回数が激減した。
チーム開発だと、GraphQLの価値がより発揮される。
RESTとGraphQLの違いを徹底比較
データ取得の違い
REST
GET /api/users/1
→ { id, name, email, age, address, phone, ... }
全データが返ってくる。必要なのはnameだけでも。
GraphQL
query {
user(id: 1) {
name
}
}
→ { "data": { "user": { "name": "田中太郎" } } }
必要なフィールドだけ返ってくる。
複数リソース取得の違い
REST
GET /api/users/1 # ユーザー情報取得
GET /api/users/1/posts # 投稿一覧取得
GET /api/posts/1/comments # コメント一覧取得
3回リクエストが必要。
GraphQL
query {
user(id: 1) {
name
posts {
title
comments {
content
}
}
}
}
1回で済む。ネットワークの往復が減って、パフォーマンスが向上する。
エンドポイントの数
REST
リソースごとにエンドポイントが増える:
/api/users
/api/users/:id
/api/posts
/api/posts/:id
/api/comments
/api/comments/:id
/api/users/:id/posts
/api/posts/:id/comments
...
管理が大変。
GraphQL
エンドポイントは1つだけ:
POST /graphql
すべてのクエリとミューテーションを、この1つのエンドポイントで処理。
バージョン管理
REST
APIの仕様変更があると、バージョン管理が必要:
/api/v1/users
/api/v2/users
古いバージョンも維持しないといけない。
GraphQL
フィールドを追加・非推奨化できる:
type User {
name: String!
email: String! @deprecated(reason: "Use emailAddress instead")
emailAddress: String!
}
バージョン管理不要。徐々に移行できる。
型安全性
REST
型の定義はオプション。OpenAPI(Swagger)で定義することもあるけど、必須じゃない。
GraphQL
スキーマで型を厳密に定義。TypeScriptと相性が良い:
type User = {
id: string;
name: string;
email: string;
};
自動で型定義を生成できるツールもある。
キャッシュ
REST
HTTPキャッシュが使える。ブラウザやCDNでキャッシュできる:
GET /api/posts
Cache-Control: max-age=3600
GraphQL
デフォルトではキャッシュが効きにくい。全部POSTリクエストだから。Apollo Clientなどのライブラリで、独自のキャッシュ機構を実装する必要がある。
エラーハンドリング
REST
HTTPステータスコードでエラーを表現:
200 OK
404 Not Found
500 Internal Server Error
GraphQL
常に200 OKを返す。エラーはerrorsフィールドに:
{
"data": null,
"errors": [
{
"message": "ユーザーが見つかりません",
"path": ["user"]
}
]
}
これ、最初は戸惑った。エラーなのに200が返ってくるから。でも、慣れると「部分的な成功」を表現できるのが便利。
例えば、複数のクエリを送って、一部だけエラーになっても、成功した部分のデータは取得できる。
実践での使い分けガイド
RESTを選ぶべきケース
1. シンプルなCRUD操作
ブログ、ECサイト、管理画面など、基本的なデータ操作だけなら、RESTで十分。
実際の案件例:
- 飲食店の予約管理システム
- 社内の勤怠管理システム
- 商品カタログサイト
これらは、RESTで実装した方が早い。学習コストも低いし、実装も簡単。
2. 公開API
外部の開発者に使ってもらうAPIは、RESTの方がいい。理由は、理解しやすいから。
GitHubのAPIも、TwitterのAPIも、基本はREST。みんな使い慣れてる。
3. キャッシュを活用したい
ニュースサイトやブログなど、データの更新頻度が低いサイトは、キャッシュが重要。RESTならHTTPキャッシュが簡単に使える。
4. チームのスキルセット
チームメンバーがRESTに慣れてて、GraphQLの学習コストをかけられないなら、RESTを選ぶべき。
GraphQLを選ぶべきケース
1. 複雑なデータ関係
SNS、ダッシュボード、分析ツールなど、複数のリソースが複雑に絡み合ってる場合。
実際の案件例:
- プロジェクト管理ツール(プロジェクト → タスク → コメント → ファイル)
- ECサイトのダッシュボード(売上 → 商品 → カテゴリ → 在庫)
- 社内SNS(ユーザー → 投稿 → コメント → いいね → 通知)
これらは、GraphQLの方が圧倒的に開発しやすい。
2. モバイルアプリ
通信量を減らしたい場合。必要なデータだけ取得できるから、データ転送量が少なくて済む。
3. 頻繁にフロントエンドの要求が変わる
スタートアップとか、仕様変更が多いプロジェクト。GraphQLなら、バックエンドを変更せずに、フロントエンドだけで対応できることが多い。
4. 複数のクライアント
Web、iOS、Android、全部で同じAPIを使う場合。それぞれのクライアントが必要なデータだけ取得できる。

実際のプロジェクトでの使い分け
私が受けた案件の実例を紹介する。
案件A:飲食店の予約管理システム
- 選択:REST
- 理由:シンプルなCRUD操作だけ。予約の作成・確認・キャンセル。複雑なデータ関係なし。
- 開発期間:2週間
- 報酬:20万円
案件B:プロジェクト管理ツール
- 選択:GraphQL
- 理由:プロジェクト、タスク、コメント、ファイル、通知…複雑なデータ関係。フロントエンドの要求も頻繁に変わる。
- 開発期間:2ヶ月
- 報酬:80万円
案件C:ECサイトのリニューアル
- 選択:REST + GraphQL
- 理由:公開APIはREST(シンプルで外部開発者に理解しやすい)、管理画面はGraphQL(複雑なデータ操作)
- 開発期間:3ヶ月
- 報酬:120万円
ハイブリッドで使うことも多い。「全部REST」「全部GraphQL」って決める必要はない。
学習優先順位
初心者は、まずRESTから学ぶべき。
学習ロードマップ:
- RESTの基礎(1~2週間)
- REST APIの実装(2~3週間)
- GraphQLの基礎(1~2週間)
- GraphQLの実装(2~3週間)
- 実践プロジェクト(1ヶ月)
合計2~3ヶ月。
RESTを理解してれば、GraphQLも理解しやすい。逆に、いきなりGraphQLから始めると、「なぜこれが必要なのか」が理解できない。
私がメンターしてる受講生にも、必ずRESTから教えてる。RESTで基礎を固めてから、GraphQLに進む。この順序が一番効率的。
よくある質問(FAQ)
Q1: RESTとGraphQL、どっちが主流ですか?
現状はRESTが主流。GitHubの調査によると、公開APIの約70%はREST。
でも、GraphQLも確実に増えてる。大手企業(Facebook、GitHub、Shopify、Netflix)は、GraphQLを採用してる。
今後は、両方使えることが求められる。どちらか一方じゃなく、両方学ぶべき。
Q2: GraphQLは難しいですか?
RESTより学習コストは高い。でも、「難しい」ってほどじゃない。
RESTを理解してれば、GraphQLの概念も理解しやすい。スキーマ定義とリゾルバの書き方さえ覚えれば、あとは応用。
私がメンターしてる受講生で、REST理解してる人なら、GraphQLは2週間くらいで基本を掴んでる。
Q3: 副業でAPI開発の案件は取れますか?
取れる。しかも、単価が高い。
クラウドワークスやランサーズで「API開発」「REST API」「GraphQL」って検索すると、案件は豊富。
初心者向け案件:
- 既存サイトにAPI追加:10~20万円
- シンプルなREST API実装:15~30万円
中級者向け案件:
- 複雑なAPI設計:30~60万円
- GraphQL実装:40~80万円
API設計ができると、フルスタックエンジニアとして案件が取りやすくなる。
Q4: RESTとGraphQL、両方学ぶ必要がありますか?
できれば両方。
でも、優先順位をつけるなら:
- Web開発全般:RESTを先に
- モダンなフロントエンド開発:GraphQLも早めに
- 副業で稼ぎたい:RESTだけでも十分
- フルスタックエンジニアを目指す:両方必須
私の場合、RESTだけで2年間やってきた。でもGraphQLを学んでから、案件の選択肢が増えた。特に、スタートアップ系の案件はGraphQLが多い。
Q5: セキュリティはどう考えればいいですか?
RESTもGraphQLも、基本的なセキュリティ対策は同じ:
- 認証(JWT、OAuth)
- 認可(権限管理)
- レート制限
- 入力検証
- HTTPS通信
GraphQL特有の注意点:
- クエリの深さ制限(無限ループ防止)
- クエリの複雑さ制限(DoS攻撃防止)
- フィールド単位の権限制御
これらは、Apollo ServerやGraphQL Yogaなどのライブラリで対策できる。
セキュリティは重要だけど、最初から完璧を目指さなくていい。基本を押さえて、徐々に強化していく。
Q6: APIのテストはどうすればいいですか?
REST:
- Postman(GUIツール)
- curl(コマンドライン)
- Jest + Supertest(自動テスト)
GraphQL:
- GraphQL Playground(GUIツール)
- Apollo Studio(高機能)
- Jest + Apollo Client(自動テスト)
私は開発中はPostmanとGraphQL Playgroundを使って、手動でテスト。本番前に、自動テストを書く。
テストを書くことで、バグが激減する。特に、API変更したときに既存機能が壊れてないか確認できる。
Q7: ドキュメントは必要ですか?
絶対必要。
REST:
- Swagger(OpenAPI)でドキュメント自動生成
- Postmanのコレクション共有
GraphQL:
- スキーマ自体がドキュメント
- GraphQL Playgroundで自動生成
GraphQLは、スキーマがそのままドキュメントになるのが便利。クライアント側の開発者は、GraphQL Playgroundを見れば、何ができるか全部わかる。
RESTは、Swaggerを使えば、同じようにドキュメント自動生成できる。
ドキュメントがないAPIは、使ってもらえない。副業案件でも、ドキュメントをちゃんと作ると、クライアントの満足度が全然違う。
Q8: どの言語・フレームワークがおすすめですか?
REST:
- Node.js + Express(最も人気)
- Python + FastAPI(高速、型安全)
- Ruby on Rails(規約重視)
- PHP + Laravel(Web開発向け)
GraphQL:
- Node.js + Apollo Server(最も人気)
- Python + Strawberry / Graphene
- Ruby + GraphQL Ruby
初心者は、Node.js + Expressから始めるのがおすすめ。情報が豊富だし、学習リソースも多い。
私は、案件によって使い分けてる。小規模ならExpress、大規模ならNestJS(TypeScript)。

まとめ:APIスキルで副業の幅を広げよう
ここまで読んでくれてありがとう。APIとREST、GraphQLの違い、理解できたんじゃないかな。
最後にもう一度、重要なポイントをまとめる:
APIの基本
- APIは、フロントエンドとバックエンドの橋渡し
- HTTPリクエストでデータをやり取り
- セキュリティ、独立性、再利用性がメリット
RESTの特徴
- URLとHTTPメソッドでリソース操作
- シンプルで理解しやすい
- キャッシュが効きやすい
- 学習コストが低い
- 単純なCRUD操作に最適
GraphQLの特徴
- クライアントが必要なデータを指定
- 1回のリクエストで複数リソース取得
- 型安全で自動ドキュメント生成
- 複雑なデータ関係に最適
- モバイルアプリに向いてる
使い分けの基準
- シンプルなCRUD → REST
- 複雑なデータ関係 → GraphQL
- 公開API → REST
- 社内向け/モバイル → GraphQL
- ハイブリッドもあり
学習ロードマップ
- RESTの基礎(1~2週間)
- REST実装(2~3週間)
- GraphQL基礎(1~2週間)
- GraphQL実装(2~3週間)
- 実践プロジェクト(1ヶ月)
もしあなたが「Web開発で副業したい」「フルスタックエンジニアになりたい」って思ってるなら、API設計は絶対に押さえておくべきスキル。
RESTだけでも、案件は十分取れる。でも、GraphQLも学べば、より高単価な案件にアクセスできる。
実際、私の案件単価は、GraphQLを学んでから1.5倍になった。クライアントから「GraphQLできる人少ないから助かる」って言われることも多い。
まずは、Node.jsとExpressでシンプルなREST APIを作ってみてほしい。ローカル環境で動かして、Postmanでテストして。それだけで、APIの基本は理解できる。
で、慣れてきたら、GraphQLにチャレンジ。Apollo Serverのチュートリアルをやってみる。最初は戸惑うかもしれないけど、やってるうちに「こういうことか」って腑に落ちる瞬間が来る。
わからないことがあったら、一人で抱え込まないで。コミュニティで質問したり、メンターに相談したり。API設計は、実践で学ぶのが一番早い。
API設計ができると、副業の選択肢が本当に広がる。フロントエンドだけ、バックエンドだけじゃなく、フルスタックの案件が取れるようになる。
それじゃ、頑張って!

