Heroku+RailsでLine botを作る 第4回 Gitリポジトリの作成
前回までのあらすじ
shifumin.hatenablog.com shifumin.hatenablog.com shifumin.hatenablog.com
LINEデベロッパー登録を終え、必要なAPIキーである「Channel Secret」と「アクセストークン」を手に入れました。
そして、必要なパッケージの導入し、Rubyをインストールしました。
今回は、プロジェクトをバージョン管理できるようにGitリポジトリを作成していきたいと思います。
(前回の次回予告で、今回は「Railsアプリの作成」を行うと書いた気がしますが、まだ全然そこまで辿り着けない!)
Gitとは
Gitとは、リポジトリとは、人生とは……。
それ(人生を除く)を説明するとそれだけでこの連載が15回分くらい増えるので、詳しくはググってください。
あるいは下記の記事群が参考になります。
しかしながら、Gitには関しては全体を網羅しようとすると分量が多すぎるため、利用しながら適宜調べていく方が無難であると思います。この連載では、新しいgitのコマンドが出てきた場合はその都度簡単な解説を加えることとします。
ここで、Gitを簡単に説明すると「バージョン管理するためのツール」で、
バージョン管理とは、「プログラムの状態をバージョンとして管理すること」で、
リポジトリとは「バージョン管理する対象」となります。
bot開発を例に取ると、
- 「オウム返し」機能を実装した <- ここでセーブ
- 「おはよう」機能を実装した <- ここでセーブ
- 「ゴミ出し日通知」機能を実装した <- ここでセーブ
上記のように機能を追加した節目で状態(バージョン)をセーブ(コミット)して、後でどのような機能を追加したかを振り替えしやすくしたり(コミットごとにコメントを残せる)、いざという時に過去のバージョンに戻せたりできます。
プログラムの開発を進めていくと、例えばバグが混在している場合など、今の状態から修正を加えるよりもある時点の状態に戻してそこからもう一度機能を追加した場合の方が結果的に作業が早い場合が往往にしてあります。そういった場合にGitでのバージョン管理が役立ちます。
バグは怖いですね。
Gitの初期設定
さて、それではgitの初期設定を行いましょう。
既に行なっている方は飛ばしてください。
git config —global user.name {ユーザー名} git config —global user.email {メールアドレス}
ちなみに、ユーザー名もメールアドレスも適当なものでも特に問題ありません。
リポジトリの作成
Railsアプリの作成の前にプロジェクトディレクトリをgitリポジトリ化しましょう。
リポジトリの作成(初期化)には git init
を使います。
git init
Initialized empty Git repository in /Users/shifumin/project/line_bot/.git/
ls -la
で確認した時に .git
が存在していればリポジトリ化されています。
ls -la total 4 drwxr-xr-x 4 shifumin staff 128 4 23 01:01 . drwxr-xr-x 11 shifumin staff 352 4 22 11:51 .. drwxr-xr-x 9 shifumin staff 288 4 23 01:01 .git -rw-r--r-- 1 shifumin staff 6 4 22 12:36 .ruby-version
これでプロジェクトディレクトリをgitでバージョン管理できるようになりました。
終わりに
今回はプロジェクトのバージョン管理を行うためにGitリポジトリを作成しました。
次回こそ本当にbotの機能を実装するRailsアプリの作成を行なっていきましょう(二度目の正直)
参考
サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ
https://backlog.com/ja/git-tutorial/
Gitの基礎 - Qiita
https://qiita.com/satoshi1335/items/ead109412430a078feaa
Heroku+RailsでLine botを作る 第3回 Rubyのインストール
前回までのあらすじ
shifumin.hatenablog.com shifumin.hatenablog.com
LINEデベロッパー登録を終え、必要なAPIキーである「Channel Secret」と「アクセストークン」を手に入れました。
そして、必要なパッケージの導入を行いました。
今回は、botの実行環境であるRubyをインストールしていきたいと思います。
プロジェクトディレクトリの作成
まずは、今回作成するbotのプログラムを置くディレクトリを用意しましょう。
mkdir
でディレクトリを作成し、 cd
で作成したディレクトリに移動します。
mkdir line_bot cd line_bot
僕の場合は下記のディレクトリで作業を進めていくことにします。
( pwd
は現在のディレクトリのpathを返します)
pwd
/Users/shifumin/project/line_bot
rbenvとは
今回は前回の記事で導入したrbenvを使ってRubyをインストールしていきます。
前回は何も説明しませんでしたが、rbenvは簡単に言うと、「インストールするRubyのバージョンを管理するためのパッケージ」です。具体的には、例えばプロジェクトA(ディレクトリ /path/to/project_a)だとRubyのバージョン2.4.0を使いたいけど、プロジェクトB(/path/to/project_b)ではRubyのバージョン2.5.0を使いたいといった場合に役立ちます。
つまり、ディレクトリごとに動かすRubyのバージョンを変えたい場合に役立つパッケージということですね。rbnevがないと、例えば、MacにRuby2.5.0をインストールするとMacの中でRubyを動かす場合は全て2.5.0になってしまいます。
rbenvの各コマンドは下記に詳しくまとまっており、参考にさせていただきました。
Rubyのインストール
それでは、Rubyのインストールを進めていきます。
まず、インストールできるRubyのバージョンを調べます。
rbenv install --list # rbenv install -l でも可
出力の真ん中ら辺を見てみますと
(前略) 2.4.4 2.5.0-dev 2.5.0-preview1 2.5.0-rc1 2.5.0 2.5.1 2.6.0-dev 2.6.0-preview1 jruby-1.5.6 (後略)
現時点でのRubyの安定版の最新バージョンはどうやら 2.5.1
のようです。
なので、2.5.1をインストールしましょう(数分ほど時間がかかります)
rbenv install 2.5.1
次にこのプロジェクト(ディレクトリ)で使用するRubyのバージョンを指定します。
(その後、念のためrehashします)
rbenv local 2.5.1
rbenv rehash
rbenv local
でのRubyバージョンを指定すると、カレントディレクトリに .ruby-version
というファイルができます。
このファイルの中身を見てみましょう。
僕はエディタはVimを使っていますので、この連載の下記以降でvimが出てきた時はお使いのエディタに差し替えてください。
vim .ruby-version
.ruby-versionの中身は下記のようになっているはずです。
2.5.1
また、下記のコマンドでRubyのバージョンを確認しましょう。
ruby --version # ruby -v でも可 ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
Rubyのバージョン2.5.1がインストールされていることを確認できました。
終わりに
今回でbotを作成するプロジェクトディレクトリを作成し、そこにRubyの実行環境を整えることができました。 次回はbotの機能を実装するRailsアプリの作成を行いたいと思います(先は長い……)
参考
rbenv/rbenv: Groom your app’s Ruby environment
https://github.com/rbenv/rbenv
[rbenv]コマンド備忘録 - Qiita
https://qiita.com/a_ishidaaa/items/8cc14453289dba1413dd
Heroku+RailsでLine botを作る 第2回 必要なパッケージの導入
前回までのあらすじ
LINEデベロッパー登録を終え、必要なAPIキーである「Channel Secret」と「アクセストークン」を手に入れました。
今回は必要なパッケージの導入を行っていきたいと思います。
この連載記事を書いている環境
そう言えば、bot作成を進めている(まだ進まっていないが)環境について書いていなかった気がします。
この連載はMacの上記の環境のもとで進めています。
Windowsの人は頑張ってください!
しかしながら、WindowsもLinuxもパッケージの導入部分は異なりますが、それ以外は一緒の気はしています。
必要なパッケージの導入
- git
- rbenv
- ruby-build
最低限、上記があればHeroku + Railsの開発は進められると思います。
不足するものがあればその都度インストールしていくことにしましょう。
以下、それっぽいコマンドは全てターミナルのコマンドラインで実行するものとします。
また、Homebrewはインストール済であるものとします。
未インストールなら下記を参考にしてください。
下記のコマンドで各パッケージをHomebrewでインストールして、rbenvのpathと初期起動をbashの設定ファイルに追記します。
shellがbashじゃない人は適時置き換えてください。
brew install git brew install rbenv brew install ruby-build echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile source ~/.bash_profile
僕はこの記事を書いている時に知りましたが、 rbenv-doctor
というスクリプトがあり、
rbenvが適切にインストールされたかを確認できるようです。
参考: https://github.com/rbenv/rbenv#homebrew-on-macos
(curlが必要なので、なければ brew install curl
でインストール)
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
僕の環境だとanyenv経由でrbenvを利用しているので下記のようになりましたが、似たように感じの出力があればインストールに成功していると思います。
~ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash Checking for `rbenv' in PATH: /Users/shifumin/.anyenv/envs/rbenv/bin/rbenv Checking for rbenv shims in PATH: OK Checking `rbenv install' support: /Users/shifumin/.anyenv/envs/rbenv/plugins/ruby-build/bin/rbenv-install (ruby-build 20171226) Counting installed Ruby versions: 2 versions Checking RubyGems settings: OK Auditing installed plugins: OK
パッケージの導入は下記を参考にさせていただきました。
(自分の環境は既に導入済かつZshとanyenvを利用しているため)
終わりに
今回でHeorku + RailsでLINE botを開発するために必要なパッケージを導入できました。
次回はbot開発のためにRubyの環境を整えていこうと思います。
参考
macOS 用パッケージマネージャー - Homebrew
https://brew.sh/index_ja
rbenv/rbenv: Groom your app’s Ruby environment
https://github.com/rbenv/rbenv
rbenv/ruby-build: Compile and install Ruby
https://github.com/rbenv/ruby-build
Heroku+RailsでLINE botを作る 第1回 LINEデベロッパー登録
はじめに
はい、というわけでね、今回から複数回に分けてLINE botを作成していこうと思います。
構成は、Line::Bot::APIをRailsから呼び出して、そのRailsはHerokuに乗せて動かすという形にします。
第1回の今回はLINEデベロッパー登録を行っていきます。
※ この連載は諸事情(飽き)により予告なく終了する可能性が十分にございます。あらかじめご了承ください。
LINEデベロッパー登録
まずはLINEデベロッパー登録を行います。 その後にプロバイダーとチャネルを作成し、必要なAPIキーを取得しましょう。
Messaging APIを利用するには
https://developers.line.me/ja/docs/messaging-api/getting-started/
詳しくは公式の上記を見てください。
で終わるので、下に補足説明の箇条書きと参考画像を乗せます。
- アクセストークン(ロングターム) : 再発行する
- Webhook送信 : 利用するを選択する
- Botのグループトーク参加 : 利用するを選択する
- 自動応答メッセージ : 利用しないを選択する
- 友だち追加あいさつ : 利用しないを選択する
botを作成する上で必要になるのが下記の2つです。
これらのキーを控えておきます(下記参考画像の赤枠)
- Channel Secret
- アクセストークン
参考画像
LINE bot作成依頼主の依頼でbotのアイコンと名前はこんなになっていますが、問題がありそうなら差し替えます。許して。
終わりに
LINEデベロッパー登録を終えて、LINE bot作成に必要なChannel Secretとアクセストークンが手に入りました。
これらを使って次回からbot本体の作成に取り掛かっていこうと思います。
参考
Messaging APIを利用するには
https://developers.line.me/ja/docs/messaging-api/getting-started/
DockerとCircleCIを使ってRailsアプリの自動テスト&自動Herokuへのデプロイ環境を作った
はじめに
はい、標題の通りですが、DockerとCircleCIを使ってRailsアプリの自動テスト&自動Herokuへのデプロイ環境のテンプレートを作成しました。
どういうものか
Heroku用のDockerizedされたRailsアプリのテンプレートです。
docker-compse up
して rails new
してアプリを書いた後に、GitHubにpushすると自動テスト(RSpec)が実行されて、テストがすべて通るとHerokuへと自動デプロイされます。
- ローカル環境
- DockerizedなRails+PostgreSQLで開発する
- テスト実行
- デプロイ実行
- GitHubにpushして上記のテストが全て通るとCircleCIを通じてHerokuへとデプロイされる
- Heroku
- ローカルと同じ構成の環境がデプロイされる
なぜ作ったか
ギョームだと、ローカルはVagrantでProductionやStagingはAWSであることが多いのですが、個人開発でいちいちVagrantに環境を整えるは面倒だし本番も雑にHerokuでいいやと思ったので、Docker+HerokuのRailsアプリのテンプレートを作成しました。加えて、楽したいからGitHubにpushしたら自動テストと自動デプロイが走るようにCircleCIの設定を整えました。
作成物
作成物は下記になります。
続けて、DockerとCirclrCIの設定を見ていきます。
Dockerfile
FROM ruby:2.5.1 ENV LANG C.UTF-8 RUN apt-get update -qq && \ apt-get install -y build-essential \ apt-transport-https \ libpq-dev \ postgresql-client \ --no-install-recommends # node RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - \ && apt-get install -y nodejs # yarn RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" \ | tee /etc/apt/sources.list.d/yarn.list \ && apt-get update && apt-get install -y yarn RUN mkdir /rails_app WORKDIR /rails_app COPY Gemfile /rails_app/Gemfile COPY Gemfile.lock /rails_app/Gemfile.lock COPY yarn.lock /rails_app/yarn.lock RUN bundle install --jobs=4 --no-cache COPY . /rails_app EXPOSE 3000 RUN RAILS_ENV=production rails assets:precompile CMD ["rails", "s", "-b", "0.0.0.0"]
Rails用のよく見る形のDockerfileだと思います。
必要なパッケージをインストールして、bundle installして、そして最後にアプリ全体をコピーしています。
rails s
する直前で assets:precompile
を実行しています。
docker-compose.yml
version: '3' services: web: build: context: . tty: true stdin_open: true ports: - '3000:3000' volumes: - .:/rails_app depends_on: - db db: image: postgres:10.3 ports: - '5432:5432' volumes: - postgresql-data:/var/lib/postgresql/data volumes: postgresql-data: driver: local
こちらもよく見るRails+PostgreSQLの構成のdocker-compose.ymlだと思います。
特記すべき点は、2点あって、
1点目が、Dockerコンテナ内でも binding.pry
でデバッグ可能にするために下記の設定を追加している点です。
web: tty: true stdin_open: true
binding.pry
を埋め込んで、 docker-compose run --rm --service-ports web
で起動すると他環境と同様にデバッグすることができます。
2点目が、DBのデータを永続化するために下記の設定を追加している点です。
db: volumes: - postgresql-data:/var/lib/postgresql/data volumes: postgresql-data: driver: local
この設定を追加することによって、DBの中身をローカルに永続化でき docker-compose up
を止めてもDBの中身が消えません。
CircleCI2.0
.circleci/config.yml
version: 2 jobs: test: machine: image: circleci/classic:edge steps: - checkout - run: name: docker-compose build command: docker-compose build - run: name: docker-compose up command: docker-compose up -d - run: name: sleep for waiting launch db command: sleep 1 - run: name: rails db:create and db:migrate command: docker-compose run web rails db:create db:migrate - run: name: rspec command: docker-compose run web rspec - run: name: docker-compose down command: docker-compose down deploy: working_directory: ~/deploy machine: image: circleci/classic:edge steps: - checkout - run: name: Build docker image command: docker build --rm=false -t registry.heroku.com/${HEROKU_APP_NAME}/web . - run: name: Setup Heroku command command: bash .circleci/setup_heroku.sh - run: name: Execute Heroku maintenance on command: heroku maintenance:on --app ${HEROKU_APP_NAME} - run: name: Push container to registry.heroku.com command: | docker login --username=_ --password=$HEROKU_AUTH_TOKEN registry.heroku.com docker push registry.heroku.com/${HEROKU_APP_NAME}/web - run: name: Execute Heroku db migrate command: heroku run rails db:migrate --app ${HEROKU_APP_NAME} - run: name: Execut Heroku maintenance off command: heroku maintenance:off --app ${HEROKU_APP_NAME} workflows: version: 2 test-deploy: jobs: - test - deploy: requires: - test filters: branches: only: master
特記すべき点は、 test
job, deploy
job共に下記のように machine imageに ciecleci/classic:edge
を指定していること。
test: machine: image: circleci/classic:edge
このように設定することにより、最新のdocker-compseがインストール済みの仮想マシンを使うことができます(楽)
参考
.circleci/setup_heroku.sh
#!/bin/bash wget https://cli-assets.heroku.com/branches/stable/heroku-linux-amd64.tar.gz sudo mkdir -p /usr/local/lib /usr/local/bin sudo tar -xvzf heroku-linux-amd64.tar.gz -C /usr/local/lib sudo ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku cat > ~/.netrc << EOF machine api.heroku.com login $HEROKU_LOGIN password $HEROKU_API_KEY EOF # Add heroku.com to the list of known hosts ssh-keyscan -H heroku.com >> ~/.ssh/known_hosts
CiecleCIのworkflowの deploy
jobで実行している setup_heroku.sh
は下記のリポジトリのスクリプトを参考(ほぼそのまま)にさせていただきましたm( )m
内容としては、herokuコマンドを使えるようにして、herokuのログイン設定を設定ファイルに追記して、SSHのknown_hostsを更新しています。
参考
まとめ
HerokuのRailsアプリ開発環境をDockerとCircleCIを使って作成しました。
Dockerを使うことによって、Rubyのインストールすらせずに素早くローカル開発環境を用意できるだけでなく、開発環境、テスト環境、本番環境で同じDockerイメージを使いまわせて環境の違いによる謎のバグに悩ませることなくRailsアプリの開発を行うことができます。便利ですね。
気が向いたら、このテンプレートを利用して具体的にHerokuでRailsアプリを動かすところを解説する記事を書きたいと思います。
参考
library/postgres - Docker Hub
https://hub.docker.com/_/postgres/
Heroku Container Registryで作るDocker時代のRails 5 入門 - Qiita
https://qiita.com/koduki/items/3aafc38c6c518bef2af3
docker-composeでRailsを開発しCircleCI 2.0でテストしてHerokuにdeployする - Qiita
https://qiita.com/Kesin11/items/47079bc7f659e71b694c
Choosing an Executor Type - CircleCI
https://circleci.com/docs/2.0/executor-types/
Kesin11/docker_rails_sample: Dockernized rails with CircleCI and Heroku
https://github.com/Kesin11/docker_rails_sample
Macbookのなるべくホームポジションを維持するキーバインドについて考える
前置き
最近ずっとMacbookのキーバインドについて考えていて、現時点での自分なりの回答を用意できたのでまとめてみたいと思います。 前提として、自分は、US配列キーボード、OSがSierraのMacbook ProでiTerm2, tmux, Zsh, Vimあたりを使っているウエブケーエンジニアです(iTerm2, tmuxは特に考慮すべきキーバインドの競合がなかったけど)
各種アプリのインストール方法、設定方法等はインターネッツをご参照ください。
環境
MacBook Pro 13-inch, 2016, US配列キーボード
MacOS Sierra 10.12.5
iTerm2 3.0.15
tmux 2.5
Vim 8.0
Karabiner-Elements 0.91.8
英かな 2.2.3
やりたかったこと
なるべく指をホームポジションに維持したまま生きていきたかった。具体的には各種矢印, Esc, Delete, returnキーあたりのホームポジションから離れているキー(の機能)を複合キーにしてもいいからホームポジション近くに位置させたかった。
設定したキーバインド
下記が今回設定したキーバインド。
USキーボードなので大前提として設定したキーバインド
左コマンドキー単体で押下 -> 英数キー 右コマンドキー単体で押下 -> かなキー コロン -> セミコロン セミコロン -> コロン Caps Lockを他のキーと一緒に押下 -> Controlキーとして扱う
やりたかったキーバインド
Caps LockをContorlに変えたので下記のControlはaキーの横にあるCaps Lockを押す想定。
Control + H -> (fn)←(矢印の左) Control + J -> (fn)↓ Control + H -> (fn)↑ Control + L -> (fn)→ Control + M -> enter Control + , -> delete # Windowsでいうところのbackspace Control + . -> fowarded_delete # 同上 delete Caps Lock単体で押下 -> Escapeキー
その他(ついでに追加した設定)
Shiftキー + deleteキー -> forward delete)
必要なアプリとその設定
上記のキーバインド設定のために使用するアプリはKarabiner-Elementsと英かなの2つ。 それ以外はシステム環境設定も含めて特に設定はしていません。 それぞれのアプリの設定は下記の通り。
Karabiner-Elements
設定は画像の通りです。
英かな
設定は画像の通りです。
競合するキーバインド
上記のキーバインドを設定することによる潰れる(私の使用している)各ツールのキーバインドは下記の通り。
Zsh
$ bindkey -L (抜粋) bindkey "^H" backward-char bindkey "^J" history-substring-search-down bindkey "^K" history-substring-search-up bindkey "^L" forward-char bindkey "^M" accept-line bindkey "^[," _history-complete-newer
使用コマンドのsearchはpecoに任せているので問題なし。
Vim
$ vim :help index.txt (抜粋) 1. Insert mode CTRL-H same as <BS> CTRL-J same as <CR> CTRL-K {char1} {char2} enter digraph CTRL-L when 'insertmode' set: Leave Insert mode CTRL-M same as <CR> 2. Normal mode CTRL-H 1 same as "h" CTRL-J 1 same as "j" CTRL-K not used CTRL-L redraw screen CTRL-M 1 same as <CR> 3. Visual mode CTRL-H 2 same as <BS> 4. Command-line editing CTRL-H same as <BS> CTRL-J same as <CR> CTRL-K {char1} {char2} enter digraph CTRL-L do completion on the pattern in front of the cursor and insert the longest common part CTRL-M same as <CR>
特に問題ないように思える。
Neosnippet
Vim本体は問題なかったが、プラグインでNeosnippet(neocomplete)を利用しており 公式のキーバインド設定をそのまま流用しているので、下記の設定の移行先を考える必要がある。
imap <C-k> <Plug>(neosnippet_expand_or_jump) smap <C-k> <Plug>(neosnippet_expand_or_jump) xmap <C-k> <Plug>(neosnippet_expand_target)
候補としては<C-s>あたりが有力かなと考えている。
その他
MacOS標準IME
標準IMEの下記キーバインドが潰れる。 これは結構痛いかも、、、
Control + J -> ひらがなに変換 Control + K -> カタカナに変換 Control + L -> 全角英字に変換 Control + ; -> 英字に変換
雑感箇条書き
- 当初は英かなを使わずにKarabiner-Elementsのみで設定しようとしてcomplex_modificationsを自作すれば設定自体はできたが、Controlを押したままm/,を押してもenter/deleteが連続で押されないのを解消できなかったのでKarabiner-Elementsと英かなを併用している
- Google Chromeのアドレスバーに単語を入れてのウェブ検索だけ、標準のreturnとCtrl + m で設定したreturnの挙動が異なっていて困っている。
- 具体的には後者の場合、例えば"ほげ"と入力してキーを押すと「"ほげ"で検索」されずに「http://www.ほげ.com/」にジャンプしようとする
- Ctrl + m / , / . に設定した return / delete / forward に慣れないのでしばらく指を鳴らす必要がありそう
- あるいはキーバインドを別のものに変更するかも
以上です。
参考
tekezo/Karabiner-Elements: The next generation Karabiner for macOS Sierra
https://github.com/tekezo/Karabiner-Elements
Karabiner-Elements complex_modifications rules
https://pqrs.org/osx/karabiner/complex_modifications/
⌘英かな
https://ei-kana.appspot.com/
Shougo/neosnippet.vim: neo-snippet plugin contains neocomplcache snippets source
https://github.com/Shougo/neosnippet.vim
Twilogをスクレイピングしてツイートを取得して表示するRailsのWebアプリを作った
作ったもの
ツイスク
ツイスク(Twilog Scraping) は Twilog( http://twilog.org/ ) に登録されてある指定したTwitterIDの指定した日付のツイートをまとめて取得して表示するRailsのWebアプリです。 なんと、TwilogをスクレイピングするためTwilogに登録されていないアカウントには使えません!
用途として、例えば、フォロワーのあの人は今年のエイプリルフールに一体どんなクソツイートをしたんだろうと思って知りたい時にTwitterIDと2015年4月1日を入力して使うみたいなのを想定しています(想定していない)
構成
さくらVPS1Gプラン, CentOS6.7, Apache2.2.15, Passenger5.0.21, Ruby2.2.3, Ruby on Rails4.2.3
スクレイピングに使ったgemはNokogiriです。
コードは、Githubに上げています(inital commitってタイポしていて恥ずかしい……)
作った背景
構成については、RubyとRailsを勉強していて、何かアプリを1つ作ったら学びがありそうだなと考えて、VPSを借りているからそこで公開したらついでに必然的にWebサーバの勉強にもなるなと思ったのでこういう構成になりました。
機能については、自分大好きな人間なので過去の自分のツイートをつぶやくBotを作成しようとして、ツイートをスクレイピングして取得するスクリプト自体は書いていたので、それを少し改良してあるTwitterIDのある日付のツイートを取得するようにしました。
四方山話
当初は、 ある月 のツイートを取得して表示する実装にしていたのですが、1日から30日(31日)のページまで30回(31回)Nokogiriでスクレイピングする方法しか思い浮かばなくて、流石に短時間に30回連続でTwilogのサーバに負荷をかけるのはまずいんじゃないかと思って、 ある日 のツイートを取得するように変更しました。
当初は、WebサーバはUnicorn + nginxという構成にしようとしたけど、とりあえず形になったらいいかと思ってApache + Passengerを採用しました。Unicorn + nginxは速くて軽いと聞くので機を見てリプレースしたいと思います。
CSSというかデザインが全く分からなかったし、現時点ではあまり時間をかけたくなかったので、RailsチュートリアルのBootstrapのスタイルシートを丸パク……参考にしました。CSSもBootstrapも全然分からないけど、せめて年と月と日の入力フォームを横に表示させたい……
今後
超絶簡単なRailsアプリをWeb上に公開するまでの知見は得られたので、これからも何かを作っていきたいですね。
Yahoo!ファイナンスをスクレイピングして一番連続した日数値下がりしている株を見つけて「〇〇は△日連続で値下がりしているので明日は上がる!買えば捗るぞ!!(自己責任)」みたいに雑な投資推奨情報を提供するアプリとか(今適当に思いついた)