meta-tagsプラグインをインストールしてrailsサイトのSEOを強化しよう
RailsアプリケーションでSEO(検索エンジン最適化)やってますか?
- railsで作ったWebサイトやWebサービスを作ってもサイト訪問者が増えない
- railsで作ったWebサイトやWebサービスが検索エンジンにヒットしない
これらの課題に対応することをSearch Engine Optimization(略してSEO)といいます。
SEOの手法としてページ毎に見出しタグ(h*)をしっかり書いて構造を明確にしたり、メタタグをきっちり書いたり色々あるのですが、今回はRailsアプリケーションに簡単にメタタグを追加できるプラグインである『meta-tags』を紹介します。
meta-tags
- https://github.com/kpumuk/meta-tags
- Search Engine Optimization (SEO) plugin for Ruby on Rails applications.
インストール
bundlerで入るのでGemfile
に追記します。
1 2 3 4 |
|
インストールします。
1
|
|
基本的なメタタグの記述
- headタグに記述
- デフォルトパラメータはapplication_helperに書いてもいいそう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Githubが公開しているgitコマンドのラッパーであるhubをインストールする
インストール
1 2 3 4 5 |
|
gitコマンドをhubコマンドのエイリアスとする
- いつもの
git
コマンドをhub
コマンドに置き換える
1 2 3 4 5 |
|
動作確認
which git
を実行するとgit
コマンドの実体は/usr/local/bin/hub
であることが分かります。
1 2 3 |
|
git
と実行した時にgithub関連のサブコマンドが追加されてます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
bash-completion用のシェルスクリプトを配置
1
|
|
go言語をCentOSにインストールする
インストール
1 2 3 |
|
環境変数PATHにgoコマンドのパスを通す
1 2 3 |
|
goコマンドのヘルプ
go
と実行し、以下のように表示されればインストール成功です
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
Vagrantでボックスを管理
ボックス
VagrantではOSを1からインストールしなくて済むようにベースイメージを利用することができます。Vagrantではこのベースイメージのことはボックスと呼びます。ボックスはOSのスナップショットイメージを固めたtarボールです。
ボックスの恩恵
- 概して30分は要するOSのインストールを省略できる
vagrant destroy
からvagrant up
を繰り返すことが容易(やり直しが容易)にできる- OS環境を容易に合わせることができる
vagrant package
でオリジナルのボックスを作成できるvagrant up
で毎回インストールするミドルウェアなどをインストール済みのボックスを用意することで構築時間を短縮できる
ボックスのダウンロード
- ボックスファイルのリスト
1
|
|
ボックスの管理
ダウンロード済みのボックスの確認
1
|
|
Vagrantではボックスをユーザ毎にグローバルに管理します。デフォルトでは、~/.vagrant.d/boxes
以下にボックスごとに保存されています。
1 2 |
|
ボックスの保存先はVAGRANT_HOME
環境変数をセットすることで変更可能です。
ボックスの削除
- 特定のボックスを削除
1
|
|
- 特定のプロバイダー用のボックスを削除
1
|
|
Bash-completionをインストール
コマンド利用するのに補完機能は欠かせない
ls
とかcd
でタブキーをトントンッと2回叩くとカレントディレクトリ以下のディレクトリやファイル名がリストされますよね。これが補完です。
bashの補完機能はcomplete組み込みコマンドで実現
bashの補完機能は組み込みコマンドのcomplete
コマンドで実現しています。complete
コマンドはオプションが豊富なので基本的なオプションの使い方のみご紹介します。
- 全設定の表示
1 2 3 4 5 6 7 8 9 10 11 |
|
- lsコマンドの設定のみ表示
1 2 |
|
man complete
を見ると情報量が多いので詳細はまた今度確認することにしますが、上記lsコマンドの補完設定の概要は、-o default
でオプションを指定し、-F _longopt
で実行するシェル関数を指定しているようです。_longopt
関数に関して興味があればtype -a _longopt
を実行してみましょう。
bash-completionをインストールする
bash補完を更に便利にするためにbash-completionをインストールします。
See: https://github.com/GArik/bash-completion
See: https://alioth.debian.org/projects/bash-completion/
RHEL系
1
|
|
MacOSX
- Macのbrewで入れたパッケージのインストールプレフィックスは
/usr/local
- デフォルトでは
/usr/local/etc/bash_completion
設定ファイルが読み込まれないので~/.bash_profile
へ追記
1 2 3 4 5 6 7 8 9 10 |
|
bash-completionだけでは補完されないコマンドの補完
bash-completionでは補完機能を拡張することができます。Macでは/usr/local/etc/bash_completion.d
に、RHEL系では/etc/bash_completion.d
に拡張ファイルを置き、ログインし直すか~/.bash_profile
を再読み込みすることで有効になります。
gitコマンド補完
1 2 |
|
vagrantコマンド補完
1 2 |
|
これは本当に便利!!
Bootstrap3-datetimepicker-rails で日時を範囲指定
Rails4で2つの日時情報を開始日時
と終了日時
という範囲指定をおこなうように実装した時の備忘録です。
bootstrap-datetimepicker-railsのインストール
日時を指定するためのカレンダーをbootstrap3で実装しようと思い、調べたらTrevorS/bootstrap3-datetimepicker-railsというgemライブラリが存在しました。
Gemライブラリのインストール
TrevorS/bootstrap3-datetimepicker-railsをインストールします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
ライブラリをインストールします。
1
|
|
javascriptライブラリのinclude
app/assets/javascripts/application.js
に以下を追記します。
1 2 3 4 5 6 7 8 |
|
スタイルシートの読み込み
app/assets/stylesheets/application.css.scss
に以下を追記します。
1 2 3 |
|
2つの期間を指定するdatetimepickerを実装
Entryリソースの生成
今回は2つの期間を指定したエントリを保存するためのEntryリソースをscaffoldで生成します。
開始日時をdatetime型
のstart_at
アトリビュート、終了日時をdatetime型
のend_at
アトリビュートとして定義しています。
1 2 3 4 5 6 7 8 9 |
|
javascriptの記述
http://eonasdan.github.io/bootstrap-datetimepicker/#example9を参考にしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|
viewの記述(ERB)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
|
参考にさせて頂いた情報
http://qiita.com/kidachi_/items/9f76a27890d96b9f5838
http://www.workabroad.jp/posts/974
http://eonasdan.github.io/bootstrap-datetimepicker/#example9
エントリー期間内に複数のイベントを定義できるように実装する
定義したエントリーの中には複数のイベントを持つことができるようにEventリソースを生成します。イベントは食事
などのカテゴリーを持つようにしたいのでCategoryリソースを先に生成します。
イベントに付けるカテゴリーのリストを生成する
1
|
|
イベント用のEventリソースを生成する
1
|
|
1
|
|
モデルのアソシエーションを記述する
1 2 3 |
|
1 2 3 4 |
|
1 2 3 |
|
エントリーの編集ページにイベント作成ページへのリンクを設置
イベントは特定のエントリーに属するのでエントリーの編集画面から追加できるようにします。
1
|
|
リンクURLがRESTFulなルーティングリソースではないのでconfig/routes.rb
にルーティングを追記します。
1 2 |
|
イベント作成ページの`Entry_id`のテキストフィールドにエントリーIDを表示
1 2 3 4 5 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
|
<%= f.label :entry_id %><br>
<%= f.text_field :entry_id, :readonly => true %>
Bashシェルの変数にデフォルト値を設定する
変数に値が未セットの場合にのみ任意の文字を代入したい
bashシェルのスクリプトの中で特定の変数に値がセットされていない場合はデフォルト値を代入するということがあります。そこで、変数に値が未セットの場合にのみ特定の値をデフォルト値として代入することができます。
bashには様々な変数の参照方法があるんですが、${変数名:=値}
と書くことで、値がセット済みの場合にはその値を返し、未セットの場合には任意の値を返すという動作をします。
1. インタラクティブなシェル上で変数を定義
例えば、$var
変数にhello
という値を代入しておき、上記の書き方で値を参照してみます。
1 2 3 4 |
|
$var
変数を空にしてgoog morning
という値を代入してみたいとしましょう。
1 2 3 4 5 6 7 |
|
${変数名:=値}
という書き方をした場合、返り値としてセットした(あるいはセットされている)値
を返します。その返り値をecho
でprintしています。
では、echo
させずに${変数名:=値}
だけを実行するとどうでしょう。
1 2 3 4 5 6 7 |
|
シェルは返り値をコマンドとして認識するのですが、goog morning
などというコマンドは存在しないのでメッセージが出力されます。しかし、$var
変数への値のセットは成功したようです。
echo
を使わずに、かつメッセージも出力させないためには以下のように、何もしないというコロン(:)
を使う方法があります。
1 2 3 4 5 6 |
|
2. シェルスクリプト内の変数値にtrue/falseを使用する場合の注意点
シェルスクリプトでset -e
を先頭に書いておくことで、スクリプト内のコマンドが失敗を返した場合にはスクリプトを終了させることが出来ます。おまじないのように書いていることがありますが、変数の値ににtrue/false
を使用している場合には注意が必要です。
true
やfalse
はbashシェルの組み込みコマンドとして存在し、その名の通り、true
は真を返し、false
は偽を返します。なので、${var:=false}
などと書いているとこの変数定義の行の実行結果は偽を返すことになります。
1 2 3 4 5 6 |
|
シェルスクリプトでset -e
としている場合にはそこでスクリプトが終了してしまい、期待通りに動かない可能性があります。ここでも何もしないというコロン(:)
を使用するという方法が有効です。
Bashで読み込み専用変数を定義する
bash変数を読み込み専用として定義する
bashのビルトインコマンドとしてtypeset
とdeclare
という変数定義に関するコマンドがあります。declare
コマンドの-r
オプションを使用して定義した変数は読み込み専用となり、以降の変数への値代入が出来なくなります。
試しに、hello
という文字列を代入したCONSTANT_VAR
という変数を読み込み専用として定義してみます。
1 2 3 4 |
|
このCONSTANT_VAR
変数に新しい値を代入しようと試みたら以下のようなメッセージが出力され変数への代入が失敗します。
1 2 3 4 5 |
|
herokuとGitHubにデプロイする時にパスワードやキー情報を隠したい時の対処方法
Rails4でアプリケーションを作って、herokuにデプロイした!
もちろんBitbucketでも構わないが、せっかく作ったコードなので公開したい!
でも、config/database.yml
のpassword
情報やAPIのKey
情報なんかをベタ書きしていると他の人に見られてしまう!
そんな時は環境変数を使いましょう!!
見られたくない情報を環境変数に書き換える
http://buf-material-gmap-place-sample.herokuapp.com/なんかでは、Google place API
を利用するためにGoogle API KEY
を必要とするコードがあります。その箇所を以下のように書き換えます。
1
|
|
ミソはENV['GOOGLE_API_KEY']
ですね。こういう感じで環境変数化してしまいます。
herokuに環境変数をセットする
heroku config:set
コマンドを使用することでheroku上で環境変数をセットすることが出来ます。
XXXXXXXXXXXXXXXXXXXXXXXX
の箇所に実際のKey情報をセットします。また、--app [heroku上のアプリケーション名]
も必要です。
1
|
|
複数のherokuアカウントで異なるSSHを設定したい
herokuで複数アカウントを管理し出すとSSH鍵が複数必要です。
herokuに限らずSSH用の鍵を複数使い回す場合は、~/.ssh/config
にSSH接続先情報と使用するSSH鍵を紐付ける設定をおこないます。
今回は、herokuにおいて少しハマったので備忘録を残します。
GitHubでも何でも、要は、レポジトリ毎に使用するSSH鍵を変えたい場合に有効かと思います。
SSH鍵を生成
-C
オプションでコメント残して、-f
オプションで生成する秘密鍵ファイル名を指定します。公開鍵名は-f
オプションで指定したファイル名末尾に.pub
が付いたファイル名で生成されます。
1 2 |
|
SSH接続情報を設定
~/.ssh/config
にherokuの接続情報を記述します。
1 2 3 4 5 6 |
|
herokuのURL部分を~/.ssh/configと合わせる
gitレポジトリを作成すると.git/config
というファイルが作成されます。
heroku apps:create
コマンドを実行してherokuアプリケーションを作成した際にheroku
というremoteが定義されます。そしてこのheroku
というremoteの接続情報が.git/config
に書き込まれます。通常、git@heroku.com: レポジトリ名.git
というURLが設定されているはずです。このURLのheroku.com
を先ほど~/.ssh/config
でHost
として付けた名前に書き換えます。
1 2 3 4 |
|
これでgit push heroku master
コマンドでherokuへpushする時には~/.ssh/id_rsa_heroku_sample_app
というSSH鍵を使用して接続してくれるようになります。