0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Replitで Rails × GAS のAPIは動くのか? 実際に試してみた

Posted at

概要

Replit上でRailsサーバーを構築し、Google Apps Script(GAS)を用いてRailsのデータをGoogleスプレッドシートに連携する方法を試しました。

使用ツール・サービス

Replit(クラウド開発環境)

クラウド上でさまざまなプログラミング言語を実行・開発できるオンラインIDEです。ブラウザだけでコードの編集・実行ができ、環境構築の手間を大幅に省けるため、学習用や簡単なプロトタイピングに適しています。無料でも使えます。

Ruby on Rails(APIサーバー)

Google Apps Script(GAS)

さっそく実装

1.ReplitでRailsを立ち上げる

まず、ReplitでRailsを立ち上げます。リンクからReplitのサインアップを済ませたら、Appsの +New Replをクリックします。
imsssage.png

次に、Choose a Template タブから Rails を選択・タイトルを入力して、+Create App をクリックしたら立ち上げ完了です。環境構築が要らないので非常に便利です。imagfe.png

2.APIサーバーの構築

実際にRails側の設定を進めていきます。

左側のバーにあるssss.pngをクリックして Shell を起動し、以下のコードでこのReplitの環境にrailsをインストールします。

Shell
gem install rails

今回のGASと連携するために使用するデータモデルを作成します。今回スプレッドシートに書き込むのは製品情報にしようと思うので、以下のコマンドで Product モデルを生成しましょう。

Shell
rails generate scaffold Product name:string price:integer description:text

マイグレーションを実行します。

Shell
rails db:migrate

初期データを入れておきます。以下のコードをdb/seeds.rbに入力し、rails db:seedを実行しましょう。

seeds.rb
Product.create([
                 { name: 'Computer', price: 300000, description: 'High-performance computer' },
                 { name: 'Smartphone', price: 180000, description: 'Latest model smartphone' },
                 { name: 'Headphones', price: 30000, description: 'Noise-canceling headphones' }
               ])
Shell
rails db:seed

データをJSON形式で返すために、controllers/products_controller.rbのindexの部分に、下記のコードを追記します。

products_controller.rb
#def indexの既存コード
    render json: @products
#end

画面上部のimage.pngをクリックして、サーバーを起動しましょう。
Webviewタブが立ち上がって、以下の画面が出ていれば正常です。
Webviewタブの「{...}replit.div」をクリックして、Dev URLをコピーしておいてください。
image.png

3.Google Apps Script (GAS)の設定

スプレッドシートを立ち上げて、「拡張機能」→「Apps Script」を選択し、Googleスプレッドシートにデータを書き込むスクリプトを作成します。

三行目のendpointUrlに代入するURLは、さっきコピーしたReplitのDevURLのあとに"products"を追加したエンドポイントを設定してください。

function fetchAndInsertData() {
  var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var endpointUrl = "https://xxxxx.replit.dev/products";  // ReplitのAPIエンドポイントを指定

  try {
    var apiResponse = UrlFetchApp.fetch(endpointUrl, {
      method: "get",
      muteHttpExceptions: true
    });
    
    if (apiResponse.getResponseCode() !== 200) {
      Logger.log("API呼び出しの失敗: " + apiResponse.getResponseCode());
      return;
    }

    var parsedData = JSON.parse(apiResponse.getContentText());
    
    // 取得したデータを適切にフォーマット
    var dataToInsert = [];
    dataToInsert.push(Object.keys(parsedData[0]));  // ヘッダーを挿入
    parsedData.forEach(function(item) {
      dataToInsert.push(Object.values(item));  // データ行を挿入
    });

    // スプレッドシートにデータを書き込み
    activeSheet.getRange(1, 1, dataToInsert.length, dataToInsert[0].length).setValues(dataToInsert);
    Logger.log("データをスプレッドシートに正常に書き込みました。");

  } catch (error) {
    Logger.log("エラーが発生しました: " + error.toString());
  }
}

入力できたら、右上にある「デプロイ」→「新しいデプロイ」をクリックします。

次に、「種類の選択」→「ウェブアプリ」を選択 ↓

  • 「次のユーザーとして実行」に自分のアカウントを設定
  • 「アクセスできるユーザー」を「自分のみ」に設定
  • 「デプロイ」をクリック
    無題.png

    「アクセスを承認」をクリックして画面が進み、以下の警告が出たら左下の Advancedをクリックして、Go to スプレッドシート名 unsafeをクリックしてください。
    無s題.png

Googleの画面に沿ってAllow(許可する)をクリックしたら完了です。実行ボタンで、GASをクリックして動かしてみて、スプレッドシートを確認してみましょう。以下のようにデータがスプレッドシートに書き込まれていたら無事成功です!
image.png

まとめ

今回、Replit上でRailsサーバーを構築し、Google Apps Script(GAS)を使ってRailsのデータをスプレッドシートに連携する方法を実装しました。環境構築なしで素早く試せるのが魅力的です。

今回のポイント

  • Replitを使えば、ブラウザ上で簡単にRails環境を構築できる
  • RailsのAPIエンドポイントを作成し、JSONレスポンスをGASで取得可能
  • GASのスクリプトをデプロイして、スプレッドシートにデータを自動取得できる

応用例

この方法を応用すれば、Railsのデータを定期的にGASで取得することで、Googleスプレッドシートをデータ管理のダッシュボードとして活用できますね。


ReplitとGASを組み合わせることで、WebアプリとGoogleスプレッドシートの連携が簡単にできるので、ぜひ試してみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?