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鍵を使用して接続してくれるようになります。