13note.

なんか調べたりまとめたり感想言ったりする語彙力不足及び眠気と戦うブログ

コーディング規約を見る

飽きっぽいのでいろいろ手をつけては放置しています。
困る。
初心に帰って個人サイトでも作ってみたいなーと思いましたが、運営していた頃からもう10年以上経っているので、htmlの書き方も古臭そう。
で、有名企業のコーディング規約を見てみる。それであっているのかわからないけど。
google翻訳とか拙い読解力なので正確さは微妙です。

Googleのコーディング規約

HTML
  1. HTML5を使う
    XHTMLには使わない。閉じタグは<br />ではな</br>を使う
  2. 有効なHTMLを使う
    W3Cが標準化しているタグを使う。
  3. 用途にあったタグを使用する
    pタグは見出し、aタグはアンカーなど。
    具体的な例には、div要素に付与したonclickイベントで画面遷移関数を呼ぶ、ではなく、aタグのhrefで遷移先を設定する、というような記述。
  4. マルチメディアでのアクセスを考慮する
    画像や動画、アニメーションオブジェクトなどには、代替の要素を用意しておく。
    alt属性を用いるなどアクセシビリティを考慮する。
  5. 構造とスタイルとスクリプトの分離
    構造(マークアップ),スタイル(デザイン),スクリプト(動作)を分離する。
    また、できるだけ少ないリンクでスタイルやスクリプトを参照する。 メンテナンスのしやすさを考慮する。
  6. エンティティ文字を使わない
    同じ文字コードで書かれているのだから不要。HTML上で特別な意味を持つ文字<などを除く。
  7. 省略可能なタグは使用しない(推奨)
    html5で省略可能なタグHTML Standard があるのでそれは省略する。(ファイルサイズなどの観点から)
    ただし再考の余地がある…みたいなことらしい。
  8. type属性は使用しない
    cssjavascriptのtype属性は使用しない。HTML5で暗黙で指定されているため。
  9. 要素ごとに改行しインデントをつける
  10. 長い行は改行する
    継続業はスペース4つ分字下げする。
  11. シングルクォートではなくダブルクォートを用いる
CSS
  1. 有効なcssを使う
    W3Cが標準化しているものを使う。
  2. cssのクラスやIDには意味のある名前をつける
  3. cssのクラスやIDの名前はできるだけ短く、意味がわかるほどには長くする
  4. タイプセレクタを用いない
    ul#exampleとかdiv.errorとかのように要素を指定してスタイルを適用する方法は使わない。
  5. ショートハンドプロパティで書く
    一つの定義でかけるものはまとめて書く。
    padding-top: 0; padding-right: 1em; padding-bottom: 2em; padding-left: 1em; とかではなくpadding: 0 1em 2em; みたいな事。
  6. 0の直後の単位は省略する
  7. 先頭の0は省略する
    0.8em ではなく .8em
  8. プレフィックスをつける
    競合しないようにアプリケーション固有の接頭辞をつける。
    検索や置換にも有用。
  9. IDやクラス名の区切り文字は「-」
  10. cssハックの前に別の方法を考える(推奨)
  11. 定義はアルファベット順で記載する
  12. ブロック要素はインデントする
  13. 宣言の終了(;)を忘れない
  14. プロパティの後ろにスペースを入れる
    font-weight:bold;ではなくfont-weight: bold;
  15. ブロック要素の区切り
     #hoge{
      margin-top: 1em;
    }
    #hoge
    {
      margin-top: 1em;
    }
    ではなく
    #hoge {
     margin-top: 1em;
    }
  16. セレクタ要素の区切り
     a:focus,a:active {
          position: relative; top: 1px;
    }
    ではなく
     a:focus,
    a:active {
         position: relative;
         top: 1px;
    }
  17. 定義の区切りは一行あける
  18. ダブルクォートではなくシングルクォートを使用する

映画「来る」 を見てきました

映画「来る」を見てきました。
前評判というかツイッターで見かけるネタバレ無しの感想がすごく気になりまして。

ネタバレしない感想
  • 松たか子柴田理恵が以上に格好いい
  • 人間関係不信になりそう
  • 小さい子も怖い
  • ガチホラーというよりはエンターテイメント度数高め
ネタバレする感想

原作小説のネタバレも読んだあとの感想なので、そちらもご注意。

続きを読む

つぶやきブックマーク

が、フォルダなりタグなりで分類しつつできたらいいよねそんなツールないかな、みたいなこと言ったら、ハートが数個飛んできたので、最近そのことを考えています。

