SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Railsによるクライアントサイド開発入門

簡単にWebサービスの柔軟性が向上! Rails7のAPIモードの使い方をサンプルを通して学ぶ

Railsによるクライアントサイド開発入門 第7回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 連載第7回では、JSONベースのWebサービスを開発するRuby on Rails APIを紹介します。この回では、クライアントサイド開発におけるRESTfulなAPI開発の意義に触れたあと、Rails APIによるWebサービスの開発の概要、ミドルウェアの紹介、基本的なアプリケーションの作成について紹介します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 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)。

図1 バックエンドをWebサービス化する
図1 バックエンドをWebサービス化する

なぜ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など)

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
APIモードによるWebサービス作成の方法

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Railsによるクライアントサイド開発入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/17241 2023/02/21 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング