2018年 10月 の投稿一覧

Rails をAPI モードで new する

Ruby on Rails 5 から API モードが追加されました。
View 部分に関するファイルや Gem が外れている、API 開発に特化したアプリケーションを作成できます。

バージョン指定するための準備

さて、今回使用したい Rails のバージョンが 5.1.4 です。

ローカルの gem list を確認してみて、どのバージョンがインストールされているのかを確認します。

$ gem list rails

*** LOCAL GEMS ***

autoprefixer-rails (9.0.0, 7.1.4.1)
capistrano-rails (1.4.0)
coffee-rails (4.2.2, 4.1.1, 4.1.0, 4.0.1)
compass-rails (2.0.0)
factory_girl_rails (4.4.1)
font-awesome-rails (4.7.0.4)
haml-rails (1.0.0)
jquery-rails (4.3.3, 4.3.1, 4.2.1, 4.0.5, 4.0.4, 4.0.3, 3.1.5)
pry-rails (0.3.6, 0.3.4)
rails (5.2.1, 5.2.0, 5.0.7, 5.0.1, 4.2.6, 4.2.5, 4.2.3, 4.2.1, 4.1.6)
rails-controller-testing (1.0.2)
rails-deprecated_sanitizer (1.0.3)
rails-dom-testing (2.0.3, 1.0.9, 1.0.8, 1.0.7, 1.0.6)
rails-html-sanitizer (1.0.4, 1.0.3, 1.0.2)
rails_12factor (0.0.3)
rails_serve_static_assets (0.0.5)
rails_stdout_logging (0.0.5)
rspec-rails (3.8.0)
sass-rails (5.0.7, 5.0.6, 5.0.4, 5.0.3, 4.0.5, 4.0.4, 4.0.2)
sprockets-rails (3.2.1, 3.2.0, 2.3.3, 2.3.2, 2.2.4, 2.0.1)

ということで、5.1.xはいませんので、ローカルの gem に追加していきます。

$ gem i -v 5.1.4 rails
*** LOCAL GEMS ***

autoprefixer-rails (9.0.0, 7.1.4.1)
capistrano-rails (1.4.0)
coffee-rails (4.2.2, 4.1.1, 4.1.0, 4.0.1)
compass-rails (2.0.0)
factory_girl_rails (4.4.1)
font-awesome-rails (4.7.0.4)
haml-rails (1.0.0)
jquery-rails (4.3.3, 4.3.1, 4.2.1, 4.0.5, 4.0.4, 4.0.3, 3.1.5)
pry-rails (0.3.6, 0.3.4)
rails (5.2.1, 5.2.0, 5.1.6, 5.1.4, 5.0.7, 5.0.1, 4.2.6, 4.2.5, 4.2.3, 4.2.1, 4.1.6)
rails-controller-testing (1.0.2)
rails-deprecated_sanitizer (1.0.3)
rails-dom-testing (2.0.3, 1.0.9, 1.0.8, 1.0.7, 1.0.6)
rails-html-sanitizer (1.0.4, 1.0.3, 1.0.2)
rails_12factor (0.0.3)
rails_serve_static_assets (0.0.5)
rails_stdout_logging (0.0.5)
rspec-rails (3.8.0)
sass-rails (5.0.7, 5.0.6, 5.0.4, 5.0.3, 4.0.5, 4.0.4, 4.0.2)
sprockets-rails (3.2.1, 3.2.0, 2.3.3, 2.3.2, 2.2.4, 2.0.1)

ということで、5.1.x がインストールできました。

rails new

というわけで、無事にインストールしたいバージョンの gem をローカルにインストールしたので、いよいよアプリケーションを new します。

$ rails _5.1.4_ new app_name --api

サーバが起動するか確認する

$ cd app_name
$ rails s

http://localhost:3000/ にアクセスして以下が表示されたら成功です!
Image from Gyazo

最後に DB も作っておきます。

$ rake db:create
Created database 'db/development.sqlite3'
Created database 'db/test.sqlite3'

RESTful API とは?

最近までRailsのブートキャンプのために、TECH::EXPERTの夜間・休日コースに通っていました。渋谷の教室に主に通っていましたが、5ヶ月ほど経ってきた頃に疲労が・・・。
でも、そんなこんなでなんとか自分でオリジナルのアプリケーションをつくる最終課題に突入しましたので、その備忘録。

何を作るのか