ツイッターAPIは規制厳しいし、あまりお近づきになりたくないんだけど、と思いながら調べている最中。
ただ、対象のツイートのurlさえ控えられれば、ツイッターAPIとしても提供されている埋め込みタグを返すメソッドを呼ぶ、あるいはそれすら不要で、ツイッターの提供するjavascriptを読み込むことでurlからよしなに埋め込みっぽく情報を表示可能であるところまでは確認しました。
問題としては、ツイッター認証を行っているわけではないから、鍵アカウントのツイートは表示できないであろうこと。
ツイッター連携を行ってみて、鍵アカウントのurl呼び出しをした場合どうなるか、を確認したいところ。
だけど、ツイッターさん2018年の7月から開発者アカウントの発行のためにより仔細な情報を提示しないといけなくなってるらしい。

もう少し壁の低いapiだったらなあ。
引き続き調べてみます。タグをつけるgemとかも、使ってみようと思って使ったことがないですし、最悪鍵垢は対応できない(urlのみ記録する)アプリケーションになる。
…でもどうせログイン機能作るならツイッター認証したほうが一石二鳥なのか…。英語の壁エ

ActiveHashを使う

仕事でActiveYMLを使う、と言われたので、なんのことやら状態から少し調べる。
ActiveHashというgemを用いて、DB及びモデルの拡張を行うようなイメージ?
参考にさせていただいたサイトさんでは、例えば商品マスターデータに種別のidだけ持たせて、種別の情報自体はActiveHashとして(DBにテーブルや列は作らずに)参照可能とするような使い方を紹介されていた。
DBに登録するまでもないような情報だけど、ActiveRecordと一緒に使いたい、みたいな時に有用らしい。
ActiveYMLは、ActiveHashを使ったときに該当のモデル(ActiveHashを継承したモデル)の定義内にデータを書くのではなく、ymlファイルとして別に切り出しましょう、という使い方。


  • gemの設定
gem 'active_hash'
  • modelの作成
class Hoge < ActiveHash::Base
  self.data = [
    {id: 1, name: 'ほげ'},
    {id: 2, name: 'ふが'},
    {id: 3, name: 'ぴよ'},
  ]
end

これで、Hogeに対してActiveRecordと同じように、allとかfirstとかで問い合わせができる。

  • self.dataのymlへの切り出し self.dataの部分をymlファイルに切り出すときは以下。
- id: 1
  hoge_type: Hoge
  name: 'ほげ'
- id: 2
  hoge_type: Fuga
  name: 'ふが'
- id: 3
  product_type: Piyo
  name: 'ぴよ'

Model側は以下

set_root_path "config/master"  #=> ymlファイルの配置ディレクトリ
set_filename "hoge_type" #=> ymlファイル名
  • enumとして使いたいとき
    要はHoge::FUGAみたいにしたら、固定値として参照できるようにする場合は、Modelに以下を追加する。
include ActiveHash::Enum
  self.data = [
    {id: 1, hoge_type: 'Hoge', name: 'ほげ'},
    {id: 2, hoge_type: 'Fuga', name: 'ふが'},
    {id: 3, hoge_type: 'Piyo', name: 'ぴよ'},
  ]

  enum_accessor :hoge_type

呼び出すとき「enum_accessor」で設定した列名を参照すればOK。
ただ、参照時はすべて大文字にする必要がある。

参考にさせていただいたサイト: 

ActiveHashを使ってRailsで区分値を扱う方法 - TIM Labs

ほげとかふがとか、やめたいんだけどほかに思いつかない。

聴く曲あれこれ

以前どんな曲聴くのか気になる、みたいなことを伺ったので、変遷含めてつらつらと書いてみます。
(Markdown記法の練習にも)


ざっくりというと、概ねロキノン系が多いのかなと思います。
でもその分類がどういったものか理解していないでいますし、多分違うであろうものも…。
なので、まあ、分類しかねています。

このへんまでは結構CD持ってます。 以降は1枚~2枚。

傾向としては、ちょっと後ろ向きで疾走感があるものとか、皮肉が強いものとか、バカを大声で歌ってるやつとかが好きです。
中高生くらいまでは、バンプが一番多かったかな。途中からアジカンになり、大学卒業する頃には、ボカロ系も混在してカオスになりました(苦笑)

インストゥルメンタル、というのか、歌詞が殆ど無いものだと、

  • toconoma
  • bohemianvoodoo
  • Rodrigo y Gabriela

とか好きです。
ロドリーゴ・イ・ガブリエーラは格好いいぞ。おすすめです。

もちろんゲームOSTはめっちゃ持ってます。

通勤時とかに聴いてます。どれもではありますが…作業中とかは民族音楽っぽいなにかとか、それこそサントラみたいなのを探して聴いています。歌詞が響く物があればインストに限らず。

改めて見ると偏っているといえば偏っていますね(苦笑)

