Heroku+RailsでLine botを作る 第6回 Railsアプリの作成
前回までのあらすじ
第1回: http://shifumin.hatenablog.com/entry/2018/04/20/000500
第2回: http://shifumin.hatenablog.com/entry/2018/04/22/002000
第3回: http://shifumin.hatenablog.com/entry/2018/04/23/000500
第4回: http://shifumin.hatenablog.com/entry/2018/04/24/000500
第5回:
shifumin.hatenablog.com
LINEデベロッパー登録を終え、必要なAPIキーである「Channel Secret」と「アクセストークン」を手に入れました。
また、必要なパッケージの導入し、Rubyをインストールしました。
そして、プロジェクトディレクトリをバージョン管理できるようにGitリポジトリ化しました。
さらに、Bunblerを導入してrails gemをインストールしました。
今回は、(本当に!やっと!)Railsアプリを作成していきたいと思います。
rails new
ようやくのようやくで、Railsアプリの作成コマンドの実行までたどり着きました!
下記の rails new
コマンドでRailsアプリを作成します。
コマンド実行後にOverwriteするかを聞かれたら全て y
で問題ありません。
bundle exec rails new . --database=postgresql --skip-bundle --skip-test
rails new
の各オプションの詳細は下記をご参照ください(投げ)
railsコマンド(rails) - - Railsドキュメント
それぞれのオプション他を軽く一言説明をしますと、
bundle exec
- Bundlerでインストールしたカレントディレクリのgemのrailsコマンドを使用する
.
- カレントディレクリにRailsアプリを作成する
--database=postgresql
- データベースはPostgreSQLを使用する
--skip-bundle
- bundle installを行わない -> 後で手動で行うため
--skip-test
- test::unitを組み込まない -> この連載では(今のところは)テストを省略します
となります。
加えて、1点だけ補足説明しておきます。
前回の第5回の記事で bundle instlal
したと思います。
あの bundle install
はrails gemをインストールするためのものです。
そして、実はもう一度 bundle install
する必要があります。
次の bundle install
はRailsアプリを動かすために必要な他のgemをインストールするためのものになります。
ls -la
で確認すると下記のようにRailsアプリの各ファイルが作成されていることと思います。
ls -la total 32 drwxr-xr-x 22 shifumin staff 704 4 24 23:33 . drwxr-xr-x 11 shifumin staff 352 4 22 11:51 .. drwxr-xr-x 3 shifumin staff 96 4 24 22:09 .bundle drwxr-xr-x 9 shifumin staff 288 4 24 23:33 .git -rw-r--r-- 1 shifumin staff 604 4 24 23:33 .gitignore -rw-r--r-- 1 shifumin staff 5 4 24 23:33 .ruby-version -rw-r--r-- 1 shifumin staff 1969 4 24 23:33 Gemfile -rw-r--r-- 1 shifumin staff 2911 4 24 22:11 Gemfile.lock -rw-r--r-- 1 shifumin staff 374 4 24 23:02 README.md -rw-r--r-- 1 shifumin staff 227 4 24 23:02 Rakefile drwxr-xr-x 10 shifumin staff 320 4 24 23:33 app drwxr-xr-x 8 shifumin staff 256 4 24 23:33 bin drwxr-xr-x 16 shifumin staff 512 4 24 23:33 config -rw-r--r-- 1 shifumin staff 130 4 24 23:33 config.ru drwxr-xr-x 3 shifumin staff 96 4 24 23:33 db drwxr-xr-x 4 shifumin staff 128 4 24 23:33 lib drwxr-xr-x 3 shifumin staff 96 4 24 23:33 log -rw-r--r-- 1 shifumin staff 66 4 24 23:33 package.json drwxr-xr-x 9 shifumin staff 288 4 24 23:33 public drwxr-xr-x 3 shifumin staff 96 4 24 23:33 storage drwxr-xr-x 5 shifumin staff 160 4 24 23:33 tmp drwxr-xr-x 4 shifumin staff 128 4 24 23:33 vendor
しかし、まだRailsアプリは動きません。
なぜならRailsアプリを動かすために必要な各gemがインストールされていないためです。
中身は載せませんが、 rails new
前は gem "rails"
の行のみでしたGemfileにRailsアプリを動かすために必要な様々なgemが追加されていると思います。
これらのgemをインストールしていく必要があります。
line-bot-sdk-ruby gemの追加
追加されたgemをインストールする前にLINE bot開発に必要なgemを追加します。
下記の line-bot-api
です。
Gemfileの一番最後に gem 'line-bot-api'
の行を追加しましょう。
line-bot-apiの機能や使い方については実装時に追々見ていくことにします。
(前略) # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] gem 'line-bot-api'
余談ですが、gem名の記述が bundle init
で作成したGemfileは ""
で括られており、 rails new
で上書き作成したGemfileは ''
で括られていることを今回初めて知りました。
不思議ですね。
bundle install
2回目の bundle install
です。
初回時に --path vendor/bundle
オプションをつけていた場合、2回目以降はつけなくても ./vendor/bundle
にインストールされます。
Bundlerの設定ファイルである .bundle/config
の中身を見てみると、下記のように BUNDLE_PATH
の設定があると思います。
これのおかげで、2回目以降は --path
オプションが必要ないというわけです。
--- BUNDLE_PATH: "vendor/bundle"
それでは追加されたgemを bundle install
でインストールしましょう(今回も数分ほどかかるはずです)
bundle install
これで、ようやくRailsアプリを起動させる準備が整いました(大嘘)
rails s
Railsアプリ(のサーバ)を起動させるには rails s
コマンドを利用します。
bundle exec rails s # bundle exec rails server でも bin/rails s でも bin/rails server でも可
下記のような出力が出るはずです。
=> Booting Puma => Rails 5.2.0 application starting in development => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.11.4 (ruby 2.5.1-p57), codename: Love Song * Min threads: 5, max threads: 5 * Environment: development * Listening on Use Ctrl-C to stop
Railsアプリが起動しましたね。
ちなみに、先に書いておくとアプリの起動を止める方法は最後の行に書いてあるように Ctrlボタン + C 同時押しです。
Railsアプリを起動させた状態でブラウザで確認してみましょう。
ローカル環境(Mac)で rails s
でRailsアプリを起動させた場合は http://localhost:3000/
でアプリを確認できます。
それではブラウザで確認してみます。
Oh……
PG::ConnectionBad
というエラーが出ていますね。
could not connect to server
と怒られました。
そうです、データベースサーバのPostgreSQL(PG)の準備を何もしていないからです。
PostgreSQLのインストール
PostgreSQLについては下記をご参照ください(定期投げ)
(公式サイトがメンテ中なので後でここに貼ります)
インストール方法その他の詳細についてはこちらをご参照ください。
Homebrewでインストールし、データベースクラスタをRuby(Rails)のデフォルトエンコーディングである UTF-8
で初期化します。
brew install postgresql initdb /usr/local/var/postgres -E utf8
初期化が完了したら、下記のコマンドでPostgreSQLサーバを起動させます。
brew services start postgresql # 停止コマンドは brew services stop postgresql
それでは、PostgreSQLサーバも起動させたことですし、再びRailsアプリを起動させてブラウザで確かめてみましょう。
bundle exec rails s
Oh……(2回目)
今度は ActiveRecord::NoDatabaseError
というエラーが出ました。
FATAL: database "line_bot_development" does not exist
とデータベースがないって怒られていますね。
そうです(2回目)、DBサーバは起動させましたが、肝心のデータベースをまだ作成していません。
データベースの作成(初期化)はrailsコマンドが良きに計らってやってくれます。
下記の rails db:create
コマンドです。
bundle exec rails db:create
Created database 'line_bot_development' Created database 'line_bot_test'
データベースが作られました(開発環境用DBとテスト用DB)
これで本当の本当の本当にRailsアプリを起動させる準備が整いました(真)
rails s再び
それでは、 rails s
でRailsアプリを起動させてブラウザで http://localhost:3000/
を確認しましょう。
bundle exec rails s
無事にRailsアプリが起動できましたね。
お疲れ様でした(僕が)(今回の記事は長かった……)
終わりに
今回はRaisアプリの作成を行い、起動させ、確認しました。
次回はこのRails上にbotの実装を進めていきましょう。
ようやく本編がスタートする気がします。
参考
railsコマンド(rails) - - Railsドキュメント
http://railsdoc.com/rails
line/line-bot-sdk-ruby: Line: :API - SDK of the LINE Messaging API for Ruby.
https://github.com/line/line-bot-sdk-ruby
MacにPostgreSQL9.6.3をインストールしてみた - Qiita
https://qiita.com/uhooi/items/cd6256a72c6a03621c09