というわけで、野球が大好きなので野球観戦日記を登録できるアプリケーションを作成しようと考えています。
私は普段の仕事では、Vue.js を使用しているのと、AWS の便利な所を組み合わせる予定で、Rails では RESTful API を作成しようと思います。

API(Application Programming Interface)とは?

APIとは、あるコンピュータプログラム(ソフトウェア)の機能や管理するデータなどを、外部の他のプログラムから呼び出して利用するための手順やデータ形式などを定めた規約のこと。(引用: IT用語辞典 e-Words

ということです。こんなときは、実例をみるのが一番ということで、よくお世話になる connpass のサイトの情報を API を使って覗いてみましょう。
connpass では、API リファレンスが存在します。こちらにアクセスしてみると色々書いてありますね!
イベントの一覧を取ってくるのは、
https://connpass.com/api/v1/event/
というAPIです。ですが、このAPIだと自分のほしい情報があるのかないのか、なんなのかわかりません。
そこで、rails という文字列の含まれるイベントを検索してみましょう
https://connpass.com/api/v1/event/?keyword=rails
これでもまだまだ多いので、rails 文字列の入っているイベントを1件だけ取得してみましょう!
https://connpass.com/api/v1/event/?keyword=rails&count=1
これで取得できます。これが、API です!

REST(REpresentational State Transfer)とは?

一般によく使われる狭義のRESTは、パラメータを指定して特定のURLにHTTPでアクセスすると、XMLで記述されたメッセージが送られてくるようなシステムおよび呼び出しインターフェース(「RESTful API」と呼ばれる)のことを指す。(引用: IT用語辞典e-Words

REST の設計原則は以下の4つだそうです。

  1. セッションなどの状態管理を行わない(やり取りされる情報はそれ自体で完結して解釈することができる)
  2. 情報を操作する命令の体系が予め定義・共有されている
  3. すべての情報は汎用的な構文で一意に識別される
  4. 情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができる(ハイパーメディア的な書式で情報を表現する)

(引用: IT用語辞典e-Words

ちょっとむずかしく聞こえますが、なんとなくわかっていればなんとか先へ進めるはず!まずは作成してみようということで、 rails new app_name –api のコマンドを叩きにいきましょう!

Dockerの基礎

ここから Docker をインストールしてくださいね!

Docker の利点

面倒な環境構築の手間が格段に減る

プロジェクトを開始する時にネックになる、環境構築。下手したら1日を環境構築で終えてしまうことさえあります。
環境構築手順書を書いて共有していましたが、Dockerfile に必要な処理が全部書いてあるのでそれを Git で管理して共有し、build と run してもらえば済んでしまいます。

コンテナ型仮想環境

コンテナ型であることのメリットは、手元のマシン(Windows や Mac のこと)自体の OS を動かす必要がなくなります。そのため非常に軽量に動作させることが可能です。

Docker イメージとは?

AWS で言う所の、AMI に相当するものです。Docker 社オフィシャルのイメージや、世界中の開発者が様々なイメージを共有しています。百聞は一見に如かず!ということで、こちらにいろんなイメージがあるので見てみてください。イメージがつきやすいかと思います -> https://hub.docker.com/explore/

Docker コンテナとは?

上記イメージを展開する箱みたいな感じ!コンテナなので、色々なイメージを乗せることができるようです(docker-compose)

Docker コマンド一覧

詳細はこちらのドキュメントを参考にしてくださいね!
イメージをレジストリから持ってくるときは pull を使います。MySQL5.6 を持ってくるには
$ docker pull mysql:5.6
試しにこのイメージをコンテナで実行します。
$ docker run -d -e MYSQL_ROOT_PASSWORD=password --name mysql5.6 mysql:5.6

以下に備忘録的にコマンドを・・・

$ docker ps # 起動中のコンテナが表示される
$ docker stop <コンテナID> # 起動中のコンテナをストップ
$ docker ps -a # 起動中/停止中のコンテナが表示
$ docker start <コンテナID> # 起動中のコンテナをストップ
$ docker restart <コンテナID> # コンテナを再起動
$ docker images # ローカルに置いてあるイメージのリスト
$ docker inspect <コンテナID># docker の内部の割り振られているIPを取得する
$ docker rm <コンテナID> # 削除するときは、 stop してから
$ docker rmi イメージID

イメージやコンテナが膨れ上がったときは?

Docker アイコンをクリックして、Preferences を開き、Reset を押下します。

Image from Gyazo
Image from Gyazo