見出し画像

Cloud Translation APIをRailsで使用する

どうもひっきーです。

現在Railsを使って製作しているポートフォリオ(PF)にAPIを使用する予定で、その方法を色々調べながら試行錯誤しておりました。

とりあえず開発環境段階ですが、動作確認ができたのでその手順を残しておきます。

1. google platform cloudの12ヶ月無料会員に登録する

2.API keyの取得・JSONファイルのダウンロード

1.2はこちらの動画と次の記事の手順通りに登録すれば問題ありません。

3.Railsプロジェクトのセットアップ

rails newで今回APIを使用したいアプリを作ってください。今回は以下の名前で作りました。

$rails new google_api_test

ここからはこの記事を参考に進めていきます。

google-cloudのAPIを使用するために以下のgemをインストールします。(bundle install)

#Gemfile

gem "google-cloud"
gem "google-cloud-translate"

$bundle 


 Google Cloud client libraryをインポートするために以下の記述

#config/application.rb
require_relative 'boot'

require 'rails/all'
require "google/cloud/translate" #<= ここ

4.先にダウンロードしておいたJSONの中身をコピーして、config下にgoogle_cloud.json、local_env.ymlファイルを作成。

#config/google_cloud.json
{
 "type": "service_account",
 "project_id": "your_project_id", #=>これを使います
 "private_key_id": "04e00XXXXXXXXX",
 "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBg...p0Tg7WibPz76wqUFpGj/qshvY2pqFc2H94\nxkgZT44GHXagW5WOW5ofXJo=\n-----END PRIVATE KEY-----\n",
 "client_email": "random@random.iam.gserviceaccount.com",
 "client_id": "111111111111111",
 "auth_uri": "https://accounts.google.com/o/oauth2/auth",
 "token_uri": "https://oauth2.googleapis.com/token",
 "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
 "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/random%random.iam.gserviceaccount.com"
}

ローカル環境に環境変数を設定するためのファイルのようですが、私はこの辺の知識は乏しいのでこれから改めて理解が必要ですね。

#config/local_env.yml
CLOUD_PROJECT_ID: 'your_project_id' #=>google_cloud.jsonのproject_idから
GOOGLE_APPLICATION_CREDENTIALS: 'config/google_cloud.json'

環境変数ファイルの設置場所等については以下を参考。この後の環境変数に関するコードの記述箇所についても詳しく説明が書いてあります。

5. gitの管理下に置かないために、.gitignoreにgoogle_cloud.json、local_env.ymlを追記。

$vim .gitignore
# Ignore local_env file and JSON key file
/config/local_env.yml
/config/google_cloud.json

6.ローカル環境ファイルの読み込み設定のためにapplication.rbファイルに次のコードを追加します。プロジェクト名のモジュール内に記述します。

#config/application.rb

module GoogleApiTest
 class Application < Rails::Application
   config.before_configuration do #<=ここから
     env_file = File.join(Rails.root, 'config', 'local_env.yml')
     YAML.load(File.open(env_file)).each do |key, value|
       ENV[key.to_s] = value
     end if File.exists?(env_file) #<=ここまで
   end
  end
end

7.翻訳結果の出力

先ほどの上の記事(https://dev.to/nodefiend/quick-start-google-translation-api-in-rails-4j81)を参考に、ローカルサーバで翻訳結果を出力するために次のようにコントローラとビュー、ルーティングを設定します。今回は日本語に翻訳してみます。他の言語に翻訳する場合はコードを調べてみてください。

#app/controllers/translate_controller.rb
class TranslateController < ApplicationController
 def index
  # Display the translation for each input text provided
  project_id = ENV["CLOUD_PROJECT_ID"]

  # Instantiates a client
  translate   = Google::Cloud::Translate.new version: :v2, project_id: project_id

  # The text to translate
  @text = "Hello, world!"
  # The target language
  target = "ja" #=>翻訳言語のコード指定

  # Translates some text into Japanese
  @translation = translate.translate @text, to: target
 end
end
#app/views/translate/index.html.erb
<h1>translate#index</h1>
<%= @text %>
<%= @translation %> 
#config/routes.rb
root "translate#index"

元の記事では、コントローラ内の上のコードの一部が次のようになっていました。

translate = Google::Cloud::Translate.new project: project_id

このコードは現在のTranslatation APIのバージョン(v2以降)では対応していないようで、projectのキーでno methodエラーが出てしまいましたが、バージョンを明示することで解決しました。以下の記事を参考に修正しました。

translate   = Google::Cloud::Translate.new version: :v2, project_id: project_id

ローカルサーバを立て、ローカルホストにアクセスします。

$rails s -b 0.0.0.0

<結果>

スクリーンショット 2019-12-05 18.25.07

上手くいきました。現在は開発環境でしか試していません。デプロイはAWSで行うので、また他の手続きが必要になると思いますが、その点は今後改めてまとめたいと思います。


この記事が気に入ったらサポートをしてみませんか?