routes.rb の書き方

毎回、「routes.rbの書き方っていっぱいあるんだよね…どれが適切なのかわからんね…」ってなるので、ためすすがめつ記録してみます。


■resources

RESTに従ったアクションを一通り作ってくれる記法。

resources :users

設定されるroutesは以下。

   Prefix Verb   URI Pattern               Controller#Action

    users GET    /users(.:format)          users#index
          POST   /users(.:format)          users#create
 new_user GET    /users/new(.:format)      users#new
edit_user GET    /users/:id/edit(.:format) users#edit
     user GET    /users/:id(.:format)      users#show
          PATCH  /users/:id(.:format)      users#update
          PUT    /users/:id(.:format)      users#update
          DELETE /users/:id(.:format)      users#destroy
■resource

resourcesに対してこちらは単数リソースのルーティングを設定する。

resource :user
  Prefix Verb   URI Pattern          Controller#Action
 new_user GET    /user/new(.:format)  users#new
edit_user GET    /user/edit(.:format) users#edit
     user GET    /user(.:format)      users#show
          PATCH  /user(.:format)      users#update
          PUT    /user(.:format)      users#update
          DELETE /user(.:format)      users#destroy
          POST   /user(.:format)      users#create

単数リソースとはなんぞ?
=> 集合を扱うindexアクションはなし。
また、show,edit,update,destroyにはid の指定がなくなる。

■resourcesのネスト

resourcesに対してネストでの指定が可能。
例えば「学年(glades)」「クラス(classes)」が入れ子の場合

  resources :grades do
    resources :classes 
  end
   grade_classes GET    /grades/:grade_id/classes(.:format)          classes#index
                 POST   /grades/:grade_id/classes(.:format)          classes#create
 new_grade_class GET    /grades/:grade_id/classes/new(.:format)      classes#new
edit_grade_class GET    /grades/:grade_id/classes/:id/edit(.:format) classes#edit
     grade_class GET    /grades/:grade_id/classes/:id(.:format)      classes#show
                 PATCH  /grades/:grade_id/classes/:id(.:format)      classes#update
                 PUT    /grades/:grade_id/classes/:id(.:format)      classes#update
                 DELETE /grades/:grade_id/classes/:id(.:format)      classes#destroy
          grades GET    /grades(.:format)                            grades#index
                 POST   /grades(.:format)                            grades#create
       new_grade GET    /grades/new(.:format)                        grades#new
      edit_grade GET    /grades/:id/edit(.:format)                   grades#edit
           grade GET    /grades/:id(.:format)                        grades#show
                 PATCH  /grades/:id(.:format)                        grades#update
                 PUT    /grades/:id(.:format)                        grades#update
                 DELETE /grades/:id(.:format)                        grades#destroy

親要素のgradesのRESTのアクションに加え、それぞれのgrade(id)の小要素classesのアクションも定義されている。
ネストの構造は、複数リソースの下位に単数リソースの指定も可能。 userは複数いるが、userに対するpasswordは1対1の関係である場合、以下のような定義ができる。

  resources :users do
    resource :password
  end
new_user_password GET    /users/:user_id/password/new(.:format)       passwords#new
edit_user_password GET    /users/:user_id/password/edit(.:format)      passwords#edit

     user_password GET    /users/:user_id/password(.:format)           passwords#show
                   PATCH  /users/:user_id/password(.:format)           passwords#update
                   PUT    /users/:user_id/password(.:format)           passwords#update
                   DELETE /users/:user_id/password(.:format)           passwords#destroy
                   POST   /users/:user_id/password(.:format)           passwords#create
             users GET    /users(.:format)                             users#index
                   POST   /users(.:format)                             users#create
          new_user GET    /users/new(.:format)                         users#new
         edit_user GET    /users/:id/edit(.:format)                    users#edit
              user GET    /users/:id(.:format)                         users#show
                   PATCH  /users/:id(.:format)                         users#update
                   PUT    /users/:id(.:format)                         users#update
                   DELETE /users/:id(.:format)                         users#destroy

prefixに記載されているusersとかは、ヘルパーとして?users_path,users_urlなどで該当のアクションを呼び出すURLを取得できる。
ネストしている場合も同様。

■resourceベースではないrouteの定義
  • get '{呼び出しパス}', to: '呼び出しコントロール#アクション'
get 'users', to: 'users#index'
Prefix Verb URI Pattern      Controller#Action
 users GET  /users(.:format) users#index

resouces :users を指定したときのindexと同義。

  • get '{呼び出しパス}', :controller => 'コントローラー', :action =>'アクション'
get 'users', :controller => 'users', :action => 'index'
Prefix Verb URI Pattern      Controller#Action
 users GET  /users(.:format) users#index

