開発環境
Cloud9
-
下記の環境で開発
-
Workspace作成時のtemplateはBlankを選択
-
Rails5.1.4(APIモード)
-
PostgreSQL
-
APIモードの採用
-
下記コマンドでRailsプロジェクトを新規作成すると、APIに不要なviewファイルなどが自動生成されないようになる(Rails5.0以降で利用可能)
$ rails new nickname_api_v1 --api
その他準備
githubとSlackの連携
-
参照サイト
-
メリット
-
githubでプッシュ/プルリク/コメントがあった際、リアルタイムでslackへ通知してくれる
-
チームメンバーが全体の開発状況を把握しやすくなる
実装
デフォルト以外で追加した主なgem
-
kakasi
-
日本語(漢字/カナ/平仮名)をローマ字変換する機能を提供
-
unicorn(production環境のみ)
-
Railsアプリを本番サーバで動かすためのgem
-
参照サイト:Unicorn設定のまとめ
辞書の作成
ニックネームを付ける対象となる苗字/名前の抽出
-
PythonによるWebスクレイピングで、下記サイトから苗字1,000+名前5,000の合計約6,000件を抽出。
-
下記のようなcsvファイルを用意し、末尾列にニックネームを入力していく
苗字,ローマ字,ニックネーム
中井,nakai,なかちゃん
武藤,mutou,ムトゥーさん
神田,kanda,かんちゃん
岡部,okabe,..
今野,konno,..
- csvファイルをRails側でDBに格納するスクリプトを
seeds.rb
に記述
require 'csv'
# 作成したcsvを1行ずつ読みとり、ActiveRecord(Model)経由でDBに格納する
CSV.foreach('db/csv/lname_2char.csv') do |row|
LnameTwoDict.create(kanji_lname: row[0], romaji_lname: row[1], nickname: row[2])
end
- 上記seeds.rbがプロジェクト内にある状態で
rails db:seed
を打てば、開発メンバー全員が同じDBを各ローカルに作成できる - 本番環境でも同様にコマンドを打ち、辞書データをMySQLに格納
- 注)本来、seeds.rb及び
rails db:seed
はテスト用データ作成の用途で利用されることが多いが、今回のAPI作成においてはDB(辞書)の内容を動的に変更する必要がなく、初期データさえ格納されていればOKであるため、本番でも使用した。
ロジックの実装
- 漢字/カナ/平仮名/ローマ字、あるいはその複合パターンが入力された場合に、できる限り広くニックネームへの変換が可能なロジックを構築する
- やった事
- 考え得るLINEネームのパターンを列挙する
- 入力〜変換までのフローチャートを書く
- ロジックが完成したら、後はそれを実現するためのコードを記述していく。
本番サーバ(AWS/EC2)へのデプロイ
- 基本的には、下記サイトのどちらかを参照しつつ進めればOK
- 世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで
- 初心者向け:AWS(EC2)にRailsのWebアプリをデプロイする方法
詰まった箇所と解決策
-
ターミナルからEC2にログインできない
-
[解決] AWSコンソールから、セキュリティグループのインバウンドルールに現在のグローバルIPをSSH時に許可するよう設定する
-
rails db:〜
系のコマンドがEC2で通らない -
[解決]
RAILS_ENV=production
を末尾につけて実行する -
本番環境でのPostgreSQLの設定がややこしい(参照サイトはMySQLを使用した場合の解説)
-
[解決] 本番ではMySQLを使用する事に
-
productionのgemを
pg
からmysql2
へ変更 -
EC2に入れたPostgreSQLをアンインストール → 新たにMySQL5.7をインストール
-
Unicorn起動時、MySQLのsocketエラーが出る
-
[解決]
mysql_config --socket
でsocketのパスを確認 -
これをdatabase.ymlの該当箇所に転記してからUnicorn再起動コマンドを叩く
$ bundle exec unicorn_rails -c /var/www/rails/nickname_api_v1/config/unicorn.conf.rb -D -E production
- 上記エラーなどがない場合、下記を叩けばOK
$ kill -USR2 `cat /path/to/unicorn.pid`
その他EC2メモ
- EC2での設定後は、下記でTerminalからryota(一般user)としてログインできるようになっている
[~/.ssh] ssh railsapi_key_rsa