ダウンロード サンプルファイル (47.6 KB)
連載第7回では、JSONベースのWebサービスを開発するRuby on Rails APIを紹介します。この回では、クライアントサイド開発におけるRESTfulなAPI開発の意義に触れたあと、Rails APIによるWebサービスの開発の概要、ミドルウェアの紹介、基本的なアプリケーションの作成について紹介します。
はじめに
WebアプリケーションフレームワークのRuby on Railsは、2021年12月にバージョン7となりました。これに伴い、クライアントサイド開発のサポートについても大きな変化を遂げ、多様な選択肢が提供されるようになりました。本連載では、このRails 7にフォーカスし、クライアントサイド開発のためのさまざまな機能を、API開発やリアルタイムWeb開発も絡めながら、紹介していきます。
対象読者
- Ruby on Railsを長らく使ってきた方
- 他のWebアプリケーション開発フレームワークを使ってきた方
- Railsにおけるフロントエンド開発に関心のある方
必要な環境
本記事のサンプルコードは、以下の環境で動作を確認しています。
-
macOS Ventura(13.0.1)
- Ruby 3.1.0p0
- Ruby on Rails 7.0.4
- Google Chrome 108
Ruby on Rails APIモード
Ruby on Rails APIモード(以降、APIモード)とは、RESTfulなAPI(Application Program Interface)いわゆるWebサービスの提供に特化したRailsの動作モードをいいます。このAPIモードにより、Webサービス提供のためのRailsアプリケーションを容易に開発できるようになっています。
[NOTE]RESTfulなAPIとは
RESTfulなAPIとは、RESTの原則に準拠して構築されたWebシステムの呼び出しインタフェースをいいます。RESTはREpresentational State Transferの略で、①アドレス可能性②ステートレス性③接続性④統一インタフェースの4つの原則から構成されます。わかりやすいURL、統一されたHTTPメソッドの使用などによって、サービスの提供側にも利用側にもメリットのある方式です。
なぜAPIモードか?
なぜAPIモードが特別に設けられているのでしょうか? 一つは、Webアプリケーションの開発においてフロントエンドとバックエンドを明確に切り離す動きが顕著であることです。
Facebook、TwitterなどのSNS、Amazonや楽天といったECサービスの利用において、PCではWebブラウザでの利用が一般的と思われますが、モバイル端末ではネイティブアプリケーションを利用することも多いと思われます。このような利用形態では、ビジネスロジックの処理はバックエンドに任せて、Webブラウザやネイティブアプリケーションではフロントエンドの処理に集中するというように役割分担するのが合理的です。
ただし、バックエンドとフロントエンドの境界が曖昧だと、非常に使いにくいものになってしまいます。このとき、バックエンドをWebサービスとして構成することで、フロントエンドに依存しない汎用的なWebシステムの構築が可能になります。
Railsでは、APIモードでバックエンドを構成し、別途Railsアプリケーションとして(Import MapsやReactを活用して)フロントエンドを構成する、といったことも可能になります。さらにWebサービス側では、内部のDBで処理を完結させても、さらに外部のWebサービスを利用してもよく、柔軟性がアップします。いずれにせよ、Webサービスのインタフェースが変わらない限り、フロントエンド側がそれを意識する必要はありません。APIモードを設けるということは、このようなシステム構成を採用するにあたり大きなアドバンテージとなります(図1)。
なぜRailsか?
もう一つは、通常のRailsアプリケーションの開発手法とリソースをほとんどそのまま活用できるという点です。APIモードといっても、それは通常のRailsアプリケーションからビューなどWebサービスでは不要なものを取り去っただけのものなので、開発手法に大きな違いは出ません。ルーティング、コントローラ開発、モデル開発、そしてActive xxxxやAction xxxxといったコンポーネントについても活用が可能です。本稿では取り上げていませんが、既存のアプリケーションを改変してAPIモード化することも可能です。
Webサービスでは、突き詰めればJSONやXMLといった形式のデータを提供できればいいので、Railsなどのフレームワークを使用しない、極論すればRubyやPHPなどのスクリプトをただ動かすだけのような実装も可能です。しかし、効率的な開発やテスト、それに運用管理も考慮すれば、Railsのようなフレームワーク上に構築した方が多くの恩恵を得られます。例えば、Railsでは以下のような機能がミドルウェアやAction Packなどのコンポーネントによって提供され、APIモードでも利用できます。
- 開発、テスト、本番環境の使い分け
- 基本的なセキュリティ機能
- カスタマイズ可能なログ出力
- ハッシュ化されたURLパラメータ(HTTPメソッドにかかわらずparamハッシュでパラメータにアクセスできる)
- 透過的な再読み込み(コードを書き換えたときに、サーバを再起動して再読み込みしたように振る舞わせることができる)
- 条件付きGET(stale?メソッドによってETagやLast-Modifiedを使ったリクエストを自動化する)
- HEADリクエストの透過的な変換(HEADリクエストをGETリクエストに透過的に変換することで確実に処理されるようにする)
- ルーティング、URL生成
- キャッシュの利用
- レスポンスヘッダやリダイレクトヘッダを容易に生成
- 認証機能
- ジェネレータ機能(Scaffoldingなど)
この記事は参考になりましたか?
- Railsによるクライアントサイド開発入門連載記事一覧
-
- Rails 7でリアルタイムWeb開発! Action Cableの応用とRails 7....
- Rails 7でリアルタイム通信を実現! Action Cableの基本をチュートリアルと...
- 簡単にWebサービスの柔軟性が向上! Rails7のAPIモードの使い方をサンプルを通して...
- この記事の著者
-
WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