これも結果は同じく。
ついでにこれも…ハッシュの記法?が理解できていないのが否めない。コロンの位置(シンボル?)とアロー演算子の役割が変わっただけ…。

get 'users', controller: 'users', action: 'index'
  • idを含める
get 'user/:id', to: 'users#show'
      GET  /user/:id(.:format) users#show

これにas:をつけるとurlやpathの呼び出しが可能。(同じ名前は不可)

get 'users', controller: 'users', action: 'index', as: 'users_show'
irb(main):003:0> app.user_show_path
ActionController::UrlGenerationError: No route matches {:action=>"show", :controller=>"users"}, missing required keys: [:id]

(該当のコントローラは作っていないのでErrorで正)

  • どのhttpメソッドでも呼べるやつ【非推奨】 get/post/put/update/deleteどれでも該当する。
match 'users', to: 'users#someting', via: [:get, :post]
Prefix Verb     URI Pattern      Controller#Action
 users GET|POST /users(.:format) users#someting
■namespaceによるパスのグループ

同名の処理のエイリアスのために使うらしい。devise使った時にadminとuser分けたり?した時に使った気もしなくもない。

namespace :admins do
    resources :sessions
  end
  namespace :users do
    resources :sessions
  end
             Prefix Verb   URI Pattern                         Controller#Action
    admins_sessions GET    /admins/sessions(.:format)          admins/sessions#index
                    POST   /admins/sessions(.:format)          admins/sessions#create
 new_admins_session GET    /admins/sessions/new(.:format)      admins/sessions#new
edit_admins_session GET    /admins/sessions/:id/edit(.:format) admins/sessions#edit
     admins_session GET    /admins/sessions/:id(.:format)      admins/sessions#show
                    PATCH  /admins/sessions/:id(.:format)      admins/sessions#update
                    PUT    /admins/sessions/:id(.:format)      admins/sessions#update
                    DELETE /admins/sessions/:id(.:format)      admins/sessions#destroy
     users_sessions GET    /users/sessions(.:format)           users/sessions#index
                    POST   /users/sessions(.:format)           users/sessions#create
  new_users_session GET    /users/sessions/new(.:format)       users/sessions#new
 edit_users_session GET    /users/sessions/:id/edit(.:format)  users/sessions#edit
      users_session GET    /users/sessions/:id(.:format)       users/sessions#show
                    PATCH  /users/sessions/:id(.:format)       users/sessions#update
                    PUT    /users/sessions/:id(.:format)       users/sessions#update
                    DELETE /users/sessions/:id(.:format)       users/sessions#destroy
■moduleによるグループ
scope module: :admins do
    resources :sessions
end

または
  resources :sessions, module: :admin
      Prefix Verb   URI Pattern                  Controller#Action
    sessions GET    /sessions(.:format)          admin/sessions#index
             POST   /sessions(.:format)          admin/sessions#create
 new_session GET    /sessions/new(.:format)      admin/sessions#new
edit_session GET    /sessions/:id/edit(.:format) admin/sessions#edit
     session GET    /sessions/:id(.:format)      admin/sessions#show
             PATCH  /sessions/:id(.:format)      admin/sessions#update
             PUT    /sessions/:id(.:format)      admin/sessions#update
             DELETE /sessions/:id(.:format)      admin/sessions#destroy

Controller#Actionはnamespaceと同じくエイリアスを指定しているが、URIはscopeに指定した文字列を含まない。


参考: 

Railsのルーティングを極める (後編)

あぷりをつくろう

毎回やっては挫折するなんかうれしいあぷりをつくろうチャレンジです。

とりあえず、観点としてやってみたいこととか、機能としてつくってみたいことを上げていく。

  • ログイン、ログアウト、パスワード変更、パスワード再発行
  • ログインしなくてもみられる画面がある
  • SNS連携(twitter) ログイン連携は考える(やったことはあるので後回し)
  • タグ付け、タグクラウド
  • 機能拡張が容易であること
  • テスト駆動な開発
    • テストの自動化
  • テストに限らず環境として自動化可能な所…sccsとかコンパイルにgulpとかつかうやつ…(うろ覚え)
  • お絵かきソフトのような…動的にオブジェクトおいたりする…なにか…(ふわっ

頭悪感じ全開ですが、序盤は多分なんとなくはできると思われる…。 卓ゲーのプレイ履歴管理というかキャラクター管理というかそんな感じのなにかで考えてみたい。(上記の開発技術的な面はいくらか叶う機能が考えられる)

いやもっと良い題材があればそっちにするけど…いま興味関心がそっちに行ってるから…誰かTRPGあそぼ…