日常コード書いてて便利だなぁと思った技とかを思い出したら不定期に書いていきます。
よくメニューをulとliを使ってタブで表示することがあると思います。
例えばタブは以下の条件で表示されます
- ユーザの年齢が20歳以上なら表示するタブA
- ユーザの性別が男性なら表示するタブB
- ユーザの性別が女性なら表示するタブC
- ユーザの性別が男性でかつ20歳以上なら表示するタブD
実装が終わって総合テストがはじまります。
ここでチケットがあがってきます。
『タブが一つしか出力されない場合はタブを非表示にしてください。』
さてどうしましょう?
Centosでtimezoneの設定が日本時間にしているのにcronが指定時刻に動かず調べました。
/var/log/cronを見るとログの時間が-9時間。
JSTで動いてないっぽいです。
以下のコマンドでcronのログの時刻も含めて治ります。
内部的にrails_envを書き換えたりしていて、rails_configの値がただしくRAILS_ENVの設定通りにファイルを読み込んでくれない事象が発生したので。
rails_config (0.4.2)
1
2
|
irb(main):014:0> Settings.instance_variable_get(:@config_sources)
=> [#<RailsConfig::Sources::YAMLSource:0x0055a28d40ab48 @path="Rails_rootへのパス/current/config/settings.yml">, #<RailsConfig::Sources::YAMLSource:0x0055a28d40aa30 @path="Rails_rootへのパス/current/config/settings/hoge.yml">, #<RailsConfig::Sources::YAMLSource:0x0055a28d40a9e0 @path="Rails_rootへのパス/current/config/environments/hoge.yml">]
|
なんらかの条件で強制的にスマートフォンのviewを使いたい時。
アプリのwebviewとか?
1
2
3
4
5
6
7
|
before_filter :hoge
def hoge
if true # 条件
env["rack.jpmobile"] = Jpmobile::Mobile::SmartPhone.new(env, request)
register_mobile
end
end
|
初のシリーズもの。不定期開催します。
普段コードを書く時にリーダブルなコードを書く時に気をつけていることです。
思いついたら書いていきます。
第1回目は
コンテキストを作る
普段コードを書く時にリーダブルなコードを書く時に気をつけていることです。
第1回目は
コンテキストを作るでした
第2回目は
早めにパターンを潰す
前回の続編です。
Go言語を使ってローカルマシンに簡易botを作ってSlackに投稿
botを使ったtodo機能をslackに付与するべくgoのコードを書いてみました。
todo コマンド {{追加削除の場合はテキスト}}
という感じでつぶやくと、
チャンネル毎にtodoリストが管理できるようにしたいと思います。
dbがなくても動くようにファイルに保存します。
操作 |
コマンド |
追加 |
add 追加したいテキスト |
削除 |
del 削除したいテキスト |
一覧 |
list |
全削除 |
clear |
こんな感じで動きます。

便利そうですね!
条件に応じて文言を変えたい場合があると思います。
例えば大人と子供で文言を変えたい場合とかですかね。
ログインユーザが大人の場合は大人料金と表示し、子供の場合は子供料金と表示するようにします。
1
2
3
4
5
|
<% if current_user.adult? %>
<span>大人料金</span>
<% else %>
<span>子供料金</span>
<% end %>
|
これが一箇所ならいいですが、たくさん出現するとつらいですね。
helperにまとめたりするのでしょうか。
こういった文言だけのif文分岐がviewに大量に出現するとコード量も増え非常に見ずらく、またhelperに乱立してしまうのは避けたいですね。
そこで自動でi18nの読み込み先を条件に応じて読み替えたいと思います
ついでにjpmobile使用してviewをpcとスマフォで切り替えている場合に
lazy lookup記法時にスマフォページでsmart_phoneがついているlocaleを探してしまうのを防ぎます。
同一ドメインなんだけどホスト名が違うシステムがあり、WEBサーバーからApiサーバーへjsonを取得するべくgetリクエストを投げる。
その際にWEBサーバーでログイン時に発行されたクッキーをリクエストに付与してapiサーバーではそのクッキーからユーザを特定するような処理が必要になった。
FaradayとHttpartyでクッキーを付与する方法を調べた。
Goを勉強がてら使いながら簡易slackbotを作ってみました。
slackにデフォルトで用意されているslackbotってお願いしますをキーに登録すると、「お願いします]
とか「お願いします。」(句読点入り)は反応してくれるけど。 「よろしくお願いします。」みたいに単語をつなげると反応してくれない。
単純に単語が含まれるかだけで反応してくれればいいのに・・・
ということもありお手製slackbotをつくってみました。
自分のPCでプログラムを動かし、slackで投稿があった際にはOutgoing WebHooksで投稿内容を取得してBotとして返信したいと思います。
slack → ローカルmacのbot → slack
の流れです。