しふみんのブログ

しふみんのブログです。

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 backlog.com qiita.com

しかしながら、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://git-scm.com/

サルでもわかる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とは

github.com

今回は前回の記事で導入した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の各コマンドは下記に詳しくまとまっており、参考にさせていただきました。

qiita.com

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回 必要なパッケージの導入

前回までのあらすじ

shifumin.hatenablog.com

LINEデベロッパー登録を終え、必要なAPIキーである「Channel Secret」と「アクセストークン」を手に入れました。
今回は必要なパッケージの導入を行っていきたいと思います。

この連載記事を書いている環境

そう言えば、bot作成を進めている(まだ進まっていないが)環境について書いていなかった気がします。 この連載はMacの上記の環境のもとで進めています。
Windowsの人は頑張ってください!
しかしながら、WindowsLinuxもパッケージの導入部分は異なりますが、それ以外は一緒の気はしています。

必要なパッケージの導入

  • git
  • rbenv
  • ruby-build

最低限、上記があればHeroku + Railsの開発は進められると思います。
不足するものがあればその都度インストールしていくことにしましょう。

github.com

github.com

以下、それっぽいコマンドは全てターミナルのコマンドラインで実行するものとします。
また、Homebrewはインストール済であるものとします。 未インストールなら下記を参考にしてください。

brew.sh

下記のコマンドで各パッケージを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を利用しているため)

qiita.com

終わりに

今回で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::APIRailsから呼び出して、そのRailsはHerokuに乗せて動かすという形にします。 第1回の今回はLINEデベロッパー登録を行っていきます。

※ この連載は諸事情(飽き)により予告なく終了する可能性が十分にございます。あらかじめご了承ください。

LINEデベロッパー登録

まずはLINEデベロッパー登録を行います。 その後にプロバイダーとチャネルを作成し、必要なAPIキーを取得しましょう。

Messaging APIを利用するには
https://developers.line.me/ja/docs/messaging-api/getting-started/

詳しくは公式の上記を見てください。
で終わるので、下に補足説明の箇条書きと参考画像を乗せます。

  • アクセストークン(ロングターム) : 再発行する
  • Webhook送信 : 利用するを選択する
  • Botグループトーク参加 : 利用するを選択する
  • 自動応答メッセージ : 利用しないを選択する
  • 友だち追加あいさつ : 利用しないを選択する

botを作成する上で必要になるのが下記の2つです。
これらのキーを控えておきます(下記参考画像の赤枠)

参考画像

https://gyazo.com/fff187b8df2919a00873d00bb7b2e20a Image from Gyazo

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へと自動デプロイされます。

  • ローカル環境
  • テスト実行
    • GitHubにpushするとCircleCIを通じてローカルと同じ構成のテスト環境でRSpecが実行される
  • デプロイ実行
    • GitHubにpushして上記のテストが全て通るとCircleCIを通じてHerokuへとデプロイされる
  • Heroku
    • ローカルと同じ構成の環境がデプロイされる

なぜ作ったか

ギョームだと、ローカルはVagrantでProductionやStagingはAWSであることが多いのですが、個人開発でいちいちVagrantに環境を整えるは面倒だし本番も雑にHerokuでいいやと思ったので、Docker+HerokuのRailsアプリのテンプレートを作成しました。加えて、楽したいからGitHubにpushしたら自動テストと自動デプロイが走るようにCircleCIの設定を整えました。

作成物

作成物は下記になります。

github.com

続けて、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.com

.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を更新しています。

参考

github.com

まとめ

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がSierraMacbook 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

設定は画像の通りです。

f:id:shifumin:20170720224929p:plain

英かな

設定は画像の通りです。

f:id:shifumin:20170720224936p:plain

競合するキーバインド

上記のキーバインドを設定することによる潰れる(私の使用している)各ツールのキーバインドは下記の通り。

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アプリを作った

作ったもの

ツイスク

http://shifumin.com/twisc

f:id:shifumin:20151124223358p:plain f:id:shifumin:20151124223403p:plain

ツイスク(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ってタイポしていて恥ずかしい……)

github.com

作った背景

構成については、RubyRailsを勉強していて、何かアプリを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!ファイナンススクレイピングして一番連続した日数値下がりしている株を見つけて「〇〇は△日連続で値下がりしているので明日は上がる!買えば捗るぞ!!(自己責任)」みたいに雑な投資推奨情報を提供するアプリとか(今適当に思いついた)